PDFSharp导出JPG - ASP.NET

时间:2014-10-16 14:54:52

标签: vb.net ajaxcontroltoolkit pdfsharp

我正在使用ajaxfileupload控件将pdf文件上传到服务器。在服务器端,我想将pdf转换为jpg。以PDFsharp Sample: Export Images为指导,我得到了以下信息:

Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports PdfSharp.Pdf
Imports System.IO
Imports PdfSharp.Pdf.IO
Imports PdfSharp.Pdf.Advanced

Namespace Tools

Public Module ConvertImage

Public Sub pdf2JPG(pdfFile As String, jpgFile As String)

        pdfFile = System.Web.HttpContext.Current.Request.PhysicalApplicationPath & "upload\" & pdfFile

        Dim document As PdfSharp.Pdf.PdfDocument = PdfReader.Open(pdfFile)

        Dim imageCount As Integer = 0
        ' Iterate pages
        For Each page As PdfPage In document.Pages
            ' Get resources dictionary
            Dim resources As PdfDictionary = page.Elements.GetDictionary("/Resources")
            If resources IsNot Nothing Then
                ' Get external objects dictionary
                Dim xObjects As PdfDictionary = resources.Elements.GetDictionary("/XObject")
                If xObjects IsNot Nothing Then
                    Dim items As ICollection(Of PdfItem) = xObjects.Elements.Values
                    ' Iterate references to external objects
                    For Each item As PdfItem In items
                        Dim reference As PdfReference = TryCast(item, PdfReference)
                        If reference IsNot Nothing Then
                            Dim xObject As PdfDictionary = TryCast(reference.Value, PdfDictionary)
                            ' Is external object an image?
                            If xObject IsNot Nothing AndAlso xObject.Elements.GetString("/Subtype") = "/Image" Then
                                ExportImage(xObject, imageCount)
                            End If
                        End If
                    Next
                End If
            End If
        Next
    End Sub

    Private Sub ExportImage(image As PdfDictionary, ByRef count As Integer)
        Dim filter As String = image.Elements.GetName("/Filter")
        Select Case filter
            Case "/DCTDecode"
                ExportJpegImage(image, count)
                Exit Select

            Case "/FlateDecode"
                ExportAsPngImage(image, count)
                Exit Select
        End Select
    End Sub

    Private Sub ExportJpegImage(image As PdfDictionary, ByRef count As Integer)
        ' Fortunately JPEG has native support in PDF and exporting an image is just writing the stream to a file.
        Dim stream As Byte() = image.Stream.Value
        Dim fs As New FileStream([String].Format("Image{0}.jpeg", System.Math.Max(System.Threading.Interlocked.Increment(count), count - 1)), FileMode.Create, FileAccess.Write)
        Dim bw As New BinaryWriter(fs)
        bw.Write(stream)
        bw.Close()
    End Sub

    Private Sub ExportAsPngImage(image As PdfDictionary, ByRef count As Integer)
        Dim width As Integer = image.Elements.GetInteger(PdfImage.Keys.Width)
        Dim height As Integer = image.Elements.GetInteger(PdfImage.Keys.Height)
        Dim bitsPerComponent As Integer = image.Elements.GetInteger(PdfImage.Keys.BitsPerComponent)

        ' TODO: You can put the code here that converts vom PDF internal image format to a Windows bitmap
        ' and use GDI+ to save it in PNG format.
        ' It is the work of a day or two for the most important formats. Take a look at the file
        ' PdfSharp.Pdf.Advanced/PdfImage.cs to see how we create the PDF image formats.
        ' We don't need that feature at the moment and therefore will not implement it.
        ' If you write the code for exporting images I would be pleased to publish it in a future release
        ' of PDFsharp.
    End Sub

End Module

End Namespace

在我调试时,它会在ExportImage中的Dim filter As String = image.Elements.GetName("/Filter")上爆炸。消息是:

  

在线路336,柱21在〜未处理的异常:46138 /的ScriptResource.axd d = LGq0ri4wlMGBKd-1vxLjtxNH_pd26HaruaEG_1eWx-epwPmhNKVpO8IpfHoIHzVj2Arxn5804quRprX3HtHb0OmkZFRocFIG-7A-SJYT_EwYUd - x9AHktpraSBgoZk4VJ1RMtFNwl1mULDLid5o5U9iBcuDi4EQpbpswgBn_oI1& T公司= ffffffffda74082d   0x800a139e - JavaScript运行时错误:错误提升上传完成事件并开始新上传

对问题可能是什么的任何想法?这似乎与ajaxfileupload控件有关,但我不明白为什么它会在这里咆哮。它既不在这里也不在那里,但我知道我还没有使用jpgFile。

1 个答案:

答案 0 :(得分:0)

PDFsharp无法从PDF页面创建JPEG图像:
http://pdfsharp.net/wiki/PDFsharpFAQ.ashx#Can_PDFsharp_show_PDF_files_Print_PDF_files_Create_images_from_PDF_files_3

您引用的样本可以提取PDF文件中包含的JPEG图像。这就是全部。该样本未涵盖所有可能的案例。

长话短说:您显示的代码似乎与错误消息无关。它似乎与你的预期目标无关。