답변:
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-cat-even $(cat list-of-file-names.txt) >concatenated.pdf
<list-of-file-names.txt tr '\n' '\0' | xargs -0 ./pdf-cat-even >concatenated.pdf
첫 번째 단계는 빈 페이지가있는 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]*'
를 들어 페이지 수를 추출 할 수 있습니다 .
pdftk --version
은 pdftk 1.44를 반환합니다. 나는 욕구에 정통한 친구들이 적어도 15 분 동안이 일을 끝내고 포기하기 위해 다른 것들을 시도했던 것을 기억합니다.
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 에서 찾을 수 있습니다 .
\includepdf[pages=-]{...}
.
\cleardoublepage
양면 인쇄용 클래스를 사용하는 경우에만 빈 페이지를 삽입합니다. 작동하지 않는 기사를 사용하고있었습니다. 나는 그것을 고치고 그것을 반영하기 위해 질문을 업데이트했다.
\includepdf
기본적으로 첫 번째 페이지 만 포함합니다 (모든 페이지가 아님). \documentclass[twoside]{article}
또한 작동합니다.
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"))