下面是我的代码 -
ApplicationTagLib applicationTagLib = new ApplicationTagLib()
String html = applicationTagLib.include(controller: 'survey', action: 'pdf', params: [id: id])
html = html.replaceAll('&', '&')
html = html.replaceAll('&#', '&#')
html = html.replaceAll(' ', ' ')
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String baseUrl = "http://localhost:8080/"
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(content);
renderer.layout();
renderer.createPDF(baos);
byte[] data = baos.toByteArray();
response.setHeader("Content-disposition", "attachment;filename=report.pdf")
response.setContentType("application/pdf")
OutputStream out = response.getOutputStream();
out.write(data);
out.flush();
out.close()
在调查的pdf行动中Contrller -
render(view: 'download')
download.gsp
<g:img dir="assets/common" file="pointer.jpg"/>
<img src="assets/common/pin.png"/>
pdf我们得到的所有数据除了这些图像
注意 - 当我正在调查控制器的直接pdf动作时,这会使图像正常。[localhost:8080/survey/pdf
]
答案 0 :(得分:1)
生成PDF时,相对path/source
不适用于静态资源。你必须为他们提供绝对path/source
。
您不应该对baseUrl
进行硬编码。您可以注入grailsLinkGenerator
bean,然后baseUrl
将grailsLinkGenerator.serverBaseURL
提供baseUrl
。
因此,您可以通过grailsLinkGenerator
获取控制器中的model
,然后将其通过img
传递给您的视图。然后,您的 <img src="${baseUrl}/assets/common/pin.png"/>
代码可能如下所示
9001_20150921113547_00041.xml.gz