【发布时间】:2015-01-17 08:05:27
【问题描述】:
当我从任何源 PDF 打印 PDF 时,文件大小会减小并删除表单中显示的文本框。简而言之,它会使文件变平。 这是我想要实现的行为。
以下代码使用另一个 PDF 作为源(我想要展平的那个)创建 PDF,它也写入文本框表单。
我可以获得没有文本框的 PDF,将其展平吗?就像我将 PDF 打印为 PDF 时 Adobe 所做的一样。
我的其他代码看起来像这样减去一些东西:
import os
import StringIO
from pyPdf import PdfFileWriter, PdfFileReader
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
directory = os.path.join(os.getcwd(), "source") # dir we are interested in
fif = [f for f in os.listdir(directory) if f[-3:] == 'pdf'] # get the PDFs
for i in fif:
packet = StringIO.StringIO()
can = canvas.Canvas(packet, pagesize=letter)
can.rotate(-90)
can.save()
packet.seek(0)
new_pdf = PdfFileReader(packet)
fname = os.path.join('source', i)
existing_pdf = PdfFileReader(file(fname, "rb"))
output = PdfFileWriter()
nump = existing_pdf.getNumPages()
page = existing_pdf.getPage(0)
for l in range(nump):
output.addPage(existing_pdf.getPage(l))
page.mergePage(new_pdf.getPage(0))
outputStream = file("out-"+i, "wb")
output.write(outputStream)
outputStream.close()
print fName + " written as", i
总结:我有一个 pdf,我在其中添加一个文本框,隐藏信息并添加新信息,然后我从该 pdf 打印一个 pdf。文本框不再可编辑或移动。我想自动化这个过程,但我尝试的一切仍然允许该文本框是可编辑的。
【问题讨论】:
-
也在寻找解决方案。我有一个水印 Python 脚本,但是当尝试选择或突出显示文档中的文本时,水印会妨碍我。如果我可以生成一个扁平的水印 PDF,然后将它与源 PDF 合并,那就可以解决它。
-
文件名是否遵循某些特定约定?如果是这样,语义是什么?用空格分隔文件名,然后用逗号分隔文件名的目的是什么? (否则,脚本会失败,但我不确定是否与您面临的问题相关)
-
+MakeCents 我无法重现该问题。我没有盒子。您可以粘贴一张带有您获得的结果和预期结果的图像吗?
-
@gpoo 我认为这些盒子存在于原件中,但我也不知道它是什么类型的盒子,我有一个 pdf,第一页上有一个盒子,但我无法删除它打印(也许 Acrobat Pro 会这样做)
-
@gpoo 我当时的目标是:我有一个 pdf,我在其中添加一个文本框,覆盖信息并添加新信息,然后我从该 pdf 打印一个 pdf .文本框不再可编辑或移动。我想自动化该过程,但我尝试的一切仍然允许该文本框是可编辑的。我希望这能清除它。我正在使用 Acrobat 9.5
标签: python pdf-generation reportlab pypdf