2015-05-30 4 views
1

, пожалуйста, помогите мне.рендеринг изображений XmlWorkerHelper (itextpdf)

У меня есть проблемы с рендеринга изображения в PDF им usung itextpdf 5.5.6 и 5.5.6 IText

мой код:

. 
    . 
    . 


    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> 

ошибка сэм ..

ли Вы знаете, как Генделя это? Thx за помощь !!!

ответ

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> 
+0

Хех, я ошибся в своем вопросе, но нет, я только что нажал неправильный ключ .. :) –

1

Если файл HTML, обрабатываемый вами, хранится в каталоге, отличном от рабочего каталога, iText не сможет создавать объекты изображения. Мы должны предоставить реализацию интерфейса ImageProvider, который сообщает iText, что делать, если встречается тег img. Этот интерфейс имеет следующий метод.

Image retrieve(final String src); 
String getImageRootPath(); 
void store(String src, Image img); 
void reset(); 

Вы можете написать свой собственный класс, реализующий эти четыре метода, или вы можете подклассифицировать AbstractImageProvider. Предпочтительно использовать последний.

XML-работник будет использовать метод store() класса AbstractImageProvider для кэширования всех объектов Image, встречающихся на карте. Эти объекты будут повторно использоваться, когда метод retrieve() вызывается для изображения с тем же src. Если вы не кэшируете изображения, ваш PDF будет раздутым. Один и тот же бит и байты изображения будут записываться в PDF более одного раза. Метод reset() очищает кеш; он используется при клонировании ImageProvider. Наконец, метод getImageRootPath() не реализован. Вы должны выполнить его самостоятельно, как это делается в следующем фрагменте

htmlContext.setImageProvider(new AbstractImageProvider() { 

public String getImageRootPath() { 

    return "src/main/resources/html/"; 

} 
}); 
Смежные вопросы