2017-04-20 1 views
1

이제 렌더 플러그인을 설정 했으므로 멋진 PDF 파일을 얻을 수 있지만 이미지를 내 테이블의 몇 열에 넣어야합니다. 이러한 이미지는 인스턴스의 데이터 필드에 의해 조건부로 선택됩니다.Grails 렌더링 플러그인이 이미지를 렌더링하지 않습니다.

나는 올바른 장소라고 생각하므로 assets/images 폴더에 이미지가 있습니다.

렌더러가 PDF를 만들 때 사용할 템플릿에서 다음 GSP 라인을 사용합니다.

<td><g:if test="${od?.priceFSC > 0.1}"><asset:image src="checkOut16x16.png" width="16" height="16"/></g:if></td> 

HTML보기로 이미지가 완벽하게 인쇄되지만 PDF를 렌더링 할 때 누락되었습니다.

나는 문서를 확인하고 예제의 코드 시도 :

을 컨트롤러 :

def createPDF() { 
    def file = new File("asets/CheckOut16x16.png") 
    def OfferHeader offerHeader = OfferHeader.get(params.id) 
[offerHeader: offerHeader]) 
    renderPdf(template: "/stocknote/Stocknote", model: [offerHeader: offerHeader,imageBytes: file.bytes], filename: "Stocknote-"+params.id+".pdf") 
} 

뷰 :

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

내가 여기 상태의 관심이 없었어요 단지 그것이 인쇄 될지 알고 싶었지만보기가 엉망이되어서가 아니기 때문이 아닙니다 :

URI 
    /stocknote/editStocknote/32 
Class 
    org.grails.taglib.GrailsTagException 
Message 
    Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/stocknote/editStocknote.gsp:32] [views/stocknote/_StocknoteDetail.gsp:3] 'bytes' is required 
Caused by 
    [views/stocknote/editStocknote.gsp:32] [views/stocknote/_StocknoteDetail.gsp:3] 'bytes' is required 

잘못 입력했는지 모르겠지만 "Bytes is required"라는 오류 메시지가 표시되지만 바이트가 "$ {imageBytes}"입니다. 누군가 도움이나 설명을 줄 수 있기를 바랍니다. 파일의 경로가 잘못처럼

답변

1

는 소리, 시도 :

컨트롤러 : 그대로

def assetResourceLocator 

def createPDF() { 
    def file = assetResourceLocator.findAssetForURI('CheckOut16x16.png') 
    def OfferHeader offerHeader = OfferHeader.get(params.id) 
    [offerHeader: offerHeader]) 
    renderPdf(template: "/stocknote/Stocknote", model: [offerHeader: offerHeader,imageBytes: file.getByteArray()], filename: "Stocknote-"+params.id+".pdf") 
} 

보기 괜찮을한다.

+0

저도 효과가 있었지만 실수했습니다> _ <. PDF를 만드는 데 사용되는 템플릿은 보고서를 실행하는 뷰에서도 사용됩니다. 따라서 뷰가 렌더링 될 때 오류가 발생했습니다. 렌더링 전에 이미지가 템플릿에 있는지 확인해야했습니다. – larand

0

큰 실수를했습니다.> _ <, PDF를 만드는 데 사용 된 템플릿은 PDF를 주문한 곳의 뷰에서도 사용되며 그 당시 이미지는 컨트롤러에 의해 작성되지 않았습니다. 그래서 렌더링하기 전에 이미지 값을 확인해야했습니다.

<g:if test="${imageBytes!= null}"> <rendering:inlinePng bytes="${imageBytes}" /></g:if> 

필요한 사항.

관련 문제