Webobjekt mit Dateiamen speichern - wie?

Anfängerfragen zum Programmieren mit PureBasic.
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von matbal »

So funktioniert es bei mir:

Code: Alles auswählen

;pb-File
EnableExplicit

IncludeFile "HTML_alt_PBF.pbf"

#OLECMDEXECOPT_DODEFAULT      = 0
#OLECMDEXECOPT_PROMPTUSER     = 1
#OLECMDEXECOPT_DONTPROMPTUSER = 2
#OLECMDEXECOPT_SHOWHELP       = 3

#OLECMDID_OPEN                = 1
#OLECMDID_NEW                 = 2
#OLECMDID_SAVE                = 3
#OLECMDID_SAVEAS              = 4
#OLECMDID_SAVECOPYAS          = 5
#OLECMDID_PRINT               = 6
#OLECMDID_PRINTPREVIEW        = 7

#VT_BSTR = 8

OpenWindow_1()

Global Filename.s, SNummer$,txtSeriennummer,string_kname,Filename$
;G$=FormatDate("%yy%mm%dd", Date()) + "001HL"   ;  muss in pbf
;Global G$; muss in pbf

Procedure FormularErstellen()
   
   Protected SNummer$
   
   SNummer$ = GetGadgetText(txtSeriennummer)
   
   
   Protected HTML.s
   
   HTML + "</head><body>"
   HTML + "<div style='position:absolute; left:10mm; top:10mm; color:#000000;font-weight:bold;font-family:arial; font-size:22px;'>Formular</div>"
   HTML + "<div style='position:absolute; left:60mm; top:12mm; color:#000000;font-weight:bold;font-family:arial; font-size:17px;'>Seriennummer:</div>"
   HTML + "<div style='position:absolute; left:100mm; top:12mm; color:#000000;font-family:arial; font-size:17px;'>"+SNummer$+"</div>"
   HTML + "</body></html>"
   
   SetGadgetItemText(#Adresse, #PB_Web_HtmlCode, HTML)
   
EndProcedure

Procedure FormularDrucken(Filename.s)
   Protected WebObject.IWebBrowser2
   WebObject = GetWindowLongPtr_(GadgetID(#Adresse), #GWL_USERDATA)
   Protected filename_Unicode
   ; convert to unicode
   filename_Unicode = AllocateMemory(Len(Filename) * 2 + 2)
   MultiByteToWideChar_(#CP_ACP, 0, @Filename, -1, filename_Unicode, Len(Filename) * 2 + 2)               
   Protected filename_BSTR
   ; create bstr
   filename_BSTR = SysAllocString_(filename_Unicode)
   ; fill variant
   Protected VariantIn.VARIANT
   VariantIn\vt = #VT_BSTR
   VariantIn\bstrVal = filename_BSTR
   If GetGadgetState(Checkbox_1)=#PB_Checkbox_Checked
      WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
   Else
      WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
   EndIf
   FreeMemory(filename_Unicode)
   SysFreeString_(filename_BSTR) 
EndProcedure


Procedure FormularSpeichern(Filename.s)
   
   Protected WebObject.IWebBrowser2
   WebObject = GetWindowLong_(GadgetID(#Adresse), #GWL_USERDATA)
   Protected filename_Unicode
   filename_Unicode = AllocateMemory(StringByteLength(Filename.s, #PB_Unicode) + 2)
   PokeS(filename_Unicode, Filename, -1, #PB_Unicode)
   Protected filename_BSTR
   ; create bstr
   filename_BSTR = SysAllocString_(filename_Unicode)
   ; fill variant
   Protected VariantIn.VARIANT
   VariantIn\vt = #VT_BSTR
   VariantIn\bstrVal = filename_BSTR
   If WebObject\ExecWB(#OLECMDID_SAVEAS, #OLECMDEXECOPT_DONTPROMPTUSER, @VariantIn, 0) = #S_OK
      MessageRequester("","Formular wurde gespeichert !")
   Else
      MessageRequester("","Formular wurde nicht gespeichert !")
   EndIf
   FreeMemory(filename_Unicode)
   SysFreeString_(filename_BSTR)
EndProcedure



Repeat
   
   Select WaitWindowEvent()
         
      Case #PB_Event_Gadget
         
         Select EventGadget()
               
            Case Button_machhtml
               Filename.s = SNummer$
               FormularErstellen()
               
            Case Button_Speichern
               SNummer$ = GetGadgetText(txtSeriennummer)
               Filename.s = SNummer$
               FormularSpeichern(Filename.s)
               
               
               
            Case Button_Drucken
               SNummer$ = GetGadgetText(txtSeriennummer)
               Filename.s = SNummer$
               FormularDrucken(Filename.s) 
               
               
         EndSelect
         
      Case #PB_Event_CloseWindow
         
         Select EventWindow()
               
            Case Window_1
               Break
               
         EndSelect
         
   EndSelect
   
ForEver
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Hallo!

Drucken funktioniert nun - aber noch ohne Filename. Den Filename brauche ich unbedingt für den PDF-Druck.
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

Hat keiner eine Lösung?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von ts-soft »

Fanpost hat geschrieben:Hat keiner eine Lösung?
Unabhängig davon, das keiner weiß womit Du PDF druckst, es wird wohl immer der Dateiname händisch vergeben müssen,
es gibt keine Druckeroption, die den Dateinamen für PDF bereitstellt. Das wird also wohl nie funktionieren!

Ansonsten nur Speichern und mit shellexecute das PDF-Programm aufrufen, mit dem Flag zu Drucken. So in der Art:

Code: Alles auswählen

ShellExecute_(0, "print", PDF-Programm, PDF-Datei, "", #SW_HIDE)
Genaue Parameter bitte selbst ermitteln (durch probieren).
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Fanpost
Beiträge: 97
Registriert: 27.01.2013 14:43

Re: Webobjekt mit Dateiamen speichern - wie?

Beitrag von Fanpost »

OK, Danke für die Info. Name also nur händisch. Nur zur Info: ich nehme für die PDF entweder als Drucker Bullzip.pdf oder PDF-Creator.
Dann ist meine Frage hiermit beantwortet. Danke an Alle.
Antworten