猿问

如何使用 itext 在 pdf 的页脚上添加页码,它应该照顾它的宽度?

我的代码示例如下



    @Override

    public void onEndPage(PdfWriter writer, Document document) {

        addFooter(writer);

    }


    private void addFooter(PdfWriter writer){

        PdfPTable footer = new PdfPTable(2);

        try {

            // set defaults

            footer.setWidths(new int[]{2, 24});

            footer.setWidthPercentage(50);


            footer.setTotalWidth(527);

            footer.setLockedWidth(true);

            footer.getDefaultCell().setFixedHeight(30);

            footer.getDefaultCell().setBorder(Rectangle.TOP);

            footer.getDefaultCell().setBorderColor(BaseColor.RED);

            // here for the text Page 100 of, word of goes below in next line. 

            //It should be in same line.

            footer.addCell(new Phrase(String.format("Page %d of", Integer.parseInt(writer.getPageNumber()+"33")), new Font(Font.FontFamily.HELVETICA, 8)));


            // add placeholder for total page count

            PdfPCell totalPageCount = new PdfPCell(total);

            totalPageCount.setBorder(Rectangle.TOP);

            totalPageCount.setBorderColor(BaseColor.GREEN);

            footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);

            footer.addCell(totalPageCount);


            // write page

            PdfContentByte canvas = writer.getDirectContent();

            canvas.beginMarkedContentSequence(PdfName.ARTIFACT);

            footer.writeSelectedRows(0, -1, 34, 20, canvas);

            canvas.endMarkedContentSequence();

        } catch(DocumentException de) {

            throw new ExceptionConverter(de);

        }

    }


}

此代码在个位数页码的情况下工作正常。但是当页面增加到两位数时,很少有文本会转移到下一行。例如,如果文本是第 10 页,共 10 页,则“of”一词会出现在下一行。


PIPIONE
浏览 126回答 1
1回答

千巷猫影

页脚表的第一列非常小。实际上太小以至于较大的页码会自动导致换行。因此,通过替换为第一列提供更多空间footer.setWidths(new int[]{2, 24});例如footer.setWidths(new int[]{2, 20});在评论中,您对扩大第一栏的提议做出了回应但即使将其更改为仅多一点,也会增加不必要的空间。它给出的输出类似于第 10 页,共 10 页。我的意思是在“第 10 页”之后,还有更多的空间。为了减少差距,您可以右对齐第一列的内容,例如通过添加footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);在添加"Page %d of"单元格之前。因此,private void addFooterImproved(PdfWriter writer) {    PdfPTable footer = new PdfPTable(2);    try {        // set defaults        footer.setWidths(new int[]{2, 20});        footer.setWidthPercentage(50);        footer.setTotalWidth(527);        footer.setLockedWidth(true);        footer.getDefaultCell().setFixedHeight(30);        footer.getDefaultCell().setBorder(Rectangle.TOP);        footer.getDefaultCell().setBorderColor(BaseColor.RED);        footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);        footer.addCell(new Phrase(String.format("Page %d of", writer.getPageNumber()), new Font(Font.FontFamily.HELVETICA, 8)));        // add placeholder for total page count        PdfPCell totalPageCount = new PdfPCell(total);        totalPageCount.setBorder(Rectangle.TOP);        totalPageCount.setBorderColor(BaseColor.GREEN);        footer.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT);        footer.addCell(totalPageCount);        // write page        PdfContentByte canvas = writer.getDirectContent();        canvas.beginMarkedContentSequence(PdfName.ARTIFACT);        footer.writeSelectedRows(0, -1, 34, 20, canvas);        canvas.endMarkedContentSequence();    } catch(DocumentException de) {        throw new ExceptionConverter(de);    }}(CreateFooter辅助方法)100 页文档的结果:...
随时随地看视频慕课网APP

相关分类

Java
我要回答