2016-04-19 3 views
1

Ich benutze flyingăcer zum Rendern von PDF in meiner Anwendung. Wenn Zeilen mit mehr Inhalt vorhanden sind, tritt ein Problem beim Rendern des Werts auf einer einzelnen Seite auf.Spaltenwert-Rendering auf die zweite Seite, wenn -fs-keep-with-in-line: keep verwendet wird

Hier ist mein HTML-Code

<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> 

Wenn ich den Stil

verwenden

-fs-Keep-mit-inline: halte ich das Ergebnis zu erhalten, wie in das bild enter image description here

Der Wert der Ratenspalte wird auf die zweite Seite gesetzt.

Wenn ich den -fs-Keep-mit-Inline-Stil entfernen, bekomme ich dieses Ergebnis

enter image description here

Raum vor der zweiten Zeile erstellt.

Ich habe keine Ahnung, was passiert. Ich benutze 9.0.4 Version von flyingsaucer. Bitte helfen Sie.

Antwort

0

Ich konnte das Problem nicht reproduzieren. Hier

ist die HTML-I verwendet:

<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> 

Und der Java-Code:

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); 
    } 
} 

Das Ergebnis ist korrekt, wie unten dargestellt: enter image description here

Getestet mit fyling-Untertasse 9.0.4 und 9.0.9, mit dem gleichen Ergebnis.

+0

Ich bin mir aber nicht sicher. Ich kann es heute noch reproduzieren. – John

+0

Leider konnte ich Ihnen nicht helfen, aber ich sehe nicht, was die Ursache des Problems ist. Hast du es mit meinem HTML-Beispiel versucht? Es basiert auf Ihrem, ich musste nur einen Füller hinzufügen, um Ihren Fall zu simulieren, vielleicht macht das den Unterschied. – obourgain

Verwandte Themen