Wir wurden häufig von Entwicklern kontaktiert, die ein Programm erstellen möchten, das nach Dokumenten in einem Ordner sucht und diese Dokumente dann automatisch alle ins PDF konvertiert. Um dies zu veranschaulichen, haben wir ein kleines VB.NET Programm erstellt, das genau dies tut.

Der Beispielquellcode ist nicht perfekt. Sie müssen ihre eigene Konfiguration und Fehlerbehandlung hinzufügen. Es dient jedoch dem Zweck zu zeigen, wie dieses Problem grundsätzlich gelöst werden kann.

Wenn sie das Programm ausführen, sucht es nach Dateien im Eingabeordner ..\bin\Debug\input und konvertiert sie in PDF Dokumente im Ausgabeordner ..\bin\Debug\output. Falls etwas schief geht, wird das Eingabedokument in den Fehlerordner kopiert. Wenn die Konvertierung erfolgreich ist, wird das Eingabedokument in den fertiggestellten Ordner kopiert.

    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Text
    Imports System.IO
    Imports pdf7.PdfWriter
    Imports System.Reflection
    
    Module Converter
    
        Sub Main()
            Dim applicationFolder As String = New Uri(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath
            Dim inputFolder As String = Path.Combine(applicationFolder, "input")
            Dim outputFolder As String = Path.Combine(applicationFolder, "output")
            Dim doneFolder As String = Path.Combine(applicationFolder, "done")
            Dim errorFolder As String = Path.Combine(applicationFolder, "errors")
            If Not Directory.Exists(inputFolder) Then Directory.CreateDirectory(inputFolder)
            If Not Directory.Exists(outputFolder) Then Directory.CreateDirectory(outputFolder)
            If Not Directory.Exists(doneFolder) Then Directory.CreateDirectory(doneFolder)
            If Not Directory.Exists(errorFolder) Then Directory.CreateDirectory(errorFolder)
            Dim printerName As String = PdfUtil.DefaultPrinterName
            Dim inputFileNames As String() = Directory.GetFiles(inputFolder)
    
            For Each inputFileName As String In inputFileNames
                Dim isError As Boolean = False
                Dim errorMessage As String = Nothing
                Console.Write(String.Format("Printing {0}... ", Path.GetFileName(inputFileName)))
                Dim outputFileName As String = Path.Combine(outputFolder, Path.GetFileName(inputFileName) & ".pdf")
                Dim settings As PdfSettings = New PdfSettings()
                settings.PrinterName = printerName
                settings.SetValue("Output", outputFileName)
                settings.SetValue("ShowSettings", "never")
                settings.SetValue("ShowSaveAS", "never")
                settings.SetValue("ShowProgress", "no")
                settings.SetValue("ShowProgressFinished", "no")
                settings.SetValue("ShowPDF", "no")
                settings.SetValue("ConfirmOverwrite", "no")
                Dim statusFileName As String = Path.Combine(Path.GetTempPath(), "converter_status.ini")
                If File.Exists(statusFileName) Then File.Delete(statusFileName)
                settings.SetValue("StatusFile", statusFileName)
                settings.WriteSettings(PdfSettingsFileType.RunOnce)
    
                Try
                    PdfUtil.PrintFile(inputFileName, printerName)
                    PdfUtil.WaitForFile(statusFileName, 60000)
                    isError = Not File.Exists(outputFileName)
                Catch ex As Exception
                    isError = True
                    errorMessage = ex.Message
                End Try
    
                If isError Then
                    File.Move(inputFileName, Path.Combine(errorFolder, Path.GetFileName(inputFileName)))
                Else
                    File.Move(inputFileName, Path.Combine(doneFolder, Path.GetFileName(inputFileName)))
                End If
    
                If isError Then
    
                    If String.IsNullOrEmpty(errorMessage) Then
                        Console.WriteLine("Error")
                    Else
                        Console.WriteLine(errorMessage)
                    End If
                Else
                    Console.WriteLine("Done")
                End If
            Next
        End Sub
    
    End Module
    

Beispielquelldateien sind in der nachfolgenden ZIP-Datei enthalten, die hier heruntergeladen werden kann.

Downloads

Anhang Größe
Beispiel herunterladen 273.7 KB

Top