FlyingSaucer renderer.setDocument 抛出“流已关闭”异常

2024-07-01

我在使用找到的简单示例创建 PDF 时遇到问题here http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html#an-introduction-to-flying-saucer-and-itext。这是我第一次尝试使用它,我尝试了一些方法并进行了大量搜索,但尚未找到生成错误的原因。该错误源于renderer.setDocument(url);线。如果有人有任何想法、建议或替代方案,我们将不胜感激。

package flyingsaucerpdf;

import java.io.*;
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer;

public class FirstDoc {

    public static void main(String[] args) 
            throws IOException, DocumentException {
        String inputFile = "samples/firstdoc.xhtml";
        String url = new File(inputFile).toURI().toURL().toString();
        String outputFile = "firstdoc.pdf";
        OutputStream os = new FileOutputStream(outputFile);

        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(url);
        renderer.layout();
        renderer.createPDF(os);

        os.close();
    }
}

控制台打印出以下错误。

ERROR:  'Stream closed'
org.xhtmlrenderer.util.XRRuntimeException: Can't load the XML resource (using TRaX transformer). java.io.IOException: Stream closed
    at org.xhtmlrenderer.resource.XMLResource$XMLResourceBuilder.createXMLResource(XMLResource.java:191)
    at org.xhtmlrenderer.resource.XMLResource.load(XMLResource.java:71)
    at org.xhtmlrenderer.swing.NaiveUserAgent.getXMLResource(NaiveUserAgent.java:211)
    at org.xhtmlrenderer.pdf.ITextRenderer.loadDocument(ITextRenderer.java:134)
    at org.xhtmlrenderer.pdf.ITextRenderer.setDocument(ITextRenderer.java:138)
    at com.asiaprice.service.email.template.CompletePdf.createpdf(CompletePdf.java:28)

如果 xhtml 引用渲染器无法找到的文件(例如 css 文件),则 renderer.setDocument 可能会引发“流已关闭”异常。

这种症状与原始海报并不完全匹配,因为错误消息中没有出现“无法加载 XML 资源”,我将其包含在内是为了那些通过 google 来到这里的人的利益。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FlyingSaucer renderer.setDocument 抛出“流已关闭”异常 的相关文章

随机推荐