Как предотвратить потерю данных внутри таблиц при преобразовании 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"> &nbsp; </p> </td> 
         </tr> 
         <tr> 
          <td style="width:45%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:8%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </p> </td> 
          <td style="width:1%; vertical-align:middle"> <p style="font-size:10pt"> &nbsp; </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"> &nbsp; </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"> &nbsp; </p> </td> 
          <td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> &nbsp; </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"> &nbsp; </p> </td> 
          <td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> &nbsp; </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"> &nbsp; </p> </td> 
          <td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> &nbsp; </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"> &nbsp; </p> </td> 
          <td style="padding:1.5pt; vertical-align:bottom"> <p style="font-size:10pt"> &nbsp; </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&nbsp;</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"> &nbsp; </p> </td> 
         </tr>      
        </tbody> 
       </table>
  </body>
</html>

0 ответов

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