gpt4 book ai didi

pdf - 渲染 PDF 不适用于产品环境

转载 作者:行者123 更新时间:2023-12-02 02:28:42 24 4
gpt4 key购买 nike

我有一个非常奇怪的问题,渲染 PDF 在任何地方都可以工作,但在产品上却不行。开发人员和测试环境运行没有问题,但生产环境却无法处理。现在 prod 上唯一的变化:比上次 war 更高的 Grails 版本 (2.1.0->2.3.8 [但是这个变化已经引入到测试环境中大约 2 个月前,所有问题都得到了解决])几乎没有升级的插件,尤其是

compile ":rendering:0.4.3"

更改为

compile ":rendering:1.0.0"

我在产品上得到的 Stacktrace:

java.lang.NullPointerException
at org.xhtmlrenderer.swing.NaiveUserAgent.getBinaryResource(NaiveUserAgent.java:228)
at org.xhtmlrenderer.pdf.ITextFontResolver.importFontFaces(ITextFontResolver.java:97)
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:178)
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:142)
at grails.plugin.rendering.pdf.PdfRenderingService.doRender(PdfRenderingService.groovy:36)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:43)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:37)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:35)
at grails.plugin.rendering.RenderingService.render(RenderingService.groovy:65)
at GrailsMelodyGrailsPlugin$_closure4_closure16_closure17.doCall(GrailsMelodyGrailsPlugin.groovy:184)
at RenderingGrailsPlugin$_closure3.doCall(RenderingGrailsPlugin.groovy:59)
at com.my.app.ReportController$_closure8.doCall(ReportController.groovy:169)
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:200)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
at net.bull.javamelody.JspWrapper.invoke(JspWrapper.java:150)
at net.bull.javamelody.JdbcWrapper$DelegatingInvocationHandler.invoke(JdbcWrapper.java:285)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:198)
at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:176)

我的ReportController生成pdf的方法(这里什么也没发生,是的,pdfShow文件以下划线开头):

    def generatePdf = {
if (!params.id) {
throw new IllegalArgumentException("PDF Generation: an instance identifier has not been passed.")
}
def reportInstance = Report.findById(params.id)
renderPdf(template: "pdfShow", model: [reportInstance: reportInstance], filename: reportInstance?.reportFilename + '.pdf')
}

我已经做了相当多的研究,发现有迹象表明这可能是 pdf 模板使用的 .css 文件中声明的字体存在问题。

嗯,这是 .css:

@font-face {
src: url("../fonts/DejaVuSansCondensed.ttf");
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}

@font-face {
src: url(../fonts/DejaVuSansCondensed-Bold.ttf);
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}

body {
font-family: "DejaVu Sans Condensed", Arial, sans-serif;
}

字体就在那里,无论是测试版还是产品版。并且没有改变他们的位置。

我尝试将 rendering 插件降级回 0.4.3,但它不起作用,提示不可用的类:

plugins\rendering-0.4.3\grails-app\services\grails\plugin\rendering\document\XhtmlDocumentService.groovy: 20: unable to resolve class org.xhtmlrenderer.resource.XMLResource
(...)\plugin\rendering\pdf\PdfRenderingService.groovy: 25: unable to resolve class com.lowagie.text.pdf.BaseFont
(...)\plugin\rendering\pdf\PdfRenderingService.groovy: 19: unable to resolve class org.xhtmlrenderer.pdf.ITextRenderer
...and few others etc.

BuildConfig.groovy中设置

legacyResolve true

内部grails.project.dependency.resolution {...也不起作用。

您知道可能出了什么问题吗?

最佳答案

解决问题的方法是在 Config.groovy 中添加一行:

environments {
production {
(...)
grails.resources.processing.enabled = false

我们在测试开发环境中都有这行代码,但在此之前,在 Grails 2.1.0 中它仍然可以工作。

关于pdf - 渲染 PDF 不适用于产品环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33430972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com