使用itext为pdf页面添加边框

问题描述 投票:0回答:3

这是我的源代码。为什么即使在启用所有边的边框后,我仍无法向 pdf 页面添加边框?我已经设置了边框及其颜色,但我仍然无法添加边框。

void create() throws DocumentException,IOException{
        // step 1
        Document document = new Document();
        // step 2
        PdfWriter writer=PdfWriter.getInstance(document, new FileOutputStream(RESULT));
        document.setPageSize(PageSize.LETTER);
        document.setMargins(36, 72, 108, 180);
        document.setMarginMirroring(false);
        // step 3
        document.open();
        // step 4
        Rectangle rect= new Rectangle(36,108);
        rect.enableBorderSide(1);
        rect.enableBorderSide(2);
        rect.enableBorderSide(4);
        rect.enableBorderSide(8);
        rect.setBorder(2);
        rect.setBorderColor(BaseColor.BLACK);
        document.add(rect);
         Font font = new Font(Font.FontFamily.TIMES_ROMAN, 26, Font.UNDERLINE, BaseColor.BLACK);
        Paragraph title= new Paragraph("CURRICULUM VITAE\n\n",font);
        title.setAlignment(Element.ALIGN_CENTER);
        document.add(title);
        Font f1= new Font (Font.FontFamily.UNDEFINED, 13, Font.NORMAL, BaseColor.BLACK);
        Paragraph info= new Paragraph("Name\n\nEmail\n\nContact Number",f1);
        Paragraph addr= new Paragraph("Street\n\nCity\n\nPin",f1);
        PdfPTable table = new PdfPTable(2);
        table.setWidthPercentage(100);
        table.spacingAfter();
        PdfPCell cell = new PdfPCell(info);
        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
        cell.disableBorderSide(Rectangle.BOX);
        cell.setExtraParagraphSpace(1.5f);
        table.addCell(cell);
        cell = new PdfPCell(addr);
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        cell.disableBorderSide(Rectangle.BOX);
        cell.setExtraParagraphSpace(1.5f);
        table.addCell(cell);
        document.add(table);
        document.add(new Chunk("\n"));
        document.add(new LineSeparator(2f,100,BaseColor.DARK_GRAY,Element.ALIGN_CENTER,-1f));
java pdf pdf-generation itext
3个回答
3
投票
    Rectangle rect= new Rectangle(577,825,18,15); // you can resize rectangle 
     rect.enableBorderSide(1);
     rect.enableBorderSide(2);
     rect.enableBorderSide(4);
     rect.enableBorderSide(8);
     rect.setBorderColor(BaseColor.BLACK);
     rect.setBorderWidth(1);
     document.add(rect);

2
投票
  1. 您没有定义边框宽度。
  2. 您只添加边框一次。如果你想让边框出现在每个页面上怎么办?

您可以通过添加以下内容来修复(1.):

rect.setBorder(Rectangle.BOX);
rect.setBorderWidth(2);

请注意,我将删除

enableBorderSide()
调用。您会注意到您以错误的方式使用了
setBorder()
方法。

为了修复 (2.),我将使用页面事件。请注意,您不能在页面事件中使用

document.add()
,因此您必须执行
DrawRectangle
示例中所述的操作,该示例是在回答问题 iText: PdfContentByte.rectangle(Rectangle) 时编写的行为不符合预期

您在创建

Document
对象时没有定义页面大小,这意味着 iText 将使用
PageSize.A4
。几行之后,您使用
PageSize.LETTER
。这些值是不可变的
Rectangle
对象。您可以使用
Rectangle
的尺寸/坐标(或者在您的情况下:
PageSize.A4
)创建新的
PageSize.LETTER
。您可以使用
getWidth()
getHeight()
方法获取尺寸,并使用
getLeft()
getBottom()
getRight()
getTop()
获取坐标。


0
投票

如果您需要在 PDF 文件的所有页面上添加边框,请使用此方法。

val document = Document()
val writer = PdfWriter.getInstance(document, FileOutputStream(filePath))
writer.pageEvent = MyEvent()

MyEvent 的类单独声明。

class MyEvent: PdfPageEventHelper() {
        override fun onEndPage(writer: PdfWriter?, document: Document?) {
            super.onEndPage(writer, document)
            addBorder(document)
        }

        private fun addBorder(document: Document?) {
            val rect = Rectangle(577f, 825f, 18f, 15f) // you can resize rectangle
            rect.border = Rectangle.BOX
            rect.borderWidth = 1f
            document!!.add(rect)
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.