Добавление текста по существующему PDFs, использующему reportlab

Я интересуюсь заполнением существующих форм PDF программно. Все, что я действительно должен сделать, вытянуть информацию от ввода данных пользователем и затем поместить соответствующий текст над существующим PDF в соответствующих местоположениях. Я могу уже сделать это с reportlab путем питания того же листа бумаги в принтер, дважды, но это просто действительно протирает меня неправильный путь.

Я испытываю желание просто, лично перепроектируют каждый существующий PDF и проводят каждую линию и символ сам прежде, чем добавить введенный пользователями текст, но я хотел проверить, чтобы видеть, был ли простой способ взять существующий PDF и установить его как фон для некоторого дополнительного текста. Я действительно предпочел бы использовать Python, поскольку это - единственный язык, в котором я чувствую себя довольным.

Я также понимаю, что мог просто отсканировать сам документ и использовать получающееся растровое изображение в качестве фона, но я предпочту точность векторной графики.

Кажется, что ReportLab имеет коммерческий продукт с этой функциональностью, и определенная функция, которую я ищу, находится в нем (copyPages) - но на излишество походит платить за 4 продукта числа для единственной, простой функции для некоммерческого использования.

6
задан Shane 26 April 2010 в 04:03
поделиться

1 ответ

Если формы PDF настоящие AcroForms , вы можете использовать iText для их заполнения. Я не знаю, есть ли другой порт, кроме iText (java, original) и 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();
5
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: