view pdf in asp net mvc : Convert pdf to text file using software control project winforms azure .net UWP MegaFox%201002%20Things%20You%20Wanted%20to%20Know%20About%20Extending%20Visual%20FoxPro%20Chapter%20080-part841

Chapter 8: Integrating PDF Technology    1 
Chapter 8 
Integrating PDF Technology 
The Adobe Acrobat Portable Document Form (PDF) is proven technology that allows a 
Visual FoxPro developer to enhance the output generated by their custom applications. 
This chapter will show how you can integrate PDFs, extend the presentation of Visual 
FoxPro reports, and allow users to input data through PDF files into a Visual FoxPro 
application. 
Generating Acrobat Portable Document Form (PDF) files has become commonplace and is as 
simple as printing output to a printer. If your customers are anything like our customers, they 
are asking for more and more integration of PDF output with custom applications. The Adobe 
Acrobat website has a quote on it that we think bests describe the Acrobat technology: 
“Adobe® Portable Document Format (PDF) is the open de facto standard for electronic 
document distribution worldwide. Adobe PDF is a universal file format that preserves all the 
fonts, formatting, graphics, and color of any source document, regardless of the application 
and platform used to create it. Adobe PDF files are compact and can be shared, viewed, 
navigated, and printed exactly as intended by anyone with free Adobe Acrobat® Reader® 
software. You can convert any document to Adobe PDF using Adobe Acrobat 5.0 software.” 
Adobe PDF files can be published and distributed anywhere: in print, attached to email, 
posted on Internet sites, distributed on CD-ROM, viewed on a Palm or Pocket PC device, or 
even displayed in a Visual FoxPro application using an ActiveX control provided by Adobe. 
In a nutshell, any information that can be printed to a Windows printer can be generated into a 
PDF file. The PDF files are typically smaller than their source files, and can be downloaded a 
page at a time for fast display on the Web.  
PDF files also provide an alternative way of sharing documents and application output 
over a broad range of hardware and software platforms without sacrificing any formatting that 
can be lost using HTML. 
Which version of Acrobat do I need? 
Acrobat comes in three flavors, Reader, Approval, and the full featured (known as plain old 
Acrobat). Adobe Acrobat was at version 5.0 when this book was written. 
The reader is available free of charge and can be downloaded from Adobe’s website. The 
generated PDF file can be viewed by anyone who has the Adobe Acrobat Reader. The Adobe 
Acrobat Reader displays the PDF file for viewing and has a number of features that include 
printing of the document, searching for text, and emailing the file to someone else. Users who 
just view the output generated by a custom Visual FoxPro application in PDF format can use 
this flavor of the product. Acrobat Forms can also be submitted to a web process using the 
Reader version of the product. 
You need the full featured Acrobat application to be able to create PDF files, create 
Acrobat Forms, write JavaScript within a PDF, add electronic comments, or convert web pages 
to PDF. Custom applications developed with Visual FoxPro that create a PDF file using an 
Adobe product will need the full version of Acrobat. 
Convert pdf to text file using - software control project:C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net, ASP.NET MVC, WinForms, WPF application
C# PDF to Text (TXT) Converting Library to Convert PDF to Text
www.rasteredge.com
Convert pdf to text file using - software control project:VB.NET PDF Convert to Text SDK: Convert PDF to txt files in vb.net, ASP.NET MVC, WinForms, WPF application
VB.NET Guide and Sample Codes to Convert PDF to Text in .NET Project
www.rasteredge.com
   MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
