我想知道是否有人可以帮我解决这个问题。我确实谷歌了几天,但我找不到任何可以帮助我的东西。 我必须使用Thymeleaf和FOP创建一个PDF文件。 我从XML文件中获取了所有PDF信息。在这个XML文件中,我有一些存储在base64中的PNG图像,必须在PDF文件中显示。
<myXML:Attachments>
<myXML:Attached attachedID="FIRST_IMAGE">
<myXML:ImageData>
<myXML:Description>FIRST_IMAGE</myXML:Description>
<myXML:Mime>image/png</myXML:Mime>
<myXML:Data>iVBO...IIH=</myXML:Data>
</myXML:ImageData>
</myXML:Attached>
<myXML:Attached attachedID="SECOND_IMAGE">
<myXML:ImageData>
<myXML:Description>SECOND_IMAGE</myXML:Description>
<myXML:Mime>image/png</myXML:Mime>
<myXML:Data>iVBO..CYII=</myXML:Data>
</myXML:ImageData>
</myXML:Attached>
</myXML:Attachments>
首先,我检查了我可以在PDF文件中打印图像。因此,我对 Attached.ImageData.Data 信息进行了编码,以确认图像正常。请参阅以下示例:
<fo:external-graphic
src="data:image/png;base64,iVBO...IIH"
/>
上面的例子很好用。其次,我检查了解析的数据与XML文件完全相同:
<fo:table-row
th:each="img : ${Attachments.Attached}">
<fo:table-cell>
<fo:block th:text="${'data:' + img.ImageData.Mime + ';base64,'}+${{img.ImageData.Data}}">**srcImage**</fo:block>
</fo:table-cell>
在我的PDF文件中,我可以看到:数据:IMAGE_PNG; base64,iVBO ...... 所以,我觉得解析的信息工作正常。 不幸的是,当我用下面的例子执行代码时,我收到了一个错误:
<fo:table-row
th:each="img : ${Attachments.Attached}">
<fo:table-cell>
<fo:block th:text="srcImage = ${'data:' + img.ImageData.Mime + ';base64,'}+${{img.ImageData.Data}}">
<fo:external-graphic src="${srcImage}"/>
</fo:block>
</fo:table-row>
模板解析期间发生错误(templateCaused by: org.thymeleaf.exceptions.TemplateProcessingException:可以 不解析为表达式:
“srcImage = $ {'data:'+ img.ImageData.Mime + '; base64,'} + $ {{img.ImageData.Data}}“at org.thymeleaf.standard.expression.StandardExpressionParser.parseExpression(StandardExpressionParser.java:131) 在 org.thymeleaf.standard.expression.StandardExpressionParser.parseExpression(StandardExpressionParser.java:62) 在 org.thymeleaf.standard.expression.StandardExpressionParser.parseExpression(StandardExpressionParser.java:44) 在 org.thymeleaf.engine.EngineEventUtils.parseAttributeExpression(EngineEventUtils.java:220) 在 org.thymeleaf.engine.EngineEventUtils.computeAttributeExpression(EngineEventUtils.java:207) 在 org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:67) 在 org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) 在 org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) 在 org.thymeleaf.util.ProcessorConfigurationUtils $ ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) 在 org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) 在 org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205)
我是Thymeleaf和FOP的佼佼者。如果你能帮我解决这个问题,我真的很感激。
感谢您的考虑。