如何使用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();
}
请注意,您实际上可以将ѭ9传递到
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();
}