2017-02-23 3 views
0

world Я использовал XMLWorker (5.5.6) для преобразования XHTML-страниц, содержащих арабские символы в PDF. Все работает нормально, но «page-break-before» не работает! Вот мой HTML-страница:XMLWorker (iText) не разбивает страницу в формате PDF

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Déclaration</title> 
 
     <style type="text/css" > 
 
      table { 
 
       page-break-before: always; 
 
      } 
 
     </style> 
 
    </head> 
 
<body style="font-family: Noto Naskh Arabic"> 
 
<p style="page-break-before: always;text-align: center; font-size: 24px; font-family: Noto Naskh Arabic">الجمهورية</p> 
 
<div style="page-break-before: always;text-align: center; font-size: 18px; font-family: Verdana" >REPUBLIQUE </div> 
 
<div dir="rtl" style="page-break-before: always;text-align: center; font-size: 24px; font-family: Noto Naskh Arabic" >تصريــــح بالممتلكـــــات</div> 
 
<p style="font-family: Verdana">DECLARATION </p> 
 

 
<table width="100%" style="page-break-before: always" > 
 
\t <tr><td>Code Willaya </td><td></td><td>رمز الولاية</td></tr> 
 
\t <tr><td>Code de la commune </td><td></td><td>رمز البلدية</td></tr> 
 
</table>

И есть код Java используется http://developers.itextpdf.com/2078

+0

атрибуты стиля 'page-break-before' поддерживаются только тогда, когда элементы, сгенерированные рабочим XML, непосредственно добавляются в« Документ », а не когда они добавляются в ячейку таблицы, как в вашем примере. К сожалению RTL поддерживается только внутри ячеек таблицы. – mkl

ответ

3

page-break-before атрибуты стиля поддерживаются только если элементы, генерируемые XML работником, непосредственно добавляют к Document, если они не добавлены в ячейку таблицы, как в вашем примере. К сожалению RTL поддерживается только внутри ячеек таблицы.

Как пример добавляет сами элементы, хотя, можно улучшить также интерпретировать маркер разрыва страницы правильно, просто повысить первоначальный цикл

PdfPTable table = new PdfPTable(1); 
PdfPCell cell = new PdfPCell(); 
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
for (Element e : elements) { 
    cell.addElement(e); 
} 
table.addCell(cell); 
document.add(table); 

так:

PdfPTable table = new PdfPTable(1); 
PdfPCell cell = new PdfPCell(); 
cell.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 
for (Element e : elements) { 
    if (e == Chunk.NEXTPAGE) 
    { 
     table.addCell(cell); 
     document.add(table); 
     document.newPage(); 
     table = new PdfPTable(1); 
     cell = new PdfPCell(); 
    } 
    else 
    { 
     cell.addElement(e); 
    } 
} 
table.addCell(cell); 
document.add(table); 

(Вероятно, вы должны добавить некоторые проверки для предотвращения добавления пустых таблиц здесь.)


Кстати, чтобы этот пример обработал ваш пример вообще, мне пришлось прокомментировать ваш элемент title. Но это может быть разница между вашей версией XMLWorker 5.5.6 и версией 5.5.11-SNAPSHOT, которую я использовал здесь.