Добавление текста поверх существующих PDF-файлов с помощью reportlab

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

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

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

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

3 ответов


Если 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();

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


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