Я конвертирую HTML-форму в PDF с помощью Flying-Saucer, но вывод PDF не имеет полного форматирования (применяется CSS и Bootstrap). Он также обрезает боковую часть страницы.
Форма, отображаемая в HTML, выглядит следующим образом:
Но PDF выглядит так:
Сверху это выглядит так, как будто получаются панели с закругленными краями, но без цветов, поэтому я предполагаю, что ему не хватает css.
HTML использует внешний css-файл, boostrap css и загрузочную тему css. Поэтому ссылки на CSS в html:
<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">
Java для создания PDF с помощью Flying Saucer:
@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);
FileOutputStream os = null;
//String fileName = UUID.randomUUID().toString();
String fileName = "Assessment.pdf";
try {
final File outputFile = File.createTempFile(fileName, ".pdf");
os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.getSharedContext().getUserAgentCallback().setBaseURL("/resources/static/css");
renderer.setDocumentFromString(processedHtml);
renderer.layout();
renderer.createPDF(os, false);
renderer.finishPDF();
Я не совсем уверен, что этот путь правильный:
renderer.getSharedContext().getUserAgentCallback().setBaseURL("/resources/static/css");
Наконец структура проекта выглядит так: