c# pdf parse table : Acrobat pdf additional metadata Library SDK component .net wpf windows mvc XFRXDevGuide6-part827

- 61 - 
18.1.2.3 
Showing / hiding bookmarks 
The bookmark panel behavior is controlled by the iBook property: 
Property 
Usage 
iBook 
Controls if the bookmark should be displayed in the previewer. The allowed 
values are: 
-1 = Disable bookmarks 
0 = Enable bookmarks but hide them (users need to click on the 
bookmark button to see them) 
1 = Enable bookmarks, always showing them (default) 
2 = Enable bookmarks, but show or hide them automatically based on 
whether or not there are bookmarks defined in the report to preview 
(default) 
18.1.2.4 
Showing / hiding previewer toolbars 
There are two toolbars in the previewer control – one is placed at the bottom of the 
control, the other one is available as a floating toolbar panel, which by default docks at 
the top of the main window, or, alternatively, as an “embedded toolbar”. All three classes 
implement iTool and ShowStatus properties that control visibility of the toolbars: 
Property 
Usage 
classMainToolbar  The class name of the toolbar. The default value is “xfrxToolbar”. 
You can create a child of the default xfrxToolbar class (defined in 
xfrxlib.vcx) and use this property to instruct the previewer to use 
your class rather than the default one. 
This property works for the “real” toolbar – if iTool property is 0 or 
1. if iTool is set to 2, cmdEmbeddedToolbar container class is used as 
the “embedded” toolbar. 
iTool 
Controls the visibility of the toolbar at the top. The allowed values 
are: 
-1 = Disable toolbar 
0 = The toolbar will be enabled but hidden. It can be invoked 
via right click shortcut menu 
Acrobat pdf additional metadata - add, remove, update PDF metadata in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Allow C# Developers to Read, Add, Edit, Update and Delete PDF Metadata
read pdf metadata; pdf metadata reader
Acrobat pdf additional metadata - VB.NET PDF metadata library: add, remove, update PDF metadata in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Enable VB.NET Users to Read, Write, Edit, Delete and Update PDF Document Metadata
pdf metadata extract; pdf metadata editor online
- 62 - 
1 = The toolbar will be enabled and visible. (default) 
2 = The toolbar will be displayed as embedded to the form 
(available only in cntXFRXMultiPage and frmMPPreviewer 
classes. 
ShowStatus 
Controls the visibility of the toolbar at the status bar of the previewer 
container. The allowed values are: 
.T. = show the toolbar (default) 
.F. = hide the toolbar 
18.1.3  Using frmMPPreviewer class 
This class serves as a standalone (fullscreen) previewer window. All you need to do to 
make it work is to pass it a reference to the XFF file to preview, using the previewXFF 
method, as described in Controlling multi-tab preview features
paragraph above. (If you 
are not sure how to create a XFF file reference, please read chapters 16.2: Initializing the 
XFRX#DRAW class instance
and 16.3: Creating temporary XFF files
). Here is a very 
simple “Hello World” example: 
SET CLASSLIB TO XFRXLIB.VCX ADDITIVE loPreview = 
CREATEOBJECT("frmMPPreviewer") && create the previewer object 
toViewer.previewXFF(loXFF)                 && loXFF is XFF file reference 
loPreview.show(1)                          && show the form as modal
Note: Make sure to set all properties (like iTool, ShowStatus, etc.) before you call 
PreviewXFF(…) otherwise they won’t be used. 
18.1.4  Using cntXFRXMultiPage class 
1.
Add an instance of cntXFRXMultiPage class (of XFRXLIB.VCX) into your form. 
Adjust the size of the cntXFRXMultiPage class object container as you need. The 
previewer, including the status bar, icons and scroll bars will be displayed in the 
container. If you resize the container in runtime, its content is automatically 
adjusted
2.
When  the form is about to  be  released,  the  cntXFRXMultiPage  class  instance 
needs  to  do  some  cleanup.  To  enable  that  please  call  the  class  instance’s 
clearLink
()
method from form’s destroy method:
procedure Destroy 
thisform.cntXFRX.clearLink() 
endproc
VB.NET PDF: How to Create Watermark on PDF Document within
logo) on any desired PDF page. And with our PDF Watermark Creator, users need no external application plugin, like Adobe Acrobat.
endnote pdf metadata; acrobat pdf additional metadata
- 63 - 
3.
When running the form, make sure the XFRXLIB.VCX class library is referenced 
in SET CLASSLIB command: 
SET CLASSLIB TO XFRXLIB.VCX ADDITIVE
4.
Call the PreviewXFF method to preview a XFF file, as described in Controlling 
multi-tab preview features
paragraph above. 
5.
By default, cntXFRXMultiPage is using an instance of the XFCont class for each 
page. Should you like to make it use a different class (eg. a subclass of XFCont) 
put the class name to the ClassPreviewPage property of the cntXFRXMultiPage 
instance. 
18.1.5  Using XFCont class 
1.
Add an instance of XFCONT class (of XFRXLIB.VCX) into your form. Adjust the 
size of the XFCONT class container as you need. The previewer, including the 
status bar, icons and scroll bars will be displayed in the container. If you resize the 
container in runtime, its content is automatically adjusted. 
2.
When the form is about to be released, the XFCONT class instance needs to do 
some cleanup. To enable that please call the XFCont class instance’s clearLink() 
method from form’s destroy method: 
procedure Destroy 
thisform.cntXFRX.clearLink() 
endproc
3.
When running the form, make sure the XFRXLIB.VCX class library is referenced 
in SET CLASSLIB command: 
SET CLASSLIB TO XFRXLIB.VCX ADDITIVE
18.1.5.1 
VFP 8.0 approach 
In VFP 8.0, there are two options how to preview report in the previewer. The options 
differ in the calling mechanism, although internally they both work exactly the same. 
18.1.5.1.1
Generating the “CNT” output type 
The approach is using the standard syntax of calling XFRX, without explicitly using the 
XFRX#DRAW class (although it is used in the background). You cannot open an existing 
XFF file with this approach – you always need to run a report that will be previewed. 
1.
Do not send anything as the output file name 
2.
Use “CNT” as the output type parameter in the SetParams method call 
- 64 - 
3.
Call Reset method of the previewer container class 
4.
Call SetOtherParams method of the XFRXSession class instance with the 
reference of XFCont instance as a parameter 
Example: 
local loSession, lnRetval 
loSession= xfrx("XFRX#INIT") 
lnRetVal = loSession.SetParams(,,,,,,"CNT") 
If lnRetVal = 0 
* we are assuming the XFCont container is 
* available as thisform.cntXFRX 
thisform.cntXFRX.reset() 
loSession.setotherparams(thisform.cntXFRX) 
loSession.ProcessReport("report") 
loSession.finalize() 
ENDIF 
18.1.5.1.2
Using the XFRX#DRAW class 
The advantage of this method is that you can preview an existing XFF file – the XFF file 
is opened and “converted” to “CNT” output type via the TransformReport method: 
Example: 
LOCAL loSession 
loSession= xfrx("XFRX#INIT") 
loReport = xfrx("XFRX#DRAW") 
IF thisform.oReport.openDocument("file.xff") 
thisform.cntXFRX.reset() 
lnRetVal = loSession.SetParams(,,,,,,"CNT") 
IF lnRetVal = 0 
loSession.setOtherParams(thisform.cntXFRX) 
loSession.TransformReport(thisform.oReport) 
endif 
ENDIF
18.1.5.2 
VFP 9.0 Approach 
In VFP 9.0 the logic is the same, just the syntax is a little bit different – the reference to 
the  XFCont object  is  copied  to  XFRXPreviewer  property  of  the  XFRXListener  class 
instance and then previewReport method with the XFRX#DRAW reference as parameter 
is called: 
LOCAL loSession 
loSession= xfrx("XFRX#LISTENER") 
- 65 - 
thisform.oReport = xfrx("XFRX#DRAW") 
IF thisform.oReport.openDocument("file.xff") 
thisform.cntXFRX.reset() 
loSession.XFRXPreviewer = thisform.cntXFRX 
loSession.previewReport(thisform.oReport) 
ENDIF 
18.1.6  Hyperlink decoration 
A new property has been added to the XFCont, cntXFRXMultipage and frmMPPreviewer 
classes: UnderlineHyperlinksOnPrint. You can use the following values: 
0 - no decoration for hyperlinks 
1 - display "normal" hyperlinks in blue, but do not decorate custom event hyperlinks 
(green) 
2 - (default value) decorate both blue and green hyperlinks 
To support this in the print output, the PrintDocument method of the XFRX#DRAW 
class has a new parameter, tnUnderlineHyperlinksOnPrint, with the same values and 
logic. 
18.1.7  Custom buttons 
This feature is implemented using the extension handler mechanism: A new method is 
now supported - ToolbarOnInit, which is invoked at the time the toolbar is initialized. In 
this method the extension handler can add new buttons to the previewer and their click 
events can be bound with other methods in the extension handler. A new property is now 
supported, too - oPreviewContainer. If it is available, the previewer will automatically fill 
it with the XFCont object reference for easier access to the previewer properties in the 
custom buttons click event methods.  
Example:  
use demoreps\sales 
local loSession, lnRetval, loXFF, loPreview, loScripts 
loSession=EVALUATE([xfrx("XFRX#LISTENER")]) 
lnRetVal = loSession.SetParams(,,,,,,"XFF") && no name = just in memory 
If lnRetVal = 0 
REPORT FORM demoreps\sales object loSession 
* the XFRX#DRAW object reference is stored in oxfDocument property 
loXFF = loSession.oxfDocument 
* initialize the previewer  
SET PATH TO xfrxlib 
SET CLASSLIB TO xfrxlib ADDITIVE  
loPreview = CREATEOBJECT("frmMPPreviewer") 
* setup the extension handler 
- 66 - 
loPreview.oExtensionHandler = CREATEOBJECT("SampleExtensionHandler") 
loPreview.windowtype = 1  
loPreview.iTool = 2 && embedded toolbar 
 loPreview.iTool = 1 && standard toolbar 
