Newsgroup: it.comp.lang.visual-basic
Titolo: [?] [lungo] rigenerazione fatture

Scusate l'oggetto un po' strano ma non sapevo cosa scriverci...
Ho bisogno di un aiuto/consiglio su come muovermi.
Situazione attuale:
 - il programma di contabilità (dos) stampa una fattura;
 - stampa anche un file, per ogni pagina di ogni fattura, che è formattato
come la fattura stessa;
 - la stampa va a finire su un modulo prestampato.
Quindi il file Dos generato contiene tutti gli invii e spazi necessari
affinché la stampa avvenga nei punti corretti del modulo prestampato.
Ora: mi chiedono di generare la stessa identica fattura in pdf.
Pensavo:
 - mi scannerizzo il modulo (che è sempre uguale);
 - posso leggere il file di testo
E poi?
Dovrei convertire il file di testo in immagine A4 (mantenendo però tutti gli
invii, spazi, proporzioni della stampata da Dos) e fare un merge tra i 2
file per ottenere un file unico (la generazione successiva del pdf non
dovrebbe essere un problema, ci dovrebbe essere un sdk di adobe o altro).
Non posso usare il file Dos come file "Interpretato" perché le stampe
possono avvenire in 1000 modi differenti (impossibile quindi capire p.e.
dove sta il codice cliente, il prodotto, l'iva etc).
Voi come vi comportereste?
Sapete indicarmi un link dove capire come creare immagine da file di testo,
come fare un merge di 2 immagini o altro che vi viene in mente e che possa
tornarmi utile? (magari c'è qualcosa sul sito comune, ma in questo momento è
down...)
Grazie a tutti in anticipo

 invii, spazi, proporzioni della stampata da Dos)
Dico poco... :-) Facciamo una prova, mandami un file di esempio a:
gaetano (underscore) d (chioccioletta) hotmail (punto) com
forse, dico _forse_ ho un'idea.
Bye, G.

 stampante ?
La stampa avviene solo su stampanti ad aghi; il file NON contiene caratteri
per la stampante, solo ascii e gli acapo e spazi orizzontali nei punti
giusti
Il file non posso mandartelo (è una fattura...), però è come dico sopra, del
tipo (scrivo <invio> dove invece ci sarà chr(10)+chr(13) e ~ dove ci sarà
uno spazio vuoto):
<invio>
<invio>
<invio>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Dott.~Pippo Franco<invio>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Via Peppino da Filippo, 13<invio>
<invio>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~20030~~~~~Roma<invio>
Etc etc
Grazie, io mi sto guardando Ghostscript e generazione pdf con fdf per capire
cosa posso ottenere, se ti viene in mente qualcosa...

 giusti
OK, allora lo puoi convertire facilmente in PDF con la classe che trovi qui:
http://web.tiscali.it/mnicolato/
In pratica, apri il TXT, lo leggi riga per riga, e crei il PDF, ovviamente
scegliendo un carattere monospaziato
Per convertire il modulo sottostante, se hai fatto la scansione in JPG,
potresti usare 
http://www.pdflib.com/jpeg2ps/
, o piů semplicemente,
salvarlo in formato EPS o JPG dal tuo programma di scansione ;-)
(sě, certe volte mi complico la vita da solo...).
*************************************
Se perň hai bisogno di avere il modulo sottostante nello stesso file,
come mi pare di aver capito, l'approccio č a tre stadi: crei una tantum
il modulo in formato EPS, ne fai un merge con la fattura, sempre in
formato EPS (poi ti spiego come), poi converti il file unico in PDF
con la .DLL di GhostScript. Per questo, cerca PDF nei post delgli ultimi
mesi, miei e di Marco Conter.
Allora, per creare un file EPS da un file di testo semplice come quello
descritto, puoi usare queste routine:
Public Sub CreaEPSdaTXT(FileIngresso As String, NomeFileEPS As String, Corpo As Long, Carattere As String)
' questa procedura č ritagliata e adattata da una moooolto piů lunga e complessa
' se trovi qualche incongruenza, fai finta di niente, puň capitare :-)))
    Dim NumLinee As Long
    Dim RigaTesto As String
    Dim TestoEPS As String
    Dim N As Long
    Dim Interlinea As Long
    Dim CurPointX As Long
    Dim CurPointY As Long
    Dim FileLibero As Integer
    Dim Riga(1000) As String    ' non credo che il tuo file di testo sia piů lungo
    Interlinea = Corpo
    CurPointX = 0
    CurPointY = 0
    ' convertire in nome del font, per le prove lo metto a mano.
    TestoEPS = TestoEPS & "/" & Carattere & " findfont " & CStr(Corpo) & "  scalefont setfont" & vbCrLf    ' inserire il carattere e
