NetTalk Central
NetTalk Web Server => Web Server - Ask For Help => Topic started by: rjolda on October 29, 2025, 12:19:02 PM
-
Hi,
NT 14.36 C11.0136
I want to generate a QR code with DRAW. I am currently doing it with ezCam but if I can do it with DRAW it will be much cleaner.
PROBLEM. DRAW requires an Image. I have tried creating QR without the Image on a window and it does NOT work.
If I place an IMAGE on the window, I have to DISPLAY the image and then I can write it to a PNG file.
The documents state that displaying the image is optional- however, If I don't display the image, it will not save ( save writes a black square ).
Anyone with insight?
Do I have to try to write it to an Image file in NT first?
Thanks,
Ron
-
I use QrCode.dll and it's very easy to use look example, in preupdate and display a result in Media field
p_web.ssv('Loc:receipt_url',Eve4:RECEIPT_URL)
Loc:Text = CLIP(Eve4:GUI)
Loc:PathFileUci=clip(p_web.site.WebFolderPath)&'\uploads\$$$QRInvoice' & CLIP(Eve4:GUI)&'.jpg'
Loc:Pixel=100
Loc:Format='png'
Loc:ColorBlack ='black'
Loc:ColorWhite = 'white'
GenerateQrCode(CLIP(Loc:Text),clip(Loc:PathFileUCI),clip(Loc:Pixel),clip(Loc:Format),clip(Loc:ColorBlack),clip(Loc:ColorWhite))
loc:st_filename3 = '/uploads/'&'$$$QRInvoice'&CLIP(Eve4:GUI)&'.jpg'
p_web.ssv('loc:st_filename3',clip(loc:st_filename3))
-
Good day Ron,
If you take a look at the NetTalk webserver Insight Graphing example's WebGraphSize procedure you will find:
If not p_Web &= NULL
loc:silent = p_web.GetValue('_Silent')
p_web.DivHeader('WebGraphSize_2','nt-left')
If loc:Silent = 0
Window{prop:hide} = 1
ThisGraph2.Reset()
ThisGraph2.DrawGraph()
ans = 'images\@@@' & format(random(1,99999),@n05) &'.png'
ThisGraph2.SaveAs(clip(p_web.site.WebFolderPath) & '\' & Ans)
Window{prop:pixels} = 1
packet.append(p_web.CreateImage(ans,ThisGraph2.Width,ThisGraph2.Height,ThisGraph2.HeaderName))
End
p_web.ParseHTML(packet,1,0,NET:NoHeader)
packet.SetValue('')
p_web.DivFooter()
Return(Level:Notify)
End
The important parts are:
ans = 'images\@@@' & format(random(1,99999),@n05) &'.png' !<<--- Path string to an image file is create
ThisGraph2.SaveAs(clip(p_web.site.WebFolderPath) & '\' & Ans) !<<--- Actual image file is saved to the path
packet.append(p_web.CreateImage(ans,ThisGraph2.Width,ThisGraph2.Height,ThisGraph2.HeaderName)) !<<--- HTML for the image is generated
ThisGraph2.SaveAs:
InsightRoot.SaveAs Procedure (string FileName)
f string(255)
code
if self.thisDraw &= null then return . ! ghnn
f = filename
if instring('.',lower(f),1,1) = 0
f = clip(f) & '.png'
end
if instring('.wmf',lower(f),1,1)
elsif instring('.bmp',lower(f),1,1)
Self.ThisDraw.Writebmp(f)
elsif instring('.png',lower(f),1,1)
Self.ThisDraw.WritePng(f)
end
SaveAs uses draw to create the image that is eventually displayed using p_web.CreateImage.
Now, this is one way to approach this. You could use this method to generate a QR code image and display it but you're going to run into the main problem I have with Insight graphs in a web app...resolution.
If you want a higher resolution image with this approach you'll need to make the container Window larger and the image control larger which creates a larger image. The larger the image file then the slower the HTML page loads.
So, this is a long winded way of saying that I suggest you use a JavaScript approach using jQuery.
Here's a link to a jQuery plugin for QR codes:
https://github.com/jeromeetienne/jquery-qrcode
I think this would be a better way. Generate the QR code client side.
That's my humble opinion.
-
Hi Don, with QrCode.dll the resolution is perfect a generate small image, very fast and less code
-
Nice!
-
Hi, got the answer from NT User Group. Short answer - you need an image field for QR to work its magic.
I created a window and added the QRCODE template ( that put an image on the window for QR Gen to use. I am passing p_web to the procedure so I pass in my QRTEXT and QRSaveFileName and call the QR_Window, generate the QR CODE, Display it and save it and close the widow and save it and return to my NT procedure. works great.
I will have to try the method Osquiabro described.
Thanks Osquiabro and Don,
Ron