Вы можете включить ресурсы с любого 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 уже поддерживает это) ,