2011-11-29 81 views
2

您好我有一個使用itextsharp創建的pdf。使用PdfStamper添加矩形

使用pdfreader我正在閱讀創建的pdf到pdfstamper。

現在我試圖使用pdfstamper在所有頁面上添加一個黑色的矩形頁面的大小。我該怎麼做呢?

此外,我不能使用文檔添加矩形,因爲流接近!

MemoryStream stream = new MemoryStream(); 

    PdfReader pdfReader = new PdfReader(output.ToArray()); 
    PdfStamper stamper = new PdfStamper(pdfReader, stream); 

    for (int x = 0; x < stamper.Reader.NumberOfPages; x++) 
    { 
     Rectangle rectangle = document.PageSize; 
     rectangle.BackgroundColor = new BaseColor(0, 0, 0); 
     //stamper.Writer.AcroForm. 
     //document.Add(rectangle); 
    } 

    output.Close(); 
    pdfReader.Close(); 
    stamper.Close(); 
+0

哪裏有文件進入範圍?我在你的示例代碼中看不到它。也檢查出http://stackoverflow.com/questions/583629/how-can-i-insert-an-image-with-itextsharp-in-an-existing-pdf它是關於圖像,但可能會給你你需要的幫助。 –

+0

使用PDFDocument爲PDF創建標題並將其放入內存流中,然後使用PDFWriter創建PDF時,文檔可以進入範圍。使用PDFReader時,您不能擁有文檔,因爲在關閉文檔之前文檔的創建不完整。 – DaNet

回答

4

如果你想使用PdfStamper繪製,那麼你需要使用PdfContentByte,你可以通過調用stamper.GetOverContent(pageNum)得到。在該對象上有一個名爲Rectangle的特定命令,它正是您想要的。此外,請記住,PDF中的頁面開始編號爲1,而不是零。

下面是一個完整的C#2010 WinForm應用程序,針對iTextSharp 5.1.1.0,它應該可以做你想找的東西,我想。您需要修改它以支持MemoryStream,但這應該很容易。

using System; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string inputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "input.pdf"); 
      string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "output.pdf"); 

      PdfReader pdfReader = new PdfReader(inputFile); 
      using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) 
      { 
       using (PdfStamper stamper = new PdfStamper(pdfReader, fs)) 
       { 
        int PageCount = pdfReader.NumberOfPages; 
        for (int x = 1; x <= PageCount; x++) 
        { 
         PdfContentByte cb = stamper.GetOverContent(x); 
         iTextSharp.text.Rectangle rectangle = pdfReader.GetPageSizeWithRotation(x); 
         rectangle.BackgroundColor = BaseColor.BLACK; 
         cb.Rectangle(rectangle); 
        } 
       } 
      } 

      this.Close(); 
     } 
    } 
} 
+0

再次感謝克里斯,像一個魅力。 Cheers Dude – DaNet

+0

只需進行一些更改以適應Web應用程序。 – DaNet