iTextSharp производит PDF из существующего шаблона PDF - PullRequest
6 голосов
/ 08 июня 2011

Я смотрю на возможность создания чего-либо с использованием C # и iTextSharp, которое может взять шаблон PDF и заменить различные значения заполнителя фактическими значениями, полученными из базы данных. По сути, PDF слияния. У меня есть книга iText в действии, но она охватывает довольно много вещей, которые мне не нужны, и я изо всех сил пытаюсь найти что-нибудь, связанное с тем, что я хочу сделать. Я с удовольствием использую поля PDF в качестве заполнителей, если объединенная / выровненная форма не выглядит так, как будто в ней есть поля, выходной документ должен выглядеть как объединенное письмо, а не как заполненная форма. идеальный мир, я просто хочу найти текстовое содержимое PDF, а затем заменить текстовые заполнители их правильными значениями полей в формате слияния.

Может кто-нибудь посоветовать мне лучший подход к этому и указать мне, какие наиболее полезные классы iTextSharp можно использовать, или, если вы знаете книгу iText in Action, указатель на самый полезный для меня раздел для чтения.

1 Ответ

9 голосов
/ 08 июня 2011
  1. Создайте свой шаблон без полей в выбранном макете страницы / текстовом редакторе.
  2. Сохранить в PDF.
  3. Откройте этот PDF-файл и добавьте в него поля.Это легко сделать в Acrobat Pro (при необходимости вы можете загрузить пробную версию).Это также возможно в iText, только намного сложнее.

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

Объединение данных полей в форму довольно тривиально с iText (простите за Java, я не очень разбираюсь в C #):

void fillPDF( String filePath, Map<String, String> fieldVals ) {
  PdfReader reader = new PdfReader(myFilePath);

  PdfStamper stamper = new PdfStamper( reader, outputFileStream );
  stamper.setFormFlattening(true);

  AcroFields fields = stamper.getAcroFields();

  for (String fldName : fieldVals.keySet()) {
    fields.setField( fldName, fieldVals.get(fldName) );
  }

  stamper.close();
}

При этом игнорируются списки с несколькими вариантами выбора (и исключениями), но кроме этого он должен быть готов к работе.Учитывая то, что вы делаете тип слияния, я не думаю, что множественный выбор будет большой проблемой.

...