Java 使用iText XMLWorker对齐PdfPTable单元格内的文本

Java 使用iText XMLWorker对齐PdfPTable单元格内的文本,java,alignment,itext,xmlworker,text-justify,Java,Alignment,Itext,Xmlworker,Text Justify,我试图用以下代码证明PdfPTable单元格中的文本正确: PdfPTable pTable = new PdfPTable(1); pTable.setWidthPercentage(98f); pTable.setSpacingBefore(10f); pTable.setHorizontalAlignment(Element.ALI

我试图用以下代码证明
PdfPTable
单元格中的文本正确:

                    PdfPTable pTable = new PdfPTable(1);
                    pTable.setWidthPercentage(98f);
                    pTable.setSpacingBefore(10f);
                    pTable.setHorizontalAlignment(Element.ALIGN_JUSTIFIED_ALL);

                    String content=getContent();

                    list =XMLWorkerHelper.parseToElementList(content);
                    for (Element element : list) {
                        cell = new PdfPCell();
                        cell.setHorizontalAlignment(PdfPCell.ALIGN_JUSTIFIED_ALL);
                        cell.setVerticalAlignment(PdfPCell.ALIGN_JUSTIFIED_ALL);
                        cell.setNoWrap(false);
                        cell.setBorderWidth(0);
                        cell.addElement(element);
                        pTable.addCell(cell);
                    }
                    pTable.setSplitLate(false);
                    paragraph.add(pTable);

但是文本是左对齐的。我成功地使用了
段落
对象而不是表格,但我需要在表格中显示文本。

.NET,但很容易转换为Java

由于您正在解析
[X]HTML
并使用
XMLWorkerHelper
,因此验证文本的一种简单方法是使用并自行设置
CSS
样式。示例HTML:

<html><head>
<title>Test HTML</title>
<style type='text/css'>
td { 
    border:1px solid #eaeaea; 
    padding: 4px;
    text-align: right; 
    font-size: 1.4em; 
}
</style>
</head><body>
<table width='50%'><tr>
<td>
but I can not see justification of text. 
I tried using only paragraph without using table, 
and it does justification but I need to display 
things in table
</td></tr></table>
</body></html>
请注意,
XMLWorkerHelper
足够智能,可以在调用
ParseXHtml()时正确应用样式:

  • 中维护指定的样式
  • 将文本对齐方式从
    right
    更改为
    justify
  • 输出PDF:

    // CSS specificity selector: apply style below without changing existing styles
    string css = "tr td { text-align: justify; }";
    
    using (var memoryStream = new MemoryStream())
    {
        using (var document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(
                document, memoryStream
            );
            document.Open();
            using (var htmlStream = new MemoryStream(Encoding.UTF8.GetBytes(html)))
            {
                using (var cssStream = new MemoryStream(Encoding.UTF8.GetBytes(css)))
                {
                    XMLWorkerHelper.GetInstance().ParseXHtml(
                        writer, document, htmlStream, cssStream
                    );
                }
            }
        }
        File.WriteAllBytes(OUTPUT, memoryStream.ToArray());
    }