2

空飛ぶ円盤を使用して 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 がそれらを指していることを確認しました (redhat)。 . おそらくhttpsに問題があるようですが、これに対処する方法がわかりません。以前にこの問題を経験した人はいますか?

ありがとう、 -- アブドゥル

4

1 に答える 1

4

手遅れですが、他の誰かが役に立つと思うかもしれません。私の問題を解決した方法は次のとおりです。

  1. ロギングをオンにしました (フライングソーサーの java.util.logging 出力をオンにします)

    System.getProperties().setProperty("xr.util-logging.loggingEnabled", "true");
    XRLog.setLoggingEnabled(true);
    
  2. org.xhtmlrenderer.swing.NaiveUserAgent ログを読んで

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

(リモートデバッグ/JBoss をローカルで実行できる場合 - そこにブレークポイントを配置すると、すべてのフォント/リソース/CSS の読み込みが表示されます)

私の場合、 baseURL がレンダラーにとって間違っていることがわかりました。ドキュメントの解析中にレンダラーに渡すことができます。

renderer.setDocumentFromString(generatedHtml, getBaseUrl());

そして、私が使用したenvで有効なbaseURLを取得するには:

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

(実際には、この「jndi:」プレフィックスを使用して、デプロイされた war の静的ファイルにアクセスできることが判明しました。)

于 2016-01-21T13:17:52.393 に答える