PDF in Bilddatei konvertieren

  • VB.NET

    PDF in Bilddatei konvertieren

    Hallo an alle hilfreichen Geister!..........



    Ich bin auf VB.net 2008 ziemlich unerfahren und beschäftige mich gerade mit einem brennenden Problem aus der Praxis:



    Es gilt PDF-Dateien als Bilddatei automatisiert zu speichern. (A0 bis A4-Zeichnungen ins Format Tiff, Komprimierung GTITT4, (Fax 4), Monochrom)

    Grundsätzlich geht das ja auf manuellem Weg über den PDFCreator (virtueller Drucker) hervorragend, da dieser beim Abspeichern ca. 6 verschiedene Bildformate anbietet und diese auch perfekt beherrscht. Gleichzeitig bringt der PDFCreator auch eine COM-Komponente mit, die in VB.net verwendbar ist. Leider sind die Möglichkeiten dieser Schnittstelle fast nicht dokumentiert und auch sehr beschränkt (die 2 mitgelieferten VB.net-Beispiele helfen auch nicht wirklich weiter).



    Nach langem Suchen und ausprobieren bin ich dann auf den PDF2Image-Converter gestoßen, der eigentlich die meisten Optionen verspricht. Mit dieser Trialversion wird auch ein Beispielcode mitgeliefert, den ich allerdings auf VB.net 2008 einfach nicht zum Laufen bekomme:



    Public Class PDF2ImageConverter

    Private Declare Function PDFToImageConverter Lib "pdf2image.dll" _
    (ByVal szPDFFileName As String, ByVal szOutputName As String, _
    ByVal szUserPassword As String, ByVal szOwnPassword As String, _
    ByVal xresolution As Integer, ByVal yresolution As Integer, ByVal bitcount As Integer, _
    ByVal compression As Integer, ByVal quality As Integer, ByVal grayscale As Integer, _
    ByVal multipage As Integer, ByVal firstPage As Integer, ByVal lastPage As Integer) As Integer

    Private Declare Sub PDFToImageSetCode Lib "pdf2image.dll" (ByVal szRegcode As String)

    Public Enum CompressionType
    COMPRESSION_NONE = 1 '/* dump mode */
    COMPRESSION_CCITTRLE = 2 '/* CCITT modified Huffman RLE */
    COMPRESSION_CCITTFAX3 = 3 '/* CCITT Group 3 fax encoding */
    COMPRESSION_CCITTFAX4 = 4 '/* CCITT Group 4 fax encoding */
    COMPRESSION_LZW = 5 '/* Lempel-Ziv & Welch */
    COMPRESSION_JPEG = 7 '/* JPEG DCT compression */
    COMPRESSION_PACKBITS = 32773 '/* Macintosh RLE */
    End Enum

    Public Sub New()

    End Sub

    Public Function ConvertPDFToImage(ByVal strInputPDF As String, ByVal strOutputImage As String, _
    ByVal strUsername As String, ByVal strPassword As String, _
    ByVal lngXDPI As Long, ByVal lngYDPI As Long, ByVal lngBitCount As Long, _
    ByVal enumCompression As CompressionType, ByVal lngQuality As Long, _
    ByVal blnGreyscale As Boolean, ByVal blnMultipage As Boolean, _
    ByVal lngFirstPage As Long, ByVal lngLastPage As Long) As Long

    ' Register PDF to Image Converter Library
    PDFToImageSetCode "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

    ConvertPDFToImage = PDFToImageConverter(strInputPDF, strOutputImage, strUsername, strPassword, _
    lngXDPI, lngYDPI, lngBitCount, enumCompression, lngQuality, blnGreyscale, _
    blnMultipage, lngFirstPage, lngLastPage)

    End Function


    End Class



    Für meine Kenntnisse stellt sich die Frage: Wie bekomme ich die Funktion so hin, dass ich mit einem Klick auf "Button1" einer "Form" die Funktion "ConvertPDFToImage" mit den Parametern
    ("D:\Temp\Seppl.pdf", "D:\Temp\Seppl.tif", "Konrad", "konrad", 300, 300, 2, 4, 2, 0, 0, 1, 1)

    dazu bewegen kann, die PDF-Datei ins Bild zu konvertieren?



    Wie müsste ich das VB.net-Projekt aufbauen und wie die Funktion ansprechen?





    Mein letzter Versuch war:


    PublicClass Form1

    PrivateDeclareFunction PDFToImageConverter Lib"pdf2image.dll" _(
    ByVal szPDFFileName AsString, ByVal szOutputName AsString, _
    ByVal szUserPassword AsString, ByVal szOwnPassword AsString, _ByVal xresolution AsInteger, ByVal yresolution AsInteger, ByVal bitcount AsInteger, _
    ByVal compression AsInteger, ByVal quality AsInteger, ByVal grayscale AsInteger, _
    ByVal multipage AsInteger, ByVal firstPage AsInteger, ByVal lastPage AsInteger) AsIntegerPrivateDeclareSub PDFToImageSetCode Lib"pdf2image.dll" (ByVal szRegcode AsString)
    PublicEnum CompressionType
    COMPRESSION_NONE = 1 '/* dump mode */
    COMPRESSION_CCITTRLE = 2 '/* CCITT modified Huffman RLE */
    COMPRESSION_CCITTFAX3 = 3 '/* CCITT Group 3 fax encoding */
    COMPRESSION_CCITTFAX4 = 4 '/* CCITT Group 4 fax encoding */
    COMPRESSION_LZW = 5 '/* Lempel-Ziv & Welch */
    COMPRESSION_JPEG = 7 '/* JPEG DCT compression */
    COMPRESSION_PACKBITS = 32773 '/* Macintosh RLE */
    EndEnumPublicFunction ConvertPDFToImage(ByVal strInputPDF AsString, ByVal strOutputImage AsString, _
    ByVal strUsername AsString, ByVal strPassword AsString, _ByVal lngXDPI AsLong, ByVal lngYDPI AsLong, ByVal lngBitCount AsLong, _
    ByVal enumCompression As CompressionType, ByVal lngQuality AsLong, _ByVal blnGreyscale AsBoolean, ByVal blnMultipage AsBoolean, _
    ByVal lngFirstPage AsLong, ByVal lngLastPage AsLong) AsLong
    ' Register PDF to Image Converter LibraryPDFToImageSetCode("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
    ConvertPDFToImage = PDFToImageConverter(strInputPDF, strOutputImage, strUsername, strPassword, _
    lngXDPI, lngYDPI, lngBitCount, enumCompression, lngQuality, blnGreyscale, _
    blnMultipage, lngFirstPage, lngLastPage)
    'ConvertPDFToImage = PDFToImageConverter("D:\Temp\Seppl.pdf", "D:\Temp\Seppl.tif", "Konrad", "317konrad", 300, 300, 2, 4, 2, 0, 0, 1, 1)EndFunction
    PrivateSub Button1_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles Button1.Click
    'Dim sender As New ObjectMsgBox("Start")
    sender = ConvertPDFToImage("D:\Temp\Seppl.pdf", "D:\Temp\Seppl.tif", "Konrad", "konrad", 300, 300, 2, 4, 2, 0, 0, 1, 1)MsgBox("Ende")
    EndSub
    EndClass

    Hat jemand einen Tip für mich? Vielen Dank im Voraus!

    mfg
    Konrad