如何使用iTextSharp为页面添加边框?

是否可以使用iTextSharp为PDF文档中的页面添加边框? 我从头开始生成PDF文件,因此我不需要为现有文档添加边框。

这是我的代码示例:

 Document pdfDocument = new Document(PageSize.LETTER); Font headerFont = new Font(baseFont, 13); Font font = new Font(baseFont, 10); PdfWriter writer = PdfWriter.GetInstance(pdfDocument, new FileStream(fileName, FileMode.Create)); pdfDocument.Open(); //I add IElements here. pdfDocument.Close(); 

以下是C#中的答案(改编自Mark Storer)。 此示例使用页面的边距来绘制边框,我有时会发现这对调试页面布局很有用。

 public override void OnEndPage(PdfWriter writer, Document document) { base.OnEndPage(writer, document); var content = writer.DirectContent; var pageBorderRect = new Rectangle(document.PageSize); pageBorderRect.Left += document.LeftMargin; pageBorderRect.Right -= document.RightMargin; pageBorderRect.Top -= document.TopMargin; pageBorderRect.Bottom += document.BottomMargin; content.SetColorStroke(BaseColor.RED); content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height); content.Stroke(); } 

我建议您在生成时获取当前页面的直接内容,并使用PdfContentByte边框。

您可能想要一个PdfPageEventHelper派生的类,它在onEndPage事件中进行绘制。

您可以通过document参数的getPageSize()查询当前页面大小,并使用它(稍微调整一下)来绘制边框。 鉴于您使用的是iTextSharp,您可能拥有PageSize属性而不是“get”方法。

就像是:

 public void onEndPage(PdfWriter writer, Document doc) { PdfContentByte content = writer.getDirectContent(); Rectangle pageRect = doc.getPageSize(); pageRect.setLeft( pageRect.getLeft() + 10 ); pageRect.setRight( pageRect.getRight() - 10 ); pageRect.setTop( pageRect.getTop() - 10 ); pageRect.setBottom( pageRect.getBottom() + 10 ); content.setColorStroke( Color.red ); content.rectangle(pageRect.getLeft(), pageRect.getBottom(), pageRect.getWidth(), pageRect.getHeight()); content.stroke(); } 

请注意,您实际上可以将Rectangle传递给content.rectangle() ,此时使用矩形的边框和填充设置。 我认为这可能有点令人困惑,所以没有这样编码。

我能够为现有的PDF添加红色边框

 public void createPdf(PdfReader pdfReader) throws DocumentException, IOException { String userDir = System.getProperty("user.dir"); System.out.println("userDir = " + userDir); RESULT = userDir + "/work/"+"sample.pdf"; // step 1 Document document = new Document(); // step 2 PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT)); // step 3 document.open(); int noOfPages = pdfReader.getNumberOfPages(); for (int page = 0; page < noOfPages; ) { if(page==0) { PdfImportedPage immportedPage = copy.getImportedPage(pdfReader, ++page); PageStamp stamp = copy.createPageStamp(immportedPage); PdfContentByte canvas = stamp.getOverContent(); drawPageBorder(canvas, PageSize.A4.getWidth(), PageSize.A4.getHeight()); stamp.alterContents(); copy.addPage(immportedPage); } else { copy.addPage(copy.getImportedPage(pdfReader, ++page)); } } copy.freeReader(pdfReader); pdfReader.close(); // step 4 document.close(); } public void drawPageBorder(PdfContentByte content, float width, float height) { content.saveState(); PdfGState state = new PdfGState(); state.setFillOpacity(0.0f); content.setGState(state); content.setColorStroke(BaseColor.RED); content.setLineWidth(6); content.rectangle(5, 5, width, height); content.fillStroke(); content.restoreState(); }