Обоснуйте текст внутри ячейки 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()
:
- Поддерживает указанные стили в
<style>
, - Изменяет выравнивание текста с
right
вjustify
,
Выходной PDF: