Mit VB.NET Dokumente eines Ordners automatisch ins PDF konvertieren / PDF Drucker
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 |