使用找到here的简单示例创建PDF时遇到问题。这是我第一次尝试使用它,我尝试了一些事情和大量搜索,但没有找到错误产生的原因。错误源自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)
答案 0 :(得分:9)
renderer.setDocument可以抛出“Stream closed”异常。
这个症状与原始海报并不完全匹配,因为“无法加载XML资源”没有出现在错误消息中,我将这包括在内,以便通过谷歌来到这里。
答案 1 :(得分:1)
我解决了这个问题,只需更换
renderer.setDocument(url);
与
renderer.setDocument(new File(inputFile));
答案 2 :(得分:1)
String File_To_Convert = "src/file.html";
String url = new File(File_To_Convert).toURI().toURL().toString();
//System.out.println("---"+url);
String HTML_TO_PDF = "ConvertedFile.pdf";
OutputStream os = new FileOutputStream(HTML_TO_PDF);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os) ;
os.close();
System.out.println("done.");
这是正常运行的代码。
大多数人在我的代码中遇到上述问题。
File_To_Convert = "src/file.html";
这里我们必须给出相对路径。
答案 3 :(得分:0)
“samples / firstdoc.xhtml”是教程中的文件吗?它在正确的目录中并且可以访问吗? XHTMLRenderer只接受干净的XHTML代码并且非常严格。如果出现问题,您将获得例外。
在我的一些项目中,我使用JTidy在渲染之前清理源代码。
答案 4 :(得分:0)
这里实际发生的是setDocument(...)
调用执行而renderer
无法打开InputStream
(通常是因为该文件不存在或者没有足够的权限来访问它)。修复方法是使用File
或应用可以访问的实时网址替换该引用。