Как предотвратить потерю данных внутри таблиц при преобразовании HTML в PDF с помощью iText7?
Я новичок в iText7. Я использую программу Java для преобразования файлов HTML в PDF. Я использовал iText HtmlConverter для преобразования html в список элементов, а затем для создания документа макета на основе списка элементов.
public static void createPdf(String src, String dest, ConverterProperties properties) throws IOException {
List<IElement> elements =
HtmlConverter.convertToElements(new FileInputStream(src), properties);
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
pdf.setDefaultPageSize(PageSize.LEGAL.rotate());
Document document = new Document(pdf, pdf.getDefaultPageSize(), false);
for (IElement element : elements) {
scaleFontSizeRecursively(document, element, (float) 0.68);
document.add((IBlockElement)element);
}
document.close();
}
Вывод в формате PDF подходит для небольших таблиц. Но если входной html имеет более широкие таблицы, то контент сокращается. Поскольку это приводит к потере данных, решение неприемлемо для сообщества пользователей.
Есть ли способ назначить ширину столбцов в соответствии с длиной содержимого? Обратите внимание, что между столбцами много пустого пространства, которое, как я полагаю, определяется шириной td, определенной в файле HTML. Как изменить ширину столбца при создании PDF-файла из Html с помощью iText7? Вот образец входного HTML-кода для воспроизведения проблемы.
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="styles/print.css">
<link rel="stylesheet" media="print" href="styles/table.css">
</head>
<body>
<table style="width:99.8%; border-collapse:collapse">
<tbody>
<tr>
<td colspan="21" style="vertical-align:middle"> <p style="text-indent:36pt; text-align:justify; line-height:120%; font-size:10pt"> </p> </td>
</tr>
<tr>
<td style="width:45%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
<td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> </p> </td>
</tr>
<tr>
<td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> House Income </p> </td>
<td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-left:1.5pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> <strong>$</strong> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="text-align:right; font-size:10pt"> <strong><a id="Anchor_7195" name="Anchor_7195" ng-click="list($event)">177,934<span class="icon icon-question-mark ato-blue-color" id="CFTO_ELE_ICON"></span></a></strong> </p> </td>
<td style="border-top:0.75pt solid #000000; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-left:1.5pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> <strong>$</strong> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="text-align:right; font-size:10pt"> <strong><a id="Anchor_7196" name="Anchor_7196" ng-click="list($event)">189,582<span class="icon icon-question-mark ato-blue-color" id="CFTO_ELE_ICON"></span></a></strong> </p> </td>
<td style="border-top:0.75pt solid #000000; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-left:1.5pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> <strong>$</strong> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="text-align:right; font-size:10pt"> <strong><a id="Anchor_7197" name="Anchor_7197" ng-click="list($event)">198,377<span class="icon icon-question-mark ato-blue-color" id="CFTO_ELE_ICON"></span></a></strong> </p> </td>
<td style="border-top:0.75pt solid #000000; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-left:1.5pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> <strong>$</strong> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="text-align:right; font-size:10pt"> <strong><a id="Anchor_7198" name="Anchor_7198" ng-click="list($event)">210,103<span class="icon icon-question-mark ato-blue-color" id="CFTO_ELE_ICON"></span></a></strong> </p> </td>
<td style="border-top:0.75pt solid #000000; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-left:1.5pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> <strong>$</strong> </p> </td>
<td style="border-top:0.75pt solid #000000; padding-top:1.12pt; padding-bottom:1.5pt; vertical-align:bottom"> <p style="text-align:right; font-size:10pt"> <strong><a id="Anchor_7199" name="Anchor_7199" ng-click="list($event)">775,996<span class="icon icon-check ato-green-color" id="CFTO_ELE_ICON"></span><span class="icon-stm-view-formula" id="CFTO_FORMULA_ICON">F </span><span class="icon-stm-wp-reference" id="CFTO_WP_ICON">100011, 100012,100013, 00014,100015,100016</span></a></strong> </p> </td>
<td style="border-top:0.75pt solid #000000; vertical-align:bottom"> <p style="font-size:10pt"> </p> </td>
</tr>
</tbody>
</table>
</body>
</html>