Я хочу, чтобы IText7 конвертировал HTML в PDF с помощью css, но не могу правильно настроить BaseURI.
Часть css является внешним файлом, часть - через CDN.
<link rel="stylesheet" type="text/css" href="/css/assessment.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/flatly/bootstrap.min.css">
Моя структура из каталога src:
| +---resources
| | \---main
| | | application.properties
| | |
| | +---static
| | | +---css
| | | | assessment.css
| | | |
| | | \---js
| | | assessment.js
| | |
| | \---templates
| | assessment.html
| | finished.html
| | greeting.html
| | output.html
поэтому я попытался:
public static final String BASEURI = "src/resources/main/static"
но я получаю страницы с ошибками стека:
2018-09-04 12:02:17.881 ERROR 11008 --- [nio-8080-exec-5] c.i.s.r.resource.ResourceResolver : Unable to retrieve stream with given base URI (file:/C:/Users/AlGrant/IdeaProjects/needsassessment/) and source path (../fonts/glyphicons-halflings-regular.woff2)
и
2018-09-04 12:02:17.887 ERROR 11008 --- [nio-8080-exec-5] c.i.h.attach.impl.DefaultHtmlProcessor : Unable to retrieve font:
@font-face {
font-family: 'Glyphicons Halflings'
src: url('../fonts/glyphicons-halflings-regular.eot')
src: url('../fonts/glyphicons-halflings-regular.eot?#iefix')
format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')
и
java.io.FileNotFoundException: C:\Users\AlGrant\IdeaProjects\assessment\css\assessment.css (The system cannot find the path specified)
и
2018-09-04 13:34:16.922 ERROR 16808 --- [nio-8080-exec-4] c.i.s.css.parse.CssRuleSetParser : Error while parsing css selector: .was-validated .custom-control-input:valid~.custom-control-label::before
java.lang.IllegalArgumentException: Unsupported pseudo css selector: :valid
Мой класс Java выглядит так:
public static final String BASEURI = "src/main/resources/static";
@Qualifier("templateEngine")
@Autowired
private TemplateEngine templateEngine;
public void createPdf(String templateName, Map map) throws Exception {
Assert.notNull(templateName, "The templateName can not be null");
Context ctx = new Context();
if (map != null) {
Iterator itMap = map.entrySet().iterator();
while (itMap.hasNext()) {
Map.Entry pair = (Map.Entry) itMap.next();
ctx.setVariable(pair.getKey().toString(), pair.getValue());
}
}
String processedHtml = templateEngine.process(templateName, ctx);
try {
PdfWriter writer = new PdfWriter("C:\\tmp\\assessment.pdf");
PdfDocument pdfDoc = new PdfDocument(writer);
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.convertToPdf(processedHtml, pdfDoc, converterProperties);
System.out.println("PDF created successfully");
}
Все ли ресурсы должны быть локальными? В документах iText говорится, что BaseURI может быть внешним файлом или онлайн-файлом (CDN?), Но не показывает, как включить CDN и локальный CSS?