Летающая тарелка (xhtmlrenderer) запрашивает изображение 4 раза - PullRequest
0 голосов
/ 30 июля 2010

в моем xhtml у меня есть следующее:

...
<img src="myImage.jpg" />
...

, и я вывожу так:

ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(XMLResource.load(in).getDocument(), url);
renderer.layout();
renderer.createPDF(out);

полученный PDF-файл, как и ожидалось, однако я заметил, что изображение (котороевключается только один раз в xhtml и отрисовывается только один раз) запрашивается 4 раза.

Теперь, кроме очевидной проблемы с загрузкой дополнительных данных, это не будет проблемой для большинства людей.

однако мне нужно реализовать кэш изображений с истекшим сроком использования для динамических изображений, и это становится настоящей головной болью ...

почему летающей тарелке нужно сделать 4 запроса на изображение, если онотолько делает это один раз?

Ответы [ 2 ]

1 голос
/ 05 октября 2013

Это исправлено в последней версии FlyingSaucer.Я подтвердил себя с 9.0.3, хотя я полагаю, что несколько минорных версий до этого также содержат исправление.

0 голосов
/ 30 июля 2010

Я только что просмотрел код, и здесь нет решения (без переписывания itext и летающей тарелки).

при первом открытии потока просто проверить, можно ли его открыть, данные не читаются.

второй раз - чтение заголовка с помощью itext для определения типа файла, считываются только первые 4 байта.

третий раз, когда itext определяет размеры изображения, которое кажется, - я не уверен, но я не думаю, что здесь читают также много, кроме заголовков.

последнее чтение для рендеринга изображения.

так что влияние загрузки невелико, 4 URL-соединения - да, но весь поток передается только один раз

и мой кэш «истекает при использовании» вместо этого должен быть «истекает при 4-м использовании».

...