2015-05-19 2 views
2

Я хочу извлечь данные одного объекта в файл PDF и также хочу иметь средство в этом экспортированном файле PDF для изменения/редактирования данных.Создание данных формы в PDF Java

Например: Попробуйте экспортировать данные объекта объекта в PDF в каком-то очень конкретном формате, таком как отображаемое имя в первой строке, возраст во второй строке и т. Д., И как только данные будут экспортированы, я также смогу отредактировать его (например, изменить восстановленный возраст).

Первоначально я думал о создании графического интерфейса в этом приложении, которое показывает, что данные и пользователь могут редактировать, прежде чем выполнять какие-либо действия, такие как печать, рассылка и т. Д., Но хотели избежать создания этого графического интерфейса и напрямую иметь дело с экспортированным PDF-файлом.

Я очень новичок в этой области и пытался погулять по этому поводу, но не смог найти правильное решение.

Объект в вопросе java-объект, и я пытаюсь просмотреть данные этого объекта java в файле PDF.

Любые указатели очень помогли бы мне.

+0

Какие решения вы нашли? Почему они не соответствуют вашим потребностям? –

ответ

1

Скачать Chapter6 of my book и прочитать часть о создании формы с помощью OpenOffice (или LibreOffice) в разделе 6.3.5. Это шаблон, в котором определяются поля для учащегося "name", 'age" и т.д ...

После того как вы этот шаблон с полями "name" и "age", вы можете использовать IText, чтобы заполнить эту форму, как это:

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("student", "Anil Pradhan"); 
    fields.setField("age", "25"); 
    stamper.close(); 
    reader.close(); 
} 

В этом примере src - это путь к вашему пустующему шаблону, а dest - это путь к только что созданной форме, заполненной.

Если у вас есть dest, вы также можете программно получить содержимое полей. Например:

PdfReader reader = new PdfReader(src); 
AcroFields fields = reader.getAcroFields(); 
String name = fields.getField("name"); 
String age = fields.getField("age"); 

Это так просто. Вы можете найти больше примеров here и не забудьте загрузить бесплатную электронную книгу The Best iText Questions on StackOverflow, чтобы узнать больше о других вариантах.

0

Вы смотрели на Jasper Reports:

Jasper Reports Library

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

+0

Как бы вы поместили строки прямо в отчет Jasper? Согласно моим (небольшим) исследованиям отчетов Jasper, вы не можете получить строку непосредственно в отчете, вам сначала понадобится поле в базе данных, а затем вы можете вызвать ее из запроса. –

+0

@GherbiHicham жаль позднего ответа, к сожалению, я больше не работаю в проекте, где использовал Jasper Reports. Однако, что вы можете сделать с Jasper, это связать отчет с классом Java, и там вы можете установить значения для полей, которые вы хотите. Затем вы связываете их через отчеты Jasper. Я бы предложил использовать плагин Eclipse, чтобы сделать это, так как он имеет приятный интерфейс для этого с Jasper Reports. – FraK

+0

Спасибо за ваш ответ, да, я сделал это, используя отчет Jasper Beans и JRDataSourses, это дало мне желаемый результат, и я улучшил свое понимание работы Jasper Reports. –

1

Похоже, что вы пытаетесь сделать сериализацию и десериализацию объекта 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"); 
Смежные вопросы