Скопируйте поля формы из одного PDF в другой - PullRequest
3 голосов
/ 28 октября 2010

У меня есть ситуация, когда мне нужно скопировать все поля формы из одного PDF в другой. Цель состоит в том, чтобы автоматизировать наложение полей, когда небольшие изменения вносятся в базовые страницы Word.

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

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

У кого-нибудь есть идеи?

Спасибо

~ DJ

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Да, это возможно.Нет, setField () не сработает ... код Мэдисону скопирует поле значения , но не сами поля.

OTOH, это действительно не так сложно.

Что-то вроде:

PdfReader currentReader = new PdfReader( CURRENT_PDF_PATH ); // throws
PdfReader pdfFromWord = new PdfReader( TWEAKED_PDF_FROM_WORD_PATH ); // throws
PdfStamper stamper = new PdfStamper( currentReader , outputFile ); //throws
for( int i = 1; i <= tempalteReader.getNumberOfPages(); ++i) {
  stamper.replacePage( pdfFromWord, i, i );
}

stamper.close(); // throws 

Я игнорирую кучу исключений и пишу на Java, но C # должен выглядеть практически идентично.

Также этот кодигнорирует случай, когда кто-то ДОБАВЛЯЕТ СТРАНИЦУ ... что было бы довольно сложно.Это было добавлено до или после страниц с полями на них?Эти страницы вообще переформатировались, требуя перемещения полей?На этом этапе вам действительно нужен ручной процесс с Acrobat Pro.

0 голосов
/ 29 октября 2010

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

private void CopyFields(PdfStamper targetFile, PdfReader sourceFile){
{
  foreach (DictionaryEntry de in targetFile.AcroFields.Fields)
  {
    string fieldName = de.Key.ToString();
    target.AcroFields.SetField(fieldName, sourceFile.AcroFields.GetField(fieldName));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...