Announcement

Collapse
No announcement yet.

Zieldateiname des Microsoft Office Document Image Writers

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zieldateiname des Microsoft Office Document Image Writers

    Hi,

    ich versuche aus einem PDF-Dokument Tiffs zu generieren, indem ich jede Seite einzeln auf den Microsoft Office Document Image Writer drucke. Dazu splitte ich mir die PDF in Einzelseiten (dazu nutze ich PDF Split And Merge aber das nur nebenbei) und rufe dann eine entsprechende Funktion auf, die so aussieht:

    [highlight=vbnet]
    ...
    Function PrintFilesToTiff(ByVal FilePath as String) As Boolean
    ...
    Dim dateien as String() = IO.Directory.GetFiles(FilePath)
    Dim oldPrinter As String = GetDefaultPrinterName()
    If Not SetDefaultPrinter("Microsoft Office Document Image Writer") Then
    ShowInternalError("Das Programm kann den TIFF-Drucker nicht finden." & vbCrLf & "Bitte beheben Sie das Problem oder informieren Sie einen Administrator.")
    SetDefaultPrinter(oldPrinter)
    Return False
    End If

    Dim pd As New PrintDocument()
    Try
    For Each dateiname As String In dateien
    Dim dummyFilename As String = IO.Path.GetFileNameWithoutExtension(dateiname)
    Dim Blattnummer As Integer = zahl.getLng(strPart(dummyFilename, 2, "BX"))
    pd.PrinterSettings.PrintFileName = strPart(dateiname, 1, "BX") & "B" & Blattnummer.ToString("00") & "_A4.tif"
    PDFDrucken(dateiname)
    strCat(FileList, dateiname, ",")
    Next
    Catch ex As Exception
    ShowInternalError("Ausnahmebehandlung beim Drucken der TIFFs: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace())
    Return False
    Finally
    SetDefaultPrinter(oldPrinter)
    End Try
    ...
    Return True
    End Function

    Public Sub PDFDrucken(ByVal pFilename As String)
    Try
    Dim f As String = IIf(InStr(pFilename, " ") > 0, Chr(34) & pFilename & Chr(34), pFilename)
    Dim starter As New ProcessStartInfo(GetPDFPrintExe(), " /p /h " & f) '"/T " & f
    Dim pro As New Process

    pro.StartInfo = starter
    pro.StartInfo.UseShellExecute = True
    pro.Start()
    Wait(3)

    Dim hAcrobatWindow As IntPtr
    Do
    hAcrobatWindow = pro.MainWindowHandle
    If hAcrobatWindow = 0 Then Exit Do 'Prozess hat kein Fenster (mehr) -> Prozess ist bereits beendet
    If PostMessage(hAcrobatWindow, WM_CLOSE, 0, 0) = 0 Then
    clsLog.LogLine("PostMessage an AcrobatReader fehlgeschlagen:" & Err.LastDllError & " - " & Err.Description)
    End If
    pro.WaitForExit(1000)
    Loop While Not pro.HasExited

    Catch ioex As InvalidOperationException
    clsLog.LogLine("PDFDrucken: Handle des Acrobat Fensters erfragen fehlgeschlagen, Prozess bereits beendet.")
    Catch ex As Exception
    ShowError("Ein Fehler ist aufgetreten:" & ex.Message & vbCrLf & ex.StackTrace)
    Finally
    'Speicher aufräumen
    GC.Collect()
    GC.WaitForPendingFinalizers()
    End Try
    End Sub
    [/highlight]

    Anscheinend reicht es aber nicht, nach der Umstellung auf den Image Writer PrinterSettings.PrintFileName zu setzen, denn ich erhalte trotzdem einen Dateidialog, in dem ich einen Dateinamen angeben muss, und selbst der ist der Dateiname der ursprünglichen PDF-Datei, nur halt mit tif als Endung.

    Muss ich irgendwie die PrinterSettings, die ich in meinem pd umsetze "zurückpropagieren", damit die Einstellung für den Aufruf in PDFDrucken verfügbar ist, und wenn ja, wie mache ich das, oder hängt da irgendwo noch ein ganz anderer Denkfehler drin, und ich kann den Dateiauswahldialog gar nicht umgehen?

    Mit freundlichen Grüßen
    Martin Dietz
Working...
X