2012-07-24 1 views
1

Flying Saucer R8에 대한 테스트 환경을 설정했으며 템플릿과 데이터에서 PDF 빌드를 테스트하고 있습니다. 나는 사용자 지정 UserAgentCallback을 사용하여 외부 js/css 및 이미지를 파일 시스템에서 로컬로 읽습니다. 다음 사용자 정의 UserAgentCallback을 도입 할 때 문제가 발생했습니다 :사용자 지정 UserAgentCallback에 대한 이미지를 처리 ​​할 때 Flying Saucer에서 예외가 발생했습니다.

package support; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 

import org.xhtmlrenderer.swing.NaiveUserAgent; 

public class FileUserAgent extends NaiveUserAgent { 
    @Override 
    public String resolveURI(String uri) { 
     URL url = null; 
     String path = null; 
     try { 
      url = new URL(uri); 
      path = url.getPath(); 
     } catch (MalformedURLException e) { 
      // only path present 
      path = uri; 
     } 
     if (path.charAt(0) == '/') { 
      path = path.substring(1, path.length()); 
     } 
     return path; 
    } 

    @Override 
    protected InputStream resolveAndOpenStream(String filepath) { 
     InputStream is = null; 
     try { 
      File file = new File(filepath); 
      is = new FileInputStream(file); 
     } catch (Exception e) { 
      System.out.print("an error occured when reading resource: " + e.getMessage()); 
     } 
     return is; 
    } 
} 

UserAgentCallback 아무 문제없이 CSS를 읽을 수 있지만 이미지를 읽을 때 하나 SRC 또는 배경 이미지 속성에서 나는 followng 예외를 얻을 :

java.lang.ClassCastException: org.xhtmlrenderer.swing.AWTFSImage$OldAWTFSImage cannot be cast to org.xhtmlrenderer.pdf.ITextFSImage 
    at org.xhtmlrenderer.pdf.ITextOutputDevice.drawImage(ITextOutputDevice.java:761) 
    at org.xhtmlrenderer.render.AbstractOutputDevice.paintTiles(AbstractOutputDevice.java:300) 
    at org.xhtmlrenderer.render.AbstractOutputDevice.paintBackground0(AbstractOutputDevice.java:245) 
    at org.xhtmlrenderer.render.AbstractOutputDevice.paintBackground(AbstractOutputDevice.java:191) 
    at org.xhtmlrenderer.pdf.ITextOutputDevice.paintBackground(ITextOutputDevice.java:187) 
    at org.xhtmlrenderer.render.Box.paintBackground(Box.java:436) 
    at org.xhtmlrenderer.layout.Layer.paintBackgroundsAndBorders(Layer.java:243) 
    at org.xhtmlrenderer.layout.Layer.paint(Layer.java:329) 
    at org.xhtmlrenderer.pdf.ITextRenderer.paintPage(ITextRenderer.java:384) 
    at org.xhtmlrenderer.pdf.ITextRenderer.writePDF(ITextRenderer.java:348) 
    at org.xhtmlrenderer.pdf.ITextRenderer.createPDF(ITextRenderer.java:315) 
    at org.xhtmlrenderer.pdf.ITextRenderer.createPDF(ITextRenderer.java:246) 

답변

0

비행 접시 포럼에서 읽은 바로는 올바른 ImageResource를 반환해야합니다!

나를 돕는 것이 NaiveUserAgent 대신 ITextUserAgent를 사용하여 클래스를 확장하는 것이 었습니다. (ITextUserAgent는 NaiveUserAgent를 확장합니다.)