Ich habe ein sehr seltsames Problem mit der PDF-Rendering funktioniert überall, aber nicht auf prod. Entwickler- und Testumgebungen arbeiten ohne Probleme, aber prod kann einfach nicht damit umgehen. Die einzigen Änderungen, die jetzt auf prod sind: höhere Grails-Version als der letzte Krieg (2.1.0
->2.3.8
[aber diese Änderung wurde in die Testumgebung vor ca. 2 Monaten eingeführt und alle Probleme wurden dann behoben]) mit wenigen verbesserten Plugins, insbesondereRendering PDF funktioniert nicht auf Prod-Umgebung
compile ":rendering:0.4.3"
geändert
compile ":rendering:1.0.0"
Stacktrace ich auf prod erhalten:
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)
Mein ReportController
Verfahren für PDF-Dateien zu erzeugen (nichts wirklich passiert hier und, ja, beginnt pdfShow Datei mit einem Unterstrich):
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')
}
Ich habe schon einiges an Forschung getan und fanden Hinweise darauf, dass es das Problem mit Schriftarten in deklariert sein könnten. CSS-Datei, die von der PDF-Vorlage verwendet wird.
Nun, das ist die 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;
}
Und die Schriften gibt es sowohl auf Test und prod. Und änderte ihren Standort nicht.
Ich habe versucht, die Herabstufung rendering
Plugin zurück zu 0.4.3
, aber es hat nicht funktioniert, über nicht verfügbaren Klassen klagen:
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.
Einstellung im BuildConfig.groovy
legacyResolve true
innen grails.project.dependency.resolution { ...
tat auch nicht Arbeit.
Haben Sie eine Idee, was könnte falsch sein?
Haben Sie versucht, es in der Produktion ohne die '@ font-face' Abschnitte in CSS laufen zu lassen? –
@AshrafPurno noch nicht (werde ich), aber was ist, wenn ich diese Schriftart brauche und sie immer ohne Probleme benutzt habe? –
Sind CDNs oder andere Caching-Mechanismen beteiligt? –