2016-08-26 5 views
0

Мне нужно создать файлы docx на основе шаблонов. Шаблон должен содержать держателей мест, и я должен иметь возможность заполнить держатели мест из java. Можно ли это сделать, если да, то предложите мне хороший и эффективный способ сделать это.Создайте файл docx из файла шаблона в java

ответ

1

Как уже обсуждался в других местах до, есть 3 основных подхода:

  1. ЛУЧШИЕ: данные контроля содержания связывания

  2. дешево/весел: Переменная замена (т.е. магические строки на поверхности документа), но хрупкий (проблема с раздельным прогоном)

  3. LEGACY: MERGEFIELD с другими кодами полей или без них.

docx4j поддерживает все три подхода, но в целом мы рекомендуем содержание управления привязки данных, так как она совпадала с направлением Microsoft (как лучше всего может быть установлено), и является самым мощным.

Вы должны учесть технические навыки авторов шаблонов.

1

См. https://github.com/centic9/poi-mail-merge для простого метода замены переменных. Он не работает, если в одной заменяющей строке применено несколько форматов, но хорошо работает для простых случаев, когда шаблон тщательно обрабатывается.

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

Он работает с XML-контентом DOCX, поэтому он не полностью использует поддержку Apache POI XWPF, но таким образом форматирование и другие элементы из шаблона используются, как ожидается, без необходимости полной поддержки всего в Apache POI (который имеет Поддержка DOCX по-прежнему входит в состав компонента «блокнот», поскольку поддержка пока не считается полностью выполненной).

1

Вы можете использовать шаблон Word со следующим синтаксисом LINQ Reporting для достижения ваших требований с помощью Aspose.Words для Java.

< < tag_name [выражение] -switch1 -switch2 ... >>

Тело тега, как правило, состоит из следующих элементов:

  • Имя тега
  • выражение в скобки
  • Набор переключателей для тега, каждому из которых предшествует символ «-»

Предположим, что у вас есть класс отправителя, определенный в приложении следующим образом:

public class Sender { 
    public Sender(String name, String message) { 
     _name = name; 
     _message = message; 
    } 

    public String getName() { 
     return _name; 
    } 

    public String getMessage() { 
     return _message; 
    } 

    private String _name; 
    private String _message; 
} 

Чтобы подготовить доклад, содержащий сообщение о конкретном отправителе от его имени, вы можете использовать шаблон документа со следующим содержимым ,

< < [s.getName()] >> говорит: «< < [s.getMessage()] >>."

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

Document doc = new Document(getMyDir() + "temp_HelloWorld.docx"); 

Sender sender = new Sender("LINQ Reporting Engine", "Hello World"); 
ReportingEngine engine = new ReportingEngine(); 
engine.buildReport(doc, sender, "s"); 

doc.save(getMyDir() + "out.docx"); 

Я работаю с Aspose, как евангелист Developer.

1

немного опоздал на оригинальный вопрос, но если кто-то еще нужно динамически создавать DOCX документы из шаблонов, вы можете захотеть взглянуть на DocxStamper Java библиотеки, которые я создал на вершине docx4j.

Это позволяет использовать Spring Expression Language в шаблонах docx, и вы можете создать документ из шаблона с такими парами строк:

MyData data = ...;   // your own POJO containing the data  
InputStream template = ...; // InputStream to the template file 
OutputStream out = ...;  // OutputStream to the resulting document 
DocxStamper stamper = new DocxStamperConfiguration() 
    .build(); 
stamper.stamp(template, context, out); 
out.close(); 

 Смежные вопросы

  • Нет связанных вопросов^_^