Я очень новичок в iText7.Я пытаюсь создать PDF-файл из динамической строки HTML.До сих пор я был в состоянии создать PDF, используя HtmlConverter.ConvertToPdf ().Но проблема в том, что мне нужно иметь оглавление с главами и номерами страниц в начале документа.Для этого я написал в своем CSS-файле:
@page {
margin: 40mm 17mm 17mm 17mm;
size: A4 portrait;
@top-center {
content: element(header);
width: 100%;
}
@bottom-right-corner {
content: counter(page);
}
}
a::after {
content: leader('.') target-counter(attr(href), page)
}
И написал в своем HTML-файле:
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Good Thymes Virtual Grocery</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" th:href="@{${baseUrl} + '/static/css/relatorio_fiscalizacao.css'}"/>
</head>
<body>
<h1>ÍNDICE</h1>
<ul style="page-break-after: always;">
<li><a href="#ch1">STAFF</a></li>
<li><a href="#ch2">OPERATION DATA</a></li>
</ul>
<h1 id="ch1" class="chapter">STAFF</h1>
<p style="page-break-after: always;">....</p>
<h1 id="ch3" class="chapter">OPERATION DATA</h1>
<p style="page-break-after: always;">....</p>
</body>
</html>
И, наконец, у меня есть компонент в приложении Spring Boot:
@Component
public class PdfGeneratorUtil {
@Autowired
private TemplateEngine templateEngine;
@Autowired
ServletContext servletContext;
@Autowired
private ApplicationContext context;
@Value("${baseUrl}")
private String baseUrl;
public ByteArrayOutputStream createPdf(String templateName, Map<String, Object> map, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
Assert.notNull(templateName, "The templateName can not be null");
System.out.println(baseUrl);
map.put("baseUrl", baseUrl);
IWebContext ctx = new SpringWebContext(request, response, servletContext, LocaleContextHolder.getLocale(), map, context);
String processedHtml = templateEngine.process(templateName, ctx);
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
ConverterProperties converterProperties = new ConverterProperties();
HtmlConverter.convertToPdf(processedHtml, os, converterProperties);
System.out.println("PDF created successfully");
}
finally {
if (os != null) {
try {
os.close();
} catch (IOException e) { /*ignore*/ }
}
}
return os;
}
}
iText преобразуется в PDF отлично.Но главы из таблицы содержания приводятся без количества страниц.И Log возвращает «Целевой счетчик свойства содержимого либо недействителен, либо использует неподдерживаемую функцию.»
Я увидел файл CssContentPropertyResolver.java и понял, что код необработать функцию CSS "target-counter".Итак, мой вопрос: есть другой способ сделать это, возможно, создать собственные CSS-аппликаторы, такие как , это руководство ?Или, может быть, по-другому?Если нет, кто-нибудь знает любую другую библиотеку, которую я мог бы использовать вместо iTextPdf?