使用Python将文本添加到现有的PDF中

我需要使用Python为现有的PDF添加一些额外的文本,最好的方法是什么,以及需要安装哪些额外的模块。

注意:理想情况下,我希望能够在Windows和Linux上运行此操作,但是只有Linux才能执行此操作。

提前致谢。
理查德。

编辑:pyPDF和ReportLab看起来不错,但没有人会允许我编辑现有的PDF,有没有其他的select?

我知道这是一个较旧的post,但我花了很长时间试图find一个解决scheme。 我碰到一个体面的只使用ReportLab和PyPDF,所以我想我会分享:

  1. 使用PdfFileReader()读取您的PDF,我们将调用这个input
  2. 使用ReportLab创build一个包含您的文本的新的pdf添加,保存为一个string对象
  3. 使用PdfFileReader()读取string对象,我们将调用这个文本
  4. 使用PdfFileWriter()创build一个新的PDF对象,我们将调用这个输出
  5. 遍历input,并为每个要添加文本的页面应用.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) 

从这里您可以将input文件的页面与其他文档合并

以下是我在其他地方find的完整答案:

 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() 

利用David 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 

如果你在Windows上,这可能工作:

PDF创build者试点

Python中还有一个PDF创build和编辑框架的白皮书。 这有点过时了,但也许可以给你一些有用的信息:

使用Python作为PDF编辑和处理框架

pdfrw将允许您从现有PDF中读取页面,并将其绘制到reportlabcanvas(类似于绘制图像)。 在github的pdfrw examples / rl1子目录中有这样的例子 。 免责声明:我是pdfrw作者。

将PDF转换为可编辑格式,编写更改,然后将其转换回PDF,可能会有更好的运气。 我不知道可以直接编辑PDF的库,但是DOC和PDF之间有很多转换器。

你尝试过pyPdf吗?

抱歉,它无法修改网页的内容。