loPreview.PreviewXFF(loXFF) 
loPreview.show(1) 
ENDIF 
DEFINE CLASS SampleExtensionHandler as Custom 
oPreviewContainer = null 
PROCEDURE ToolbarOnInit 
LPARAMETERS toToolbar 
LOCAL button 
IF toToolbar.AddObject("mybutton", "commandbutton") 
BINDEVENT(toToolbar.mybutton, "click" , this, "ButtonClicked")  
toToolbar.mybutton.tabindex = 1 
toToolbar.mybutton.Visible = .t. 
IF UPPER(totoolbar.BaseClass)!="TOOLBAR" 
toToolbar.mybutton.left = toToolbar.cmdQuit.left 
toToolbar.cmdQuit.left = toToolbar.mybutton.left + 
toToolbar.mybutton.width 
ENDIF   
endif 
PROCEDURE ButtonClicked 
LOCAL lcString 
lcString = "this.oPreviewContainer.Name: "+this.oPreviewContainer.Name+CHR(13) 
lcString = lcString + "current page: 
"+TRANSFORM(this.oPreviewContainer.nPageNo)+CHR(13) 
lcString = lcString + "XFRX#DRAW Object: 
"+this.oPreviewContainer.oXFRXWriter.Name+CHR(13) 
lcString = lcString + "Page count: 
"+TRANSFORM(this.oPreviewContainer.oXFRXWriter.PageCount)+CHR(13) 
WAIT WINDOW lcString 
  
 this.oPreviewContainer.oXFRXWriter.PrintDocument(...) 
 this.oPreviewContainer.oXFRXWriter.SavePicture(...) 
