「予約をキャンセル」方法pdf

「予約をキャンセル」方法pdf

小冊子形式で作成された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。別のアプローチでは、入力ページを1つずつスキップする必要はなく、ページの順序が異なる場合があります(水平ページの方向によって)。ページレイアウトがあなたの質問と一致しません。 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管理者だけがこれに興味を持っている必要があります。

おすすめ記事