2013-05-30 82 views
2

当使用飞碟转换为XHTML,以PDF,我发现了以下异常:飞碟和CSS

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服务器上创建了一个keystore和证书,并确保ssl.conf指向它们(redhat)。 https似乎有问题,但不知道如何解决这个问题。有没有人遇到过这个问题?

感谢, --Abdul

+0

没有一些代码,很难说出问题出在哪里。 – ollo

+0

我不确定要发布哪个代码,因为它看起来像这是一个已知问题,但没有人有解决方案。我能够直接通过链接查看我的.ear文件中的css文件,但是当我渲染PDF时,它无法获取css文件(即使它包含在内),PDF的样式也不显示。这在一个除了一个之外的不同环境中工作正常这就是为什么它看起来像一个环境相关的问题而不是代码。 –

+0

您是否将CSS路径作为URI传递?我也有过这个问题,但我想这是由HTML中的语法错误导致的。你可以检查(也许“干净”)你的输入? – ollo

回答

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日志

    公共字符串resolveURI(字符串URI ){ /**/ }

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

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

renderer.setDocumentFromString(generatedHtml, getBaseUrl()); 

而且得到我用我的包膜有效的基本URL:

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

(原来你其实可以访问静态文件在部署战争这个“JNDI:”前缀)