2013-04-11 57 views
2

我正在使用iTextSharp將來自microsoft報表查看器的多個pdf連接在一起。下面的代碼中的page.AddImage(image__1)拋出一個錯誤的對象引用未設置爲對象的實例。我沒有看到什麼是無所事事。是否有不同的方式可以從報告查看器加入報告並添加水印圖像?如何將圖像添加到PDF文檔?

mybytes = MSRptViewer1.LocalReport.Render("PDF", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing) 
    reader = New iTextSharp.text.pdf.PdfReader(mybytes) 
    numberOfPages = reader.NumberOfPages 
    currentPageNumber = 0 

    Dim imageFile As String = Server.MapPath("WaterMark.png") 
    Dim buffer As Byte() = IO.File.ReadAllBytes(imageFile) 
    Dim image__1 As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(buffer) 
    image__1.SetAbsolutePosition(100, 100) 

    Do While (currentPageNumber < numberOfPages) 
     currentPageNumber += 1 
     doc.SetPageSize(PageSize.LETTER) 
     doc.NewPage() 

     page = writer.GetImportedPage(reader, currentPageNumber) 
     page.AddImage(image__1) 

     rotation = reader.GetPageRotation(currentPageNumber) 
     If (rotation = 90) Or (rotation = 270) Then 
      cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(currentPageNumber).Height) 
     Else 
      cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0) 
     End If 
    Loop 
+0

可能重複的[如何在現有PDF中插入iTextSharp圖像?](http://stackoverflow.com/questions/583629/how-can-i-insert-an-image-with-itextsharp- in-an-existing-pdf) –

回答

-1

我也問過我的出版商,曼寧出版物,提供chapter 6 of my book是免費的。我知道本章只向你展示Java的例子,但爲了方便起見,所有的例子都是ported to C#

如果你讀這一章,你會發現,你正在做以下錯誤:

  1. 您正在使用PdfReader/PdfWriter將內容添加到現有的文件,而不是PdfReader/PdfStamper。如果您想要一個漂亮的水印示例,請參閱StampStationery.cs示例中的ManipulatePdf方法。將background.addTemplate()替換爲background.addImage()以添加圖像,而不是從另一個PDF獲取的背景頁面。您還可以在此處瞭解有關使用圖像作爲水印的更多信息:How to add a watermark to a PDF file?
  2. 您正在使用PdfReader/PdfWriter連接現有文檔而不是PdfCopy。這樣做可能會導致各種問題:例如部分頁面被切斷,鏈接被刪除,註釋丟失,...請閱讀我對此問題的回答:How to merge documents correctly?
  3. 您忽略了PdfImportedPage爲只讀的事實。在創建PageStamp對象後,您只能在PdfCopy的上下文中添加內容。請看看ConcatenateStamp.cs的例子。

總結:您的問題或多或少是StackOverflow之前回答的其他問題(的組合)的重複。看起來你從一個不是官方文檔來源的源代碼複製/粘貼了一些代碼。

+0

不確定代碼來自哪裏。它已經過了一年多了。 – user1167466

+0

奇怪。 SO說昨天有人問。這可能是一種僥倖。無論如何感謝您接受答案。 –

+0

當時有人問,但是我在 – user1167466