【问题标题】:grails renderpdf plugin, how does it work?grails renderpdf插件,它是如何工作的?
【发布时间】:2012-06-15 09:08:59
【问题描述】:

我正在尝试使用 renderpdf grails 插件渲染 PDF, 但是他们的文档很短。

我在我的 gsp 视图/文件中创建了一个按钮

<button type="button">PDF Me!</button>

ByteArrayOutputStream bytes = pdfRenderingService.render(template: "/pdfs/report", model: [data: data])

在绑定图像的视图中

<rendering:inlinePng bytes="${imageBytes}" class="some-class" />

模型数据是 domainInstance,我如何将按钮与这个 renderpdf 连接起来?

也许我应该更多地指定我的代码

def invoice ={
    def vermittlungInstance = Vermittlung.get(params.id)


    def aa = vermittlungInstance.lieferungen.id
    def lieferungInstance = Lieferung.get(aa)

    def bb = lieferungInstance.packete.id // .id
    def packetInstance = Packet.findAllByIdInList(bb)

    if (!vermittlungInstance & !lieferungInstance) {
        flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'vermittlung.label', default: 'Vermittlung'), params.id])}"
        redirect(action: "list")
    }
    else {
        if(vermittlungInstance.rechnungen.id!=null || vermittlungInstance.lieferungen.id!=null || lieferungInstance.packete.id!=null ){
            def a = vermittlungInstance.rechnungen.id
            def rechnungList = Rechnung.findById(a)

            def b = vermittlungInstance.lieferungen.id
            def lieferungList = Lieferung.findById(b)

            def c = lieferungInstance.packete.id
            //println c
            def packetList = Packet.findAllByIdInList(c)//findById(c)

            def d = packetInstance.artikel.id//id
            def artikelList = Artikel.findAllByIdInList(d)//findById(d)

            def e = lieferungInstance.adressen.id
            def adresseList = Adresse.findById(e)

            [vermittlungInstance: vermittlungInstance,
                    rechnungInstanceList:rechnungList,
                    lieferungInstanceList:lieferungList,
                    packetInstanceList: packetList,
                    artikelInstanceList: artikelList,
                    adresseInstanceList: adresseList
            ]



            //System.out.println(c)

        }

        else{

            def rechnungList = Rechnung.all
            def lieferungList = Lieferung.all
            def packetList = Packet.all
            def artikelList = Artikel.all
            def adresseList = Adresse.all

            [vermittlungInstance: vermittlungInstance,
                    rechnungInstanceList:rechnungList,
                    lieferungInstanceList:lieferungList,
                    packetInstanceList: packetList,
                    artikelInstanceList: artikelList,
                    adresseInstanceList: adresseList
            ]
        }



    }

}

这是我在控制器中的定义,我试图将这个 renderpdf 放在很多地方,但它不会呈现页面,实际上我正在更改 html(浏览器)中的一些值,所以它应该在 html 中呈现。

控制器似乎是一个错误的地方来渲染pdf而不是,但是.gsp没有渲染功能

谢谢

【问题讨论】:

    标签: pdf grails button render connect


    【解决方案1】:

    添加一个新操作,生成发票的 pdf 版本并从您的视图中链接它们。

    这是你的链接:

    <g:link action="downloadInvoice" id="${yourInvoiceID}">Download invoice</g:link>
    

    在您的控件中添加以下内容:

    def downloadInvoice = {
        def invoice = Invoice.get(params.id) //replace with your logic
    
       renderPdf(template: '/templates/pdf/invoice', model: [invoice: invoice], filename: "yourTitle")
    } 
    

    您的发票模板是一个简单的 gsp 视图,您可以在其中放置所有 HTML(包括图像)和 CSS:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
        <head>
            <title>Invoice</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <link rel="stylesheet" href="${resource(dir:'css',file:'your.css')}" />        
        </head>
        <body>
            <img src="${resource(dir:'images',file:'invoiceLogo.png')}" />
            <h1>Invoice: ${invoice.id}</h1>
             .
             .
             .
        </body>
    </html>    
    

    希望该示例对您有所帮助!

    【讨论】:

    • 啊,这行得通,但它解决了我的部分问题:D 哈哈,现在发票是 pdf 格式,但所有输入文本都没有呈现哈哈。非常感谢
    【解决方案2】:

    如何给这个插件添加 unicode 字体?? unicode 字符不会显示在呈现的 pdf 中。生成的 pdf 包含代替 unicode 字符的空格,尽管它们显示在其他 gsp 页面中。后来我尝试了下面的CSS。但没用。

    @font-face {
      font-family: 'Ubuntu';
      font-style: normal;
      font-weight: 400;
      src:url(http://themes.googleusercontent.com/static/fonts/ubuntu/v4/_xyN3apAT_yRRDeqB3sPRg.woff) format('woff');
      -fs-pdf-font-embed: embed;
      -fs-pdf-font-encoding: UTF-8;
    }
    
    body pre{
    font-size: 14px;
    font-family: 'Ubuntu', Helvetica, Arial, sans-serif;
    }
    

    谢谢,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      相关资源
      最近更新 更多