iTextSharp 将 HTML 解析为 508 兼容的 PDF table

iTextSharp parse HTML to 508 compliant PDF table

下面的代码将从 HTML 创建一个 PDF。问题在于,当文档被标记时,TH 标记将作为 TD 写入 PDF。有没有办法让 PDF 中的标签显示为 TH?

          string html = @"<table>
                            <tr>
                                <TH> header1 </TH>
                                <TH> header2 </TH>
                                <TH> header3 </TH>
                            </tr>
                            <tr>
                                <td> col 1</td>
                                <td> col 2</td>
                                <td> col 3</td>
                            </tr>
                        </table>";

        FileStream fs = new FileStream(@"C:\test.pdf", FileMode.Create);
        TextReader reader = new StringReader(html);

        Document document = new Document(PageSize.A4, 30, 30, 30, 30);

        PdfWriter writer = PdfWriter.GetInstance(document, fs);
        writer.SetTagged();

        writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_7);

        document.Open();


        XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, reader);
        document.Close();

        fs.Close();`

您正在使用的版本不支持您需要的功能。

请看today's update of the TableData class in XML Worker:

@@ -97,6 +99,10 @@
                 if (direction != PdfWriter.RUN_DIRECTION_DEFAULT) {
                     cell.setRunDirection(direction);
                 }
+
+        if (HTML.Tag.TH.equalsIgnoreCase(tag.getName())) {
+            cell.setRole(PdfName.TH);
+        }
         try {
             HtmlPipelineContext htmlPipelineContext = getHtmlPipelineContext(ctx);
             cell = (HtmlCell) getCssAppliers().apply(cell, tag, htmlPipelineContext);

这解决了您在 iText 中的问题。它现在计划移植到 iTextSharp。修复将在下一个版本中。

我们添加了 TH 元素的正确标记。这些更改将包含在下一个 iText XMLWorker 版本中。 通常不采用 XMLWorker 来生成正确标记的 PDF。但是 XMLWorker 使用基本的 iText Core 标记逻辑,TD 是所有类型 table 单元格的默认角色。