iTextSharp добавляет уже существующий PDF как слой к другому PDF - PullRequest
4 голосов
/ 09 августа 2010

У меня есть отчеты, которые конвертируются в PDF-файлы. В некоторых из этих отчетов отсутствует информация просто потому, что мы ее не отслеживаем. Я создал еще один PDF-файл с оболочкой отчета и поместил в него элементы управления полями ввода. Я хотел бы знать, есть ли способ применить оболочку PDF к преобразованному PDF, чтобы пользователи могли вводить информацию в эти пустые поля без необходимости распечатывать их и писать вручную? Я сделал это вручную через Adobe Acrobat Pro 9.3, применив сгенерированный PDF к оболочке PDF как Layer . Я столько же возился с iTextSharp, что касается Layers , но я до сих пор не нашел ничего, что сработало.

Спасибо заранее!

1 Ответ

2 голосов
/ 21 декабря 2010

1) Слои не будут работать с полями.Слои PDF являются частью содержимого страницы.Поля формы, как и все аннотации, плавают над страницей.

2) Сказав это, вы можете скрывать и открывать поля формы с помощью Acrobat / Reader JavaScript.Объект "doc" обычно является "this" в точках входа в поле и страницу, поэтому для отображения заданного поля это просто:

var fld = this.getField("fieldName");
fld.hidden = false;

Существует довольно много разных мест, где вы можете добавить JS в PDF,Различные полевые события, события страницы и события документа.Вы также можете установить действие слоя для некоторого javaScript.Черт возьми, вы можете установить действие закладки как javascript вместо действия «перейти туда».

Обратите внимание, что слои называются «необязательными группами содержимого» (OCG) в техническом языке PDF.Если вы действительно хотите создать слой, похоже, он будет выглядеть примерно так:

// layer implements PdfOCG
PdfLayer layer = new PdfLayer("MyLayer", writer);

PdfContentByte cb = getAContentByteFromSomewhere();

cb.beginLayer(layer); // takes PDFOCG object

/* draw stuff to be part of that layer */

cb.endLayer();

На сайте iText есть несколько примеров, соответствующих "iText In Action"., 2-е издание »(мне не платят, автор - друг). Вышеупомянутые примеры можно найти здесь .

Повторяется: поля не могут быть частью OCG (слоя).Однако их можно записать так, чтобы они действовали так, как они есть.

...