Drucken eines byte Arrays (PDF)

  • C#

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Drucken eines byte Arrays (PDF)

    Hallöchen,

    ich suche eine Möglichkeit eine PDF zu drucken die ich von einer Schnittstelle als byte array zurück bekomme (naja als Base64 Encodiert).
    Base64 in das Byte Array zu wandeln ist kein Problem das klappt. Ich kann das ganz auch als File speichern und öffnen alles kein Problem.

    Nun möchte ich aber gerne das ganze automatisiert drucken. Hintergrund ist der das dass ganze angefordert wird bei der API ich das zurück bekomme
    und dann wird das ganz auf dem eingestellten Drucke gedruckt.

    Habt ihr eine Möglichkeit wie ich das hinbekomme mit dem drucken? Ein Bild / Image zu drucken ist ja ganz easy aber PDF da stoße ich an meine Grenzen.

    Wenn ich Bilder drucke mache ich das immer so:

    C#-Quellcode

    1. public void printLabel(byte[] label, string fileName)
    2. {
    3. PrintDocument pd = new PrintDocument();
    4. bool printToFile = true; //zum testen
    5. pd.PrinterSettings.PrinterName = printerName; //hier steht der Microsoft print to pdf drucker drin
    6. PaperSize ps = new PaperSize();
    7. pd.DefaultPageSettings.Landscape = true;
    8. if (printToFile)
    9. {
    10. pd.PrinterSettings.PrintToFile = true;
    11. pd.PrinterSettings.PrintFileName = Path.Combine(Environment.CurrentDirectory, $"{fileName}_{DateTimeOffset.Now.ToUnixTimeSeconds().ToString()}.pdf");
    12. }
    13. pd.PrintPage += (sender, args) =>
    14. {
    15. using (var ms = new MemoryStream(label))
    16. {
    17. args.Graphics.DrawImage(System.Drawing.Image.FromStream(ms), args.PageBounds);
    18. }
    19. };
    20. pd.Print();
    21. }


    Das klappt aber natürlich nicht mit PDF´s. Wäre für jede Hilfe dankbar.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Wie mache ich dies? Also wie sende ich dem Drucker das PDF? Wichtig ist ohne User Interaktion.

    Alles was ich per Google gefunden habe setzt vorraus das der Acrobat Reader installiert ist oder ich eine Third Party DLL einbinde.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    kann leider gerade nciht testen obs macht was es soll, da ich zuhause keinen Drucker hab, aber in theorie müsste es so klappen:

    VB.NET-Quellcode

    1. ​Private Sub PrintTestPages()
    2. Dim oProcess As New System.Diagnostics.Process
    3. With oProcess.StartInfo
    4. .CreateNoWindow = True
    5. .WindowStyle = ProcessWindowStyle.Hidden
    6. .Verb = "print"
    7. .Arguments = "Actual Size"
    8. .UseShellExecute = True
    9. .FileName = "c:\mydocumentfolder\test.pdf"
    10. End With
    11. oProcess.Start()
    12. End Sub
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Hi,
    du könntest dafür entweder dafür eine Library wie z.B. ABCPdf (websupergoo.com/) verwenden. Oder aber du speicherst die Datei in einem Temp-Order zwischen und sendest diese direkt an einen PDF-Drucker. Oder kann man davon ausgehen, dass der Adobe Reader auf dem Client installiert ist? Dann kann man wohl einfach einen Prozess starten

    C#-Quellcode

    1. Process p = new Process( );
    2. p.StartInfo = new ProcessStartInfo( )
    3. {
    4. CreateNoWindow = true,
    5. Verb = "print",
    6. FileName = path //Pfad zur temporären Datei
    7. };
    8. p.Start( );


    Kannst du ja mal ausprobieren, ob das so für dich funktioniert.
    Danke euch beiden @asusdk und @ISliceUrPanties aber dies öffnet ja auch nur den Adobe Reader zum drucken.

    Es ist zwingend erforderlich das dass ganz im Hintergrund passiert OHNE das irgendein Fenster aufgeht. Einfach nur drucken quasi.
    Die Library kommt wohl nicht infrage da wir das ganze Kommerziell nutzen und wir nicht unbedingt tausende Euronen für etwas rausschmeißen wollen
    was sicher auch so geht irgendwie.

    Besteht die Möglichkeit evtl. das PDF in ein IMAGE umzuwandeln mit .NET Boardmitteln? Dann könnte ich ja meine alte Methode weiter verwenden.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    hm installier dir den Foxxit Reader und versuchs damit:

    VB.NET-Quellcode

    1. Dim pdfProcess As Process = New Process
    2. pdfProcess.StartInfo.FileName = "C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe" ' Pfad zur exe des Readers
    3. pdfProcess.StartInfo.Arguments = $"-p {SelectedServiceReportItem.ServiceReportFilePath}" ' SelectedServiceReportItem.ServiceReportFilePath ist der Pad zur PDF die du drucken willst
    4. pdfProcess.Start()
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Du könntest probieren, einen PDF-Drucker zu installieren und anschließend die Datei per File.Copy([File], [PrinterName], true) an den Drucker zu senden.
    Mit System.Drawing.Printing.PrinterSettings.InstalledPrinters kannst du alle installierten Drucker herausfinden.

    ----
    Ignorier das. Das wird dir nicht helfen. Das PDF hast du ja schon :S

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ISliceUrPanties“ ()

    @xChRoNiKx Mit dem Adobe Reader hast Du keine Chance, das PDF hidden zu drucken.
    Dies hier klingt auch sehr interesant, kommt unter W10 aber nicht ohne Adobe aus.
    yourhelpcenter.de/2010/11/c-pd…ter-drucken-batchbetrieb/

    Sieh Dir mal das hier an, scheint public zu sein:
    dynamicpdf.com/examples/print-…1T0wBzEAAYASAAEgJBaPD_BwE
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @asusdk da muss ich ja auch wieder eine extra Software installieren wäre suboptimal.

    @RodFromGermany danke für die Links. Die DynamicPDF Lib kann ich so einfach installieren und nutzen ohne eine Lizenz einzugeben.
    Allerdings glaube ich nicht das dass so gewollt ist, und da wir das Tool kommerziell vertreiben wird hier auch wieder ein Kauf nötig sein geh ich von aus.
    Aber die scheint auf den ersten Blick nicht ganz so teuer zu sein behalte mich mal im Hinterkopf.

    Gibt es eine Möglichkeit die PDF in ein IMAGE umzuwandeln um das ganze PDF Zeug zu umgehen mit NET Boardmitteln? Das würde mich ja dann auch ans Ziel führen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    also ich hab jetzt den ganzen Abend lang nach Möglichkeiten gesucht, entweder versagen meine Google Skills, oder es ist schlicht nicht möglich eine pdf zu drucken ohne eine entsprechende Software und/oder .dll welche in kommerzieller Nutzung allesamt Lizenzkosten verlangen würden.
    Evtl. findet ja doch noch jemand eine Lösung, ich fände das auch sehr interessant =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @asusdk Zu dem selben Schluss bin ich auch gekommen. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Mika2828 schrieb:

    Schau dir mal pdftoprinter an. Das ist ein Commandozeilen Tool. Es gibt auch einen .Net Wrapper auf GitHub:

    github.com/svishnevsky/PDFtoPrinter


    Danke für den Link das sah bis ich auf die Seite von Tracker Software kam vom Licensing her gut aus doch bei Tracker Software steht schon:
    ​The PDF-XChange Viewer evaluation version is free for private and commercial use, provided it is not bundled with other software for financial gain.


    Danke trotzdem @Mika2828 für deinen Vorschlag.

    @asusdk und @RodFromGermany ich werde dann wohl einfach mal mit der IT der REST API sprechen ob die nicht statt einer PDF auch Images zur Verfügung stellen können.

    Ich habe auch gesehen das DevExpress auch PDF´s drucken kann und soweit ich weiß ist das ja auch .NET also muss es ja eine Möglichkeit geben:
    docs.devexpress.com/OfficeFile…-the-pdf-printer-settings

    Ich werde erstmal mit der Suche nicht aufgeben. Sollte noch jemand eine Idee habe gerne her damit.

    Entweder um die PDF zu drucken oder um die PDF in Bilder umzuwandeln (JPEG von jeder Seite z.b.) wäre ich sehr dankbar.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    hm evtl. käme das folgende für ich in Frage:


    bigdotsoftware.pl/rawfileprinter/

    Soweit ich das verstanden habe, kriegste eine Lizenz schon für ne Spende, und darfst die exe in beliebig vielen Programmen weitergeben, auch in kommerziellen projekten.


    Nachtrag: und hier noch etwas das ich mangels drucker schlicht nicht prüfen kann:

    Sending pdf files directly to a network printer, using Windows command line - Super User
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „asusdk“ ()