##NOTE ICON 
An individual Acrobat license is required for every workstation that will generate 
PDF files from your custom application. This means if you have 50 users working 
at 50 different workstations that access PDF generation functionality in the 
application, your customer will need 50 licenses at approximately US$225. 
Acrobat Approval is available to save Acrobat Forms, apply e-signatures, spell check 
contents of a PDF, and to secure documents so others cannot make changes. If users are 
entering data into an Acrobat Form and need to save this data to the server or workstation hard 
drive, they can use this version of the product. Using Acrobat Approval can provide significant 
deployment savings if generating PDF files is not a feature that is required, but form data 
needs to be saved. 
What is needed to generate a PDF file? 
Acrobat PDF files are generated via a printer driver loaded on the client PC. These are printer 
drivers just like ones for a laser or color printer. These print drivers have the intelligence to 
generate files in the PDF format. As noted before, these files retain all the needed information 
to duplicate the output exactly as the original application intended it to be printed. 
##IMAGE: MF08001.tif 
Figure 8.1 These are the printer drivers loaded when Acrobat and Amyuni drivers are 
installed. 
You can purchase the Acrobat product around US$225. When you install Acrobat (not the 
Reader) you get two printer drivers loaded. The PDFWriter is an older, less sophisticated 
driver. Distiller is the more powerful and more current driver. We have had good success with 
software control project:C# PDF Text Extract Library: extract text content from PDF file in
Instead, using this C#.NET PDF text extracting library package, you can easily extract all or partial text content from target PDF document file, edit selected
www.rasteredge.com
software control project:VB.NET PDF Text Extract Library: extract text content from PDF
'Please have a quick test by using the following example code for text extraction from PDF file in VB.NET program. ' Open a document.
www.rasteredge.com
Chapter 8: Integrating PDF Technology    3 
the PDFWriter and find the limited features more than sufficient for our implementations. We 
have also found that it is faster in performance, which is good if the tradeoff of functionality is 
not limiting. 
##NOTE ICON 
If you plan to use the Acrobat PDF Writer driver you need to know that it is not 
loaded by default when installing Acrobat 5.0. You will need to select the custom 
setup and make sure to pick the PDF Writer to be installed. 
One alternative to Acrobat that we have used successfully is the Amyuni PDF Converter 
(PDF Compatible Printer Driver). This runs $129 for a single-user license for one platform and 
$189 for all the Windows platforms (3.1, 95, 98, Me, NT, 2000, and XP). The Developer 
Version contains the ActiveX interface and is purchased one time ($800 for single OS 
platform, $1150 for all platforms) and has a royalty-free distribution license. The Developer 
Version only allows features to be accessed via the ActiveX interface and does not have any 
user interface, and no permanently loaded printer driver. This works well for Visual FoxPro 
(and other Visual Studio tools) based applications. The printer driver only exists at the time the 
driver is used and is generated on-the-fly when the ActiveX control is accessed to generate the 
PDF file. If your users need the user interface to the PDF Converter then they can get a site 
license for $2500 for a single OS platform or $3600 for all OS platforms. There is a new 
Professional version with encryption and web optimization available. 
Okay, this sounds good so far, but wait there is more! Amyuni also has Visual FoxPro 
specific examples to boot and they actually advertise in Visual FoxPro periodicals! There is 
even more; they have even gone as far as developing an FLL API file for use with Visual 
FoxPro. Now the FLL solution is not always recommended since the ActiveX interface works 
well (unless you need bookmarks), but it is nice that Amyuni is showing support for Visual 
FoxPro in this fashion. 
We are not trying to include an ad here for Amyuni, just trying to provide a baseline so 
you can evaluate the advantage or disadvantage of this product line. We advise you to check 
out the Amyuni.com website for all the details. 
How do I determine which PDF product to license? 
All PDF creation features are available in both the Adobe PDFWriter/Distiller and Amyuni 
PDF Converter drivers. The Amyuni PDF Converter gives an unlimited distribution product 
with the Developer Version. You or your client will need to purchase a full copy of Acrobat 
for every PC that will generate PDF files. In a small company (less than 6 users) it may be 
better to go the Acrobat route; larger sites or vertical market apps should seriously look at the 
Amyuni product. Adobe does have an Open Options Site License Program for organizations 
with 1,000 or more workstations. Contact Adobe for more specifics. Acrobat 5.0 also has the 
interactive development environment as well which may be something you or your customers 
will need. 
Once the Acrobat printer driver is loaded it automatically becomes available to all 
Windows’ applications and is actively visible in several applications already installed. For 
instance, all the Microsoft Office (v97, 2000, and XP) applications have the PDFMaker 
software control project:C# PDF File Split Library: Split, seperate PDF into multiple files
If needed, developers can also combine generated split PDF document files with other PDF files to form a new PDF file using RasterEdge XDoc.PDF.
www.rasteredge.com
software control project:VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
using RasterEdge.XDoc.PDF; This professional .NET solution that is designed to convert PDF file to HTML web page using VB.NET code efficiently.
www.rasteredge.com
   MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
