0

Web サイトに送信された PDF に 2 ページ目を追加するプログラムがあります。C# と PDFSharp を使用しています。ほとんどのドキュメントは正常に機能しますが、一部のユーザーは「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。

using PdfSharp;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing.Layout;

PdfDocument rosterInput = PdfReader.Open(FilePath, PdfDocumentOpenMode.Import);

PdfPage rpage = rosterInput.Pages[0];

エラーは 2 行目で発生します。デバッグすると、PageCount = 0 と表示されますが、これは 1 ページのドキュメントであるため奇妙です。

4

2 に答える 2

0

私の一日を救ってくれてありがとう!、解決策を改善するための私の唯一の提案は、次のように using ブロック内でメモリストリームを使用することです:

  Using memoryStream As MemoryStream = ReturnCompatiblePdf(File.FullName)
      Dim DocPdf As PdfDocument = PdfReader.Open(memoryStream, PdfDocumentOpenMode.Import)
      //Your code here.....
  End Using
于 2016-09-15T19:45:51.870 に答える
-1

私は同じ問題を抱えていましたが、以下のコードで解決しました。問題は PDF の互換性によるものでした。

PdfSharp.Pdf.IO.PdfReader.Open(ReturnCompatiblePdf("PDF FILE PATH"), PdfSharp.Pdf.IO.PdfDocumentOpenMode.Import)


Private Function ReturnCompatiblePdf(ByVal sFilename As String) As MemoryStream

    Dim reader As New iTextSharp.text.pdf.PdfReader(sFilename)
    Dim output_stream As New MemoryStream

    ' we retrieve the total number of pages
    Dim n As Integer = reader.NumberOfPages
    ' step 1: creation of a document-object
    Dim document As New iTextSharp.text.Document(reader.GetPageSizeWithRotation(1))
    ' step 2: we create a writer that listens to the document
    Dim writer As iTextSharp.text.pdf.PdfWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(document, output_stream)
    'write pdf that pdfsharp can understand
    writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4)
    ' step 3: we open the document
    document.Open()
    Dim cb As iTextSharp.text.pdf.PdfContentByte = writer.DirectContent
    Dim page As iTextSharp.text.pdf.PdfImportedPage

    Dim rotation As Integer

    Dim i As Integer = 0
    While i < n
        i += 1
        document.SetPageSize(reader.GetPageSizeWithRotation(i))
        document.NewPage()
        page = writer.GetImportedPage(reader, i)
        rotation = reader.GetPageRotation(i)
        If rotation = 90 OrElse rotation = 270 Then
            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)
        End If
    End While

    '---- Keep the stream open!
    writer.CloseStream = False

    ' step 5: we close the document
    document.Close()

    Return output_stream

End Function
于 2015-09-09T09:05:25.750 に答える