Report Xojo Web

Buona sera, ho scritto un appweb ora mi trovo a dover creare un report da una query (mysql) ovviamente mi sono accorto che non pi possibile costruirsi il report come sull’app desktop, dopo aver cercato per tutto il giorno navigando tra Valentina Report, Dyna PDF ecc… chiedo aiuto.

Ero abituato a crearmi i vari report cos :
dim g as graphics
dim p as printerSetup
p=new printerSetup
if p.pagesetupDialog then
g=openprinterdialog§
end if
g.bold=true
g.textsize=15
g.drawstring rs1.Field(“DESC1”).Value,2,20
g.textsize=9


Chiedo quale strada posso intraprendere per avere un report senza dover installare plugin o programmi terzi

Un saluto e grazie
Enrico

Se vuoi un plugin per generare un PDF ti mando il mio …

Qui c’ il plugin che ti ho promesso, semplice da usare, c’ l’esempio.
Per la guida fai riferimento a FPDF da qui…
Funziona anche a 64 bitty

Nell’esempio c’ tutto quello che ti serve per farlo funzionare, poi ovviamente fai tutte le modifiche che vuoi.

pu anche stampare i barcode CODE 128, 3of9, Ean8, Ean13…

Ciao, direi solo una cosa… UNO SPETTACOLO!!!

Grazie infinitamente!!!

Valentina ADK for XOJO is the easy way to do it Print and PDF and Printing Direct from Web

Almeno questo gratis…

Thank you Alexis, but I wanted to try something free and the Massimiliano plugin really fuses

Si vero Massimiliano e poi funziona davvero egregiamente, sto solo litigando con la funzione pdf.addpage che in debug non da problemi ma una volta pubblicato mi ritorna un nilobject… ma ci salto fuori!

sempre grazie e spero a buon rendere

i do not see any free that works good like valentina with hard work

[quote=329282:@Enrico La Rosa]Si vero Massimiliano e poi funziona davvero egregiamente, sto solo litigando con la funzione pdf.addpage che in debug non da problemi ma una volta pubblicato mi ritorna un nilobject… ma ci salto fuori!

sempre grazie e spero a buon rendere[/quote]
Roba vecchia, lo sostituisco sempre nello short report di bkeeney al posto di dynapdf. Non mi ricordo se al costrutto di addpage devi fare altro prima o altro dopo il comando. Poi ci guardo e te lo dico

Ho fatto alcune prove e ti confermo che l’unico comando pdf.addpage() che a me funziona su piattaforma MAC OS,
Su windows al momento non ho possibilit di provare.

si si ho trovato il problema nello scrivere ho inserito addpage senza le parentesi… nella fretta… era una stupidata. :slight_smile:
grazie sempre

Puoi anche provare DynaPDF (per provarlo gratuito)
Il vantaggio che stabile e hai il pieno e totale controllo del documento PDF in tutte le sue parti

Il problema che a volte per scrivere un software si pagati una miseria e non si hanno risorse ‘monetarie’ tali per affrontare la spesa …
Comunque Enrico,
Prima che finisci al reparto psichiatrico puoi notare che hai a disposizione una modifica di cell che si chiama cellcut; identica a cell ma taglia il contenuto, quindi non effettua il ‘word wrap’ su un’altra cella, ti verr utile…
Getlunghezzatesto che riporta la dimensione di una cella; Millimetrata, che mostra la griglia nel formato ‘carta millimetrata’ che ti sar utile per riempire moduli, e poi come ti dicevo prima Code39, Ean13, Interleave2of5,
Se devi riempire dei moduli io ho adottato il sistema di inserire un’immagine nella pagina come sfondo.
Ovvio che come dice Antonio con DynaPDF puoi compilare i moduli, ma ti serve la versione ‘avanzata’ che haim costa parecchio.

Non solo per le funzionalit avanzate, anche a livello base puoi fare molto (tabelle ad esempio) e molto semplicemente (una volta capito come funziona, ma la documentazione enorme)

Massimiliano, per quanto riguarda i costi una questione di prospettive e di quanto valuti il tuo tempo. Se riesci a completare un lavoro in meno tempo e con meno “grane” devi bilanciare il costo con il tempo risparmiato che puoi rinvestire in altri progetti (guadagnando) o in serenit (che ha sempre il suo bel valore)
Ragionando in questo modo si rischia di finire nel paradosso del venditore: “Non compro nulla cos non ho spese…” per poi non capisce perch nessuno visita il suo negozio … che vuoto!

La versione base costa poco (in termini di ore di lavoro) e sta a te poi sfruttare questa possibilit in altri progetti.

Per carita, abbiamo comperato DYNAPDF, la versione base,
La documentazione enorme, davvero un fiume, ma funziona bene…
Purtroppo la versione base non permette di utilizzare layer o incorporare / scrivere su un pdf esistente,
Tutto sommato per carichiamo come con FPDF un’immagine con il documento da compilare.
Abbiamo acquistato anche short, ho anche fatto una modifica per utilizzare short con FPDF, funziona ugualmente bene.

In effetti mi sto guardando anche DynaPDF che non assolutamente male, per ora visti i tempi stretti mi bastato utilizzare fpdf.

