Autore Topic: [RISOLTO] stampare dati aggiuntivi su un file pdf esistente  (Letto 838 volte)

Offline giango

  • Grande Gambero
  • ***
  • Post: 164
    • Mostra profilo
Rieccomi dopo tanto tempo di inattività per verificare una cosuccia che mi sta a cuore.
In un precedente post avevo inserito il seguente codice perfettamente funzionante per la stampa su un nuovo file pdf.

Codice: [Seleziona]
'IN DICHIARAZIONI: Private miaStampante As Printer
'
Public Sub bt_1_Click()
    lancio_stampa
End

Public Sub lancio_stampa()
  miaStampante = New Printer As "Stampa"
  With miaStampante
    .OutputFile = avvio.cartella & "prova.pdf"
    .Orientation = 0
    .GrayScale = True
    .Paper = 2
    .Print
  End With
End

Public Sub stampa_Draw()
  With Paint
    .Font.Size = 10
    .DrawText("Questa è la testata del documento", 500, 500)
    .DrawText("secondo testo ", 500, 1300, 400, 500)
     .DrawText("terzo testo ", 500, 1600, 400, 500)
    .Fill
    .End
  End With
End

Sapete per cortesia se è possibile invece stampare informazioni aggiuntive scrivendo nelle parti da riempire di un file pdf esistente?
Ringrazio anticipatamente per la vostra pazienza.
« Ultima modifica: 13 Agosto 2015, 18:05:06 da giango »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #1 il: 11 Agosto 2015, 17:23:30 »
...
Sapete per cortesia se è possibile invece stampare informazioni aggiuntive scrivendo nelle parti da riempire di un file pdf esistente?
Ringrazio anticipatamente per la vostra pazienza.

Come già detto in altro post non sono in possesso delle mie piene capacità cognitive, di per se già scarse a pieno regime, pertanto non sono sicurissimo di aver afferrato la domanda, comunque sia tutte le volte che aggiungiamo qualcosa, corto o lungo, al nostro testo (disegno) al momento che occorre stampare (in pdf o su carta) dobbiamo ridisegnare tutto quanto dall'inizio.
 :ciao:
PS: Tranquilli non sono tornato in anticipo, il fatto è che oggi il tempo è instabile... ;D
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline giango

  • Grande Gambero
  • ***
  • Post: 164
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #2 il: 11 Agosto 2015, 18:46:21 »
Tranquillo Gian, hai capito perfettamente, e la tua risposta è chiarissima. Comprendo dunque che non è possibile tenere registrazioni su una scheda memorizzata su un file pdf
perchè si dovrebbe andare ogni volta a riscrivere tutti i dati precedenti.
Il mio obiettivo era quello di eliminare il cartaceo registrando dati mensili sulle schede personali dei clienti, e stampare le medesime solo a fine anno.
Grazie.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #3 il: 11 Agosto 2015, 22:48:21 »
...
Il mio obiettivo era quello di eliminare il cartaceo registrando dati mensili sulle schede personali dei clienti, e stampare le medesime solo a fine anno.
Grazie.

Scusa giango, non per farmi i fatti tuoi, ma sei sicuro di aver ben progettato il tuo applicativo? Perché da quanto hai appena sostenuto mi fai sorgere qualche dubbio.
Ti consiglio di usare apposite schede che ti costruisci come desideri con una finestra di Gambas e poi  memorizzi i dati registrandoli dove vuoi nel classico database o in un file. Quando richiami una data scheda sarà la finestra che si carica dei dati di quella particolare registrazione.
Poi ti crei una routine di stampa che disegnerà la scheda con tutti i dati immessi di volta in volta e la userai solo quando ti serve. Non serve stampare tutte le volte che devi registrare, devi solo cambiare strategia al tuo applicativo.
Se hai dei dubbi chiedi pure, ma sappi che di costruzione di questo tipo di applicativi si è ampiamente parlato nel forum qui trovi un esempio che utilizza una struttura e memorizza in un file.
 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #4 il: 12 Agosto 2015, 01:06:44 »
.... è possibile invece stampare informazioni aggiuntive scrivendo nelle parti da riempire di un file pdf esistente?
A mio parere è agevolmente fattibile.
Attivando il componente gb.pdf, è sufficiente caricare il file pdf esistente e convertirlo in una Image:
Codice: gambas [Seleziona]
Dim pdf As New PdfDocument
 Dim im As Image

   With pdf
' Carichiamo il file PDF del documento da mostrare:
     .Open("/percorso/del/file.pdf")
' Se il file pdf è stato caricato correttamente...
     If .Ready Then
' ...allora convertiamo la prima pagina ("indice" delle pagine = 1) in una "Image":
       im = pdf[1].Image
     Else
       Message.Error("<FONT color=darkred><B>Errore nel caricamento del file PDF !")
       Return
     Endif
   End With




Quindi utilizzare tutte le funzioni e risorse applicabili su una Image.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline giango

  • Grande Gambero
  • ***
  • Post: 164
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #5 il: 12 Agosto 2015, 08:01:27 »
@gianluigi
Le registrazioni mensili vengono effettuate con le apposite maschere e memorizzate in un database,
e normalmente non serve fare la stampa dei dati relativi ad un cliente.
Di tanto in tanto però si rende necessario produrre la stampa di tutte le schede cliente con indicati i dati relativi a
tutti i mesi trascorsi dell'anno in corso. E a fine anno si procede invece alla stampa di tutte le schede che vengono
archiviate.

