각 파일이 홀수 페이지 번호에서 시작되도록 pdf 파일을 병합하려면 어떻게해야합니까? 나는 싶지 않아 내 출력은 7 개

몇 가지 졸린 PDF를 병합해야하며 모든 입력 pdf가 출력 pdf의 홀수 페이지에서 시작되기를 원합니다.

예 : A.pdf3 페이지, B.pdf4 페이지 나는 싶지 않아 내 출력은 7 개 페이지를 가지고. 내가 원하는 것은 1-3 페이지의 페이지 A.pdf, 4 페이지가 비어 있고 5-8 페이지의 페이지가 8 페이지 인 PDF입니다 B.pdf. 어떻게해야합니까?

pdftk에 대해 알고 있지만 매뉴얼 페이지에서 그러한 옵션을 찾지 못했습니다.



답변

PyPdf 라이브러리는 파이썬의 비트를 쓸 의향이 있다면 쉽게 사물의 종류의 수 있습니다. 아래의 코드를 스크립트 pdf-cat-even(또는 원하는 것)에 저장하고 실행 가능하게 ( chmod +x pdf-cat-even) 만들고 필터 ( ./pdf-cat-even a.pdf b.pdf >concatenated.pdf) 로 실행하십시오 . 이 addBlankPage방법 에는 pyPdf ≥1.13이 필요합니다 .

#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0
alignment = 2           # to align on even pages
for filename in sys.argv[1:]:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename))
    for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
        # This code is executed for every input page in turn
        output.addPage(p)
        output_page_number += 1
    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1
output.write(sys.stdout)

답변

첫 번째 단계는 빈 페이지가있는 pdf 파일을 생성하는 것입니다. 많은 프로그램 (LibreOffice / OpenOffice, inkscape, (La) TeX, scribus 등)으로이 작업을 쉽게 수행 할 수 있습니다.

그런 다음 필요한 경우이 빈 페이지를 포함하십시오.

pdftk A.pdf empty_page.pdf B.pdf output result.pdf

스크립트를 사용하여이 작업을 자동으로 수행하려면 예 pdftk file.pdf dump_data | grep NumberOfPages | egrep -o '[0-9]*'를 들어 페이지 수를 추출 할 수 있습니다 .


답변

Gilles의 대답 은 나를 위해 일했지만 많은 파일을 병합해야하므로 텍스트 파일에서 이름을 읽을 수 있으면 더 편리합니다. Gilles의 코드를 약간 수정하여 다른 사람에게 도움이 될 수 있습니다.

#!/usr/bin/env python

# requires PyPdf library, version 1.13 or above -
# its homepage is http://pybrary.net/pyPdf/
# running: ./this-script-name file-with-pdf-list > output.pdf

import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0

# every new file should start on (n*alignment + 1)th page
# (with value 2 this means starting always on an odd page)
alignment = 2

listoffiles = open(sys.argv[1]).read().splitlines()
for filename in listoffiles:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename))
    for p in [input.getPage(i) for i in range(0,input.getNumPages())]:
        # This code is executed for every input page in turn
        output.addPage(p)
        output_page_number += 1
    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1
output.write(sys.stdout)

답변

LaTeX를 사용 하여이 작업을 수행 할 수도 있습니다 (아마도 원하는 것이 아닐 수도 있습니다). 다음과 같은 것이 작동해야합니다.

\documentclass{book}

\usepackage{pdfpages}

\begin{document}

\includepdf[pages=-]{A}
\cleardoublepage % Make sure we clear to an odd page
\includepdf[pages=-]{B} % This inserts all pages. Or you can specify specific pages, a range, or `{}` for a blank page

\end{document}

참고 \cleardoublepage두 위해 만들어진 클래스와 빈 페이지를 삽입 인쇄 양면 (예. 책)

더 많은 옵션과 정보 pdfpagesCTAN 에서 찾을 수 있습니다 .


답변

PyPDF2와 python3을 사용한 코드는 다음과 같습니다.

#!/usr/bin/env python


# requires PyPdf2 library, version 1.26 or above -
# its homepage is https://pythonhosted.org/PyPDF2/index.html
# running: ./this-script-name output.pdf file-with-pdf-list

import copy, sys
from PyPDF2 import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
output_page_number = 0

# every new file should start on (n*alignment + 1)th page
# (with value 2 this means starting always on an odd page)
alignment = 2

for filename in sys.argv[2:]:
    # This code is executed for every file in turn
    input = PdfFileReader(open(filename, "rb"))
    output.appendPagesFromReader(input)
    output_page_number += input.getNumPages()

    while output_page_number % alignment != 0:
        output.addBlankPage()
        output_page_number += 1

output.write(open(sys.argv[1], "wb"))