2011-06-13 98 views
8

是否可以使用iTextSharp將邊框添加到PDF文檔中的頁面?我從頭開始生成PDF文件,因此我不需要爲現有文檔添加邊框。如何使用iTextSharp爲頁面添加邊框?

這裏是我的示例代碼:

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(); 
+0

我相信你可以的。你的意思是問怎麼做? – Oded 2011-06-13 20:11:20

+0

當然[chars]。 – 2011-06-13 20:38:04

+0

我不確定您是否可以直接向文檔添加邊框。但是,您應該可以使用表或PDFTable來實現相同的結果。 – 2011-06-13 20:51:19

回答

7

這是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(); 
} 
1

我建議你當前頁面的內容直接爲你生成它,並與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(); 
} 

注意,你實際上可以通過一個Rectanglecontent.rectangle(),此時所使用的矩形邊框&填充設置。我想這可能有點混亂,所以沒有這樣編碼。

0

我能夠做的紅色邊框添加到現有的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(); 
} 
相關問題