Drucken von byte[ ]-arrays (PDFs)

kleene0105

Mitglied
Hallo Leute,

ich hoffe ihr könnt mir weiterhelfen.

Ich lade mir PDFs von einem Server und lese sie als ByteArray (byte[]) ein, übertrage sie an den Client und kann sie dort mit Hilfe von Adobe Viewer anzeigen.
Der Adobe Viewer hat bei mir nur die Funktionalität der Anzeige und des Blätterns im PDF.

Nun mein Problem: Ich möchte - nach belieben - das PDF auf dem Drucker drucken. Dabei darf keine Datei auf dem Dateisystem enstehen. Potentiell habe ich darauf keinen Zugriff. Ich habe nur das bye[ ]. Nach langem suchen konnte ich bisher keine Lösung finden.

Ich habe es mit dem SWT und dem AWT Rahmenwerk zum Drucken versucht. Leider bekam ich es nicht hin.

Ich freue mich über jede Hilfe.
 
Soo ich habe etwas gefunden.

Von Adobe gibt es einen Viewer, den kann man einbinden. Der ist unter:
AdobeViewer für Java zu finden.

Jedoch hat der einige Probleme mit der Darstellung (Fehlende Schriften und Fehlermeldungen beim zoomen). Befinde es trotzdem gut.
Leider ist die Druckmöglichkeit des Viewers für mich nicht brauchbar, weil es nicht funktioniert.

Nach einigen Recherchen im Internet habe ich noch den PDF Renderer gefunden.
Der kann auch ein Byte-Array als Datenquelle vertragen, kann aber meine PDFs nicht korrekt darstellen. Nutze ich andere PDFs so geht das wunderbar und das Drucken ist auch kein Problem.

Kennt ihr noch mehr kostenfreie Tools, mit denen ich das PDF (als byte[]) an einen Drucker senden kann?
 
PDFs mit Adobe Reader ansehen & drucken

Hallo Gemeinde,

leider hab ich immernoch keine Lösung für mein Problem.

Nun habe ich das byte[ ] als PDF im Dateisystem abgelegt (im Workspace des jeweiligen Benutzters mit einem fest versehenden PDF-Namen).

Mein nächster Versuch ist nun die OLE/ ActiveX - Ebene des Adobe Readers zu benutzen. Jedoch komme ich damit auch nicht unbedingt weiter.
Ich habe diverse Snippets gefunden, die mich nicht weiterbringen.

Ich erzeuge mit folgendem Code einen OLE-Frame und rufe darin den AdobeReader auf.
Code:
 OleFrame frame = new OleFrame(shell, SWT.NONE);
        OleControlSite clientsite;
        try {
            clientsite = new OleControlSite(frame, SWT.NONE, "AcroExch.Document");
        
            clientsite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);
        } catch (SWTException ex) {
            System.out.println("Failed to create <<PowerPoint Document>> : " + ex.getMessage());
            return;
        }
Leider öffnet sich an der Stelle
Code:
clientsite = new OleControlSite(frame, SWT.NONE, "AcroExch.Document");
ein Dateiauswahl-Dialog. Der sollte da nicht kommen.

Folgender Quelltext soll das Dokument in den Reader laden und anzeigen
Code:
//Ort des Workspaces finden
            Location location = Platform.getInstanceLocation();

            //File erzeugen
            File f;
            try {
                f = new File(location.getURL().toURI());
            } catch (URISyntaxException e) {
                f = new File(location.getURL().getPath());
            }
            path = f.getPath() + File.separatorChar + this.pdfName;

            try {
                FileOutputStream fos = new FileOutputStream(path);
                fos.write(this.fileToView.getPdfBytes());
                fos.close();
            } catch (FileNotFoundException ex) {
                System.out.println("FileNotFoundException : " + ex);
            } catch (IOException ioe) {
                System.out.println("IOException : " + ioe);
            }

            //und dann dem adobe übergeben
            int[] rgdispid = automation.getIDsOfNames(new String[] { "LoadFile" });
            int dispIdMember = rgdispid[0];

            Variant[] rgvarg = new Variant[1];
            rgvarg[0] = new Variant(path);

            Variant pVarResult = automation.invoke(dispIdMember, rgvarg);
            this.clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);

Nur funktioniert das alles nicht. :(

Kann mir da jemand weiterhelfen. Swing/ SWT Lösungen sind erwünscht. Vorraussetzung ist Adobe Reader Vers. 8 oder 9.

Vielen Dank
Antje
 
Zurück