각 파일이 홀수 페이지 번호에서 시작되도록 pdf 파일을 병합하려면 어떻게해야합니까?


11

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

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

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

답변:


6

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 이름을 읽는 것을 선호하므로 코드를 약간 수정하고 별도의 답변 으로 게시했습니다 .
Jan Warchoł

@JanekWarchol 파일 이름에 공백과 같은 쉘 특수 문자가 포함되어 있지 않은 경우 :./pdf-cat-even $(cat list-of-file-names.txt) >concatenated.pdf
Gilles 'SO-stop

불행히도 공백이 포함되어 있습니다. 그러나 그럼에도 불구하고 감사합니다-나는 이것이 그렇게 할 수 있다는 것을 몰랐습니다.
Jan Warchoł

@JanekWarchol 그렇다면 사용할 수 있습니다<list-of-file-names.txt tr '\n' '\0' | xargs -0 ./pdf-cat-even >concatenated.pdf
Gilles 'SO-stop

3

첫 번째 단계는 빈 페이지가있는 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]*'를 들어 페이지 수를 추출 할 수 있습니다 .


이것은 약간의 해킹처럼 느껴집니다. 그것이 작동한다면, 그것은 내가 생각하는대로 작동합니다.
샘 화이트

이 접근법은 거의 나를 위해 일했습니다. 필요한 곳에 epmtyPage.pdf가 추가 된 pdf 목록을 생성하는 스크립트를 작성했지만 파일 이름에 공백이 있으면 pdftk 가이 목록을 올바르게 구문 분석 할 수 없었습니다. 따옴표를 사용하여 IFS 값을 변경하려고했지만 아무 소용이 없습니다. 아마 pdftk의 잘못 일 것입니다. 어쨌든 pypdf를 사용하는 대답 이 저에게 효과적 이었습니다.
Jan Warchoł

@JanekWarchol pdftk의 어떤 버전을 사용하셨습니까? 적어도 pdftk 1.44 이상은 파일 이름에서 공백을 지원하는 것으로 보입니다.
jofel

@jofel pdftk --version은 pdftk 1.44를 반환합니다. 나는 욕구에 정통한 친구들이 적어도 15 분 동안이 일을 끝내고 포기하기 위해 다른 것들을 시도했던 것을 기억합니다.
Jan Warchoł

1

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)

1

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 에서 찾을 수 있습니다 .


2
모든 페이지를 자동으로 포함 시키려면을 사용할 수 있습니다 \includepdf[pages=-]{...}.
jofel

@ jofel 감사합니다, 질문을 수정했습니다. 나는 그것이 모든 페이지를 기본값으로 생각하고 특정 페이지를 선택할 수 있음을 보여주기 위해 거기에 넣었습니다.
Sam Whited

@jofel 또한 \cleardoublepage양면 인쇄용 클래스를 사용하는 경우에만 빈 페이지를 삽입합니다. 작동하지 않는 기사를 사용하고있었습니다. 나는 그것을 고치고 그것을 반영하기 위해 질문을 업데이트했다.
Sam Whited

\includepdf기본적으로 첫 번째 페이지 만 포함합니다 (모든 페이지가 아님). \documentclass[twoside]{article}또한 작동합니다.
jofel

내가 본 것부터 포함해야 할 모든 파일을 명시 적으로 작성해야하므로 나에게 충분하지 않습니다. 어쨌든 고마워
Jan Warchoł

0

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"))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.