Java HTML到PDF转换-“;Can';t加载XML资源";错误
我正在尝试使用飞碟和iText将严格的XHTML转换为PDF。我已经验证了XHTML以及输入和输出文件的路径是精确的。我根本不知道为什么这会在renderer.setDocument(“file:/c:/example/First.html”)行抛出异常 我的班级:Java HTML到PDF转换-“;Can';t加载XML资源";错误,java,xhtml,itext,flying-saucer,Java,Xhtml,Itext,Flying Saucer,我正在尝试使用飞碟和iText将严格的XHTML转换为PDF。我已经验证了XHTML以及输入和输出文件的路径是精确的。我根本不知道为什么这会在renderer.setDocument(“file:/c:/example/First.html”)行抛出异常 我的班级: package flyingsaucerpdf; import java.io.*; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagi
package flyingsaucerpdf;
import java.io.*;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.DocumentException;
public class FirstDoc {
public static void main(String[] args) throws IOException, DocumentException
{
String outputFile = "results/firstdoc.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
try
{
renderer.setDocument("file:/c:/example/First.html");
}
catch( Exception e )
{
System.out.println("Me not create file. Error:"+e.getMessage());
}
renderer.layout();
renderer.createPDF(os);
os.close();
}
}
我的例外:
错误:“”我无法创建文件。错误:无法加载XML资源(使用TRaX transformer)。java.lang.NullPointerException
线程“main”java.lang.NullPointerException中出现异常
在org.xhtmlender.layout.BoxBuilder.createRootBox(BoxBuilder.java:81)上
位于org.xhtmlrenderer.pdf.ITextRenderer.layout(ITextRenderer.java:152)
在flyingsauerpdf.FirstDoc.main(FirstDoc.java:31)
我的XHTML:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
<style type="text/css"> b { color: green; } </style>
</head>
<body>
<p>
<b>Greetings Earthlings!</b>
We've come for your Java.
</p>
</body>
</html>
在此处插入标题
b{颜色:绿色;}
地球人你好!
我们是为你的Java而来的。
有什么帮助吗 您的虚拟机是否联机?渲染器/解析器可能会尝试加载链接资源,如 这是确保您提供的xml(xhtml)正确所必需的 在Servlet中,我执行了以下似乎有效的操作(由于服务器没有internet连接,所以在我自己的文件系统中提供了一些在线资源):
这基本上是建立一个DocumentBuilder,然后解析我的文档(它是字符串格式的,由变量html表示)虽然我解决了这个问题(它实际上是一个无效的XHTML),但您的方法更微妙,也更能防止错误。谢谢。你能上传正确的xhtml吗?我遇到了同样的问题
final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
builder.setEntityResolver(new EntityResolver() {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
if (systemId.contains("xhtml1-transitional.dtd")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml1-transitional.dtd"));
} else if (systemId.contains("xhtml-lat1.ent")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml-lat1.ent"));
} else if (systemId.contains("xhtml-symbol.ent")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml-symbol.ent"));
} else if (systemId.contains("xhtml-special.ent")) {
return new InputSource(new FileReader(realPath + "/WEB-INF/dtd/xhtml-special.ent"));
} else {
return null;
}
}
});
final ByteArrayInputStream inputStream = new ByteArrayInputStream(html.getBytes("UTF-8"));
final Document doc = builder.parse(inputStream);
inputStream.close();
final ITextRenderer renderer = new ITextRenderer(26f * 4f / 3f, 26);
renderer.setDocument(doc, request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort());
renderer.layout();