飞碟和CSS

时间:2013-05-30 17:45:03

标签: css ssl https keystore flying-saucer

当使用飞碟将xhtml转换为PDF时,我遇到以下异常:

java.io.IOException: Stream closed
            at  java.io.BufferedInputStream.getInIfOpen(Unknown Source)
            at  java.io.BufferedInputStream.read1(Unknown Source)
            at  java.io.BufferedInputStream.read(Unknown Source)
            at  sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
            at  sun.nio.cs.StreamDecoder.implRead(Unknown Source)
            at  sun.nio.cs.StreamDecoder.read(Unknown Source)
            at  java.io.InputStreamReader.read(Unknown Source)
at org.xhtmlrenderer.css.parser.Lexer.zzRefill(Lexer.java:1634) 
             at org.xhtmlrenderer.css.parser.Lexer.yylex(Lexer.java:1865)
at org.xhtmlrenderer.css.parser.CSSParser.next(CSSParser.java:1778) 
at org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser.java:1790) 
at org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:157) 
at org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:87) 
at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78) 
at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95) 
atorg.xhtmlrenderer.context.StylesheetFactoryImpl.getStylesheet(StylesheetFactoryImpl.java:174) 
at org.xhtmlrenderer.context.StyleReference.readAndParseAll(StyleReference.java:123) 
at org.xhtmlrenderer.context.StyleReference.setDocumentContext(StyleReference.java:107) 
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:175) 
at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:142) 

我能够通过以下链接查看css文件的内容:https://.../file.css我在JBOSS服务器中创建了一个密钥库和证书,并确保ssl.conf指向它们(红帽)。似乎有一个问题可能与https,但不知道如何解决这个问题。有没有人以前遇到过这个问题?

谢谢, --Abdul

1 个答案:

答案 0 :(得分:4)

已经太晚了,但其他人可能觉得它很有用。以下是我解决问题的方法:

  1. 打开记录(Turning on Flying Saucer java.util.logging Output

    System.getProperties().setProperty("xr.util-logging.loggingEnabled", "true");
    XRLog.setLoggingEnabled(true);
    
  2. 阅读org.xhtmlrenderer.swing.NaiveUserAgent日志

    public String resolveURI(String uri){   / ** /   }

  3. (如果你可以远程调试它/在本地运行JBoss - 在那里放一个断点,你就会看到所有的font / resource / css加载)

    在我的情况下,结果是渲染器的baseURL是错误的。您可以在解析文档时将其传递给渲染器。

    renderer.setDocumentFromString(generatedHtml, getBaseUrl());
    

    为了在我的环境中获得有效的baseURL,我已经使用过:

    "jndi:"+servletContext.getResource("/").getPath()
    

    (原来你实际上可以使用这个" jndi:"前缀来访问已部署战争中的静态文件。)