Подтвердить что ты не робот

Как автоматизировать заполнение формы PDF в Java

Я занимаюсь разработкой "pro bono" для кладовой еды, где я живу. Они наводнены формами и документами, и я хотел бы разработать систему, которая просто считывает данные со своего сервера MySQL (который я настроил для них в предыдущем проекте) и подает данные в PDF-версии всех форм, которые они требуются для заполните. Это очень поможет им и сэкономит им много времени, а также избавится от многих человеческих ошибок, которые возникают при заполнении этих форм.

Не знаю ничего о внутренних файлах PDF, я могу предвидеть два пути здесь:

  • Упрощенный способ. Можно сканировать бумажный документ, превратить его в PDF файл, а затем иметь программное обеспечение, которое "заполняет" PDF, просто произнося "добавьте текст, кроме blah, в следующее (x, y) координат..."; или
  • Простой способ: спецификация PDF уже позволяет построить конструкцию "полей", которая может быть заполнена; таким образом я просто пишу код, который говорит: "добавьте текст excerpt blah в поле, называемое * address_value *..." и т.д.

Итак, мой первый вопрос: с какого из двух направлений я сталкиваюсь? Имеет ли в формате PDF понятие "поля" или мне нужно "заполнить" эти документы, указав библиотеке PDF координаты пикселей, где размещать данные?

Во-вторых, для этого мне, очевидно, нужна библиотека с открытым исходным кодом (и Java). iText кажется хорошим началом, но я слышал, что с ним сложно работать. Может ли кто-нибудь дать некоторые идеи или общие рекомендации здесь? Спасибо заранее!

4b9b3361

Ответ 2

Пожалуйста, взгляните на главу об интерактивных формах в бесплатной электронной книге Лучшие вопросы iText в StackOverflow. Он связывает ответы на такие вопросы, как:

Или вы можете смотреть это видео, где я объясняю как использовать формы для отчетности шаг за шагом.

См. например:

public void manipulatePdf(String src, String dest) throws DocumentException, IOException {
    PdfReader reader = new PdfReader(src);
    PdfStamper stamper = new PdfStamper(reader,
            new FileOutputStream(dest));
    AcroFields fields = stamper.getAcroFields();
    fields.setField("name", "CALIFORNIA");
    fields.setField("abbr", "CA");
    fields.setField("capital", "Sacramento");
    fields.setField("city", "Los Angeles");
    fields.setField("population", "36,961,664");
    fields.setField("surface", "163,707");
    fields.setField("timezone1", "PT (UTC-8)");
    fields.setField("timezone2", "-");
    fields.setField("dst", "YES");
    stamper.setFormFlattening(true);
    stamper.close();
    reader.close();
}