微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 itext 7 在 PDF 文档上设置边框、边距和填充

如何解决如何使用 itext 7 在 PDF 文档上设置边框、边距和填充

我正在尝试为PDF文档设置边框、边距和内边距,是否可以使用itext7来实现

通过设置下面的代码可以正常工作

document.setLeftMargin(180);

但是边框不起作用,下面是用来设置边框的代码

float width = 1.5f;
Color color = ColorConstants.BLUE;
Border border = new DottedBorder(color,width);
Document document = new Document(pdfDocument);
document.setBorder(border);

解决方法

遗憾的是,无法仅通过设置 Document 的某些属性来指定文档的背景和边框。好消息是 iText7 为我们提供了覆盖 DocumentRenderer 的机会(渲染器是负责渲染相应模型对象的类,例如,ParagraphRenderer 渲染 Paragraph 等等)。>

在自定义 DocumentRenderer 下面的 updateCurrentArea 被覆盖以解决以下两个问题:

  • 缩小 DocumentRenderer 将用于布局 Document 的孩子的区域

  • 添加背景 Div,它将负责边框渲染(如果需要,我还展示了如何设置背景)

     class CustomDocumentRenderer extends DocumentRenderer {
     public CustomDocumentRenderer(Document document) {
         super(document);
     }
    
     @Override
     protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {
         LayoutArea area = super.updateCurrentArea(overflowResult); // margins are applied on this level
         Rectangle newBBox = area.getBBox().clone();
    
         // apply border
         float[] borderWidths = {10,10,10};
         newBBox.applyMargins(borderWidths[0],borderWidths[1],borderWidths[2],borderWidths[3],false);
    
         // this div will be added as a background
         Div div = new Div()
                 .setWidth(newBBox.getWidth())
                 .setHeight(newBBox.getHeight())
                 .setBorder(new SolidBorder(10))
                 .setBackgroundColor(ColorConstants.GREEN);
         addChild(new DivRenderer(div));
    
         // apply padding
         float[] paddingWidths = {20,20,20};
         newBBox.applyMargins(paddingWidths[0],paddingWidths[1],paddingWidths[2],paddingWidths[3],false);
    
         return (currentArea = new RootLayoutArea(area.getPageNumber(),newBBox));
     }
    

    }

最后一个问题是如何将其应用到您的文档中。可以这样做:

    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
    Document doc = new Document(pdfDoc);
    doc.setRenderer(new CustomDocumentRenderer(doc));

生成的 PDF:enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。