2016-04-19 2 views
1

Я использую flyingsaucer для рендеринга pdf в моем приложении. Когда у меня есть строки с большим количеством контента, возникает проблема с отображением значения на одной странице.Отображение значения столбца на второй странице, когда используется -fs-keep-with-inline: keep используется

Вот мой HTML код

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<style type="text/css" media="all"> 
.pcs-itemtable { 
-fs-table-paginate: paginate; 
-fs-keep-with-inline: keep; 
} 
.pcs-itemtable-header { 
font-size: 9pt; 
color: #ffffff; 
background-color: #3c3d3a; 
} 
.pcs-item-row { 
font-size: 8pt; 
border-bottom: 1px solid #e3e3e3; 
background-color: #ffffff; 
color: #000000; 
} 
.pcs-item-desc { 
    color: #727272; 
    font-size: 8pt; 
} 
</style> 
</head> 
<body> 
<table cellpadding="0" cellspacing="0" border="0" class="pcs-itemtable" style="width:100%;margin-top:20px;table-layout:fixed;"> 
<thead> 
    <tr style="height:32px;"> 
     <td class="pcs-itemtable-header" style="padding:5px 0 5px 5px;text-align: center;word-wrap: break-word;width: 5%;"> 
      # 
     </td> 
       <td class="pcs-itemtable-header" style="padding:5px 10px 5px 20px;word-wrap: break-word;"> 
      Item &amp; Description 
     </td> 
     <td class="pcs-itemtable-header" style="padding:5px 10px 5px 5px;word-wrap: break-word;width: 11%;" align="right"> 
      Qty 
     </td> 
     <td class="pcs-itemtable-header" style="padding:5px 10px 5px 5px;word-wrap: break-word;width: 11%;" align="right"> 
      Rate 
     </td> 
     <td class="pcs-itemtable-header" style="padding:5px 10px 5px 5px;word-wrap: break-word;width:120px;" align="right"> 
       Amount 
     </td> 
    </tr> 
</thead> 
<tbody class="itemBody"> 
<tr> 
     <td class="pcs-item-row" style="padding: 10px 0 10px 5px;text-align: center;word-wrap: break-word;" valign="top"> 
      2 
     </td> 

     <td class="pcs-item-row" style="padding: 10px 0px 10px 20px;" valign="top"> 
         <div > 
         <div > 
      <span id="tmp_item_name" style="word-wrap: break-word;">Item With Unit</span><br /> 

      <span id="tmp_item_description" class="pcs-item-desc" style="white-space: pre-wrap;word-wrap: break-word;">Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguit&#10;Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguito.&#10;Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguito&#10;Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguito.</span> 
         </div> 
         </div> 
     </td> 
      <td class="pcs-item-row" style="padding: 10px 10px 5px 10px;text-align:right;word-wrap: break-word;" valign="top"> 
       <span id="tmp_item_qty">1.00</span> 
       <div class="pcs-item-desc">test unit</div> 
      </td> 
      <td class="pcs-item-row" style="padding: 10px 10px 5px 10px;text-align:right;word-wrap: break-word; " valign="top"> 
       <span id="tmp_item_rate">500.00</span> 
      </td> 
     <td class="pcs-item-row" style="text-align:right;padding: 10px 10px 10px 5px;word-wrap: break-word;" valign="top"> 
      <span id="tmp_item_amount">500.00</span> 
     </td> 
     </tr> 
    </tbody> 
</table> 

Когда я использовать стиль

-fs-держать-с-инлайн: держать я получаю результат, как показано на изображение enter image description here

Оценить значение столбца на второй странице.

Когда я удалить -fs-держать-с-рядный стиль, я получаю этот результат

enter image description here

пространства, созданного до второго ряда.

У меня нет понятия о том, что происходит. Я использую версию flyingsaucer версии 9.0.4. Пожалуйста помоги.

ответ

0

Я не смог воспроизвести проблему.

Вот HTML я использовал:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<style type="text/css" media="all"> 
.pcs-itemtable { 
    -fs-table-paginate: paginate; 
    /* -fs-keep-with-inline: keep;*/ 
} 

.pcs-itemtable-header { 
    font-size: 9pt; 
    color: #ffffff; 
    background-color: #3c3d3a; 
} 

.pcs-item-row { 
    font-size: 8pt; 
    border-bottom: 1px solid #e3e3e3; 
    background-color: #ffffff; 
    color: #000000; 
} 

