Microsoft Print to PDF

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Datenlogistik.

    Microsoft Print to PDF

    Hallo zusammen ...

    ... ich drucke ein Dokument via Microsoft to PDF Printer und übergebe den Dateinamen in PrintFileName.
    ... dazu verwende ich eine eigene Klasse welche die Druckaufgaben ausführt (alles perfekt).

    Alles soweit gut ... die Datei wird ordnungsgemäß geschrieben.

    Nun möchte ich das PDF-Dokument auslesen und in die Datenbank übertragen.
    ... Fehler: Der Prozess kann nicht auf die Datei "C:\ProgramData\QLancer\TEMP\Rechnung_00002_2021-07-25_012622.pdf" zugreifen, da sie von einem anderen Prozess verwendet wird
    ... bei: buffer = My.Computer.FileSystem.ReadAllBytes(Dateiname)

    Ich habe alle möglichen Disposes und Nothings ausprobiert.

    Daher meine Frage an die Community ... hat jemand eine Idee??????
    Naja, ohne den Dateierstellungscode zu kennen, wird's ziemliches Spekulatiusbacken. Daher: wie sieht dieser aus?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Vielen Dank für die richtige Fährte.

    Die Datei in einem ReadOnly Stream zu öffnen versucht, die eigentliche Ursache zu umgehen.
    ... wie folgt umgesetzt:

    VB.NET-Quellcode

    1. Using br = New IO.BinaryReader(New IO.FileStream(Dateiname, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.ReadWrite))
    2. buffer = br.ReadBytes(br.BaseStream.Length)
    3. End Using


    ... keine Fehlermeldung, aber auch keine Daten die gelesen werden.

    Ursache: Dok.Print (PrintToFile=True) scheint die Verarbeitung an das Betriebssystem abzugeben und der Folgecode greift auf die Datei zu bevor ordnungsgemäß geschrieben und geschlossen.
    (bei näherer Überlegung eigentlich logisch)

    Wie folgt gelöst:

    VB.NET-Quellcode

    1. Schleife:
    2. Try
    3. buffer = My.Computer.FileSystem.ReadAllBytes(Dateiname)
    4. Catch ex As Exception
    5. GoTo Schleife
    6. End Try


    ... eine TimeOut-Behandlung fehlt hier natürlich noch.

    Nochmals vielen Dank ... hat sehr geholfen.
    GoTo?!? Naja … auch wenn es einer der wenigen Fälle ist, wo man vielleicht GoTo nutzen könnte, hier ne Alternative

    VB.NET-Quellcode

    1. Do
    2. Try
    3. buffer = My.Computer.FileSystem.ReadAllBytes(Dateiname)
    4. Exit Do
    5. Catch IOEx As System.IO.IOException
    6. End Try
    7. Loop
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.