Обоснуйте текст внутри ячейки PdfPTable, используя iText XMLWorker

Я пытаюсь обосновать текст внутри 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);

Но текст выровнен по левому краю. Я был успешным, используя Paragraph объект вместо таблицы, но мне нужно отобразить текст в таблице.

1 ответ

.NET, но легко конвертируется в Java...

Так как вы анализируете [X]HTML и используя XMLWorkerHelperпростой способ оправдать текст - использовать перегруженный метод parseXHtml и установить 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>

Код разбора:

// 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());
}

Обратите внимание, что XMLWorkerHelper достаточно умен, чтобы правильно применять стили CSS Specificity при вызове ParseXHtml():

  1. Поддерживает указанные стили в <style>,
  2. Изменяет выравнивание текста с right в justify,

Выходной PDF:

введите описание изображения здесь

Другие вопросы по тегам