Похоже, что вы пытаетесь сделать сериализацию и десериализацию объекта Java в форме PDF. Это прямолинейно, но это небольшая работа.
Игнорирование XFA в PDF-формате a Форма представляет собой иерархическое дерево полей. Узлы в дереве имеют имена и могут также имеют значения, которые будут проецироваться вниз (например, тип поля или значение по умолчанию). Все листья представлены аннотациями виджета.
Основные типы полей в PDF являются:
- Текст
- Кнопка
- Выбор
- Подпись
Оттуда прямо вперед на карту следующие типы:
- Числовой
- Boolean
- Строка
- Enum
- EnumSet
Это можно делать более сложные типы, такие как дата, но нет встроенной поддержки и вам нужно будет зависеть от недокументированных js от Adobe.
Если ваш тип включает в себя не более, чем это, то это выполнимо.Оба iText и JoltImage могут работать в качестве задней части для этого, но вам нужно иметь достаточно хорошее понимание PDF для использования iText и, по крайней мере, рудиментарного понимания JoltImage. Например, чтобы сделать набор радиокнопок в JoltImage, вы могли бы сделать что-то вроде этого:
// make a document
PdfGeneratedDocument doc = new PdfGeneratedDocument();
// add a form
doc.setForm(new PdfForm());
// make a page
PdfGeneratedPage page = doc.addPage(PdfDefaultPages.letter());
// create a font resource
String font = doc.getResources().getFonts().addFromFontName("Arial");
String[] values = new String[] { "Yes", "No", "Undecided" };
PdfBounds[] bounds = new PdfBounds[] {
new PdfBounds(72, 700, 12, 12),
new PdfBounds(72, 680, 12, 12),
new PdfBounds(72, 660, 12, 12)
};
// a RadioButtonFormField is a hierarchy of a parent field with a child
// RadioButtonWidgetAnnotation for each choice.
// This call, in addition to making all the fields will add the
// annotations to the page supplied.
RadioButtonFormField ff = RadioButtonFormField.makeRadioSet(doc.getResources(), page, "Choice", values[0], values[0],
values, bounds);
// Add the parent field to the form tree
doc.getForm().getFields().add(ff);
// add labels onto the page.
// labels are not typically part of the widget annotation.
for (int i = 0; i < values.length; i++)
{
page.getDrawingList().add(new PdfTextLine(font, 12, values[i], new PdfPoint(bounds[i].getRight() + 4, bounds[i].getBottom())));
}
doc.save("radiobuttons.pdf");
Какие решения вы нашли? Почему они не соответствуют вашим потребностям? –