ENDDEFINE 
18.2 Printing from the previewer 
By default, when users click the “Print” button in the previewer toolbar (
), the Print 
method of the XFCont class is called. This method displays a dialog box with a printer 
selection and allows for entering a page range: 
- 67 - 
When a XFF file is previewed, the corresponding XFRX#DRAW reference is accessible 
via oXFRXWriter property of the previewer class instance.  
If you would like to change the way the previewer reacts to the print event, you can either 
setup  an  extension  handler  (please  see Registering an extension handler
paragraph 
above in this chapter for more information) or you can override the Print method, create 
your  own printing dialog and then run XFRX#DRAW’s printDocument method. The 
source code of XFCont class is available so you can use the current Print method as a 
template. 
The printer job name generated by the Print method is stored in cJobName property of 
the XFCont class and can be changed both in design time and runtime. (The default 
value is “XFRX”). 
See also: Printing XFF files
chapter on page 46 for more information about printing the 
content of XFF files. 
18.3 Exporting reports from the previewer 
Similarly to printing, when users click the “Export” button in the previewer toolbar 
(
), the Export method of the XFCont class is called. This method displays a dialog 
box with output type and a file name selection and converts the XFF file that is being 
previewed to the output document: 
- 68 - 
If you would like to create your own custom exporting solution, you can either setup an 
extension handler (please see Registering an extension handler
paragraph above in this 
chapter for more information) or you can create a child of the XFCont class and override 
the Export method. 
18.4 E-mail support in the XFRX previewer 
An email icon has been added to the XFRX previewer toolbar. It is disabled by default for 
backward compatibility and can be enabled by setting the iEmail property of the 
previewer class [xfCont, cntXFRXMultiPage or frmMPPreviewer] to 1. If you click the 
email icon, it runs the Email method of the xfCont class. By default it displays a simple 
dialog box asking for email address, subject, body, etc. and uses VFPWinsock library to 
send the email.  
Note: VFPWinsock is a free SMTP sendmail library written by a VFP MVP Francis 
Faure. It is not distributed together with XFRX and it can be downloaded from 
http://www.xfrx.net/vfpWinsock/index_e.asp
. It is a nice little package written in VFP 
distributed as a single .prg.  
The default behavior can be intercepted or overridden by an extension handler [Please 
find more information about extension handlers at 18.1.2.2 Registering an extension 
handler] - and, as the default dialog does not ask for all information VFPWinsock needs 
(eg. it does not ask for SMTP host) you actually need to create an extension handler to 
make it work in your environment. There are two events that extension handler can 
implement:  
Email - the event is fired when the icon is clicked, before the dialog is displayed. 
XFF file reference is sent as the 1st parameter. Returning .F. will suppress the 
default behavior.  
EmailOptions - this event is fired after the dialog is displayed and user clicked 
"Send". XFF file reference and options object is sent as a parameter. Returning .F. 
will suppress the email to be sent  
The parameter object has the following properties:  
cTo  
- 69 - 
cCC  
cBCC  
cSubject  
cAttachmentName  
cBody  
Following are sample of the two most common scenarios:  
Suppress the default behavior and handle the email event on your own  
loPreview = CREATEOBJECT("frmMPPreviewer") 
loPreview.iEmail = 1 && show the email icon 
loPreview.oExtensionHandler = CREATEOBJECT("SampleExtensionHandler") 
loPreview.PreviewXFF(loXFF) && preview the document  
loPreview.show(1) 
DEFINE CLASS SampleExtensionHandler as Custom 
PROCEDURE Email 
LPARAMETERS  loXFF 
LOCAL loSession, lcFileName 
loSession=EVALUATE([xfrx("XFRX#INIT")]) 
lcFileName = Addbs(Sys(2023))+"test.pdf" && temporary file name 
If loSession.SetParams(lcFileName,,.T.,,,,"PDF") = 0 && the 3rd 
parameter says we do not want to preview the PDF 
loSession.TransformReport(loXFF) 
LOCAL sm 
Set Procedure To vfpwinsock ADDITIVE  
sm = Createobject("vfp_winsock_send_mail") 
sm.smtp_host = "your.smtp.server.here" &&&<<<<<<<<<<<<<<<<<<<< 
put your smtp server here 
sm.From = "eqeus@eqeus.com"  
sm.To = "eqeus@eqeus.com" 
sm.subject = "Email test" 
sm.silence = .T. 
sm.attaCHMENT = lcFileName 
if !sm.Send() 
MESSAGEBOX(sm.erreur,16,"xfrx test") 
ELSE 
MESSAGEBOX("Message was sent",0,"xfrx test") 
ERASE (lcFileName) 
endif 
Endif 
RETURN .F. 
ENDPROC 
ENDDEFINE 
Use the default dialog box, use an extension handler to supply mail server 
parameters and let XFRX send the email  
DEFINE CLASS SampleExtensionHandler as Custom 
- 70 - 
PROCEDURE EmailOptions 
LPARAMETERS  loXFF, loOptions 
loOptions.cSMTP_HOST = "mail.your_domain.com" 
loOptions.cFrom = "eqeus@eqeus.com" 
ENDPROC 
ENDDEFINE 
18.5 Previewer localization 
Each localization is stored in two files:  
XFRXLIB_<localization_code>.dbf - strings translation  
XFRXLIB_<localization_code>.vcx - find and page selection dialogs localization  
To create a new localization, please follow these steps:  
1.
Choose a code for your localization (e.g. DE for German)  
2.
Create a copy of default localization DFB 
(localization\default\XFRXLIB_XXX.DBF (+CDX, +FPT)). Change the suffix 
according to your localization code. The default localization DBF contains English 
strings that need to be translated.  
3.
Create XFRXLIB_<localization_code>.vcx visual class library using 
localization\default\locClass.prg. Send the localization code as a parameter.  
Example: Copy locClass to the XFRXLIB directory and call:  
do locClass with "DE"  
which will create the XFRXLIB_DE class library. Translate the two dialog classes 
in the class library.  
4.
Copy the localization files to XFRXLIB directory.  
To activate the localization in your code, call setLanguage method of XFCont class. Send 
the localization code as a parameter.  
Example:  
this.cntXFRX.setLanguage("DE") 
Documents you may be interested
Documents you may be interested