pdf를 '예약 취소'하는 방법


10

소책자 형식으로 작성된 pdf 파일이 있습니다. 가로 방향으로 A4 용지에 인쇄합니다. 여기 pdf에는 두 페이지가 있으며 실제 책의 네 페이지에 해당합니다.

 -------------------------------
|              |                |
|              |                |
|              |                |
|    (1)       |      (3)       |
|              |                |
|              |                |
|              |                |
 ------------------------------- 

 -------------------------------
|              |                |
|              |                |
|              |                |
|    (4)       |      (2)       |
|              |                |
|              |                |
|              |                |
 -------------------------------

괄호 안의 숫자는 개별 페이지의 순서와 일치합니다.

나는 리눅스에 모든 종류의 명령 (pdfbook, pdfnup 등)이 있음을 알고 있습니다 (아마도이 ​​책자를 처음 만드는 데 사용되었을 것입니다). 어떻게 '예약 취소'합니까? 즉, 최종 제품의 각 개별 페이지가 일반적인 방식으로 주문 된 pdf의 개별 페이지 인 pdf 문서를 만들고 싶습니다.

편집하다

Gilles 덕분에 다음 코드를 사용했습니다.

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
나는 이것이 superuser.com에
Adam Zalcman

@AdamZalcman 왜? 그는 리눅스 프로그램을 찾고있다
Michael Mrozek

2
당신은 수있는 문제에 대한 (질에 의해)이 질문의 답을 적응 , 즉는 PyPdf 스크립트를 만들 수 있습니다.
sr_

3 페이지와 4 페이지를 바꾸지 않았습니까? 인쇄 작업을했습니다. 그 레이아웃은 의미가 없습니다 ....
와일드 카드

답변:


4

다음 은 작업을 수행하는 PyPdf 라이브러리 를 사용하는 작은 Python 스크립트 입니다. (에서 파생 됨 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 관리자 만이 이것에 관심을 가질 필요가 있습니다.


이것은 얼마 전에 요청되었지만 솔루션을 구현하는 데 문제가 있습니다. OSX를 실행 중이며 MacPorts를 통해 python 및 py27-pypdf를 설치했습니다. 언북 파일을 작성하고 스크립트를 복사하여 붙여 넣었습니다. 지시에 따라 명령을 실행하면 0 바이트의 새 1up.pdf 파일이 생성됩니다. 터미널에 오류나 아무것도 표시되지 않지만 명령을 실행할 때 아무 일도 발생하지 않습니다 (CTRL-C를 종료해야 함). 시스템이 멈추지 않고 아무것도하지 않는 것 같습니다. 문제를 어떻게 추적 할 수 있습니까? @Gilles
TSGM

@TSGM 가장 가능성있는 설명은 <입력 파일 이전 을 잊었다는 것 입니다. 실제로 명령을 올바르게 작성했다고 확신한다면 PyPdf 라이브러리의 버그 일 수 있습니다 (아직 실패하지는 않았지만 발생할 수 있음).
Gilles 'SO- 악마 그만해'

문제는 "python unbook <in.pdf> out.pdf"를 통해 파이썬을 호출해야한다는 것이 었습니다. 바보 나. 또한 귀하의 코드는 약간 이상했습니다 (결국 second_half 페이지를 고집했습니다. 원래 게시물에 쓴 형식으로 수정 한 것 같습니다). 결국 사용한 코드를 포함하도록 원래 응답을 편집했습니다. 또한 페이지 크기 명령이 잘못된 것 같습니다. 나는 그것을 수정했다. @Gilles
TSGM

@TSGM 코드는 일반적인 책 레이아웃 인 1 | 4 앞면, 2 | 3 뒷면의 레이아웃을 가정합니다. 페이지가 다르게 배치 된 경우 페이지를 조정해야 할 수도 있습니다. 해당 설정에서 현장 테스트를 거쳤습니다. 명시 적으로 전화 python해야하는 것은 실수였습니다. 세방 라인을 넣어야했습니다.
Gilles 'SO- 악마 그만해'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.