在属性内容中使用CSS3函数target-counter时,iText 7不起作用

v7pvogib  于 2023-01-03  发布在  CSS3
关注(0)|答案(2)|浏览(295)

我是iText 7的新手。我正在尝试从动态HTML字符串创建PDF。到目前为止,我已经能够使用HtmlConvert.ConvertToPdf()创建PDF。但问题是,我需要在文档开始有一个包含章节和页码的目录。为了做到这一点,我在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>

最后,我的Sping 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。但是目录中的章节没有页数。日志返回**“内容属性target-counter无效或使用了不支持的函数。"**
我看到了CssContentPropertyResolver.java文件,我意识到代码没有处理CSS函数“target-counter”。所以,我的问题是:还有一种方法可以做到这一点,也许创建自定义CSS应用程序,如this tutorial?或者其他方法?如果没有,有人知道任何其他库,我可以使用,而不是iTextPdf?

bz4sfanl

bz4sfanl1#

这适用于最新版本的html 2 pdf库-当然是3.0.3及以上版本。

rryofs0p

rryofs0p2#

我也遇到了同样的问题,只是leader()函数使行无效。尝试删除leader(),看看是否能得到页码。我正在尝试找到另一种方法来创建前导点。

相关问题