Newsgroup: it.comp.lang.visual-basic
Titolo: Stampa PDF da VB

Chiedo scusa già adesso perchè so che l'argomento è già stato discusso, ma
credetemi, dopo un anno di ricerche mi vedo costretto a rompere a chi ne sa
più di me.
Il problema di fondo è stampare una sequenza di file PDF da VB senza
l'intrervento dell'utente, con la possibilità di dirigere la stampa su una
stampante richiesta.
Finora ho utilizzato Adobe Reader lanciato da riga di comando con l'opzione
/T, con il problema di non avere un controllo diretto sulla generazione
dello spool (dovendo stampare diversi file in sequenza ho bisogno di sapere
quando finisce lo spooling del file precedente), risolto per ora con le API
per l'accesso alla coda di stampa ma con diverse complicazioni con le
stampanti di rete.
Ho abbandonato l'activex installato con il Reader perchè non documentato
quindi pericoloso per il futuro e non compatibile tra le varie versioni.
La domanda finale quindi è: conoscete un sistema (anche a pagamento) per
stampare i PDF a runtime con le seguenti caratteristiche:
- affidabilità
- buona qualità di stampa
- buona velocità di stampa
- possibilità di selezionare la stampante (senza toccare la stampante
predefinita di Windows)
Grazie a tutti
Massimo

mi vergogno parecchio, ma se può essere utile....Private Sub
PrintPDF(fileToPrint As String)
On Error GoTo gestioneerrori
' recupero stampante
Dim codicestampante As String
Dim devicestampante As String
codicestampante = Trim(YPDFRS.Fields("YLPRTN"))
If codicestampante = "" Then
LOGWRITE ("Per il Protocollo " & Trim(YPDFRS.Fields("YLPROI")) & " non
è stata indicata la stampante")
GoTo gestioneerrori
Else
devicestampante = sGetINI(App.Path & "\PRT-" & codicestampante &
".ini", "Configurazione", "Stampante", "")
    If devicestampante = "" Then
    LOGWRITE ("Per il Protocollo " & Trim(YPDFRS.Fields("YLPROI")) & "
è stata indicata una coda di stampa errata (" & codicestampante & ")")
    GoTo gestioneerrori
    End If
End If
Dim pos As Integer
Dim PRT As Printer
For Each PRT In Printers
If PRT.DeviceName = devicestampante Then
Set Printer = Printers(pos)
x = SetDefaultPrinter(Printer)
End If
pos = pos + 1
Next
returnValue = Shell(CFG.ACROBAT & " " & fileToPrint, 1)
' AppActivate Returnvalue
'printit (App.Path & "\pdf-lexmark.pdf"), "Lexmark"
'SendKeys vbCtrlMask & "{P}", True
pausa
pausa
SendKeys "%{F}", True
pausa
SendKeys "m", True
pausa
SendKeys Chr$(13), True
pausa
SendKeys "%{F4}", True
'Dim scmd As String
'Dim fullname As String
'
'fullname = formshome + "" + fileToPrint
'
'scmd = "[FilePrintSilent(" & Chr$(34) & fileToPrint & Chr$(34) & ")]"'
'
'With lblDDE
'.Caption = "Printing..." & fileToPrint
'.LinkTopic = "Acroview|Control"
'.LinkItem = ""
'.LinkMode = 2
'.LinkTimeout = 1000
'.LinkExecute scmd
'.LinkMode = 0
'.Caption = ""
'.LinkMode = 2
'End With
YPDFRS.Fields("YLSTAM") = "2"
Exit Sub
gestioneerrori:
End Sub



 quindi pericoloso per il futuro e non compatibile tra le varie versioni.
Fino al 6 è così, anche se io non ho trovato problemi con
Pdf1.LoadFile(DirIngresso & NomeDelFile)
Pdf1.PrintPages 1, 1
Se usi Acrobat 7, anche il solo reader, e sei disposto a spendere
99 dollarozzi, c'è una .dll documentata e supportata. O meglio, la
.dll c'è :-), è l'SDK che è a pagamento.
Se quello che ti serve è solo aprire e stampare i PDF, io con l'OCX
ci sono andato avanti senza problemi nelle versioni 4, 5 e 6.
Qualche info (anche) in questo thread e nei link contenuti:
http://groups.google.com/groups?threadm=bq8c9b%241vlpt1%241%40ID-108681.news.uni-berlin.de
Fammi sapere che problemi incontri e dove, che in questi giorni sto giusto
riesumando quel codice per farne una versione diversa :-).
************************
In alternativa, potresti usare GhostScript... l'hai già provato ?
Con una dozzina di righe di vb converti i pdf in file postscript
e con un'altra ventina li invii allo spooler di stampa. Info:
http://groups.google.com/groups?selm=b910nn%24e9s57%241%40ID-108681.news.dfncis.de
http://groups.google.com/groups?selm=3B30E5C6.B680541B%40laserinforma.com
Lì, se ricordo bene, si parlava dell'uso di GS in una shell, ma si può
anche usare la DLL direttamente, dall'interno di VB.
Bye, G.

 riesumando quel codice per farne una versione diversa :-).
Il mio problema fondamentale č quello di impostare la stampante senza
mostrare il dialog e senza toccare la stampante predefinita. Hai qualche
dritta?
Grazie
Massimo


Giancarlo

> Combit List & Label versione 10 
http://www.combit.net/
Ho guardato l'homepage del prodotto, ma mi sembra che sia molto di più di
ciò che mi serve!
A me serve uno strumento che si preoccupi di stampare decentemente PDF già
esistenti, con una qualità paragonabile alla stampa con Adobe Reader, senza
interazione dell'utente e con la possibilità di indicare la stampante da
utilizzare via codice.
Il software che mi hai indicato mi sembra un completo programma per generare
report (ammetto di non aver scaricato la demo ma di essermi fidato della
sezione info del sito).
Se ho capito male aspetto la tua correzione!
Ciao
Massimo

 dritta?
Con il 6 e precedenti, non avendo voglia di sbattermi con le API,
stampavo su file e reindirizzavo il file alle stampanti, come descritto
da qualche parte in uno dei link precedenti.
Con la DLL del 7, ci sono varie opzioni, fra le quali .FilePrint, .FilePrintTo,
.FilePrintToEx, .FilePrintSilent eccetera, c'è sicuramente quello che ti serve.
In questi giorni purtroppo io mi sto scogl^Winteressando ad un guaio
diverso, anche se sempre relativo alle stampanti, quindi ho poco tempo
per le prove :-(.
Bye, G.


Ciao
Giancarlo

 serve non posso darti una mano.
Visto che l'hai usato in ambiente di produzione, posso chiederti se hai
usato anche Crystal Report e come giudichi List&Label se comarato con CR ?
Insomma e' circa pari, ha meno funzioni o e' anche migliore?
Ciao e grazie
RobertoA

 .dll c'č :-), č l'SDK che č a pagamento.
Ho trovato questo sulla  Knowledgebase di Adobe Acrobat:
" Known Issue: Reader Does Not Support OLE Automation
Issue
Why does my Visual Basic application work with Acrobat but not with Reader?
Solution
Acrobat Reader is not an OLE Automation Server, as stated in the IAC
Overview.
You may purchase other Acrobat products that are OLE servers. Please refer
to the Acrobat family website"
Questo significa che posso evitare di acquistare l'SDK sperando di poterlo
utilizzare con il solo Reader?

 per provare.
Grazie per i link!
Prima però di leggermi tutti i documenti, mi sai dire se si può usare con
VB6?


Denkio.
RobertoA