macro/toolbar installed and available. The Amyuni version will not be available to other 
applications unless you get the site license. 
There are other PDF writers available similar in functionality and implementation. We are 
most familiar with the Amyuni product which is why we have chosen it for discussion in this 
chapter. We are not endorsing this product over the others, just trying to express 
implementation ideas for these tools. 
How can I use PDF technology in my Visual FoxPro 
apps? 
An example of the use of these components is the company accountant publishing the sales 
results tracked in a custom database application (naturally developed by a top gun Visual 
FoxPro developer) to a PDF file. This file could be transferred via email to the sales force and 
they could view it on their laptops for review. Changes can be emailed back to accountant and 
updated in the database. The accountant recreates the PDF file and posts it on the company 
website. Now all employees in the company can hit the company website to see how well the 
company sales are going. 
So why publish to the PDF format instead of HyperText Markup Language (HTML) 
format. HTML was designed for single page documents with limited formatting capabilities. 
The presentation of the document differs from one computer to another and from one web 
browser to another. Also, to transmit a single page, one needs to transmit many files containing 
different parts of the page (one file for each graphic). PDF documents can have hundreds of 
pages contained in one file with all the formatting capabilities that modern applications 
provide. 
How do I output Visual FoxPro reports to PDF using 
Adobe Acrobat? 
(Example: PromptPDF.prg)
Once the full version of Adobe Acrobat is installed, generating Visual FoxPro reports to a PDF 
file is quite simple. First you make sure that the PDF Printer Driver is set as the default printer 
for the Visual FoxPro application. This can be any Visual FoxPro report. If the report has a 
hard-coded printer driver in the TAG, TAG2, and EXPR fields for a printer other than the 
Acrobat driver, the following code does not work. No special driver setting has to be made in 
advance, just use your standard methodology of outputting a report to the printer: 
*Genericcallwhere VFPpromptstheuserwith the
*printerdialogeachtimethe reportis run
REPORTFORMContactListing;
  TOPRINTERPROMPTNOCONSOLE
OR 
*Genericcallsouserselects printer before
*report isprinted, butitchanges theVFP Printer
SYS(1037)
REPORTFORMContactListingTOPRINTERNOCONSOLE
OR 
software control project:C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
In the following example, this C#.NET PDF to JPEG converter library will name the converted JPEG image file Output.jpg. Convert PDF to JPEG Using C#.NET.
www.rasteredge.com
software control project:VB.NET PDF Convert to Tiff SDK: Convert PDF to tiff images in vb.
Using our VB.NET PDF Document Conversion Library, developers can easily convert PDF document to TIFF image file in VB.NET programming.
www.rasteredge.com
Chapter 8: Integrating PDF Technology    5 
* Call that hasahardcodedsettingtodrive the
* report to theAcrobat Printer,yet savesthe 
* oldprinter setting forreset later.
lcPDFPrinter="Acrobat PDFWriter"
lcOldPrinter=SET("PRINTER", 2)
SET PRINTER TONAME(lcPDFPrinter)
REPORT FORM ContactListing TO PRINTERNOCONSOLE
SET PRINTER TONAME(lcOldPrinter)
Once the report is sent to the printer via the REPORT FORM command, the following 
dialog is presented: 
##IMAGE: MF08002.tif 
Figure 8.2 The Save PDF File As dialog allows the user to specify the name of the 
PDF file as well as specific document properties. 
Optionally you can hit the Edit Document Info. commandbutton on this dialog to bring up 
the Acrobat PDFWriter Document Information dialog. 
software control project:C# PDF File Compress Library: Compress reduce PDF size in C#.net
Convert smooth lines to curves. If using x86, the platform target should be x86. C# Demo Code to Optimize An Exist PDF File in Visual C#.NET Project.
www.rasteredge.com
software control project:VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.
paste, C#.NET rotate PDF pages, C#.NET search text in PDF VB.NET PDF to JPEG converting component can help developers convert standard PDF file to high
www.rasteredge.com
   MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
