몇 가지 졸린 PDF를 병합해야하며 모든 입력 pdf가 출력 pdf의 홀수 페이지에서 시작되기를 원합니다.
예 : A.pdf
3 페이지, B.pdf
4 페이지 나는 싶지 않아 내 출력은 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
두 위해 만들어진 클래스와 빈 페이지를 삽입 인쇄 양면 (예. 책)
더 많은 옵션과 정보 pdfpages
는 CTAN 에서 찾을 수 있습니다 .
답변
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"))