Table 的内容 java 飞碟?

Table of content java flying saucer?

我使用飞碟创建了一份审计报告,将 HTML 转换为 pdf。而我想在第一页创建一个table的内容来知道titleProduct属于哪个页面?我该怎么做?

<div th:each="productGroup: ${productGroups}">
    <table class="audit-table">
        <thead>
        <tr class="pg-node pg-title">
            <td class="titleProduct" colspan="3">[[${productGroup.getPgNumber()}]] - [[${productGroup.getPgName()}]]</td>
        </tr>
        <tr class="pg-node row">
            <th>BRAND</th>
            <th>MODEL</th>
            <th>FEATURE TEXT</th>
            <th>ARTICLE</th>
        </tr>
        </thead>
        <tbody>
        <th:block th:each="audit: ${productGroup.getPdfAuditColumns()}">
            <tr>
                <td th:text="${audit.getBrand()}"></td>
                <td th:text="${audit.getModel()}"></td>
                <td th:text="${audit.getFeatureText()}"></td>
                <td th:text="${audit.getArticle()}"></td>
            </tr>
        </th:block>
        </tbody>
    </table>
</div

您可以采用将 HTML 代码转换为字符串的方法。然后在 HtmlConverter class 中使用 iText 库的 convertToPdf() 方法,您将能够生成所需的 pdf。

FYR 示例代码:

String HTML = "<h1>Hello</h1>"
            + "<p>This was created using iText</p>"
            + "<a href='google.com'>google.com</a>";
    
public static void generatePdfFromHTML( String HTML ) throws FileNotFoundException, IOException  {
    HtmlConverter.convertToPdf(HTML, new FileOutputStream("your-filename.pdf"));
    System.out.println( "PDF Created!" );
}

您需要在 pom.xml 中添加库的依赖项。

FYR 代码:

<dependencies>
    <!-- iText Core -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>7.1.9</version>
        <type>pom</type>
    </dependency>

    <!-- iText pdfHTML add-on -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf</artifactId>
        <version>2.1.6</version>
    </dependency>
</dependencies>

你可以通过这个article on Medium

阅读更多关于这个库的信息

您可以使用 CSS cross references 创建 table 内容。这个是flying-saucer支持的

这是一个工作示例:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <style>
        div.newbr {page-break-before: always}
        #table-of-content a::after {content: " on page " target-counter(attr(href), page);}
    </style>
</head>
<body>

<div id="table-of-content">
    <a href="#product1">Product 1</a><br/>
    <a href="#product2">Product 2</a><br/>
    <a href="#product3">Product 3</a><br/>
</div>

<div id="product1" class="newbr"><h1>Product 1</h1></div> <!-- product 1 on page 2 -->
<div id="product2"><h1>Product 2</h1></div>               <!-- product 2 also on page 2 -->
<div id="product3" class="newbr"><h1>Product 3</h1></div> <!-- product 3 on page 3 -->


</body>
</html>