Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Html到Pdf呈现程序Java.io.IOException:流关闭并冻结_Java_Pdf - Fatal编程技术网

Java Html到Pdf呈现程序Java.io.IOException:流关闭并冻结

Java Html到Pdf呈现程序Java.io.IOException:流关闭并冻结,java,pdf,Java,Pdf,我有一个Java渲染器类,它使用飞碟库将HTML文档转换为pdf文件 public static void openPdf(String renderedHtml) { /* save file inside tmp folder */ boolean fileCorrectlySaved = false; File outputFile = null; try { /*

我有一个Java渲染器类,它使用飞碟库将HTML文档转换为pdf文件

public static void openPdf(String renderedHtml)
    {
        /* save file inside tmp folder */
        boolean fileCorrectlySaved = false;
        File outputFile = null;

        try
        {
            /*
             * All below is to set off any xml validity checking off, otherwise parse function takes almost 1 minute!
             */
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
            // parse the markup into an xml Document
            DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
            //Document doc = builder.parse(new StringBufferInputStream(stringBuilder.toString()));
            Document doc = builder.parse(new ByteArrayInputStream(renderedHtml.getBytes("UTF-8")));

            ITextRenderer renderer = new ITextRenderer();
            CreationListener listener = new CreationListener();
            listener.parseMetaTags(doc);
            renderer.setListener(listener);
            renderer.setDocument(doc, null);

            outputFile = File.createTempFile("out_print", ".pdf");
            OutputStream outputStream = new FileOutputStream(outputFile);
            renderer.layout();
            renderer.createPDF(outputStream);
            outputStream.close();
            fileCorrectlySaved = true;
        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null, e.toString());
        }
 [...]
}
它可以正常工作并正确显示pdf文件,但每次都会记录错误:

java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    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:1798)
    at org.xhtmlrenderer.css.parser.CSSParser.la(CSSParser.java:1810)
    at org.xhtmlrenderer.css.parser.CSSParser.stylesheet(CSSParser.java:159)
    at org.xhtmlrenderer.css.parser.CSSParser.parseStylesheet(CSSParser.java:89)
    at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:78)
    at org.xhtmlrenderer.context.StylesheetFactoryImpl.parse(StylesheetFactoryImpl.java:95)
    at org.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)
    at Test.gui.renderer.Renderer.openPdf(Renderer.java:267)
生成错误的线路就是调用该线路的线路

  renderer.setDocument(doc, null);
接下来的情况是,有时整个操作系统会冻结几秒钟(鼠标移动所有窗口都会冻结)


我试图更改代码以避免StreamClosed异常,但到目前为止没有结果。

错误是在计算机冻结后引发的?可能尝试增加VM的可用内存。

我遇到了类似的问题,发现当URL在https上运行时,我需要将证书导入到“jre/lib/security/cacerts”JVM密钥库中

keytool -import -alias <alias_name_here> -keystore ../lib/security/cacerts -file <path_to_public.cer>
keytool-import-alias-keystore../lib/security/cacerts-file

那么这不应该是内存问题。您是否尝试过从
renderer.setDocument(doc,null)中删除null并替换为
renderer.setDocument(doc)?您可以查看您发布的关于如何向pdf添加元数据的链接。我的代码与此无关。。。