il corpo reali.
    ' margini per la giustifica, da fare a seconda del formato carta, questo č per A4
    '    TestoEPS = TestoEPS & " /MargDX " & CStr(Fix(Scatola.Width * 1.2)) & " def  /MargSX 0 def " & vbCrLf
    ' Leggi il numero di righe della TextBox
    '     NumLinee = SendMessage2(Scatola.hWnd, EM_GETLINECOUNT, 0&, 0&)
    ' contiamo le linee del file. č necessario saperle prima, perché il PostScript
    ' usa le coordinate con il punto di zero in basso a sinistra. Ci sono altri metodi
    ' piů veloci per contare il numero di righe, di un file, non so se vale la pena
    ' di usarli, in questo caso.
    FileLibero = FreeFile
    Open FileIngresso For Input As FileLibero
    Do While Not EOF(FileLibero)
        Line Input #FileLibero, Riga(NumLinee)
        NumLinee = NumLinee + 1
    Loop
    Close FileLibero
    CurPointY = (Corpo * NumLinee) + (Interlinea * NumLinee)
    TestoEPS = TestoEPS & "0 " & CStr(CurPointY) & " M " & vbCrLf    ' riscalare secondo corpo e misure
    For N = 0 To NumLinee - 1
        RigaTesto = Riga(N)
        TestoEPS = TestoEPS & "(" & RigaTesto & ") S "
        CurPointY = CurPointY - (Corpo + Interlinea)
        TestoEPS = TestoEPS & " 0 " & CStr(CurPointY) & " M " & vbCrLf
    Next N
    '    Dim FileLibero As Integer
    FileLibero = FreeFile
    Open NomeFileEPS For Output As FileLibero
    ' header EPS:
    Print #FileLibero, "%!PS-Adobe-3.0 EPSF-3.0"
    Print #FileLibero, "%%Title: Testo fattura "
    Print #FileLibero, "%%BoundingBox: 0 0 595 842"    ' usare le misure in punti di un formato A4
    Print #FileLibero, "%%Creator: ******* versione 0.1"
    Print #FileLibero, "%%CreationDate: " & Format$(Now, "dd/mm/yyyy hh:mm:ss")
    Print #FileLibero, "%%Pages: 0" '  č un EPS, non effettua stampa, quindi non crea pagine
    Print #FileLibero, "%%Requirements: Ness"
    Print #FileLibero, "%%DocumentNeededFonts: (atend)"
    Print #FileLibero, "%%LanguageLevel: 1"    ' che č meglio
    Print #FileLibero, "%%EndComments"
    Print #FileLibero, "%%PageTrailer"    ' serve ? ... male non fa...
    Print #FileLibero, ""
    ' fine header EPS
    '    Print #FileLibero, IncludiFile(App.Path & "\datieps\epsproc.txt")
    ' procedure usate nell'EPS
    ' in questa versione semplificata ho inserito a mano le tre sole righe necessarie
    Print #FileLibero, "/BD {bind def} def"
    Print #FileLibero, "/S {show} BD"
    Print #FileLibero, "/M {moveto} BD"
' inserisci il file EPS con il modulo scannerizzato
        Print #FileLibero, IncludiFile("C:\WINDOWS\Desktop\new\fondino.eps")
    ' corpo dati
    Print #FileLibero, TestoEPS
    ' footer EPS
    Print #FileLibero, "%%Trailer"
    Print #FileLibero, "%%DocumentNeededFonts:"
    Print #FileLibero, "%%DocumentSuppliedFonts:"
    Print #FileLibero, "%%EOF"
    Close FileLibero
End Sub
Function IncludiFile(NomediFile) As String
    Dim FileLibero As Integer
    Dim Riga As String
    FileLibero = FreeFile
    Open NomediFile For Input As FileLibero
    Do While Not EOF(FileLibero)
        Line Input #FileLibero, Riga
        IncludiFile = IncludiFile & Riga & vbCrLf
    Loop
    Close FileLibero
End Function
Chiami la procedura principale cosě:
CreaEPSdaTXT "c:\windows\desktop\prova.txt", "c:\windows\desktop\prova.eps", 10, "Courier"
*******************
P.S.: Manca la conversione dei caratteri accentati, e/o potrebbe
darti dei problemi con gli ASCII >128 se ce ne sono.
Nel caso fammi sapere.
Bye, G.

porca vacca, che storia...
grazie moltissime, ci lavoro