{{tag>category:"OpenInsight 32-Bit" author:"Bruce Cameron"}}
[[https://www.revelation.com/the-works|Join The Works program to have access to the most current content, and to be able to ask questions and get answers from Revelation staff and the Revelation community]]
==== Printing PDF files (OpenInsight 32-Bit) ====
=== At 17 NOV 2009 11:08:14AM Bruce Cameron wrote: ===
I've seen a few posts regarding printing PDF files and am wondering which way to go. I would like to create a button that the user can click and automatically send a PDF file to the printer.
I creatd the following code but cannot get anything to print. The object loads and the pdf file loads but nothing comes out to print.
I am also looking at doing it with ShellExecute but am wondering if I can/should take advantage of the VSPDF.ocx, VSPRINT7.ocx or other, and how I would accomplish that.
Thanks
Function [/color][/size]Print_PDF[/color][/size]([/size]PDFFile[/size],[/size]Options[/size])
[/size]*
[/color]PDFFile [/color][/size]= [/size]"c:\temp\test.pdf"
[/color]Options [/color][/size]= [/size]""
[/color]*
[/color]PDFOBJ [/color][/size]= [/size]OLECreateInstance[/size]([/size]"AcroPDF.PDF.1"[/color])
Status=[/color]OleStatus[/size]()
[/size]If [/color]Status [/color]then
Call [/color]Msg([/color]""[/color],[/color]'OLE Error code: '[/color]:Status)
[/color]End Else
[/color]x [/color][/size]= [/size]OLECallMethod[/size]([/size]PDFOBJ[/size],[/size]"loadFile"[/color],[/color]PDFFile[/size])
Status=[/size]OleStatus[/size]()
[/size]If [/color]status [/color]then
Call [/color]Msg([/color]""[/color],[/color]'OLE Error code: '[/color]:Status)
[/color]end Else
[/color]* Give time for the document to load
[/color]Call [/color]Yield[/color][/size]()
[/size]*
[/color]y [/color][/size]= [/size]OLECallMethod[/size](PDFOBJ[/size],[/size]"printAll"[/color])
Status=[/color]OleStatus[/size]()
[/size]if [/color]Status [/color]then
Call [/color]Msg([/color]@window[/color],[/color]'OLE Error code: '[/color]:Status)
[/color]end
End
End
[/color]*
[/color]Return [/color]0[/color][/size]
----
=== At 17 NOV 2009 02:45PM Bruce Cameron wrote: ===
Well I couldn't get this to work so I created a work around if anyone is interested. I would still like to know what is wrong with the function but the following is a 'clunky' solution.
1. Create a window/form called Print_PDF
2. Add and OLE control, name it OLE_PDF, for the text user AcroPDF.PDF.1
3. Make the control invisible
4. Add a test control "Your PDF file has been sent to the printer"
5. Add a button control, text=Ok", quick event-] close window
6. Add the following to the "CREATE" event
[/color][/size]
Call Set_Property(@WINDOW:".OLE_PDF","VISIBLE",0)
PDFFile=CreateParam
If CreateParam=" Then Option=PrintWithDialog" Else Option=CreateParam
If PDFFile # "" Then
Var=Send_Message(@WINDOW:".OLE_PDF","LoadFile",PDFFile)
Call Yield()
If Var=0 Then
Call Set_Property(@WINDOW,"VISIBLE",0)
Call Msg("","Error loading PDF file!||Value passed=:PDFFile:"","STANDARD_HALT")
Call End_Dialog(@WINDOW)
End Else
Call Send_Message(@WINDOW:".OLE_PDF",Option)
Call Yield("")
End
End Else
Call Set_Property(@WINDOW,"VISIBLE",0)
Call Msg("","No PDF file passed to print!","STANDARD_INFO")
Call End_Dialog(@WINDOW)
End
RETURN 0[/color][/size]
7. Call this from a function or event using
Call Dialog_Box("PRINT_PDF",@WINDOW,PDFFileToPrint:@FM:PrintOpt)
Note: if a MSG is sent then the window will close by itself. If not then the PRINT_PDF window is left visible and the user clicks "Ok" to close.
Any improvements, suggestions, and other ways of doing this are appreciated.
[[https://www.revelation.com/revweb/oecgi4p.php/O4W_HANDOFF?DESTN=O4W_RUN_FORM&INQID=WORKS_READ&SUMMARY=1&KEY=A5C2FD83F6327C23852576710058A521|View this thread on the Works forum...]]