PDA

View Full Version : Come stampare PDF in JAVA....


dvx80
09-07-2003, 15:35
Dopo un po torno da voi con questo interessante quisito....

Come posso fare a stampare un file PDF da JAVA?????

Ho cercato un po (un bel pò...) sul forum della SUN ma sarà per le mie carenze in inglese o per le mia classica sfortuna quando cerco qualcosa non ho trovato un esempio che funzioni.

Qualcuano mi sa dare una mano ..... plz ....!?!?!?!?

HELPPPPPPPPPPPPPPPPPPPPPPP :muro: :( .....

PGI
09-07-2003, 19:31
Al momento sono fuori gioco per carenza di mezzi (PC-ko, sto scrivendo da un portatile a carbonella). La questione comuque è che benchè l'API di stampa possegga un dataflavor PDF di solito manca il driver che permette alla stampante di interpretare correttamente il flusso di byte e produrre la pagina.

Potresti provare a disegnare il contenuto pdf in un componente fuori schermo e stampare il suo oggetto graphics...è un po' macchinoso ma dovrebbe funzionare.

Per leggere il pdf puoi scegliere una delle due librerie free

qui (http://www.lowagie.com/iText/)
e qui (http://www.etymon.com/pjc/)

Oppure potresti vedere se riesci a passare un comando con Rutime.exec che faccia partire direttamente la stampa di acrobat ma qui la soluzione è monca, perchè l'utente deve avere acrobat sul sistema.

Ciao.

theClimber
09-07-2003, 21:26
Potresti provare con questa library/tool:

http://xml.apache.org/fop/index.html

Per fare un breve riassunto:
- si crea un modello di documento in XML
- si applica l'angine di trasformazione che produce il pdf

Si puo' usare sia standalone che montato in un WebServer, in modo da produrre dinamicamente pdf data un URL.

dvx80
10-07-2003, 07:19
Originally posted by "theClimber"

Potresti provare con questa library/tool:

http://xml.apache.org/fop/index.html

Per fare un breve riassunto:
- si crea un modello di documento in XML
- si applica l'angine di trasformazione che produce il pdf

Si puo' usare sia standalone che montato in un WebServer, in modo da produrre dinamicamente pdf data un URL.

Ho un pò del link che mi hai dato ma non mi sembra che sia quello che cerco.

Ho bisogno semplicemente di un procedura a cui passo il nome file di un PDF e che a sua volta me lo stampi.

Cavolo è possi bile che java sia cosi incasinato per le stampe non è possibile ........

dvx80
10-07-2003, 07:26
Oppure potresti vedere se riesci a passare un comando con Rutime.exec che faccia partire direttamente la stampa di acrobat ma qui la soluzione è monca, perchè l'utente deve avere acrobat sul sistema.

Ciao.

Grazie ma questa soluzione è troppo macchinosa anche se interessante....

Cmq potrei provare a stampare tramite comando con Rutime.exec, ma non avendo mai usato non so come funziona. Puoi istruirmi cosi al volo ?!?!?! Tnx ....

Tornando sui driver com'è mai non esistano ???? Allora potevano fare a meno di mettere il flavor ......

PGI
10-07-2003, 17:37
Originally posted by "dvx80"


Cmq potrei provare a stampare tramite comando con Rutime.exec, ma non avendo mai usato non so come funziona. Puoi istruirmi cosi al volo ?!?!?! Tnx ....

Tornando sui driver com'è mai non esistano ???? Allora potevano fare a meno di mettere il flavor ......

Per stampare il comando è "acrord32 /p /h" seguito dal percorso del file pdf

"/p" sta per stampa e "/h" nasconde la finestra acrobat. Al termine della stampa acrobat dovrebbe chiudersi. Dico dovrebbe perchè non ho al momento modo di provare se stò dicendo delle stupidaggini, abbi pazienza.


String cmd="acrord32 /p /h ";
String file="nomefile.pdf";
Runtime.getRuntime().exec(cmd+file);


Acrord32.exe dovrebbe essere nella cartella di sistema di Windows, altrimenti può darsi che tu debba indicare anche il percorso (tipo d:/acrobat/acrord32)

Per la faccenda del driver, io in effetti non ho capito bene se sia un problema di Java o delle stampanti che non leggono direttamente il PDF. Comunque non funge...

Ciao.

dvx80
11-07-2003, 07:11
Originally posted by "PGI"



Per stampare il comando è "acrord32 /p /h" seguito dal percorso del file pdf

"/p" sta per stampa e "/h" nasconde la finestra acrobat. Al termine della stampa acrobat dovrebbe chiudersi. Dico dovrebbe perchè non ho al momento modo di provare se stò dicendo delle stupidaggini, abbi pazienza.


String cmd="acrord32 /p /h ";
String file="nomefile.pdf";
Runtime.getRuntime().exec(cmd+file);


Acrord32.exe dovrebbe essere nella cartella di sistema di Windows, altrimenti può darsi che tu debba indicare anche il percorso (tipo d:/acrobat/acrord32)

Per la faccenda del driver, io in effetti non ho capito bene se sia un problema di Java o delle stampanti che non leggono direttamente il PDF. Comunque non funge...

Ciao.

Allora funzia xò non mi chiude il pgm appena finito di stampare. E vabbè poco male mi posso accontentare :D.......

Sui driver.
Mi sono accorto anch'io che non funziona ma mi sembra cosi strano..... Appunto volevo capire se era una questione di stampante o proprio di driver. Ma che si sappia a qualcuno è mai funzionato ?????

PGI
11-07-2003, 14:50
Per il fatto che acrobat non si chiuda, dovresti provare a cercare se c'è un comando da passare a Runtime.

Per i formati, ho fatto una breve ricerca. I formati direttamente stampabili dipendono interamente dal supporto presente nel sistema di esecuzione. Se manca un servizio di stampa dedicato ai PDF (e sinceramente non so quale stampante lo fornisca direttamente) succede quello che sappiamo. Per verificare quali formati di file siano supportati dal sistema in uso mi sembra si possa fare così

DocFlavor[] suppDoc=PintServiceLookup.lookupDefaultPrintService().getSupportedDocFlavor();

e poi stampi sullo schermo gli elementi degli array. Dovresti trovare quasi certamente alcuni formati immagine e testo rtf.

A me ad esempio diceva (a suo tempo) che il POSTSCRIPT me lo potevo anche scordare.

dvx80
11-07-2003, 15:53
infatti come voleasi dimostrare non esiste il supporto per il flavor PDF e nemmeno per i POSTSCRIPT.......

E vabbè oramai c'ò rinunciato a farlo diterramente ma xò la soluzione di passare i file al reader mi lascia un pò l'amaro in bocca.....

Quale potrebbe essere una modo per risolvere la cosa in un altra maniera??? Magari con qualche esempio :D .....

Lo so sono uno spacca palle xò, se non ci fossero quelli come me come farebbero i super geni di java dimostrare tutta la loro sapienza :).....

PGI
11-07-2003, 16:10
Appena vedo un supergenio di Java glielo chiedo :D

La soluzione alternativa non c'è. O meglio, poichè la stampante "capisce" solo un certi tipi di file, potresti fare una conversione "al volo" del file PDF in un formato supportato (per vedere com'è fatto un file PDF basta fare una ricerca su google o andare su wotsit.org). A quel punto però mi sembra preferibile la soluzione di cui parlavamo prima, cioè caricare il PDF in un oggetto Graphics e stampare quello (che è una specie di conversione mediata). Proverei anche a fare un esempio, ma attualmente mi manca il PC per farlo :cry: .

Ciao.