-1

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でレンダリングする必要があります。

コントローラはrenderpdfの場所としては間違っているようですが、.gspのレンダリング機能はありません

ありがとう

4

2 に答える 2

5

請求書の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")
} 

請求書テンプレートは、すべてのHTML(画像を含む)とCSSを配置できる単純なgspビューです。

<!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>    

その例がお役に立てば幸いです。

于 2012-06-15T09:51:50.037 に答える
1

このプラグインにUnicodeフォントを追加する方法は?? Unicode文字はレンダリングされたPDFには表示されません。生成されたPDFには、他のgspページに表示されますが、Unicode文字の代わりに空白が含まれています。後で私は以下の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;
}

ありがとうございました、

于 2013-07-04T10:38:14.263 に答える