请帮帮我。
我在pdf中渲染图像时遇到问题 im usung itextpdf 5.5.6和itext 5.5.6
我的代码是:
.
.
.
URL url = new URL("http://some.html");
URLConnection uc = url.openConnection();
InputStreamReader inputStreamReader = new InputStreamReader(uc.getInputStream());
XMLWorkerHelper worker = XMLWorkerHelper.getInstance();
worker.parseXHtml(pdrwriter, doc, inputStreamReader);
doc.close();
//close the writer
pdrwriter.close();
我的HTML有:
<table><tr><td><img src="http://mysite/logo.jpg" /></td</tr></table>
我得到错误: 找到无效的嵌套标签td,预期结束标签img。
我试过了
<table><tr><td><img src="http://mysite/logo.jpg"></img</td</tr></table>
sam error ..
你知道如何汉德尔吗?请求帮助!!!答案 0 :(得分:1)
这是错误的:
<table><tr><td><img src="http://mysite/logo.jpg" /></td</tr></table>
应该是:
<table><tr><td><img src="http://mysite/logo.jpg" /></td></tr></table>
这也是错误的:
<table><tr><td><img src="http://mysite/logo.jpg"></img</td</tr></table>
应该是:
<table><tr><td><img src="http://mysite/logo.jpg"></img></td></tr></table>
答案 1 :(得分:1)
如果您正在解析的HTML文件存储在与工作目录不同的目录中,则iText无法创建Image对象。我们必须提供ImageProvider接口的实现,该接口告诉iText如果遇到img标记该怎么做。该界面具有以下方法。
Image retrieve(final String src);
String getImageRootPath();
void store(String src, Image img);
void reset();
您可以编写自己的类来实现这四种方法,也可以创建AbstractImageProvider的子类。优选做后者。
XML Worker将使用AbstractImageProvider类的store()方法来缓存Map中遇到的所有Image对象。当为具有相同src的图像调用retrieve()方法时,将重用这些对象。如果您不缓存图像,您的PDF将会膨胀。相同的图像位和字节将不止一次写入PDF。 reset()方法清除缓存;在克隆ImageProvider时使用它。最后,没有实现getImageRootPath()方法。您必须自己实现它,如以下代码段
中所述htmlContext.setImageProvider(new AbstractImageProvider() {
public String getImageRootPath() {
return "src/main/resources/html/";
}
});