渲染图像XmlWorkerHelper(itextpdf)

时间:2015-05-30 11:27:36

标签: itextpdf

请帮帮我。

我在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 ..

你知道如何汉德尔吗?请求帮助!!!

2 个答案:

答案 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/";

}
});