2015-10-30 10 views
10

プロダクトではなくどこでも動作するレンダリング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.3renderingプラグインをダウングレードしようとしたが、それはうまくいきませんでした: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. 

設定もしませんでした作業。

何が間違っている可能性がありますか?

+0

CSSで '@ font-face'セクションを使わずに本番環境で実行しようとしましたか? –

+0

@AshrafPurnoはまだありませんが、このフォントが必要な場合はいつも問題なく使用できますか? –

+0

CDNまたは他のキャッシングメカニズムは関係していますか? –

答えて

0

問題を解決した事は、Config.groovyに1行を追加しました:

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

我々はtestdevelopment環境でこのラインを持っていたが、Grailsのと、それはとにかく働い2.1.0、前に。

+0

これは私を助けませんでした。私は迅速な修正としてカスタムフォントを使用しないように強制された... – kuceram

関連する問題