两个linux环境生成的jasper,没有X11的Jasperreports没有在Linux服务器上工作:“初始化图形环境时出错。”...

我有一个很大的问题。我正在编写一个使用Jasperreports的应用程序。当我在当地工作时,一切都很好。但是,当我将我的应用程序停靠时,当我运行应该生成PDF文件的方法时,我收到一个错误:

Request processing failed; nested exception is net.sf.jasperreports.engine.JRRuntimeException: Error initializing graphic environment.

我发现运行我的应用程序

-DJava.awt.headless=true

问题会自行解决。但事实并非如此。

这就是它在Dockerfile中的样子:

ENTRYPOINT [ "java", "-Djava.awt.headless=true", "-jar", "/var/generator/generator-0.0.1-SNAPSHOT.jar" ]

为了确保我没有忘记任何东西,这里是生成PDF文件的方法的代码,也许有一些错误...

错误来自这一行:

mainReport = JasperFillManager.fillReport(report, invoiceMap, new JREmptyDataSource());

这是方法:

public byte[] generateInvoicePDF(Invoice invoice) {

/* Map to fill in main JasperReport */

Map invoiceMap = new HashMap();

invoiceMap.put("FIRST_NAME", invoice.getFirstName());

invoiceMap.put("LAST_NAME", invoice.getLastName());

invoiceMap.put("REGON", invoice.getRegon());

invoiceMap.put("NIP", invoice.getNip());

invoiceMap.put("BUSINESS_NAME", invoice.getBusinessName());

invoiceMap.put("BUSINESS_LOCATION", invoice.getBusinessLocation());

invoiceMap.put("ORDER_DATE", invoice.getOrderDate());

invoiceMap.put("RECEPTION_DATE", invoice.getReceptionDate());

invoiceMap.put("CONTRACT_DATE", invoice.getContractDate());

invoiceMap.put("CONTRACTOR_COMMENT", invoice.getContractorComment());

invoiceMap.put("INVOICE_NUMBER", invoice.getInvoiceNumber());

invoiceMap.put("INVOICE_ISSUE_DATE", invoice.getInvoiceIssueDate());

JasperPrint mainReport;

JasperPrint tableReport;

try {

InputStream invoiceJasper = InvoiceGeneratorServiceImpl.class.getResourceAsStream("/invoices/invoice.jrxml");

InputStream taskTableJasper = InvoiceGeneratorServiceImpl.class.getResourceAsStream("/invoices/invoice_sub.jrxml");

JasperDesign mainReportDesign = JRXmlLoader.load(invoiceJasper);

JasperDesign tableReportDesign = JRXmlLoader.load(taskTableJasper);

JasperReport report = JasperCompileManager.compileReport(mainReportDesign);

JasperReport table = JasperCompileManager.compileReport(tableReportDesign);

/* List to hold Items */

List taskList = new ArrayList<>();

/* Add Items to List */

taskList.addAll(invoice.getInvoiceTasks());

/* Convert List to JRBeanCollectionDataSource */

JRBeanCollectionDataSource itemsJRBean = new JRBeanCollectionDataSource(taskList);

/* Map to hold Jasper report Parameters */

Map taskListMap = new HashMap();

taskListMap.put("TasksDataSource", itemsJRBean);

taskListMap.put("ADDITIONAL_COSTS", invoice.getAdditionalCosts());

mainReport = JasperFillManager.fillReport(report, invoiceMap, new JREmptyDataSource());

tableReport = JasperFillManager.fillReport(table, taskListMap, new JREmptyDataSource());

List printList = new ArrayList<>();

printList.add(mainReport);

printList.add(tableReport);

JRPdfExporter exporter = new JRPdfExporter();

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

exporter.setExporterInput(SimpleExporterInput.getInstance(printList)); //Set as export input my list with JasperPrint s

exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(byteArrayOutputStream));

SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();

configuration.setCreatingBatchModeBookmarks(true); //add this so your bookmarks work, you may set other parameters

exporter.setConfiguration(configuration);

exporter.exportReport();

return byteArrayOutputStream.toByteArray();

} catch (JRException e) {

e.printStackTrace();

}

return new byte[0];

}

还有一点堆栈跟踪:

2019-04-24 08:43:57.338 ERROR 1 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is net.sf.jasperreports.engine.JRRuntimeException: Error initializing graphic environment.] with root cause

java.lang.NullPointerException: null

at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) ~[na:1.8.0_201]

at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) ~[na:1.8.0_201]

at sun.awt.FontConfiguration.init(FontConfiguration.java:107) ~[na:1.8.0_201]

at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774) ~[na:1.8.0_201]

at sun.font.SunFontManager$2.run(SunFontManager.java:431) ~[na:1.8.0_201]

at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_201]

at sun.font.SunFontManager.(SunFontManager.java:376) ~[na:1.8.0_201]

at sun.awt.FcFontManager.(FcFontManager.java:35) ~[na:1.8.0_201]

at sun.awt.X11FontManager.(X11FontManager.java:57) ~[na:1.8.0_201]

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_201]

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_201]

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_201]

at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_201]

at java.lang.Class.newInstance(Class.java:442) ~[na:1.8.0_201]

at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83) ~[na:1.8.0_201]

at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_201]

at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) ~[na:1.8.0_201]

at sun.java2d.SunGraphicsEnvironment.getFontManagerForSGE(SunGraphicsEnvironment.java:201) ~[na:1.8.0_201]

at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:235) ~[na:1.8.0_201]

at sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(SunGraphicsEnvironment.java:263) ~[na:1.8.0_201]

at sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(HeadlessGraphicsEnvironment.java:94) ~[na:1.8.0_201]

at net.sf.jasperreports.engine.util.JRGraphEnvInitializer.initializeGraphEnv(JRGraphEnvInitializer.java:58) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.BaseReportFiller.(BaseReportFiller.java:136) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:273) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:79) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:251) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:272) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:156) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:145) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:758) ~[jasperreports-6.7.1.jar!/:6.7.1]

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:1074) ~[jasperreports-6.7.1.jar!/:6.7.1]

at com.generator.service.impl.InvoiceGeneratorServiceImpl.generateInvoicePDF(InvoiceGeneratorServiceImpl.java:68) ~[classes!/:na]

at com.generator.rest.ContractorController.getPdf(ContractorController.java:165) ~[classes!/:na]

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值