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