Page 1 of 1
Printing Word Documents
Posted: Thu Mar 18, 2004 4:14 pm
by Karbon
I need to whip up something really quick to print MS-Word documents. Can anyone give me some pointers about doing this in PB? I've never used the Office automation stuff in anything but VB..
Thanks!!
Posted: Thu Mar 18, 2004 4:31 pm
by GedB
Karbon,
To be honest, If you do have VB then your best off writing a dll to do it in VB and then calling it from PB.
The other alternative is to use the command line or DDE.
Posted: Thu Mar 18, 2004 4:50 pm
by freak
Ok, this might be a little bit of a hack, but it works
(requires the atl.dll to run of course)
Code: Select all
; Constants for the ExecWB Method:
#OLECMDID_OPEN = 1
#OLECMDID_NEW = 2
#OLECMDID_SAVE = 3
#OLECMDID_SAVEAS = 4
#OLECMDID_SAVECOPYAS = 5
#OLECMDID_PRINT = 6
#OLECMDID_PRINTPREVIEW = 7
#OLECMDID_PAGESETUP = 8
#OLECMDID_SPELL = 9
#OLECMDID_PROPERTIES = 10
#OLECMDID_CUT = 11
#OLECMDID_COPY = 12
#OLECMDID_PASTE = 13
#OLECMDID_PASTESPECIAL = 14
#OLECMDID_UNDO = 15
#OLECMDID_REDO = 16
#OLECMDID_SELECTALL = 17
#OLECMDID_CLEARSELECTION = 18
#OLECMDID_ZOOM = 19
#OLECMDID_GETZOOMRANGE = 20
#OLECMDID_UPDATECOMMANDS = 21
#OLECMDID_REFRESH = 22
#OLECMDID_STOP = 23
#OLECMDID_HIDETOOLBARS = 24
#OLECMDID_SETPROGRESSMAX = 25
#OLECMDID_SETPROGRESSPOS = 26
#OLECMDID_SETPROGRESSTEXT = 27
#OLECMDID_SETTITLE = 28
#OLECMDID_SETDOWNLOADSTATE = 29
#OLECMDID_STOPDOWNLOAD = 30
#OLECMDEXECOPT_DODEFAULT = 0
#OLECMDEXECOPT_PROMPTUSER = 1
#OLECMDEXECOPT_DONTPROMPTUSER = 2
#OLECMDEXECOPT_SHOWHELP = 3
#Button = 1
#Web = 2
If OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu|#PB_Window_Screencentered, "Print word documents...")
If CreateGadgetList(WindowID())
ButtonGadget(#Button, 5, 5, 120, 20, "Print a document")
WebGadget(#Web, 0, 0, 0, 0, "") ; nobody needs to see this ;)
HideGadget(#Web, 1)
; get pointer to the WebGadget object
WebObject.IWebBrowser2 = GetWindowLong_(GadgetID(#Web), #GWL_USERDATA)
Repeat
Event = WaitWindowEvent()
If Event = #PB_EventGadget And EventGadgetID() = #Button
File$ = OpenFileRequester("Print file...", "C:\", "MS Word Documents (*.doc)|*.doc|All Files (*.*)|*.*", 0)
If File$ <> ""
; load the file into the webgadget...
SetGadgetText(#Web, File$)
SetGadgetText(#Button, "Loading...") ; put a wait message on the button :)
While WindowEvent(): Wend
; wait until file is loaded!
Repeat
WebObject\get_Busy(@IsBusy.l)
Delay(1)
Until IsBusy = 0
; print the file...
WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_PROMPTUSER, 0, 0)
; use this to print without asking the user:
; WebObject\ExecWB(#OLECMDID_PRINT, #OLECMDEXECOPT_DONTPROMPTUSER, 0, 0)
; reset wait message
SetGadgetText(#Button, "Print a document")
EndIf
EndIf
Until Event = #PB_EventCloseWindow
EndIf
EndIf
End
Note: on the first run, the file might take a little time before printing,
because the webgadget needs to load the MS-word file display thingy first.
subsequent printings should be faster then.
Timo
Posted: Thu Mar 18, 2004 5:03 pm
by Karbon
Very impressive!
THANK YOU!
For all the code you've given me I really owe you a beer or something.. If I'm ever near you, count on a pint(++)

Posted: Thu Mar 18, 2004 5:20 pm
by AlGonzalez
You may want to look at the OpenSource
AutoIt as an option:
Code: Select all
Dim $WordApp, $DocPath, $DocTitle
$WordApp = "E:\apps\Microsoft Office\Office\WINWORD.EXE"
$DocPath = "z:\Working\FVS2\Docs\"
$DocTitle = "Setup Sybase Server Service.doc"
Run($WordApp)
AutoItSetOption("WinTitleMatchMode", 2) ; Match any substring in title
WinWaitActive("- Microsoft Word")
Send("^o") ; Open File
Send($DocPath & $DocTitle & "{ENTER}") ; Load file
Sleep(2000) ; Wait 2 seconds to load
Send("^p{Enter}") ; Print File
Sleep(5000) ; Wait 5 seconds to print
AutoItSetOption("WinTitleMatchMode", 1) ; Match partial in title from start
WinActivate($DocTitle)
WinWaitActive($DocTitle)
Send("!fx") ; Exit
You can run the AutoIt exe from PB or use the older
version 2 that includes a dll.
The new version 3 will have a dll soon (I hope).
HTH
Posted: Fri Apr 16, 2004 9:12 pm
by Karbon
Freak: Any reason this wouldn't work with the Acrobat extension and a PDF in the browser?
I get nothing...
Posted: Sat Apr 17, 2004 12:02 am
by freak
I guess it is because the PDF plugin adds it's own 'print' button, and maybe
doesn't use the IE printing interface at all.
Sorry, can't help you there.
Timo
Posted: Sat Apr 17, 2004 12:16 am
by Karbon
Ok, thanks!