##IMAGE: MF08003.tif 
Figure 8.3 The PDF Document Information provides the readers of the document key 
details. 
This information is stored (and can be optionally reviewed) in the PDF file that is 
generated: 
Chapter 8: Integrating PDF Technology    7 
##IMAGE: MF08004.tif 
Figure 8.4 The Document Summary dialog within Acrobat will display the PDF 
Document information for the reader as entered by the document creator. 
The document summary information is often used by website search engines and indexers 
to make available the contents of PDF files to the people browsing their site. 
What are the errors to trap when printing to PDFs? 
(Example: 
cusAmyuniPDF::Error() of g2pdf.vcx, NoHandsAmyuniPdf.prg)
The key to printing to PDFs (and any other printer driver selection process) is to capture the 
Visual FoxPro “Error loading printer driver” (error 1958). Make sure to include this trap in 
your error scheme or swap in a special error trap into the report printing mechanism. 
LPARAMETERS tnError,tcMethod,tnLine
DOCASE
   MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
CASEtnError=1958
 THIS.lDriverError= .T.
OTHERWISE
 AERROR(this.aErrorInfo)
 IFDODEFAULT(tnError, tcMethod, tnLine)
  MESSAGEBOX("There wasaproblemencounteredwhencreating "+;
      "thePDF File (" + this.cPDFFileName +")."+;
      CHR(13)+CHR(13)+;
      this.aErrorInfo[2] +"("+;
      ALLTRIM(STR(this.aErrorInfo[1]))+")", ;
      0 + 48,_SCREEN.CAPTION)
 ENDIF
