Статические изображения не отображаются с летающей тарелкой и тимелистом для созданных PDF-файлов - PullRequest
0 голосов
/ 06 мая 2018

Я использую thymeleaf в качестве шаблона для отображения XHTML в HTML и летающую тарелку для создания PDF-файла.

Теперь мне не удалось отобразить мои статические изображения, расположенные в / src / main / resources / внутри y сгенерированного PDF-файла. Сам файл будет отображаться нормально, только изображения исчезают.

Даже другие места, такие как / src / main / resources / static или / src / main / resources / public, не помогли.

Мой HTML / XHTML выглядит так:

<img src="images/logo_black.png"></img>
        <img src="/images/logo_black.png"></img>
        <img alt="mastercard" th:src="@{classpath:static/images/logo_black.png}" />

        <div data-src="images/logo_black.png"></div>
        <div data-src="/images/logo_black.png"></div>
        <div data-src="@{classpath:static/images/logo_black.png}"></div>

ни один из них не работает должным образом.

Изображения видны локальному хосту: 8048 / logo_black.png

Я не хочу ссылаться на изображения с полным URL ( http: //...)

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Вы можете визуализировать изображение с помощью базы 64. Вы просто конвертируете свое изображение на базе 64, и оно будет отображаться на вашей веб-странице, а также в мобильном представлении. Теги:

<img th:src="@{data:image/png ;base64,your base 64}"/>
0 голосов
/ 01 ноября 2018

Вы можете включить ресурсы с любого URL (из Интернета или из вашей файловой системы). В любом случае, есть несколько этапов:

При генерации HTML из шаблона Thymeleaf вы можете использовать

  • @{/some/url} для разрешения пути относительно вашего веб-контекста (при условии, что у вас есть веб-контекст) или
  • @{classpath:/some/url} с просто оставит URL как classpath:/some/url, или
  • просто константа строкового значения или значение из переменной (${var}), не имеет значения, является ли это абсолютный URL https://some/url или относительным, Thymleaf оставит их без изменений в результирующем HTML.

Прежде чем передать HTML-файл Flying Saucer, убедитесь, что URL-адреса верны. Затем Flying Saucer обработает все URL с UserAgentCallback, по умолчанию ITextUserAgent.

Соответствующие методы в UserAgentCallBack: resolveURI и setBaseURL.

В методе resolveURI по умолчанию ITextUserAgent (унаследованном от NaiveUserAgent) происходит странная логика. Если baseURL равно нулю, он попытается установить его, поэтому лучше всегда устанавливать его самостоятельно. У меня были лучшие результаты с переопределением resolveURI, следующего достаточно для сохранения абсолютных URL и разрешения относительных URL относительно baseURL:

@Override
public String resolveURI(String uri) {
   if (URI(uri).isAbsolute())
       return uri;
   else
       return Paths.get(getBaseURL(), uri).toUri().toString();
}

Наконец, для разрешения протокола classpath:, вам необходимо определить URLStreamHandler, если он еще не определен (например, встроенный Tomcat of Spring Boot уже поддерживает это) ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...