.pcs-item-desc { 
    color: #727272; 
    font-size: 8pt; 
} 
</style> 
</head> 
<body> 
    <table cellpadding="0" cellspacing="0" border="0" class="pcs-itemtable" style="width: 100%; margin-top: 20px; table-layout: fixed;"> 
    <thead> 
     <tr style="height: 32px;"> 
     <td class="pcs-itemtable-header" style="padding: 5px 0 5px 5px; text-align: center; word-wrap: break-word; width: 5%;">#</td> 
     <td class="pcs-itemtable-header" style="padding: 5px 10px 5px 20px; word-wrap: break-word;">Item &amp; Description</td> 
     <td class="pcs-itemtable-header" style="padding: 5px 10px 5px 5px; word-wrap: break-word; width: 11%;" align="right">Qty</td> 
     <td class="pcs-itemtable-header" style="padding: 5px 10px 5px 5px; word-wrap: break-word; width: 11%;" align="right">Rate</td> 
     <td class="pcs-itemtable-header" style="padding: 5px 10px 5px 5px; word-wrap: break-word; width: 120px;" align="right">Amount</td> 
     </tr> 
    </thead> 
    <tbody class="itemBody"> 
     <tr><td colspan="5" style="height: 215mm">FILLER</td></tr> 
     <tr> 
     <td class="pcs-item-row" style="padding: 10px 0 10px 5px; text-align: center; word-wrap: break-word;" valign="top">2</td> 
     <td class="pcs-item-row" style="padding: 10px 0px 10px 20px;" valign="top"> 
      <div> 
      <div> 
       <span id="tmp_item_name" style="word-wrap: break-word;">Item With Unit</span><br /> <span id="tmp_item_description" class="pcs-item-desc" style="white-space: pre-wrap; word-wrap: break-word;">Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguit&#10;Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare 
       una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguito.&#10;Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le 
       istruzioni trovate qui di seguito&#10;Siamo spiacenti di informarvi che Zoho Invoice non ha un&#39;opzione per&#10;stampare bolle di consegna prima di creare una fattura e modificare&#10;modello di bolla di consegna. Spiacente di deluderti.&#10;Vorremmo suggerire una soluzione per la creazione di modelli&#10;preferiti in Zoho Invoice. È possibile personalizzare il modello stime&#10;rinominando il titolo del documento.&#10;Per fare questo, si prega di seguire le istruzioni trovate qui di seguito.</span> 
      </div> 
      </div> 
     </td> 
     <td class="pcs-item-row" style="padding: 10px 10px 5px 10px; text-align: right; word-wrap: break-word;" valign="top"><span id="tmp_item_qty">1.00</span> 
      <div class="pcs-item-desc">test unit</div></td> 
     <td class="pcs-item-row" style="padding: 10px 10px 5px 10px; text-align: right; word-wrap: break-word;" valign="top"><span id="tmp_item_rate">500.00</span></td> 
     <td class="pcs-item-row" style="text-align: right; padding: 10px 10px 10px 5px; word-wrap: break-word;" valign="top"><span id="tmp_item_amount">500.00</span></td> 
     </tr> 
    </tbody> 
    </table> 
</body> 
</html> 

И код Java:

import java.io.ByteArrayOutputStream; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.Files; 
import java.nio.file.Paths; 

import org.xhtmlrenderer.pdf.ITextRenderer; 

public class TestPdf { 
    public static void main(String[] args) throws Exception { 
     String html = new String(Files.readAllBytes(Paths.get("so.html")), StandardCharsets.UTF_8); 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 

     ITextRenderer renderer = new ITextRenderer(); 
     renderer.setDocumentFromString(html); 
     renderer.layout(); 
     renderer.createPDF(output); 

     OutputStream fos = new FileOutputStream ("so.pdf"); 
     output.writeTo(fos); 
    } 
} 

В результате правильно, как показано ниже: enter image description here

Испытано с fyling-блюдце 9.0.4 и 9.0.9, с тем же результатом.

+0

Не уверен на этом. Я могу воспроизвести его и сегодня. – John

+0

Извините, что я не смог вам помочь, но я не понимаю, в чем причина проблемы. Вы пробовали использовать мой образец HTML? Он основан на вашем, я должен был просто добавить наполнитель для имитации вашего дела, возможно, это имеет значение. – obourgain

Смежные вопросы