2014-10-16 163 views
0

我有一個PDF文件流,並希望在PDF中添加一個Excel或文本文件附件。 以下代碼完成這項工作,但它基本上將現有PDF頁面逐頁複製到新頁面並添加附件。我必須逐頁複製,因爲PdfWriter無法從PdfReader打開現有PDF。有沒有更好的方法來做到這一點?我也玩過PdfStamper,但看起來無論你需要什麼PdfWriter來附加文件。使用iTextSharp添加附件到現有的PDF文件

該代碼是從ASP.Net MVC應用程序的Action方法。

[HttpPost] 
    public ActionResult Index(HttpPostedFileBase file) 
    { 
     string s = System.Web.HttpContext.Current.Server.MapPath(@"~/temp/"); 

     PdfReader reader = new PdfReader(file.InputStream); 
     Document document = new Document(); 
     MemoryStream ms = new MemoryStream(); 

     PdfWriter writer = PdfWriter.GetInstance(document, ms); 
     document.Open(); 
     document.AddDocListener(writer); 

     for (int i = 1; i <= reader.NumberOfPages; i++) 
     { 
      document.SetPageSize(reader.GetPageSize(i)); 
      document.NewPage(); 
      PdfContentByte cb = writer.DirectContent; 
      PdfImportedPage page = writer.GetImportedPage(reader, i); 
      int rotation = reader.GetPageRotation(i); 
      if (rotation == 90 || rotation == 270) 
       cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(i).Height); 
      else 
       cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0); 
     } 

     PdfFileSpecification pfs = PdfFileSpecification.FileEmbedded(writer, s + "test.xlsx", "test.xlsx", null); 
     writer.AddFileAttachment(pfs); 

     document.Close(); 

     return File(ms.ToArray(), "application/pdf", "test.pdf"); 
    } 
+0

您是否考慮過使用PdfStamper? – mkl 2014-10-16 22:06:28

+0

是的,但即使是PdfStamper也需要PdfWriter,這讓我回到瞭如何將現有文檔放入PdfWriter中的相同問題。在我看到的stamper.getWriter()的Java示例中,但是該方法在我擁有的C#iTextSharp版本(最新版本)中不可用。 – Tigran 2014-10-16 22:10:46

+0

首先,PdfStamper依賴於派生自PdfWriter的類,並不要求您逐頁複製,而且在底層也沒有這樣做。 – mkl 2014-10-16 22:29:15

回答

0

在官方iText網站上有幾十個基於iText book的Java示例。 SVN存儲庫中的C#中也提供了這些示例。有縮短的鏈接,這些例子格式如下:http://tinyurl.com/itextsharpIIA2C07

在這種情況下,07點從第7章的例子。如果你需要第8章,由08

第7章更換07章您需要了解如何使用PdfStamper添加註釋。您確實需要一個PdfWriter實例,並且在將Java示例與其C#端口進行比較時,您會發現stamper.getWriter()的C#計數器部分爲stamper.Writer

+0

非常感謝布魯諾。 – Tigran 2014-10-17 14:56:54

相關問題