Загрузка файла odt (шаблон документа) с помощью freemarker. Как создать файл ODT в PDF
Получить это исключение:
fr.opensagres.xdocreport.core.XDocReportException: java.lang..xdocreport.templain:703)
at com.altruista.mp.dao.ContactSyncImpl$1.processRow(ContactSyncImpl.java:231) по адресу org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extava.fj.trade_trag_7_f_4.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:708) в org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644) в org.springframework.jlate.jdbc. 695) на org.springframework.jd bc.core. 762) в com.altruista.mp.dao.ContactSyncImpl.applyRemoteChanges(ContactSyncImpl.java:128) в com.altruista.mp.sync.SyncController.run(SyncController.java:137) в org.springfrauns(SpringApplication.java:634) в org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:652) в org.springframework.boot.SpringApplication.run(SpringApplication.java:312) в org.springframework.pro. выполнить (SpringApplication.java:909) в org.springframework.boot.SpringApplication.run(SpringApplication.java:898) в com.altruista.mp.sync.Application.main(Application.java:19). Причина: java.lang.NoSuchMethodError: freemarker.template.Configuration.setTagSyntax(I)V по адресу fr.opensagres.xdocreport.template.freemarker.FreemarkerTemplateEngine.se Конфигурация в fr.opensagres.xdocreport.template.freemarker.FreemarkerTemplateEngine.processWithCache(FreemarkerTemplateEngine.java:110) в fr.opensagres.xdocreport.template.AbstractTemplateEngine.process(AbstractTemplateEngine.java:111)
... 19 более CONTACT: Couchbase [7207d5b6-cea2-48ee-8464-bc73ce21aa5f] <= SQL [ 582375 ]
java.io.FileNotFoundException: шаблон fr.opensagres.xdocreport.document.odt.ODTReport@fbe57c!content.xml не найден. по адресу freemarker.template.Configuration.getTemplate(Configuration.java:441) по адресу freemarker.template.Configuration.getTemplate(Configuration.java:404) по адресу fr.opensagres.xdocreport.template.freemarker.FreemarkerTemplateEngine.processWithCache:EEngine.jpg: Freemarkeremp.processTemplateEngine(AbstractXDocReport.java:775) по адресу fr.opensagres.xdocreport.document.AbstractXDocReport.convert(AbstractXDocReport.java:703) по адресу com.altruista.mp.dao.ContactSyncImpl $ 1.processRow (ContactSync): orgSync.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extractData(JdbcTemplate.java:1607) в org.springframework.jdbc.core.JdbcTemplate$1.doInPrep Template.execute (JdbcTemplate.java:644) в org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695) в org.springframework.jdbc.core.JdbcTemplate.query (Jdbc: jdbc).springframework.jdbc.core..java: 128) по адресу com.altruista.mp.sync.SyncController.run(SyncController.java:137) по адресу org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:634) по адресу org.springframework.bo afterRefresh (SpringApplication.java:652) в org.springframework.boot.SpringApplication.run(SpringApplication.java:312) в org.springframework.boot.SpringApplication.run(SpringApplication.java:909) в org.springot.rame.pr.run (SpringApplication.java:898)
на com.altruista.mp.sync.Application.main(Application.java:19)
используя эти зависимости:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.core</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.converter</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.template</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document.odt</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.converter.odt.odfdom</artifactId>
<version>1.0.4</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
<optional>true</optional>
InputStream in= new FileInputStream(new File("src/main/resources/demoOffice.odt"));
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(
in, TemplateEngineKind.Freemarker);
// 2) Create Java model context
IContext context = report.createContext();
context.put("name", "world");
// 3) Set PDF as format converter
Options options = Options.getTo(ConverterTypeTo.PDF);
// 4) Generate report by merging Java model with the ODT and convert it to PDF
OutputStream outputStream = new FileOutputStream(new File("src/main/resources/demoOffice_Out.odt"));
report.convert(context, options, outputStream);
в demoOffice.odt:
привет ${имя}!
1 ответ
XDocReport является модульным, поэтому вы должны выбрать:
- Ваша реализация механизма шаблонов. В вашем случае вы хотите использовать Freemarker, поэтому вы должны объявить в своей помете:
<dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId> <version>1.0.4</version> </dependency>
- вид документа (doc, odt и т. д.). В вашем случае вы хотите использовать odt, поэтому вы должны объявить в своем pom:
<dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.document.odt</artifactId> <version>1.0.4</version> </dependency>
- конвертер, если вы хотите конвертировать отчет в другой формат, чем оригинальный. В вашем случае вы хотите конвертировать ODT в PDF, поэтому вы должны объявить в своем pom:
<dependency> <groupId>fr.opensagres.xdocreport</groupId> <artifactId>fr.opensagres.xdocreport.converter.odt.odfdom</artifactId> <version>1.0.4</version> </dependency>
Эти зависимости объясняются здесь