2013-04-11 3 views
2

Я использую iTextSharp для объединения нескольких PDF-файлов вместе с программой просмотра отчетов Microsoft. 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

Возможный дубликат [Как я могу вставить изображение с iTextSharp в существующий PDF?] (Http://stackoverflow.com/questions/583629/how-can-i-insert-an-image-with-itextsharp- in-an-existing-pdf) –

ответ

-1

Я спросил мой издатель, Manning Publications, чтобы предложить chapter 6 of my book бесплатно. Я знаю, что эта глава показывает только примеры на Java, но для вашего удобства все примеры были ported to C#.

Если вы читаете эту главу, вы узнаете, что вы делаете следующие ошибки:

  1. Вы используете PdfReader/PdfWriter для добавления содержимого в существующий документ вместо PdfReader/PdfStamper. Если вам нужен хороший пример водяного знака, посмотрите на метод ManipulatePdf в примере StampStationery.cs. Замените 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 доступен только для чтения. Вы можете добавлять контент только в контексте PdfCopy после создания объекта PageStamp. Пожалуйста, взгляните на пример ConcatenateStamp.cs.

Подведено: ваш вопрос более или менее является дубликатом (комбинацией) других вопросов, которые были заданы ранее в StackOverflow. Кажется, что вы копируете/вставляете какой-то код из источника, который не является одним из официальных источников документации.

+0

Не знаете, откуда этот код. Его больше года. – user1167466

+0

Странно. SO говорит, что вчера его спросили. Это, наверное, случайность. Спасибо, что приняли ответ в любом случае. –

+0

Тогда его спросили, но этот код для конкатенации документов использовался более года в продукте, который я работаю на – user1167466

Смежные вопросы