java - 无法在 pdf :grails 中渲染图像

标签 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()

在调查 Controller 的 pdf 操作中-

render(view: 'download')

下载.gsp

<g:img dir="assets/common" file="pointer.jpg"/>
<img src="assets/common/pin.png"/>

pdf 我们得到除了这些图像之外的所有数据

注意 - 当我直接点击调查 Controller 的 pdf 操作时,这是渲染图像。[localhost:8080/survey/pdf]

最佳答案

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

您不应该对您的 baseUrl 进行硬编码。您可以注入(inject) grailsLinkGenerator bean,然后 baseUrl 将在 grailsLinkGenerator.serverBaseURL 中可用。

所以你可以通过grailsLinkGenerator获取controller中的baseUrl,然后通过model传递给你的view。然后你的 img 标签看起来像下面这样

    <img src="${baseUrl}/assets/common/pin.png"/>

关于java - 无法在 pdf :grails 中渲染图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32687836/

相关文章:

javascript - Grails:twitter bootstrap 3 模式在每次迭代中都有相同的内容

java - HQL连接查询: could not resolve property:

java - 用测试数据填充内存数据库的模式

spring - Grails Spring Security Rest-禁止的403

php - 如何从 php 中来自 mysql 数据库的动态数据生成 pdf 文件?

java - 在 PDFBox 中制作 PDF 时图像周围的边框

grails - Grails集成测试:失败...无法在空对象上调用方法addToPosts()

java - 匹配可选组

可编辑单元格上的 JavaFX 工具提示

perl - 如何获取 PDF 页面的页面方向?