Flying Saucer/iText 中出现多余的空白 PDF 页面

5

在使用Flying Saucer/iText从XHTML创建PDF时,想要每个页面都是横向的(我正在使用这种方法),但是在初始和结束页面上会额外出现一个空白页,请问有什么解决方法吗?


展示一些代码(包括XHTML文件和处理代码)。 - Alexis Pigeon
我有一个类似的问题,当我在HTML内容中添加一张太高(A4)的图片时(我认为),第一页是空白的,从第二页开始将图像分成多个页面(这可能很好,但我想删除第一页的空白页)... 我找不到一种基于HTML内容设置页面高度的方法(我认为使用Itext5不可能)。有什么建议吗? - Paolo Biavati
4个回答

5
如果您想在同一文档中使用备用的纵向/横向布局(即第一页是纵向,剩余页是横向),则需要为每个带选择器的@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>

对我有用,谢谢你节省了我的时间。我只需要添加这部分代码: @page { size: a4 portrait; } - anhnt
要注意实际的宽度和高度。例如,如果此示例中的横向部分的高度过高,则可能会在底部多出一个空白页。我最终使用了高度:14厘米;宽度:25.3厘米。 - Geyser14
@Shivan Dragon 我该如何避免空白页面,我想要整个页面都是纵向的,并且第一页和第二页是横向的? - kalipts

2
如果您希望每个页面都有景观效果,请在@page规则上不使用任何选择器。只需使用以下内容:
  @page {size: landscape;}

它将应用于整个文档,并且不会在文档中添加空白页面。

0
制作.pdf文件时,我遇到了同样的问题。在我的情况下,从body{}标签中删除: width: 100%; height: 100%; 可以帮助消除多余的页面。希望对其他人也有用。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接