책자 형식으로 만든 PDF 파일이 있습니다. A4 용지에 가로 방향으로 인쇄하기 위한 것입니다. 이는 PDF의 2페이지이며 실제 책의 4페이지에 해당합니다.
-------------------------------
| | |
| | |
| | |
| (1) | (3) |
| | |
| | |
| | |
-------------------------------
-------------------------------
| | |
| | |
| | |
| (4) | (2) |
| | |
| | |
| | |
-------------------------------
괄호 안의 숫자는 개별 페이지의 순서에 해당합니다.
나는 Linux에 다양한 명령(pdfbook, pdfnup 등)이 있다는 것을 알고 있습니다(아마도 이 책자를 만드는 데 사용되었을 것입니다). 어떻게 "구독 취소"합니까? 즉, 최종 제품의 각 개별 페이지가 일반적인 방법으로 주문된 별도의 PDF 페이지인 PDF 문서를 만들고 싶습니다.
편집하다
Giles 덕분에 다음 코드를 사용할 수 있었습니다.
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
second_half = []
for i in range(0,input.getNumPages()):
p = input.getPage(i)
q = copy.copy(p)
print >> sys.stderr, 'splitting page',i
print >> sys.stderr, '\tlowerLeft:',p.mediaBox.lowerLeft
print >> sys.stderr, '\tupperRight:',p.mediaBox.upperRight
p.mediaBox.upperRight = (ur[0], (bl[1]+ur[1])/2)
p.mediaBox.lowerLeft = bl
q.mediaBox.upperRight = ur
q.mediaBox.lowerLeft = (bl[0], (bl[1]+ur[1])/2)
if i % 2 == 0:
output.addPage(p)
qold = q
else:
output.addPage(q)
output.addPage(qold)
output.addPage(p)
output.write(sys.stdout)
답변1
이것은 다음 명령을 사용하는 작은 Python 스크립트입니다.PyPdf 라이브러리그게 다야. (에서un2up
.) 라는 스크립트에 저장하고 unbook
실행 가능하게 만든 다음( chmod +x unbook
) 필터로 실행합니다( unbook <book.pdf >1up.pdf
).
의 출력에서 이 스크립트를 테스트했습니다 pdfbook --signature=N
. 또 다른 접근 방식의 경우 입력 페이지를 하나씩 건너뛸 필요가 없으며 페이지 순서가 다를 수 있습니다(가로 페이지 방향에 따라). 페이지 레이아웃이 귀하의 질문과 일치하지 않습니다. 13,42는 나에게 이해가 되지 않습니다(4페이지 책에서 3은 1 바로 옆이 아니라 2 바로 옆에 있어야 합니다).
#!/usr/bin/env python
import copy, sys
from pyPdf import PdfFileWriter, PdfFileReader
input = PdfFileReader(sys.stdin)
output = PdfFileWriter()
second_half = []
for i in range(0,input.getNumPages()):
p = input.getPage(i)
q = copy.copy(p)
(w, h) = p.mediaBox.upperRight
p.mediaBox.upperRight = (w/2, h)
q.mediaBox.upperLeft = (w/2, h)
if i % 2 == 0:
p.rotateClockwise(180)
q.rotateClockwise(180)
output.addPage(p)
second_half.append(q)
else:
output.addPage(p)
second_half.append(q)
second_half.reverse()
for q in second_half: output.addPage(q)
output.write(sys.stdout)
더 이상 사용되지 않는 경고를 무시하십시오. PyPdf 관리자만 이에 대해 관심을 가져야 합니다.