Pythonを使用して、既存のPDFに追加のテキストを追加する必要があります。これを実行する最善の方法は何ですか、どの追加モジュールをインストールする必要がありますか。
注:理想的には、WindowsとLinuxの両方でこれを実行できるようにしたいのですが、プッシュLinuxでのみ実行できます。
編集: pyPDF および ReportLab 見栄えは良いが、どちらも既存のPDFの編集を許可しない。他のオプションはあるか?
これは古い記事であることは知っていますが、解決策を見つけるために長い時間を費やしました。 ReportLabとPyPDFだけを使用してまともなものに出会ったので、共有したいと思いました。
PdfFileReader()
を使用して、これを呼び出しますinputPdfFileReader()
を使用して文字列オブジェクトを読み取り、これを呼び出しますtextPdfFileWriter()
を使用してオブジェクトを作成します。これを呼び出しますoutput.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()
pdfrw を使用すると、既存のPDFからページを読み込み、レポートラボキャンバスに描画できます(画像の描画に似ています)。pdfrwにはこの例があります。 examples/rl1 githubのサブディレクトリ免責事項:私はpdfrwの著者です。
David Dehghan の answer を利用して、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
Windowsを使用している場合、これは機能する可能性があります。
PythonでのPDF作成および編集フレームワーク。
問題を解決して、PDFを編集可能な形式に変換し、変更を書き込み、それをPDFに変換し直すことができます。直接編集できるライブラリはありませんPDFしかし、DOCとPDF。