2

iTextSharp を使用して、microsofts レポート ビューアーからの複数の pdf を結合しています。以下のコードの page.AddImage(image__1) は、エラー Object reference not set to an instance of an object をスローしています。何も設定されていないものが表示されません。レポート ビューアーからレポートに参加し、透かし画像を追加する別の方法はありますか?

    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
4

2 に答える 2

-1

私の出版社である Manning Publications に、私の本の第 6 章を無料で提供するよう依頼しました。この章では Java の例しか示していませんが、すべての例は便宜上C# に移植されています。

この章を読むと、次のような間違いを犯していることに気付くでしょう。

  1. / の代わりに /PdfReaderを使用PdfWriterして既存のドキュメントにコンテンツを追加しています。素敵な透かしの例が必要な場合は、StampStationery.csの例の ManipulatePdf メソッドを見てください。別の PDF から取得した背景ページの代わりに画像を追加するには、に置き換えます。ここでは、画像を透かしとして使用する方法についても学習します: PDF ファイルに透かしを追加するには?PdfReaderPdfStamperbackground.addTemplate()background.addImage()
  2. の代わりに既存のドキュメントを連結するためにPdfReader/を使用しています。そうすることで、あらゆる種類の問題の危険にさらされます: たとえば、ページの一部が切り取られたり、リンクが削除されたり、注釈が失われたりします... この質問に対する私の回答を読んでください:ドキュメントを正しくマージするには?PdfWriterPdfCopy
  3. PdfImportedPage読み取り専用であるという事実を無視しています。PdfCopyオブジェクトを作成した後のコンテキストでのみコンテンツを追加できPageStampます。ConcatenateStamp.csの例を見てください。

要約: あなたの質問は多かれ少なかれ、以前に StackOverflow で回答された他の質問 (の組み合わせ) の複製です。ドキュメントの公式ソースの 1 つではないソースからコードをコピーして貼り付けたようです。

于 2013-04-12T11:22:14.017 に答える