ENDCASE
RETURN
The biggest gotcha to watch when printing Visual FoxPro reports to PDF is getting bit by 
the hard coded printer details. One of the better-known problems with Visual FoxPro reports is 
accidentally hard coding printer driver information that gets stored in the report metadata. The 
information is stored in the report metadata file (FRX) in the EXPR, TAG, and TAG2 
columns. If these fields have specific printer information included in the columns, Visual 
FoxPro will attempt to print to that printer and not the PDF driver. The symptom of this 
problem is having output printed on the printer when you attempt to generate a PDF file. We 
discussed this problem and a solution in 1001 Things You Wanted to Know About Visual 
FoxPro on page 542, “How to remove printer info in production reports”, and on page 496, 
“How to remove the printer information from Visual FoxPro reports”. 
How do I run PDF reports unattended using Acrobat? 
(Example: NoHandsPDF.prg)
In a previous section we discussed the basic Visual FoxPro report print to PDF process. While 
this process is straightforward, it has a significant drawback in the fact that it needs an end 
user to interact and enter in a file name before the PDF can be generated. What happens if you 
want to automatically generate a slew of reports from Visual FoxPro during a batch process 
that happens in the middle of the night? You or your clients could hire an operator that sits and 
watches the process and types in the filenames as they are prompted, or you can head directly 
to the West Winds web site and get the wwPDF50 ZIP file. 
##WEB ICON 
Rick Strahl has written plenty of code that allows Visual FoxPro developers to 
generate PDF files without the printer driver interaction prompting for a PDF 
filename. This class (wwPdf.prg) is available from http://www.west-
wind.com/Webtools.asp and is available as part of the chapter source code 
downloadable from the Hentzenwerke website. The newest download available 
from West Wind has a change in it to better work with Acrobat 5.0. There are 
other classes included that work with Acrobat Distiller and the ActivePDF drivers. 
Chapter 8: Integrating PDF Technology    9 
The Acrobat printer driver is driven on settings available in the WIN.INI file. The 
wwPDF40 class manipulates the Acrobat filename settings in this INI file. The implementation 
of hands free Acrobat printing is straightforward: 
* PartiallistingfromNoHandsPDF.prg
SET PROCEDURE TO wwPDFADDITIVE
SET PROCEDURE TO wwAPIADDITIVE
loPDF=CREATEOBJECT('wwPDF40')
lcFileName ="ContactList" +lcNow +".pdf"
lcOutputFile=ADDBS(SYS(2023)) +lcFileName
* UsePrintReport()insteadofPrintReportToString()
* IMPORTANT:FRX must have printer specified asPDFWriter
loPDF.PrintReport("ContactListing",lcOutputFile)
* Destroythe PDFObject
loPDF=.NULL.
Set procedure to two programs that contain all the class definitions necessary to 
manipulate the needed operating system INI files that contain the information used by the 
Acrobat PDF printer driver. Then create the PDF file without the user being prompted for a 
file name. The sample code is creating the PDF output in the Visual FoxPro temp directory. 
You might be wondering why the sample code has a 
SETREPROCESS
command. The 
wwPDF classes work around an issue with the PDF Writer. The printer driver is single 
threaded. This means that it needs to generate one report at a time. The wwPDF class sets up a 
table and performs a record lock until the PDF is generated. This concept of enforcing the 
single threaded process is called semaphore locking. If you are simultaneously printing a 
massive amount of PDFs you might consider a different solution since this class will slow the 
overall throughput. Websites that generate PDF documents on the fly might want to consider 
the ActivePDF since it is multi-threaded and can take advantage of multiple processors. 
There is a complete whitepaper on this topic written by Rick Strahl “Web reports with 
Adobe Acrobat Documents” at http://www.west-
wind.com/presentations/pdfwriter/pdfwriter.htm. Rick Strahl also details how the PDF writing 
process is single threaded (important on a web server process) and exactly how his classes 
work with semaphore locking to make sure that the reports are handled one by one. If your 
web application is generating thousands upon thousands of Visual FoxPro reports in this 
manner the throughput may become an issue. 
How do I run PDF reports unattended using Amyuni? 
(Example: NoHandsAmyuniPDF.prg, cusAmyuniPDF::g2pdf.vcx)
In the previous section we demonstrated building PDF files in a hands-off mode (requiring no 
user interaction). This technique requires two tools, the full Acrobat version and the West 
Winds PDF classes. Rick Strahl is kind enough to offer his classes for free, but the Acrobat 
product lists for approximately $225 a license. If you are running this solution you need to buy 
a license for each user (or web server) that is generating these documents. This may not sound 
bad for a shrink-wrapped package that costs in the tens of thousands of dollars, but what if all 
50 users need this functionality? You could be adding another $10,000 to the project 
10    MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
implementation costs. This is where a product like the Amyuni PDF Converter comes into 
play. 
##NOTE ICON 
Amyuni provides a full demonstration version of the Amyuni PDF Converter. We 
have included it in the chapter downloads, but a more current version might be 
available at the Amyuni website (www.Amyuni.com
). The file name in the 
downloads is PdfSUDemoEn.exe. This needs to be installed to run the samples. 
The only difference between the demo and registered version is that a watermark 
is included on each PDF generated with the demo version. 
The PDF Converter is accessed in code via an ActiveX interface or a FLL library. The 
examples we will demonstrate here is for the ActiveX interface. The class example 
(cusAmyuniPDF class in G2Pdf.vcx, available in the chapter download file from 
Hentzenwerke.com) handles both editions so feel free to review the code for the differences 
between the two approaches. First you must instantiate the control and initialize it. 
this.oPDFPrinter= CREATEOBJECT("CDINTF.CDINTF")
this.oPDFPrinter.DriverInit("PDFCompatible Printer Driver")
After the printer driver is initialized we need to set up the parameters to achieve the 
desired output. This process is handled through the SetDriverParameter() method. There are 
several parameters available. We have set up several properties in the cusAmyuniPDF custom 
class to handle the options. The method code is as follows: 
*cusAmyuniPDF.SetDriverParameter() method
*Donot prompt forfilename
#DEFINEccPDF_NOPROMPT     1
*Use file name setbySetDefaultFileName
*elseuse documentname
#DEFINEccPDF_USEFILENAME    2
*Concatenate files, do notoverwrite
#DEFINEccPDF_CONCATENATE    4
*Disablepagecontentcompression
#DEFINEccPDF_DISABLECOMPRESSION 8
*Embedfonts used inthe inputdocument
#DEFINEccPDF_EMBEDFONTS    16
*Enable broadcastingofPDF events
#DEFINEccPDF_BROADCASTMESSAGES 32
IFNOTISNULL(this.oPDFPrinter)
* Setthedestination file name.
this.oPDFPrinter.DefaultFileName=this.cPDFFileName
* Setresolution totothe desiredquality
this.oPDFPrinter.Resolution  =this.nResolution
* Update driverinfowithresolution information
this.oPDFPrinter.SetDefaultConfig()
* Note:Messagebroadcasting shouldbe enabled
* inorderto insertbookmarksfromVFP.
* Butseethe notesinthe SetBookmark method
Documents you may be interested
Documents you may be interested