2012-06-15 21 views
-1

我試圖使用renderpdf grails插件呈現PDF, 但他們的文檔很短。grails renderpdf插件,它是如何工作的?

我在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

添加生成發票的PDF版本中新的動作,並從它們聯繫起來你的看法。

這裏是你的鏈接:

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

在你controlle添加以下內容:

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>  

希望這個例子有幫助!

+0

啊,這個工作,但它解決我的問題的一部分:d哈哈,現在發票是PDF,但所有的inputtexts不會呈現哈哈。非常感謝你 – user1451077

1

如何將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; 
} 

謝謝

相關問題