Получение позиции (координаты xy) строки в файле PDF с использованием iText - PullRequest
3 голосов
/ 05 января 2012

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

|FNAME||SNAME|

|TELCAP||PHONE1|
|CELLCAP||MOBILE|
|EMAIL|
|WEB|

, и я должен заменить |FNEME| на имя, полученное с помощью формы.

  1. Есть лиспособ получения позиции, например | FNAME |, с помощью iText функций , чтобы я знал, куда вставить имя?

  2. Кроме того, послеполучить позицию, есть ли способ удалить |FNAME| и заменить его именем, полученным динамически из моей HTML-формы?

1 Ответ

1 голос
/ 05 января 2012

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

Высоздайте PdfWriter и PdfReader, получите шаблон формы, а затем коллекцию того, что iText называет «AcroFields»:

Document document = new Document(PageSize.LETTER, 18, 18, 18, 18);
PdfWriter writer = PdfWriter.getInstance(document, new  FileOutputStream(<<fileoutputpath>>);
DirectContent content = write.getDirectContent();
PdfReader reader = new PdfReader("<pdf form file specification>");
PdfImportedPage template = writer.getImportedPage(reader, 1); // gets first page
AcroFields acroFields = reader.getAcroFields();

создатель формы даст имя поля каждому из заполняемых полей;Вы можете получить позицию и размер прямоугольника, покрываемого этим полем с таким именем:

float[] positions = acroFields.getFieldPositions("<fieldName>");

, а затем записать свое значение в эту позицию вместо имени поля:

ColumnText columnText = new ColumnText(contentByte);
columnText.setSimpleColumn(new Phrase(value, fontToUse), pos1, pos2, pos3, pos4, Element.ALIGN_LEFT, false);
columnText.go(false);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...