使用Python将文本添加到现有的PDF中
我需要使用Python为现有的PDF添加一些额外的文本,最好的方法是什么,以及需要安装哪些额外的模块。
注意:理想情况下,我希望能够在Windows和Linux上运行此操作,但是只有Linux才能执行此操作。
提前致谢。
理查德。
编辑:pyPDF和ReportLab看起来不错,但没有人会允许我编辑现有的PDF,有没有其他的select?
我知道这是一个较旧的post,但我花了很长时间试图find一个解决scheme。 我碰到一个体面的只使用ReportLab和PyPDF,所以我想我会分享:
- 使用PdfFileReader()读取您的PDF,我们将调用这个input
- 使用ReportLab创build一个包含您的文本的新的pdf添加,保存为一个string对象
- 使用PdfFileReader()读取string对象,我们将调用这个文本
- 使用PdfFileWriter()创build一个新的PDF对象,我们将调用这个输出
- 遍历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吗?
抱歉,它无法修改网页的内容。