@vuott
Sei unico! Hai capito perfettamente il problema. Che mi rimane ora da comprendere è come usare quell'immagine.
Dovrei forse assegnare a .OutputFile = pdf[1].Image
e poi procedere alla stampa?
In tal caso dovrei dopo riconvertire l'immagine in PDF?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #6 il: 12 Agosto 2015, 10:25:42 »
@gianluigi
Le registrazioni mensili vengono effettuate con le apposite maschere e memorizzate in un database,
e normalmente non serve fare la stampa dei dati relativi ad un cliente.
Di tanto in tanto però si rende necessario produrre la stampa di tutte le schede cliente con indicati i dati relativi a
tutti i mesi trascorsi dell'anno in corso. E a fine anno si procede invece alla stampa di tutte le schede che vengono
archiviate.
Scusa ma continuo a non capire (non sono come vuott ;)), tu vuoi stampare su un foglio A4 già stampato in .pdf? Ma scusa tanto a cosa serve? Se devi controllare dei dati a video richiami la scheda se devi stampare stampi la scheda. Se invece intendi aggiungere a un foglio A4 già stampato con la stampante (no .pdf) la sola parte aggiuntiva (esempio i dati di Aprile) ti crei una routine che stampa le sole parti evidenziate della scheda.
Questo è il massimo del mio comprendonio, altro non so e non riesco a recepire.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #7 il: 12 Agosto 2015, 10:55:51 »
Io ho interpretato il problema posto da giango nel senso che, avendo un file pdf, si voglia avere la possibilità di aggiungere ad esso nuovi elementi.
La mia soluzione proposta resta nei limiti delle risorse dei componenti di Gambas senza sconfinare in librerie esterne.


Dovrei forse assegnare a .OutputFile = pdf[1].Image
...ti rispondo con una domanda: è possibile assegnare a quella proprietà un oggetto di tipo Image ?


e poi procedere alla stampa?
In tal caso dovrei dopo riconvertire l'immagine in PDF?
Poiché la creazione di un file di tipo PDF avviene sostanzialmente con le medesime procedure per stampare un'immagine o anche il contenuto di una DrawingArea, devi ripercorrere quella procedura.
Dunque ricapitolando:
1) caricare il file pdf originario;
2) trasformarlo in una Image, affinché possa essere gestita con apposita variabile;
3) effettuare le modifiche e le integrazioni desiderate all'immagine;
4) creare il nuovo file PDF con la consueta modalità prevista con la Classe Printer, disegnandovi la nuova immagine con il metodo .DrawImage() della Classe Paint da effettuarsi all'interno dell'evento _Draw() della Classe Printer .

Come è evidente, alla fine si ottiene un file PDF completamente nuovo e distinto rispetto al file pdf originario.
« Ultima modifica: 12 Agosto 2015, 11:03:32 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline giango

  • Grande Gambero
  • ***
  • Post: 164
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #8 il: 12 Agosto 2015, 12:52:06 »
@gianluigi
Forse sono io ad essermi espresso male. Ci riprovo. Supponiamo di avere una scheda cliente su file PDF, che riporta nella parte in alto l'intestazione con i dati anagrafici, etc.
Al primo acquisto, quel file con la sola intestazione, va ripreso e stampati nella parte inferiore i dati relativi al primo acquisto. E così via, ogni volta che fa un nuovo acquisto, si riprende
il file PDF del cliente e si aggiorna. Il motivo di questo procedimento è quello di avere sempre una copia nell'archivio cartaceo relativa a tutti i clienti comprensiva di tutti gli acquisti effettuati. E' chiaro che un procedimento alternativo potrebbe essere quello di eliminare il vecchio file e stampare ex novo tutti i dati sia dell'intestazione che degli acquisti effettuati.
Questo comporterebbe solo un codice più complesso perchè si dovrebbero aprire due tabelle database, una per i dati anagrafici e l'altra per gli acquisti, introducendo i controlli necessari per selezionare solo l'anno corrente e non i precedenti.
Col sistema che vorrei impiegare invece si apre una sola table per stampare i dati di un singolo record, l'ultimo relativo al cliente interessato.

@vuott
Ti ringrazio per la tua risposta chiarificatrice. Ora mi cimento nell'opera.
Grazie.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re: stampare dati aggiuntivi su un file pdf esistente
« Risposta #9 il: 12 Agosto 2015, 17:35:07 »
E' del tutto evidente che la tua logica non è la mia. Se dovessi fare io un archivio cartaceo che non è pdf (pdf serve, teoricamente, per l'interscambio di documenti, per vedere ed eventualmente stampare un documento allo stesso modo anche su computer con diversi sistemi) ma che può essere, volendo, anche pdf, aggiungerei alla maschera del database una semplice query che interroga le tabelle dovute e in un fiat otterrei quanto vai cercando. Del resto se tu devi aggiornare il database con i nuovi dati questo tu lo fai già da una maschera (oso sperare) quindi nessuna apertura di tabelle, ma solo l'istruzione di creare il “cartaceo” in simultanea all'aggiornamento della tabella di quel particolare cliente.

Questo non vuol significare che tu non possa fare come desideri, solo che, forse, andrebbero considerate varie strade per una scelta più “consapevole”.
Mo me ne torno alle variabili locali di vuott.
 :ciao:
« Ultima modifica: 12 Agosto 2015, 17:36:51 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro