プロダクトではなくどこでも動作するレンダリングPDFには非常に奇妙な問題があります。開発者とテスト環境は問題なく動作していますが、それだけでは対応できません。最後の戦争よりもGrailsのバージョンが高い(2.1.0
- >2.3.8
[この変更は2か月前にテスト環境に導入され、すべての問題は解決されました])、アップグレードされたプラグインはほとんどなく、レンダリングされたPDFがプロダクト環境で動作しない
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)
マイ:私はPRODに乗る
compile ":rendering:1.0.0"
スタックトレースに変更特に
compile ":rendering:0.4.3"
(何が本当にはい、pdfShowファイルは、アンダースコアで始まり、ここで起こっていないとです)pdfファイルを生成するための方法:
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;
}
とフォントは、両方のテストとPRODに、あります。そして彼らの位置を変えなかった。
利用できないクラス不満、私は戻って0.4.3
にrendering
プラグインをダウングレードしようとしたが、それはうまくいきませんでした:grails.project.dependency.resolution { ...
内部BuildConfig.groovy
legacyResolve true
で
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.
設定もしませんでした作業。
何が間違っている可能性がありますか?
CSSで '@ font-face'セクションを使わずに本番環境で実行しようとしましたか? –
@AshrafPurnoはまだありませんが、このフォントが必要な場合はいつも問題なく使用できますか? –
CDNまたは他のキャッシングメカニズムは関係していますか? –