c# pdf parse table : Remove metadata from pdf control Library platform web page asp.net html web browser XFRXDevGuide4-part825

- 41 - 
15 Converting reports to plain text 
15.1 Limitations 
The limitations are defined by the nature of the plain text output: 
Font size and style are not converted (the text alignment is supported)  
Graphics on the report is ignored  
Rectangles and vertical lines are ignored, horizontal lines can be optionally 
converted as a series of dashes, for more information please see the Horizontal 
lines section below  
Overlapping objects are removed from the output  
XFRX needs to be able to split the objects to distinct lines, otherwise some objects 
would be removed form the output  
15.2 How it works 
During the generation process, XFRX takes each section – one by one – and tries to split 
into to individual lines. Then each line is added to the output, respecting the vertical 
position of the line on the paper and horizontal positions of individual objects. Vertically 
misaligned objects are moved down to the closest baseline, for example: 
This report definition: 
Will be split to three lines: 
And the result would look like this:
One two  three 
four five 
six 
If XFRX will not be able to create distinct lines or if objects would overlap one another, 
XFRX will try removing some of the objects. 
Remove metadata from pdf - 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
google search pdf metadata; edit pdf metadata
Remove metadata from pdf - 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
edit pdf metadata online; metadata in pdf documents
- 42 - 
For example: 
will be converted as:  
One two 
Four 
six 
15.3 Horizontal lines 
Horizontal lines can optionally be converted to a series of dashes. By default, this option 
is  switched  on.  To  suppress  horizontal  lines,  call  the  setOtherParams  method  of 
XFRXSession  object  with  two  parameters:  "PLAIN_SHOW_LINES"  and  .F.,  before 
calling processReport() method. 
Example: 
local loSession, lnRetval 
loSession= xfrx("XFRX#INIT") 
lnRetVal = loSession.SetParams("output.txt",,,,,,"PLAIN") 
If lnRetVal = 0 
loSession.SetOtherParams("PLAIN_SHOW_LINES", .F.) && do not print 
horizontal lines 
loSession.ProcessReport("report.frx") 
loSession.finalize() 
ENDIF 
15.4  Characters per inch setting 
To convert  the  object  absolute positions to character positions, XFRX calculates the 
number of characters per line and the number of lines per page using horizontal and 
vertical  character-per-inch  values.  By  default,  these  values  are  10  characters  per 
horizontal inch and 5.2 characters per vertical inch, which results in approximately 80 
characters x 55 lines on a letter size paper. 
You may want to change the character density (e.g. when using a condensed font on a dot 
matrix printer). To do this, send PLAIN_CPI_HORIZONTAL or 
PLAIN_CPI_VERTICAL as the first parameter of the SetOtherParams() method and the 
actual value as the second parameter. 
Example: 
local loSession, lnRetval 
loSession= xfrx("XFRX#INIT") 
lnRetVal = loSession.SetParams("output.txt",,,,,,"PLAIN") 
If lnRetVal = 0 
* changing the character density to 12x6 per sq. inch 
VB.NET PDF remove image library: remove, delete images from PDF in
Insert Image to PDF. Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete
add metadata to pdf file; adding metadata to pdf
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Able to remove a single page from adobe PDF document in VB.NET. Ability to remove consecutive pages from PDF file in VB.NET. Enable
read pdf metadata java; remove pdf metadata
- 43 - 
loSession.SetOtherParams("PLAIN_CPI_HORIZONTAL",12)  
loSession.SetOtherParams("PLAIN_CPI_VERTICAL",8) 
loSession.ProcessReport("report.frx") 
loSession.finalize() 
ENDIF 
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
console application. Able to remove a single page from PDF document. Ability to remove a range of pages from PDF file. Free trial package
batch edit pdf metadata; view pdf metadata
C# PDF Password Library: add, remove, edit PDF file password in C#
String outputFilePath = Program.RootPath + "\\" Remove.pdf"; // Remove password in the input file and output to a new file. int
edit pdf metadata acrobat; c# read pdf metadata
- 44 - 
16 Using XFF files 
XFRX is able to save the generated report to a binary file (XFF file). This file can be any 
time later used to: 
Transform  the stored report output to any of the target formats supported by 
XFRX (PDF, Word, HTML, Excel, TXT, etc.) 
Print the stored report output 
Preview the stored report output in the XFRX previewer 
You can also  modify the content  of existing  XFF  files or  create  new XFF  files from 
scratch, bypassing the reporting engine altogether.  
16.1 Converting reports to XFF files 
To create a XFF file, send "XFF" as the target parameter and the name of the file as the 
output name parameter of the SetParams(). 
Example: Creating a XFF file 
VFP 8 approach: 
LOCAL loSession 
loSession= xfrx("XFRX#INIT") 
IF loSession.SetParams("output.xff",,,,,,"XFF") = 0 
loSession.ProcessReport("report") 
loSession.finalize() 
ENDIF 
VFP 9 approach: 
LOCAL loObj 
loObj = xfrx("XFRX#LISTENER") 
if loObj.SetParams("output.xff",,,,,,"XFF") = 0 
REPORT FORM myreport object loObj 
endif 
By  default,  .XFF  extension  (XFrx  File)  is  added  to  the  output  file.  The  XFF  file  is 
internally stored as a normal DBF file, and because Memo fields are used for some of its 
columns, another file with the same name and .FPT extension is created.  
16.2 Initializing the XFRX#DRAW class instance 
(Please see the XFRX#DRAW class reference
na stránce 92). 
XFRX methods do not work with the XFF file directly, but always via the XFRX#DRAW 
class, which represents a wrapper around the XFF file. To create an instance of this class, 
C# PDF bookmark Library: add, remove, update PDF bookmarks in C#.
Ability to remove and delete bookmark and outline from PDF document. Merge and split PDF file with bookmark. Save PDF file with bookmark open.
add metadata to pdf programmatically; adding metadata to pdf files
C# PDF remove image library: remove, delete images from PDF in C#.
Insert Image to PDF. Image: Remove Image from PDF Page. Image: Copy, Paste, Cut Image in Page. Link: Edit URL. Bookmark: Edit Bookmark. Metadata: Edit, Delete
pdf xmp metadata viewer; pdf xmp metadata editor
- 45 - 
call XFRX with “XFRX#DRAW” parameter. Then call openDocument(tcXFFFileName) 
to attach the XFRX#DRAW object to an existing XFF file: 
LOCAL loXFF 
loXFF = xfrx("XFRX#DRAW") 
IF loXFF.openDocument("output.xff") 
… 
ELSE 
? "XFF file cannot be open" 
ENDIF 
You can also create an empty XFF file by calling CreateDocument(tcXFFFileName) 
method. 
16.3 Creating temporary XFF files 
Sometimes you may want to create the XFF file just in memory, use it in your application 
(e.g. for report previewing and printing) and release it afterwards. 
To do this, leave the XFF file name empty. In this case a temporary XFF file will be 
created and you will be able to access its XFRX#DRAW class instance. The way how to 
access the instance differs in VFP 8.0 and VFP 9.0. 
VFP 8.0 approach 
In VFP 8.0, the instance is returned by the Finalize() method of the XFRXSession class: 
LOCAL loSession, loXFF 
loSession= xfrx("XFRX#INIT") 
IF loSession.SetParams(,,,,,,"XFF") = 0 
loSession.ProcessReport("report") 
loXFF = loSession.finalize() 
ENDIF 
*  
* now the loXFF instance can be used as if the XFF file was opened 
* with the openDocument method call 
* 
VFP 9.0 approach 
In VFP 9.0, the instance is stored in oxfDocument property of the XFRXListener class: 
LOCAL loObj, loXFF 
loObj = xfrx("XFRX#LISTENER") 
loObj.targetType = "XFF"  
loObj.targetFileName = "" && output to a temporary file 
REPORT FORM report OBJECT loObj  
loXFF = loObj.oxfDocument 
C# TIFF: TIFF Metadata Editor, How to Write & Read TIFF Metadata
You can also update, remove, and add metadata. List<EXIFField> exifMetadata = collection.ExifFields; You can also update, remove, and add metadata.
preview edit pdf metadata; pdf metadata viewer online
VB.NET PDF delete text library: delete, remove text from PDF file
projects. Basically, you can use robust APIs to select a PDF page, define the text character position, and remove it from PDF document.
remove metadata from pdf acrobat; get pdf metadata
- 46 - 
16.4 Converting XFF files to other output formats 
To process the stored report, you need to initialize a XFRX#DRAW object, link it to the 
stored file and send it as a parameter of TransformReport method of XFRXListener class 
(in VFP 9.0) or XFRXSession class (in VFP 8.0) instance.  
Example: Transforming a stored XFF file to a PDF document.  
VFP 8 approach: 
LOCAL loSession, loXFF 
loSession= xfrx("XFRX#INIT") 
loXFF = xfrx("XFRX#DRAW") 
IF loReport.openDocument("output.xff") 
lnRetVal = loSession.SetParams("output.pdf",,,,,,"PDF") 
IF lnRetVal = 0 
loSession.TransformReport(loXFF) 
endif 
ENDIF 
VFP 9 approach: 
LOCAL loObj, loXFF 
loObj = xfrx("XFRX#LISTENER") 
loXFF = xfrx("XFRX#DRAW") 
IF loXFF.openDocument("output.xff") 
lnRetVal = loObj.SetParams("output.pdf",,,,,,"PDF") 
IF lnRetVal = 0 
loObj.transformReport(loXFF) 
ENDIF 
ENDIF 
16.5 Printing XFF files 
To send the content of a XFF file to a printer, call printDocument method of the 
XFRX#DRAW class instance. The name of the printer, job name and page range can be 
sent as parameters. 
Please see the full parameter list and further details in the XFRX#DRAW class reference
Example: Printing an XFF file 
loXFF.printDocument(getprinter(),"xfrx – invoice", "1,2,4-10") 
16.5.1  Displaying printer properties dialog 
A printer properties dialog for a given printer can be invoked via _xfPrinterProperties 
function, returning the printer properties structure as a string.  
This string can be saved as a user preference and sent to XFRX as the 5th parameter of 
PrintDocument method when printing. This functionality is similar to SYS(1037) 
introduced in VFP 9.0, with two differences/improvements: 
The page setup and printer selection dialogs are skipped, which saves two clicks 
for the users and preempts confusions in case the printer has already been 
- 47 - 
selected. (Very often, there is a printer selection box in the "main" form and a 
button to invoke printer properties). 
This implementation works in earlier versions of Visual FoxPro, too (from VFP 
5.0) 
The _xfPrinterProperties method takes 3 parameters: 
tcPrinterName - the printer name 
tcTag2 - the DEVMODE structure to use as a default (if not specified, the default printer 
settings will be used) 
tlShowProperties - if set to .T., the printer properties dialog box will show up. If OK 
button is clicked, the DEVMODE structure with selected printer settings will be 
returned. If Cancel button is clicked, an empty string will be returned. 
If this parameter is set to .F., the dialog will not be displayed and the default printer 
setting will be returned. 
Example: 
SET PROCEDURE TO xfrx ADDITIVE && this is required as the function is 
implemented inside XFRX.FXP 
lcPrinter = GETPRINTER() && select a printer 
lcTag2 = _xfPrinterProperties(lcPrinter, "", .F.) && do not show the dialog, 
return the default settings 
lcTag2 = _xfPrinterProperties(lcPrinter, lcTag2, .T.) && show the dialog box 
now 
IF EMPTY(lcTag2) 
&& CANCEL button was clicked 
ELSE 
&& OK button was clicked 
ENDIF 
16.5.2  Using custom printer settings when printing 
The printer settings structure can be sent to PrintDocument method as the fifth 
parameter. If this parameter is empty, the default printer settings are used. 
The printer settings structure can be retrieved by _xfPrinterProperties procedure (see 
the previous chapter), or, if the printer settings are saved with the report, it is stored in 
Tag2 field in the first record of the FRX file. 
Example: 
loXFF.printDocument(lcPrinter, "job name", 1, 3, lcTag2) 
16.6 Previewing XFF files 
Please see chapter Previewing XFF files
in the next chapter (XFRX previewer
chapter on 
page  54)  for  more  information  about  previewing  XFF  files  in  the  advanced  report 
previewer that comes with XFRX. 
- 48 - 
17 Drawing custom objects with XFRX#DRAW 
The XFRX#DRAW class described in the previous chapter is also able to modify the 
content  of  XFF  files:  to  add  custom  graphics,  text,  new  pages,  hyperlinks  and 
bookmarks,  both during  the  report  generation process  as well  as after the report  is 
generated.  
17.1 Drawing custom objects to existing XFF files 
To add custom graphics objects to XFF files, instantiate the XFRX#DRAW object as 
described in previous chapter and use the properties and methods described in chapter 
17.3 XFRX#DRAW functions
below. All changes are immediately written to the XFF file 
and once the XFRX#DRAW class reference is released, the changes are written to the 
disk (or other media the XFF file is stored on). 
17.2 Drawing custom objects during report generation process 
Alternatively, you can create scripts, which can be invoked on the fly, during the report 
generation process. These scripts can either be implemented as methods of a class, or, 
for rectangle-bound scripts, can be entered into a comment field of a rectangle object on 
the report. 
Note: In XFRX for VFP 9.0, the XFF file is always internally used when a report is 
processed. However, in XFRX for VFP 8.0, you can generate the target documents 
“directly”, in which case, however, the XFF scripts would not be evaluated. 
17.2.1 
Page-bound scripts 
The page-bound scripts are implemented as methods of an arbitrary class – you can use 
a custom class that is instantiated before XFRX is executed, implement the scripts as 
methods  of  the  current  form  or  whatever  else  is  convenient  in  your  application 
environment.  Each  script  method  accepts  one  parameter:  the  XFRX#DRAW  object 
reference. This reference links to the document that is being generated. 
Example: 
DEFINE CLASS myXFRXScripts as Custom 
PROCEDURE drawBlueRectangle 
LPARAMETERS oXFD 
oXFD.setColor(0,0,255,-1,-1,-1) 
oXFD.drawRectangle(100,200,50,50) 
ENDPROC  
ENDDEFINE
Before  XFRX is called, the  scripts are  registered  with  RegisterScript()  in the XFRX 
session  class  instance  so  that  XFRX  new  about  these  scripts  and  invoked  them  as 
required. You can execute the scripts on each page, odd or even pages or arbitrary pages. 
Please see Methods common in XFRXListener and XFRXSession classes
chapter  for 
detail description of this method and its parameters. 
- 49 - 
Example: 
*Draw blue rectangle on each page 
* 
loScripts = createobject("myXFRXScripts") 
loXFRXSession.registerScript(loScripts,"drawBlueRectangle",0,"ALL",0) 
17.2.2 
Rectangle-bound scripts 
The rectangle-bound scripts are bound  to a  specific rectangle on the  report and are 
executed instead of drawing this rectangle to the output.  
There  are  two  ways  how  the scripts  can be  implemented: named scripts,  which are 
implemented as a method of a class, or scripts written directly to the comment field of 
the rectangle in the report definition. 
17.2.2.1 
Named scripts 
If the script is implemented as a method of a class, it needs to be registered similarly as 
page-bound scripts, but only the first two parameters are required – the object reference 
and the script name:  
loScripts = createobject("myXFRXScripts") 
loXFRXSession.registerScript(loScripts,"drawBlueRectangle") 
To link the script with a rectangle, add “#UR SCRIPT NAME <script name>” (without 
the quotation marks) as a comment of the rectangle. 
17.2.2.2 
Scripts written in the rectangle comment field 
Alternatively, the script can be entered into the comment field of the rectangle. This 
technique  is  available for VFP  8.0  and  higher,  but its  usage  is  limited for VFP  8.0 
because the comment field is small and only a limited amount of text can be entered into 
it. 
The script is entered between #UR SCRIPT BEGIN and #UR SCRIPT END lines. 
These  scripts  are  neither  named  not  registered.  The  content  between  these  lines  is 
supposed to accept the XFRX#DRAW object reference parameter and is evaluated via 
EXECSCRIPT( ) function.  
- 50 - 
Example: 
When inside of the rectangle-bound script, the coordinates origin is shifted: 0,0 
represents the upper left hand corner of the rectangle. 
Note: The position and size of the bounding rectangle can be retrieved with 
GetBoundingRectangle() method. 
17.2.2.3 
Converting rectangle-bound objects to pictures 
The content of the rectangle-bound scripts can be alternatively rendered as a picture, 
which is then placed to the output. To do this, add PICTURE clause to the #UR SCRIPT 
BEGIN or #UR SCRIPT NAME <script name> line in the comment field. 
The PICTURE can optionally be followed by a DPI value, representing the DPI (dots per 
inch) of the picture created. The default DPI is 96, which is suitable for previewing on 
screen, but you may want to increase the DPI value to increase the picture quality. 
You can also specify the  picture type by adding TYPE clause followed by one of the 
following values: BMP, JPG, PNG and TIF. The default picture type is JPG. 
17.2.2.4 
Sending parameters to named scripts 
The named scripts can optionally accept further parameters. The parameters are 
specified via PARAMETERS clause followed by the parameters, which are evaluated at 
the time of report processing. 
Documents you may be interested
Documents you may be interested