Intanto ne approfitto per chiedere a Massimiliano come ha gestito l’inserimento dell’immagine… in locale ok ho messo il percorso… (pdf.Image(“C:\Users\Henry\Desktop\Esempi Xojo Henry\Web\icone\logo.jpg”,10,10,35,10))ma se lo pubblico? metto il percorso web? (scusa se una domanda un po sciocca).

Grazie a Massimiliano per i PREZIOSI suggerimento !!!

Ringrazio sempre il buon Antonio che sempre disponibile ad aiutare tutti!

allora fpdf un p rognoso …
devi passare alla funzione un percorso assoluto

il codice che riporto quello che utilizzo per stampare le fatture e lo ho messo nell’header della classe report.

if self.nomeimmagine.Trim <> "" then 
  dim paths as FolderItem
  dim nomefilef as FolderItem
  dim cartella as string
  #if TargetWin32
    paths = getfolderitem("")
  #elseif TargetMacOS
    paths = getfolderitem("")
  #elseif TargetLinux
    paths = getfolderitem("")
  #endif
  cartella = paths.ShellPath
  dim nomefile as string
  nomefile = cartella
  #if targetwin32
    nomefile = nomefile +  "\" + self.nomeimmagine
  #elseif TargetLinux
    nomefile = nomefile +  "/" + self.nomeimmagine
  #elseif TargetMacOS
    nomefile = nomefile +  "/" + self.nomeimmagine
  #endif
  
  nomefilef = New FolderItem(nomefile,FolderItem.PathTypeShell)
  
  // 25/03/2016 Aggiunto orientamento di pagina ... 
  // il parametro viene preso in sola lettura dalla definizione del pdf nel metodo di stampa
  if self.DefOrientation = "P" then
    if nomefilef.exists = true then
      self.Image(nomefile, 0, 0, 210, 297,"jpg")
    end if
  else
    if nomefilef.exists = true then
      self.Image(nomefile, 0, 0, 297, 210,"jpg")
    end if
  end if
  
end if

self.SetXY(0,0)
self.SetRightMargin(-0.50)
self.SetAutoPageBreak(true,1)
self.Ln(3.5)

Qui in pratica carico l’immagine e la imposto con la dimensione di tutta la pagina.
L’immagine deve essere presente nella cartella dell’APP

Spero ti funzioni al primo colpo …

Ciao Massimiliano,
in realt continuo ad avere un errore quando vado a stampare, mi spiego meglio in realt sono riuscito a isolare la parte che va in errore che nel metodo output, l’errore solo quando pubblico sul server il programma MAI in debug, in debug funziona sempre.

L’errore questo :

Unhandled NilObjectException
Message:

Stack:

fpdf.Output%%oss
Frm_Controlli_Contabili.Frm_Controlli_Contabili.Stampa_Ctr_Cont%%o<Frm_Controlli_Contabili.Frm_Controlli_Contabili>
Frm_Controlli_Contabili.Frm_Controlli_Contabili.Button3_Action%%o<Frm_Controlli_Contabili.Frm_Controlli_Contabili>o
Delegate.IM_Invoke%%o
AddHandler.Stub.29%%
WebButton._ExecuteEvent%b%osA1v
WebControl.!_ExecuteEvent%b%ssA1v
WebSession._HandleEvent%%oso<_HTTPServer.HTTPRequestContext>
WebSession._HandleRequest%i4%oso<_HTTPServer.HTTPRequestContext>
WebApplication._HandleHTTPRequest%%oo<_HTTPServer.HTTPRequestContext>
_CGIGateway.GatewayRequestThread.Event_Run%%o<_CGIGateway.GatewayRequestThread>

Ho messo dei brutali msg box per individuare il punto preciso dove il programma si ferma :

	Dim f As FolderItem
	Dim t as BinaryStream
	
	//Output PDF to some destination
	//Finish document if necessary
	
	if(me.state < 3) then me.Close()
	
	//Normalize parameters
	if(name = "Stampa1.Pdf") then
			name="doc.pdf"
			dest="F"
	end if
	
	//Normalize parameters
	if(name = "Stampa2.Pdf") then
			name="doc.pdf"
			dest="F"
	end if
	
	
	select case dest
			
			//Save to local file
			
	case "F","S","P"
			f = GetFolderItem(name,0)
			'f = new FolderItem(name,FolderItem.PathTypeShell)
			f = SpecialFolder.Documents.Child(name)
			[b]MsgBox " INIZIO STAMPA PDF"[/b]
			t = f.CreateBinaryFile("pdf")
			[b]MsgBox " CREAZIONE FILE STAMPA PDF"[/b]
			t.Write me.buffer
			t.close
			App.MyFile = WebFile.Open(f)
			App.MyFile.ForceDownload = True
			Session.ShowURL(App.MyFile.URL, TRUE)
	case else
			me.Error("Destinazione output non corretta: " + dest)
			'return false
			
	end select

Direi che la stringa incriminata questa : f.CreateBinaryFile(“pdf”), infatti l’errore subito dopo inizio stampa.
Non capisco perch in locale funzioni senza problemi.

Ti mai capitato l’errore?

Ciao e grazie
Enrico