Newsgroup: it.comp.lang.visual-basic
Titolo: Creare un pdf......a partire da un rtf

Il mio problema è questo...
VB6 sp6
Ho una applicazione che mi dà la possibilità di crearmi un template di 
una lettera...
il programma poi farà la sostituzione dei campi
(Cosa non farebbe un uTonto per non imparare stampa unione di 
word...evabbè!!!)
Siccome son lettere semplici stampate su carta intestata va tutto più 
che bene!
Ora sorge un problema....fare un pdf da inviare per email agli "schiavi" 
che stamperanno ed imbusteranno
Per le stampe ho usato reportman e va più che bene...compresa la 
possibilità del pdf...ed infatti le etichette le salvano in pdf con quello!
Avevo pensato di mandare il testo delle varie lettere in una tabella e 
farla stampare da reportman
MA
il testo formattato è in rtf
...se lo metto in un memo e lo faccio "mangiare" da reportman me lo 
interpreta come testo...ossia una serie di
"{\rtf1\ansi\ansicpg1252\def......etc etc"
Nelle condizioni attuali dei miei neuroni....intravedo solo la soluzione 
di salvare le varie lettere in file di servizio rtf(0001.rtf 0002.rtf 
0003.rtf...)....stamparle con pdfcreator...ed usare...Gios PDF Splitter 
And Merger ...per fare un unico pdf da spedire!
Allucinante!...nel senso che non è difficile uno di noi lo fa in 5 
secondi!...ma generatore N! di problemi in mano all'uTonto...
posto che la casella rtf ed il relativo codice rtf non si tocca (non mi 
ci metto a sconvolgere quella parte di applicazione sostituendo editor e 
tutto)...avete una soluzione per generare un pdf a partire da testo 
RTF...???
THANKS!

 
una soluzione da codice vb eh!...lo so anche io che ci sono 
utility...più o meno a pagamento che lo fanno!
Volevo qualcosa di interfacciabile da vb6...
THANKS!

 ha scritto nel messaggio 
news:464d84c5$0$21201$5fc...@news.tiscali.it...


 file come vuoi
ok....va bene!
...non hai letto quello che ho scritto!

Io di solito cerco su planetsourcecode e codeproject per vedere se è 
possibile trovare qualcosa di free.
Ecco cosa ho trovato, non so se possonao esserti utili.
http://www.codeproject.com/csharp/sertf2pdf.asp
http://www.codeproject.com/office/PortableOpenOffice.asp
Con google "rtf pdf vb6" restituisce qualcosa a pagamento (ma sui 30 
dollari... con trial version scaricabile).
bye

Wodka40° ha scritto:

Vabbe scrivo qui l'incubo che mi ha fatto risolvere...casomai serve a 
qualcuno!
La parte del database è ridondante l'ho fatta per separare e ristampare 
in un secondo tempo (metti che gli uTonti cancellino l'email!!!)
Mi son creato una tabella in Access con 2 campi soltanto
nella procedura che valorizza il template (ossia che sostituisce i campi 
variabili con il contenuto effettivo) ho inserito
If EseguiSQL("DELETE * FROM sLettere") Then
     Set Slet = RecordsetSQL("SELECT * FROM sLettere")
Else
     MsgBox "Errore apertura tabella sLettere", vbCritical, "Errore stampa"
     Set Slet = Nothing
     Exit Function
End If
lConta = 1
così son sicuro di partire da una tabella vuota!
Recupera i valori e valorizza il template
ssRS.MoveFirst
         Do
             	....sostituzioni.....
             Sostituisci Format$(ssRS("ScadenzaAbbo") & "", 
"dd/mm/yyyy"), "@@ScadenzaAbbonamento@@"
             Sostituisci Format$(ssRS("Prezzo"), "#0.00"), 
"@@PrezzoAbbonamento@@"
             Sostituisci IIf(ssRS("Saldato"), "si", "no"), "@@AbboSaldato@@"
             Sostituisci ssRS("Stipulante") & "", "@@TitolareAbbonamento@@"
		....sostituzioni.....
             'memorizza lettera USO DAO ebbene si!!!!!
             Slet.AddNew
                 Slet("IDlettera") = lConta
                 Slet("Testo") = Me.rtfMM.TextRTF
             Slet.Update
             lConta = lConta + 1
             'restart della lettera tipo...altrimenti non sostituisce 
più nulla dopo il primo record!!!
             rtfMM.TextRTF = Me.rtfText.TextRTF
             ssRS.MoveNext
         Loop Until ssRS.EOF
Adesso ho la mia serie di lettere tutta dentro una tabella
mi son fatto un UNICO file rtf....
però non è così semplice...non si può schiaffare e basta...non funziona 
nulla!!!
Bisogna trovare la fine e l'inizio di ogni lettera e sostituire qualcosa 
per formare in maniera corretta il documento rtf!
Allora mi son fatto una funzione
CreaFile "LettereScaduti.rtf"
che fa questo.....
Private Function CreaFile(Nome As String) As Boolean
Dim tSql As String
Dim mRec As DAO.Recordset
Dim Fl As Integer
Dim s1 As String
Dim T1 As Variant
Dim n As Long
Dim PRIMO As Boolean
PRIMO = True
tSql = "SELECT * FROM sLettere ORDER BY IDlettera"
Set mRec = RecordsetSQL(tSql)
If mRec.BOF Then
     CreaFile = False
     mRec.Close
     Set mRec = Nothing
     Exit Function
End If
     Fl = FreeFile
     s1 = C_PATHSERVIZIOTEMP & Nome
Open s1 For Output As Fl
   mRec.MoveFirst
   Do
     If PRIMO Then
         T1 = ""
         s1 = mRec("Testo")
         T1 = Split(s1, vbCrLf)
         For n = LBound(T1) To UBound(T1) - 2
             Print #Fl, T1(n)
         Next n
         PRIMO = False
     Else
         'RTF salta pagina
         T1 = ""
         s1 = mRec("Testo")
         T1 = Split(s1, vbCrLf)
          Print #Fl, "\par \page" & vbCrLf
         For n = (LBound(T1) + 1) To UBound(T1) - 2
             Print #Fl, T1(n)
         Next n
     End If
     mRec.MoveNext
   Loop Until mRec.EOF
   'Chiude RTF
   Print #Fl, "\par }"
   Close #Fl
   mRec.Close
   Set mRec = Nothing
CreaFile = True
End Function
in estrema sintesi che fa?
SE è il primo record (ossia la prima lettera...) la prima riga di 
intestazione va bene (definisce font e un sacco di altra "robaccia")
ma l'ultima la elimina e sostituisce con \par \page ossia salto di pagina
SE non è il primo record deve eliminare ANCHE la prima riga che 
ridefinisce inutilmente la lettera ..ed anzi fà erroneamente 
decodificare il file finale!
Fatto tutto ciò rimane da memorizzare l'ultima riga
\par }
che chiude il documento!
Almeno adesso ho un UNICO documento da stampare con PDFCreator e non 
100...e sopratutto ho un unico PDF da spedire!
E' una procedura macchinosa e non sono riuscito a capire se posso, via 
COM, interfacciarmi a PdfCreator per sapere quando ha finito di 
convertire....per procedere all'invio!
Sapete se è possibile???
MA FUNZIONA....e non è neanche tanto lenta!
e questo per stasera mi basta!
Saluti!

Nicola Ottomano ha scritto:

Grazie Nicola....
ho trovato una soluzione che mi soddisfa...a patto di installare 
pdfCreator e ghostscript !

 pdfCreator e ghostscript !
l'utonto? mah...
cmq oggi dopo il tuo post ho fatto una prova buttando su pdfcreator, che 
tengo come predefinita.
vb andava out of stack space cercando di stampare un richtext in cui 
incollavo una pagina di word di 10 righe e un jpeg piiiiiccolo.
fa' di non avere immagini nei tuoi rtf.
a.

andrea palazzi ha scritto:

A parte che la RTF di vb6 non è il massimo!
Supporta una versione vecchia di RTF....quasi sicuramente NON quella di 
word...chiedi a GbC maggiori lumi....facemmo tanto tempo fa una 
discussione dove mi "educava" su rtf e versioni supportate da windows!
Ed il programma usa solo testo...manco comapre inserisci immagine!
Cmq mi hai mesos la pulce nell'orecchio ed ho fatto le cose in amniera 
canonica.....
QUINDI
preso paintshoppro tirata dentro una immagine jpg...salvata im BMP
riaperta...COPIA
lancio il programma...arriva all'editor di tsti...recupero il 
template....nel mezzo INCOLLA l'immagine....tanto per complicare la 
ridimensiono anche
continuo...mi crea il file LettereStampare.rtf 10.407 KB
lo apro (ancora da codice non riesco a farlo...ne mi ci son messo....)
mi si apre word....lo stampo con pdfCreator....
mi crea LettereStampare.pdf 253 Kb
Nessun problema...compare immagini e tutto!!!
IMHO il tuo errore e copiare da Word che ha una versione di RTF
ed INCOLLARE nella casella RTF che ha un ALTRA versione di RTF
...probabilmente pdfCreator si incasina li!
Ora provo a fare anche io questa prova!
stay tuned!

Wodka40° ha scritto:
Ti do una brutta notizia Andrea....devi avere qualcosa che non và nel pc!
Ho lanciato Word (2003 sp2)
scritto un 20 di righe a caso e tirata nel mezzo del testo una immagine 
(gif con trasparenza)
non l'ho salvata...fatto "seleziona tutto" ...copia....
lanciato programma....
arrivato al solito editor
nuovo template "INCOLLA"
fai il file...
stampa su pdf creator....
67 pagine correttamente generate! Unico neo...e qui c'entra l'rtf...il 
testo circonda l'immagine in word...non è così nel pdf!!!
Miei parametri:
PC: P3 3Ghz 1GB Ram
S.O. XPpro SP2
PdfCreator 0.9.3
Versione GhostScript :Gpl GhostSCript 8.54
Flag settato "use window font"

 ...probabilmente pdfCreator si incasina li!
PdfCreator mica si basa sull'rtf, ma su quello che va in stampa, come se 
fosse una vera stampante.
Io lo uso per fare dei test con il mio MyNeoReport...
Ciao 

 ha scritto nel messaggio 
news:4650077b$0$16034$5fc...@news.tiscali.it...
Wodka, se mi scrivi in privato usa una mail valida per la risposta! :P
Ciao 

Fabio ha scritto:

Scusa ma non è colpa mia....mi son installato thunderbird e la prima 
voce è rispondi al mittente.....
abituato a OE...in prtaica scrivo 10 risposte alla mail e 5 al NG 
...sorry a tutti
!!!!

Wodka40° ha scritto:

L'avevo notato :)
Mi hai mandato una mail pvt invece che scrivere sul ng :-P
Continua ad usare thunderbird... io, dopo uno spaesamento iniziale, sono 
2 anni che lo uso senza problemi. Antispam bayesiano di prima qualità 
(che io poi affianco al mio Sinapsi... ma non ce ne sarebbe davvero 
bisogno) e nessuna mail "autoinstallantesfruttafalledioutlookespress"
bye

 anni che lo uso senza problemi.
Io lo trovo comodo per le e-mail, ma per i NG è un po' pietoso (nel senso 
che non riesco a trovare a colpo d'occhio i post), infatti continuo a usare 
OE.
Ciao 

 OE.
Beh... io mi trovo meglio. Mi mette in bella vista i post piů recenti o 
con risposte recenti.
Poi io coloro i post interessanti con colori che per me hanno un senso.
Rosso: Importanti o comunque da tenere sott'occhio
Blu: Post miei
Grigio Chiaro: post di gente plonkata
bye