PDFSharp似乎无法打开某些PDF文档

问题描述 投票:0回答:2

我有一个程序,可以将第二页添加到提交给网站的PDF中。我使用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];

错误发生在第二行。当我调试时,它说PageCount = 0,这很奇怪,因为它是一个1页的文档。

asp.net .net pdf pdfsharp
2个回答
0
投票

非常感谢您保存了我的一天!我唯一改善该解决方案的建议是在如下的using块中使用内存流:

  Using memoryStream As MemoryStream = ReturnCompatiblePdf(File.FullName)
      Dim DocPdf As PdfDocument = PdfReader.Open(memoryStream, PdfDocumentOpenMode.Import)
      //Your code here.....
  End Using

-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
© www.soinside.com 2019 - 2024. All rights reserved.