Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] Stampare in file .pdf

Ho la seguente necessita':
- salvare una stampa non su carta, ma in un file pdf.
Esiste il PDFWriter di Acrobat che esegue questa procedura installando
una stampante che, dando il comando di stampa, richiede il nome con cui
salvare il file e lo salva!
Poiche' il mio programma gira su NT come servizio ed ho la necessita' di
dare ogni volta al file un nome diverso ho tentato il suggerimento del
Knowledge Database di Adobe: Utilizzare una particolare chiave del
registro per inserire il nome del file ed evitare l'apparizione del
dialog box.
Questa opzione funziona in modalita' normale, non in background (oops,
come servizio).
In quest'ultimo caso appare infatti un messaggio di errore del
pdfwriter.
Una ricerca nei NG mi ha ripotato piu' post che suggeriscono che questo
errore e' risolubile facendo girare il programma non come servizio.
Inoltre il Knowledge Database di Adobe suggerisce che questo errore e'
della applicazione e non del driver della stampante! Mah ;-(
Allora ho cambiato strada ed ho tentato di utilizzare ghostscript e
Redmon:
Redmon ridirige l'output generato dal driver di una stampante
(postscript) verso un programma (in questo caso gs) che converte da ps a
pdf.
Ho impostato il tutto correttamente e quando tento di stampare da una
applicazione tipo word o altro ottengo il file correttamente.
E sino ad ora eravamo OT ;-)
Quando tento di stampare da VB utilizzando l'oggetto Printer con questa
particolare stampante virtuale non viene salvato il file pdf con il nome
da me assegnato.
Viene invece generato un file  c:\windows\RPT1 (o in altre cartelle) di
tipo ps e che contiene il corretto output di stampa (RPT1 e' il nome
della porta creata da Redmon per ridirigere l'output)
Riporto il codice di VB (sfrondato)
'     imposta la stampante
    Dim prn As Printer
    For Each prn In Printers
        If prn.devicename = pdfprinter Then
            Set Printer = prn
            Exit For
        End If
    Next prn
    Set prn = Nothing
.....
istruzioni di stampa
    Printer.print "pluto"
.....
    Printer.EndDoc
VB6 SP5
GS 6.01
Redmon 1.5 impostato come segue:
Programma su cui viene ridiretto l'output:
c:\src\aladdin\gs6.01\bin\gswin32c.exe
Argomenti:
@c:\src\aladdin\pdfwrite.rsp -sOutputFile="c:\pippo.pdf" -c save pop -f
-
Output:
Program Handles Output
c:\src\aladdin\pdfwrite.rsp:
-Ic:\src\aladdin\gs6.01\lib;c:\src\aladdin\fonts
-sDEVICE=pdfwrite
-r300
-dNOPAUSE
-dSAFER
-sPAPERSIZE=a4
Le prove con gs e redmon le ho effettuate su una macchina con win98se.
Se qualcuno ha dei suggerimenti o sa indicarmi dove trovare informazioni
...
grazie
	maxx

Io per generare il pdf utilizzo la stampante Distiller e non la PDFWriter,
comunque la cosa non dovrebbe cambiare. Il probelma è da un altra parte. La
stampante acroba crea il pdf con il nome assegnato al job che viene creato
nella coda della stampante. Sfortunatamente VB non permette di poter
assegbare il nome al job. Io personalmente ho usato un oggetto esterno per
stampare che mi da la possibilità di attribuire il nome al job di stampa e
quindi ottengo sempre file con il nome univoco. E' possibile tuttavia fare
lo stesso con le api d windows o comunque magari, girando su i vari siti
dedicati a vb, trovare il modo di dare un nome al job di stampa usando
l'oggetto printer del VB.
Dario Di Marino

Io ho avuto lo stesso problema, ma ho risolto il tutto direttamente da VB :
Dim Dist As Object
Set Dist = CreateObject("PDFDistiller.PDFDistiller.1")
Dist.FileToPDF txtSource.Text, txtTarget.Text, 0
Set Dist = Nothing
In questo modo decido quale nome dare al file PDF. Ovviamente, però, il file
sorgente deve essere PostScript...
Bye Bye
Fabio GRANDE

 l'oggetto printer del VB.
Credo di non aver capito il tuo suggerimento. Cosa c'entra il nome del
file con il job di stampa?
ciao
	maxx

 --
...AZZZ....
No! Per fortuna non si tratta di un server! E' solo una macchina con
WinNT WS utilizzata per monitorare dei routers. 
ciao
	maxx

 - salvare una stampa non su carta, ma in un file pdf.
Mi sono reso conto che mi sono andato a complicare la vita:
- creo prima un file ps utilizzando come porta di una stampante
postscript un file
- poi con ghostscript o analogo trasformo il ps in pdf (in background).
grazie comunque per i suggerimenti ...
ciao
	maxx