2013-07-10 1 views
3

при создании pdf из XHTML с помощью Flying Saucer/iText, хотите пейзаж на всех страницах (я использую this method) , но получаю дополнительную пустую страницу на начальных и конечных страницах, любые идеи ?Получение дополнительной пустой страницы в формате PDF в Flying Saucer/iText

+0

Показать код (как файл XHTML, так и код обработки). –

ответ

1

Если вы хотите lanscape на каждой странице, не используйте селектор в правиле @page.

Просто используйте:

@page {size: landscape;} 

Он будет применяться на весь документ, а не добавлять пустые страницы в документе.

+0

спасибо @obourgain –

1

Если вы хотите использовать альтернативные портретные/альбомные макеты в одном документе (т.е. первая страница - портретная, а остальная часть - пейзажная), вам нужно указать фактическую ширину и высоту для каждого правила @page, который также имеет селектор, иначе Flying Saucer создаст дополнительную белую страницу (согласно bug).

То, что работало для меня:

CSS:

@page { 
    size: a4 portrait; 
} 

@page land { size: a4 landscape;} 
.landscapePage { page:land; height: 21cm; width: 28.6cm} 

HTML:

<div> 
    Portrait content here 
</div> 
<span class="pageBreak"/> 
<div class="landscapePage"> 
    landscape content page 1 
    <span class="pageBreak"/> 
    landscape content page 2 
</div> 
0

Для создания PDF из файла .vm я столкнулся с той же проблемой. В моем случае удаление: ширина: 100%; высота: 100%; от тега body {} помог избавиться от дополнительной страницы. Надеюсь, это может быть полезно и для кого-то другого.

0
public class HeaderFooterPageEvent extends PdfPageEventHelper { 

     private PdfTemplate t; 
     private Image total; 
     @Override 
     public void onOpenDocument(PdfWriter writer, Document document) { 
      super.onOpenDocument(writer, document); 
      System.out.println("On Open"); 
      t = writer.getDirectContent().createTemplate(30, 16); 
      try { 
       total = Image.getInstance(t); 
       // total.setRole(new PdfName("Artifact")); 
      } catch (DocumentException de) { 
       throw new ExceptionConverter(de); 
      } 
     } 
    @Override 
     public void onEndPage(PdfWriter writer, Document document) { 
      // addHeader(writer); 
      addFooter(writer); 
     } 
     private void addFooter(PdfWriter writer){ 
      System.out.println("addFooter Called***************"); 
      PdfPTable footer = new PdfPTable(3); 
      try { 
       // set defaults 
       footer.setWidths(new int[]{24, 2, 1}); 
       footer.setTotalWidth(527); 
       footer.setLockedWidth(true); 
       footer.getDefaultCell().setFixedHeight(40); 
       footer.getDefaultCell().setBorder(Rectangle.TOP); 
       footer.getDefaultCell().setBorderColor(Color.LIGHT_GRAY); 

       // add copyright 
    footer.addCell(new Phrase("", new Font(Font.HELVETICA, 12, Font.BOLD))); 
    footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT); 
       footer.addCell(new Phrase(String.format("Page %d of", writer.getPageNumber()), new Font(Font.HELVETICA, 8))); 
       PdfPCell totalPageCount = new PdfPCell(total); 
       totalPageCount.setBorder(Rectangle.TOP); 
       totalPageCount.setBorderColor(Color.LIGHT_GRAY); 
       System.out.println("TOTAL PageCount: "+totalPageCount); 
       footer.addCell(totalPageCount); 
       // write page 
       PdfContentByte canvas = writer.getDirectContent(); 
       canvas.beginText(); 
       footer.writeSelectedRows(0,-1, 34, 50, canvas); 
       canvas.endText(); 
      } catch(DocumentException de) { 
       throw new ExceptionConverter(de); 
      } 
     } 

@Override 
    public void onCloseDocument(PdfWriter writer, Document document) { 
     System.out.println("On Close"); 
     int totalLength = String.valueOf(writer.getPageNumber()).length(); 
     int totalWidth = totalLength * 5; 
     ColumnText.showTextAligned(t, Element.ALIGN_RIGHT, 
       new Phrase(String.valueOf(writer.getPageNumber()-1), new Font(Font.HELVETICA, 8)), 
       totalWidth, 6, 0); 
    } 
Смежные вопросы