PDF를 병합하고 출력 파일의 각 입력 파일에 대한 책갈피를 만드는 방법은 무엇입니까? (리눅스)

PDF를 병합하고 출력 파일의 각 입력 파일에 대한 책갈피를 만드는 방법은 무엇입니까? (리눅스)

저는 Linux를 사용하고 있으며 일부 PDF를 병합하고 책갈피가 포함된 통합 출력 PDF를 생성하는 소프트웨어(또는 스크립트, 방법)를 갖고 싶습니다. 북마크 이름은 pdf 파일의 파일 이름으로 지정되며, 이 파일은 병합하고 해당 파일이 시작되는 페이지 번호를 가리키는 데 사용되었습니다.

Adobe Acrobat도 비슷한 가능성이 있지만 무료가 아니며 Windows 전용입니다.

답변1

업데이트: 저는 결과가 만족스럽지 않아서 멋진 GUI로 작성했습니다.

https://github.com/Yanpas/PdfMerger


Python을 배우고 한 시간 만에 프로그램을 작성(수정)했습니다.

#! /usr/bin/env python
# Original author Nicholas Kim, modified by Yan Pashkovsky
# New license - GPL v3
import sys
import time
from PyPDF2 import utils, PdfFileReader, PdfFileWriter

def get_cmdline_arguments():
    """Retrieve command line arguments."""
    
    from optparse import OptionParser
    
    usage_string = "%prog [-o output_name] file1, file2 [, ...]"

    parser = OptionParser(usage_string)
    parser.add_option(
        "-o", "--output",
        dest="output_filename",
        default=time.strftime("output_%Y%m%d_%H%M%S"),
        help="specify output filename (exclude .pdf extension); default is current date/time stamp"
    )
    
    options, args = parser.parse_args()
    if len(args) < 2:
        parser.print_help()
        sys.exit(1)
    return options, args
    
def main():
    options, filenames = get_cmdline_arguments()
    output_pdf_name = options.output_filename + ".pdf"
    files_to_merge = []

    # get PDF files
    for f in filenames:
        try:
            next_pdf_file = PdfFileReader(open(f, "rb"))
        except(utils.PdfReadError):
            print >>sys.stderr, "%s is not a valid PDF file." % f
            sys.exit(1)
        except(IOError):
            print >>sys.stderr, "%s could not be found." % f
            sys.exit(1)
        else:
            files_to_merge.append(next_pdf_file)

    # merge page by page
    output_pdf_stream = PdfFileWriter()
    j=0
    k=0
    for f in files_to_merge:
        for i in range(f.numPages):
            output_pdf_stream.addPage(f.getPage(i))
            if i==0:
                output_pdf_stream.addBookmark(str(filenames[k]),j)
            j = j + 1
        k += 1
        
    # create output pdf file
    try:
        output_pdf_file = open(output_pdf_name, "wb")
        output_pdf_stream.write(output_pdf_file)
    finally:
        output_pdf_file.close()

    print "%s successfully created." % output_pdf_name


if __name__ == "__main__":
    main()

이 프로그램에는 PyPDF2가 필요합니다. 를 통해 설치할 수 있습니다 sudo pip install pypdf2. 그 전에 pip를 설치해야 합니다. :) 터미널을 열고 입력하세요../pdfmerger.py *.pdf

답변2

이 Bash 스크립트는 디렉토리의 각 PDF에 PDF 파일 이름 텍스트가 포함된 첫 번째 페이지에 하나의 책갈피를 포함하도록 만든 다음 모두 연결합니다. 비ASCII 파일 이름을 처리할 수 있습니다.

#!/usr/bin/bash

cattedPDFname="${1:?Concatenated PDF filename}"

# make each PDF contain a single bookmark to first page
tempPDF=`mktemp`
for i in *.pdf
do
    bookmarkTitle=`basename "$i" .pdf`
    bookmarkInfo="BookmarkBegin\nBookmarkTitle: $bookmarkTitle\nBookmarkLevel: 1\nBookmarkPageNumber: 1"
    pdftk "$i" update_info_utf8 <(echo -en $bookmarkInfo) output $tempPDF verbose
    mv $tempPDF "$i"
done

# concatenate the PDFs
pdftk *.pdf cat output "$cattedPDFname" verbose

답변3

좋은 답변 수정하기 [1]tex.stackexchange.comitemize, 아래에 포함할 파일에 대한 참조를 사용하여 목록을 생성할 수 있습니다 . (toc과 유사합니다). Latex에서는 페이지 번호를 업데이트합니다.

일부유액더 많은 말

  • 이 줄에는 다음이 포함됩니다.PDFMyDoc1.pdf참조 이름이 있는 파일"doc01"라텍스 파일과 같은 디렉토리에 있습니다:

    \modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
    
  • 다음과 같은 명령은 \pageref{doc02.3}참조용 키가 있는 문서의 세 번째 페이지 번호로 링크를 생성합니다."doc02". Latex는 최신 상태를 유지하기 위해 노력할 것입니다.

  • 블록은 \begin{itemize} \end{itemize}지적 목록을 생성합니다.

라텍스 파일
다음과 함께 작동할 수정된 템플릿은 다음과 같습니다 pdflatex.

\documentclass{article}
\usepackage{hyperref}
\usepackage{pdfpages}
\usepackage[russian,english]{babel}

\newcounter{includepdfpage}
\newcounter{currentpagecounter}
\newcommand{\addlabelstoallincludedpages}[1]{
   \refstepcounter{includepdfpage}
   \stepcounter{currentpagecounter}
   \label{#1.\thecurrentpagecounter}}
\newcommand{\modifiedincludepdf}[3]{
    \setcounter{currentpagecounter}{0}
    \includepdf[pages=#1,pagecommand=\addlabelstoallincludedpages{#2}]{#3}}

\begin{document}

You can refer to the beginning or to a specific page: \\
see page \pageref{doc01.1} till \pageref{doc02.3}.\\

\begin{itemize}
  \item Here contribution from Grupmate 1 \pageref{doc01.1}
  \item Here contribution from Grupmate 2 \pageref{doc02.1}
\end{itemize}

\modifiedincludepdf{-}{doc01}{MyDoc1.pdf}
\modifiedincludepdf{-}{doc02}{MyDoc2.pdf}

\end{document}

메모

PDF 문서나 페이지를 간단히 병합하고 분할하려면 pdftk와 같은 도구를 사용하고 다른 질문에서 영감을 얻을 수 있습니다 .] 에 대해.

참고자료

관련 정보