无法在pdf中呈现图像:grails

时间:2015-09-21 05:17:29

标签: java pdf grails

下面是我的代码 -

    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]

1 个答案:

答案 0 :(得分:1)

生成PDF时,相对path/source不适用于静态资源。你必须为他们提供绝对path/source

您不应该对baseUrl进行硬编码。您可以注入grailsLinkGenerator bean,然后baseUrlgrailsLinkGenerator.serverBaseURL提供baseUrl

因此,您可以通过grailsLinkGenerator获取控制器中的model,然后将其通过img传递给您的视图。然后,您的 <img src="${baseUrl}/assets/common/pin.png"/> 代码可能如下所示

9001_20150921113547_00041.xml.gz