使用reportlab在现有的PDF上添加文本

6
我对以编程方式填写现有的PDF表单很感兴趣。我只需要从用户输入中提取信息,然后将适当的文本放置在现有PDF的适当位置上。我已经可以使用reportlab做到这一点,通过将同一张纸张两次送入打印机,但这让我感到非常不舒服。
我想亲自反向工程每个现有的PDF,并在添加用户输入的文本之前自己绘制每条线和字符,但我想检查是否有一种简单的方法来将现有的PDF设置为一些额外文本的背景。我真的希望使用Python,因为它是我唯一感觉舒适的语言。
我也意识到我可以只扫描文档本身,并使用结果光栅图像作为背景,但我更喜欢矢量图形的精度。
看起来ReportLab有一个具有此功能的商业产品,而我正在寻找的特定功能就在其中(copyPages)-但为了一个非营利用途的单一简单功能支付四位数的费用似乎过于浪费。
3个回答

5
如果PDF表单是真正的AcroForms,则可以使用iText来填充它们。我不知道是否有其他端口比iText(Java,原始版本)和iTextSharp(C#)更好,但如果您不介意开源您的解决方案,则可以轻松使用并免费。您可以查看此示例代码或(Java片段):
String formFile = "/path/to/myform.pdf"
String newFile = "/path/to/output.pdf"
PdfReader reader = new PdfReader(formFile);
FileOutputStream outStream = new FileOutputStream(newFile);
PdfStamper stamper = new PdfStamper(reader, outStream);
AcroFields fields = stamper.getAcroFields();

// fill the form
fields.setField("name", "Shane");
fields.setField("url", "http://stackoverflow.com");

// PDF infos
HashMap<String, String> infoDoc = new HashMap<String, String>();
infoDoc.put("Title", "your title here");
infoDoc.put("Author", "JRE ;)");
stamper.setMoreInfo(infoDoc);

// Flatten the PDF & cleanup
stamper.setFormFlattening(true);
stamper.close();
reader.close();
outStream.close();

2

如果你只想在预印刷纸张上添加一些文本,可以将其扫描为 jpg 格式,然后将 jpg 设置为背景。请参考 reportlab 手册的第 15 页,只需调用 drawImage。


0

看起来你只需要将一个现有的PDF放在你正在生成的Reportlab PDF的背景中。免费的PDFRW库可以轻松实现这一点。查看Example Tools page以获取一些具体的技巧示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接