I am new to iText7. I am using a java program to convert HTML files to PDF. I have used the iText's HtmlConverter to convert html into list of Elements and then create a layout document based on the list of elements.
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 output looks good for smaller tables. But if the input html has wider tables then the content is getting cut. Since it is resulting in the dataloss, the solution is not acceptable by the user community.
Is there a way to assign column widths as per content length? Please note that there is lot of empty space between columns, which I believe is being driven from the td width defined in the HTML file. How do I override the column width while generating Pdf from Html using iText7? Here is the sample input HTML to reproduce the issue.
<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>