回答:
これは古い投稿であることは知っていますが、解決策を見つけるために長い時間を費やしました。私はReportLabとPyPDFだけを使用してまともなものに出会ったので、共有したいと思いました:
PdfFileReader()
これをこの入力と呼びますPdfFileReader()
このテキストを呼び出しますPdfFileWriter()
ます。この出力を呼び出します.mergePage(*text*.getPage(0))
、テキストを追加する各ページに適用し、次に、を使用output.addPage()
して、変更されたページを新しいドキュメントに追加しますこれは単純なテキストの追加に適しています。文書に透かしを入れる方法については、PyPDFのサンプルを参照してください。
以下は、以下の質問に答えるためのコードです。
packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
<do something with canvas>
can.save()
packet.seek(0)
input = PdfFileReader(packet)
ここから、入力ファイルのページを別のドキュメントとマージできます。
from pyPdf import PdfFileWriter, PdfFileReader
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = StringIO.StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(10, 100, "Hello world")
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(file("original.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = file("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
from PyPDF2 import PdfFileWriter, PdfFileReader
import io
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = io.BytesIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(10, 100, "Hello world")
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader(open("original.pdf", "rb"))
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
io.BytesIO
pyPDF(メンテナンスされていない)ではなくPyPDF2である必要があります。正解です。
open
代わりに使用する方が良いと思いますfile
。
existing_pdf
とoutput
、サンプルコードでは、ちょうどありません。
pdfrwを使用すると、既存のPDFからページを読み取り、それらをreportlabキャンバスに描画できます(画像の描画と同様)。この例は、githubのpdfrw examples / rl1サブディレクトリにあります。免責事項:私はpdfrwの作者です。
活用デビッドDehghanの答えを Pythonの2.7.13で、次の作品は、上記:
from PyPDF2 import PdfFileWriter, PdfFileReader, PdfFileMerger
import StringIO
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
packet = StringIO.StringIO()
# create a new PDF with Reportlab
can = canvas.Canvas(packet, pagesize=letter)
can.drawString(290, 720, "Hello world")
can.save()
#move to the beginning of the StringIO buffer
packet.seek(0)
new_pdf = PdfFileReader(packet)
# read your existing PDF
existing_pdf = PdfFileReader("original.pdf")
output = PdfFileWriter()
# add the "watermark" (which is the new pdf) on the existing page
page = existing_pdf.getPage(0)
page.mergePage(new_pdf.getPage(0))
output.addPage(page)
# finally, write "output" to a real file
outputStream = open("destination.pdf", "wb")
output.write(outputStream)
outputStream.close()
cpdfはコマンドラインからジョブを実行します。しかし、それはpythonではありません(afaik):
cpdf -add-text "Line of text" input.pdf -o output .pdf
PDFを編集可能な形式に変換し、変更を書き込んでからPDFに変換し直すことで、問題を解決できるかもしれません。PDFを直接編集できるライブラリは知りませんが、たとえばDOCとPDFの間にはたくさんのコンバーターがあります。
あなたがWindowsを使っているなら、これはうまくいくかもしれません:
PythonでのPDF作成および編集フレームワークのホワイトペーパーもあります。それは少し古いですが、おそらくあなたにいくつかの有用な情報を与えることができます: