2010-04-26 4 views
6

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

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

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

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

ответ

5

Если формы PDF действительны AcroForms, вы можете использовать iText, чтобы заполнить их. Я не знаю, есть ли другой порт, чем iText (java, original) и iTextSharp (C#), но он прост в использовании и свободен, если вы не против открывать свое решение с открытым исходным кодом. Вы можете посмотреть на этой sample code или (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(); 
0

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

2

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

Смежные вопросы