1

多くの1ページのpdfファイルをマージする必要がある小さなスクリプトを書いています。スクリプトを Python3 で実行し、依存関係をできるだけ少なくしたいと考えています。

PDFのマージ部分はPyPdfを使ってみました。ただし、Python 3 のサポートにはバグがあるようです。これは、inkscape で生成された PDF ファイル (これが必要です) を処理できません。PyPdf の現在の git バージョンがインストールされていますが、次のテスト スクリプトが機能しません。

import PyPDF2

output_pdf = PyPDF2.PdfFileWriter()

with open("testI.pdf", "rb") as input:
    input_pdf = PyPDF2.PdfFileReader(input)
    output_pdf.addPage(input_pdf.getPage(0))

with open("test.pdf", "wb") as output:
    output_pdf.write(output)

次のスタック トレースがスローされます。

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    output.addPage(input.getPage(0))
  File "/usr/lib/python3.3/site-packages/pyPdf/pdf.py", line 420, in getPage
    self._flatten()
  File "/usr/lib/python3.3/site-packages/pyPdf/pdf.py", line 574, in _flatten
    self._flatten(page.getObject(), inherit)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 165, in getObject
    return self.pdf.getObject(self).getObject()
  File "/usr/lib/python3.3/site-packages/pyPdf/pdf.py", line 616, in getObject
    retval = readObject(self.stream, self)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 66, in readObject
    return DictionaryObject.readFromStream(stream, pdf)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 526, in readFromStream
    value = readObject(stream, pdf)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 57, in readObject
    return ArrayObject.readFromStream(stream, pdf)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 152, in readFromStream
    obj = readObject(stream, pdf)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 86, in readObject
    return NumberObject.readFromStream(stream)
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 231, in readFromStream
    return FloatObject(name.decode("ascii"))
  File "/usr/lib/python3.3/site-packages/pyPdf/generic.py", line 207, in __new__
    return decimal.Decimal.__new__(cls, str(value), context)
TypeError: optional argument must be a context

ただし、同じスクリプトは Python 2.7 でも問題なく動作します。

ここで何が間違っていますか?ライブラリのバグですか?PyPDF ライブラリに触れずに回避できますか?

4

2 に答える 2

3

だから私は答えを見つけました。decimal.DecimalPython3.3のモジュールは、奇妙な動作を示します。これは対応する StackOverflow の質問です: Instantiate Decimal class PyPDF2 ライブラリにいくつかの回避策を追加し、プル リクエストを送信しました。

于 2013-02-22T10:43:06.893 に答える
2

まさにこれを行う既存のツールを認識していることを確認してください。

  • PDFtk
  • PDFjam (私のお気に入りですが、LaTeX が必要です)
  • GhostScriptで直接:
    gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=finished.pdf file1.pdf file2.pdf
于 2013-02-22T10:38:15.843 に答える