2012-07-24 68 views
1

我已經爲Flying Saucer R8設置了一個測試環境,並且正在測試從模板和數據構建PDF的過程。我正在使用自定義的UserAgentCallback從文件系統本地讀取外部js/css和圖像。將下面的自定義UserAgentCallback當問題發生:Flying Saucer在處理自定義圖像時發生異常UserAgentCallback

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或background-image屬性我得到的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!

幫助我的是用ITextUserAgent而不是NaiveUserAgent擴展這個類。 (ITextUserAgent擴展了NaiveUserAgent)。