Добавление текста поверх существующих PDF-файлов с использованием reportlab - PullRequest
6 голосов
/ 26 апреля 2010

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 26 апреля 2010

Если 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 голосов
/ 08 августа 2012

Если вы просто хотите добавить текст на предварительно напечатанную бумагу. Вы можете отсканировать его как JPG, а затем поместить этот JPG в качестве фона. Пожалуйста, обратитесь к 15-й странице в руководстве по reportlab, просто позвоните drawImage

0 голосов
/ 12 сентября 2011

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

...