# PostScript mit Java "drucken"



## fantrixx (17. Nov 2006)

Hi all,

ich würde gerne eine PowerPoint oder Word Datei in ein Phostscript "drucken" mit Java ohne das der Benutzer igend welche bestätigungen oder sowas klicken muss ?

Nur finde ich keine Ansatz mit welcher Bibliothek ich sowas verwiklichen kann ?

Weiss jmd. von euch wie man das lösen könnte ?


----------



## Wildcard (17. Nov 2006)

Zuerst mal musst du das Ding auslesen. Das geht zB mit POI.
Ghostscript Bibliotheken kenne ich persönlich nicht, aber PDF beispielsweise geht mit iText.
Wenn ein GhostScript Drucker installiert ist könnte man das Dokument auch einfach damit 'ausdrucken'...


----------



## marble (17. Nov 2006)

ich hab sowas mal gemacht... das geht alles.. kannst sogar manuell pageFlip machen etc... warte ich schau kurz im net..


```
import java.awt.PrintJob;
import java.io.*;
import javax.print.*;

public class Test11 {
    public static void main(String[] args) {
        try {
            // Open the image file
            InputStream is = new BufferedInputStream(
                new FileInputStream("c:\\gif-file.gif"));

            // Prepare the output file to receive the postscript
            OutputStream fos = new BufferedOutputStream(
                new FileOutputStream("c:\\ps-file.ps"));

            // Find a factory that can do the conversion
            DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
            StreamPrintServiceFactory[] factories =
                StreamPrintServiceFactory.lookupStreamPrintServiceFactories(
                    flavor,
                    DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType());

            if (factories.length > 0) {
                StreamPrintService service = factories[0].getPrintService(fos);

                // Create the print job
                DocPrintJob job = service.createPrintJob();
                Doc doc = new SimpleDoc(is, flavor, null);

                // Monitor print job events; for the implementation of PrintJobWatcher,
                // see e702 Determining When a Print Job Has Finished
                PrintJobWatcher pjDone = new PrintJobWatcher(job);

                // Print it
                job.print(doc, null);

                // Wait for the print job to be done
                pjDone.waitForDone();
                // It is now safe to close the streams
            }

            is.close();
            fos.close();
        } catch (PrintException e) {
        } catch (IOException e) {
        }
    }
}







/// und jetzt die andere klasse

import javax.print.DocPrintJob;
import javax.print.event.PrintJobAdapter;
import javax.print.event.PrintJobEvent;

class PrintJobWatcher {
    // true iff it is safe to close the print job's input stream
    boolean done = false;

    PrintJobWatcher(DocPrintJob job) {
        // Add a listener to the print job
        job.addPrintJobListener(new PrintJobAdapter() {
            public void printJobCanceled(PrintJobEvent pje) {
                allDone();
            }
            public void printJobCompleted(PrintJobEvent pje) {
                allDone();
            }
            public void printJobFailed(PrintJobEvent pje) {
                allDone();
            }
            public void printJobNoMoreEvents(PrintJobEvent pje) {
                allDone();
            }
            void allDone() {
                synchronized (PrintJobWatcher.this) {
                    done = true;
                    PrintJobWatcher.this.notify();
                }
            }
        });
    }
    public synchronized void waitForDone() {
        try {
            while (!done) {
                wait();
            }
        } catch (InterruptedException e) {
        }
    }
}
```


----------



## marble (17. Nov 2006)

ich hab das ganze von der seite:

http://javaalmanac.com/egs/javax.print/WaitForDone.html


----------



## fantrixx (17. Nov 2006)

von iText habe ich schon gelesen und war schon am überlegen ob ich das nutze aber ich werde mir erstmal den Code von marble angucken vll. kann ich dann ja ein postScript erstellen und dann mit net batch Datei an den Acrobat Distiller schicken.
Ich werde mich dann melden wenn ich mich entschienden habe...


----------



## fantrixx (8. Dez 2006)

So ich habe mich für die Lösung von marble entschieden nur habe ich vollgendes Prob. mit dem Distiller.
Ich konventiere eine *.txt Datei zu einer *.ps Datei mit dem Code. Das funktioniert anscheinend.
Danach werde ich diese *.ps Datei in den Distiller nur mach der Probleme.


```
Stack:
/Font
(AvantGarde-Book)
/AvantGarde-Book
-mark-
/FL


%%[ Flushing: rest of job (to end-of-file) will be ignored ]%%
%%[ Warning: PostScript error. No PDF file produced. ] %%
Dauer: 0 Sekunden (00:00:00)
**** Auftragsende ****
```

Leider kann ich damit nicht viel anfangen. Icgh hoffe das ihr wisst woran das liegen könnte ?! (und ja ich weiss das gehört hier nicht rein)


----------



## hupfdule (8. Dez 2006)

Kommt denn nur der Distiller damit nicht klar oder auch andere Programme (ghostview, z.B.)?


----------



## fantrixx (8. Dez 2006)

Hi,

ich kann die *.txt Datei öffnen aber kann nichts sehen außer ein leeres Blatt. Dann habe ich mir gedacht das der Code da oben nur für Bilder ist und habe ein .gif mit dem Code da oben in ein .ps File konventiert und siehe da mit Gohstgum geöffnet sehe ich meine zeichnung.
Danach habe ich die Bild .ps Datei in Distiller gepackt und der hat dann auch ein Super PDF erstellt 
So das ich möchte aber nicht nur Bilder sondern auch txt konventieren könne, dass geht leider nicht.
Wenn ich die Text .ps Datei in Distiller werfe kommt das heraus:


```
Start: Freitag, 8. Dezember 2006 um 15:55:41
Quelle: ps-fileText.ps
Ziel: C:\ps-fileText.pdf
Adobe PDF-Einstellungen: C:\Dokumente und Einstellungen\All Users\Dokumente\Adobe PDF\Settings\Standard.joboptions
%%[ Warning: Empty job. No PDF file produced. ] %%
Dauer: 0 Sekunden (00:00:00)
**** Auftragsende ****
```


----------



## fantrixx (8. Dez 2006)

Ich habe mir den Code angeguckt und wie es scheint ist der nur für GIF dateien:


```
DocFlavor flavor = DocFlavor.INPUT_STREAM.GIF;
```

Ich hoffe mal das es dafür ne Lösung gibt das der auch .doc oder andere Dateien konventieren kann. 
Leider finde ich in der API unter  DocFlavor nichts bruachbares


----------



## fantrixx (8. Dez 2006)

Tja wie es scheint kann ich mit dem Code da oben nicht viel anfangen weil der INPUT_STREAM leider nur ein kleine anzahl von Dateien lesen kann. Und wie es scheint kann ich meine .doc oder .txt Dateien nicht mehr in PDF's umwandeln


----------



## DaKo (11. Dez 2006)

mit iText schon


----------



## fantrixx (13. Dez 2006)

Ich habe mich für eine andere Lösung entschieden.
Ich habe mir einen PostScript Drucker installiert und wollte dann mit Java auf diesen Drucker drucken.
Also muss dem Drucker mitgegebne werden welche Datei genommen werden soll und wo die Datei hingespeichert wird. Und das alles OHNE eine Eingabe des Benutzers ?!
Würde das funktionieren und wenn "ja" wie ?

mfg


----------



## fantrixx (13. Dez 2006)

Ich habe im Internet gesucht und nicht gefunden wie man andere Dateien als JPEG, GIF, PDF, TXT drucken kann. 
Leider ... und wie es scheint kann man auch nicht einstellen das der Benutzer keine eingabe machen braucht ...


----------

