Chapter 8: Integrating PDF Technology  21 
##IMAGE: MF08008.tif 
Figure 8.8 The Acrobat Control for ActiveX exposes a number of methods for the 
developer to interact with the control in the Visual FoxPro form. This is the exposed in 
the Visual FoxPro 6 Class Browser. 
Pdf markup text size - Compress reduce PDF size in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
C# Code & .NET API to Compress & Decompress PDF Document
pdf reduce file size; change paper size in pdf document
Pdf markup text size - VB.NET PDF File Compress Library: Compress reduce PDF size in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
VB.NET PDF Document Compression and Decompression Control SDK
change paper size pdf; change font size fillable pdf
22  MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
##IMAGE: MF08009.tif 
Figure 8.9 To view the property, events and methods in Visual FoxPro 7 you need to 
use the Object Browser. 
All of the features you use in Acrobat Reader via the menus and toolbars are exposed in 
the Acrobat ActiveX Control. There may be methods that might be handy to execute via your 
own exposed interface. A number of the Reader features are exposed through an interface of 
properties and methods. Note the method names usually start out with a lower case name 
(visible in the Object Browser and the Acrobat Javascript documentation). This is due to the 
standard that Javascript uses, which is the native “macro” language included in Acrobat.  
The printWithDialog() is nice because it automatically displays the printer selection and 
print driver option dialog that Acrobat displays when you select the File | Print menu option. 
You can also print directly to the Windows’ default printer with the Print() method. There are 
a number of print methods to suit most tastes. The gotoLastPage() method could be used in the 
cases when the customer likes to view the grand total information on the report which is on the 
last page, before reviewing the details. If your users prefer to see the report zoomed at a 
specific percentage you can use the setZoom() method. 
There is a second method to displaying PDFs in a Visual FoxPro form. If you have the full 
Acrobat product you will also have the ActiveX interface that will display a PDF file in a VFP 
form. This interface is not loaded with the Reader edition of Acrobat. However this object is 
well documented, both in the type library and in the Acrobat Software Developers Kit (SDK). 
##WEB ICON 
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
Provide users with examples for adding text box to PDF and edit font size and color in text box field in C#.NET program. C#.NET: Draw Markups on PDF File.
pdf file compression; best way to compress pdf files
C# PDF insert text Library: insert text into PDF content in C#.net
Powerful .NET PDF edit control allows modify existing scanned PDF text. Ability to change text font, color, size and location and output a new PDF document.
can a pdf file be compressed; change font size in fillable pdf
Chapter 8: Integrating PDF Technology  23 
The Acrobat Software Developers Kit can be downloaded from the Adobe 
developer page located at 
http://partners.adobe.com/asn/developer/acrosdk/acrobat.html
The easiest way to work with this technique is to use the new VFP 7 Object Browser. 
Open up the Acrobat 5.0 Type Library object (see Figure 8.10). The main object is located 
under Interfaces. It is called CAcroAVDoc. This interface has the capability to get at the other 
needed interfaces as well as display the PDF. This object is created in the Init of the form. 
*FormInit()
LPARAMETERStcPDF
IFDODEFAULT(tcPDF)
this.oAVDoc=CREATEOBJECT("AcroExch.AVDoc")
this.Navigate(tcPDF)
ENDIF
RETURN
##IMAGE: MF08014.tif 
Figure 8.10 The Acrobat 5.0 Type Library object has documented interfaces, method, 
and constants. 
The form will optionally accept a PDF file name as a parameter. If the Acrobat object 
cannot be instantiated the Error method will trap the condition and disable the user interface 
C# PDF File Split Library: Split, seperate PDF into multiple files
Divide PDF file into multiple files by outputting PDF file size. Split PDF document by PDF bookmark and outlines. Split PDF file by output file size.
pdf form change font size; acrobat compress pdf
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Divide PDF file into multiple files by outputting PDF file size. Split Split PDF File by Output File Size Demo Code in VB.NET. This
change file size of pdf; can pdf files be compressed
24  MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
objects on the form. After the object is created the custom Navigate method is called to open 
up and display the PDF file. To open the PDF file and display it in the form we use the new 
Visual FoxPro Hwnd property as a parameter to the OpenInWindowEx method. This allows 
Acrobat to display itself in a Visual FoxPro form. 
*FormNavigate()
LPARAMETERStcPDF
*ConstantsextractedfromAcrobat5.0TypeLibraryviaObjectBrowser
#DEFINEAVZoomNoVary0&&Fixedvaluezoom.
#DEFINEAVZoomFitPage1&&Fitpagetowindow.
#DEFINEAVZoomFitWidth2&&Fitpagewidthtowindow.
#DEFINEAVZoomFitHeight3&&Fitpageheighttowindow.
#DEFINEAVZoomFitVisibleWidth4&&Fitvisiblewidthtowindow.
#DEFINEAVZoomPreferred5&&Usepage'spreferredzoom.
#DEFINEpdRotate00&&Rotated0degrees.
#DEFINEpdRotate9090&&Rotated90degrees.
#DEFINEpdRotate180180&&Rotated180degrees.
#DEFINEpdRotate270270&&Rotated270degrees.
#DEFINEPDDontCare0&&Leavetheviewmodeasitis.
#DEFINEPDUseNone1&&Displaythedocumentwithout
bookmarksorthumbnails.
#DEFINEPDUseThumbs2&&Displaythedocumentandthumbnail
images.
#DEFINEPDUseBookmarks3&&Displaythedocumentandbookmarks.
#DEFINEPDFullScreen4&&Displaythedocumentinfullscreen
mode.
#DEFINEPDDocNeedsSave1&&Documenthasbeenmodifiedandneeds
tobesaved.
#DEFINEPDDocRequiresFullSave2&&Documentcannotbesaved
incrementally;itmustbewrittenusingPDSaveFull.
#DEFINEPDDocIsModified4&&Documenthasbeenmodified.
#DEFINEPDDocDeleteOnClose8&&Documentisbasedonatemporary
file.
#DEFINEPDDocWasRepaired16&&Documentwasrepairedwhenitwas
opened.
#DEFINEPDDocNewMajorVersion32&&Document'smajorversionisnewer
thancurrent.
#DEFINEPDDocNewMinorVersion64&&Document'sminorversionisnewer
thancurrent.
#DEFINEPDDocOldVersion128&&Document'sversionisolderthan
current.
#DEFINEPDDocSuppressErrors256&&Don'tdisplayerrors.
#DEFINEPDDocIsEmbedded512&&Documentisembeddedinacompound
document.
#DEFINEPDDocIsLinearized1024&&Documentislinearized(getonly).
#DEFINEPDDocIsOptimized2048&&Documentisoptimized.
#DEFINEPDSaveIncremental0&&Writechangesonly.
#DEFINEPDSaveFull1&&Writetheentirefile.
#DEFINEPDSaveCopy2&&Writeacopyofthefileintothe
file.
#DEFINEPDSaveLinearized4&&Savethefileinalinearized
fashion.
#DEFINEPDSaveWithPSHeader8&&WritesaPostScriptheaderaspartof
thesavedfile.
#DEFINEPDSaveBinaryOK16&&Specifiesthatit'sOKtostorein
binaryfile.
C# PDF Convert to Jpeg SDK: Convert PDF to JPEG images in C#.net
Using this C#.NET PDF to JPEG conversion library component toolkit, C# developers can easily and quickly convert a large-size multi-page PDF document to a
change font size in pdf form; pdf compress
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
zoomValue, The magnification of the original PDF page size. 0.1f
best way to compress pdf file; change page size pdf acrobat
Chapter 8: Integrating PDF Technology  25 
#DEFINEPDSaveCollectGarbage32&&Removeunreferencedobjects,often
reducingfilesize.
#DEFINEAV_EXTERNAL_VIEW1&&Openthedocumentwiththetoolbar
visible.
#DEFINEAV_DOC_VIEW2&&Drawthepagepaneandscrollbars.
#DEFINEAV_PAGE_VIEW4&&Drawonlythepagepane.
IFVARTYPE(tcPDF)="C"
IFFILE(tcPDF)
WITHthis.oAVDoc
*It'simportanttocloseeachdoc,everytime.Ifyoudon't,whenyou
*tryviewingthesamepage,itwon'tdisplayanything-youhavetokill
*theobjectreferencesandcloseVFP,pluskillAdobe.Itmaintainsa
*collectionofopendocuments,butweareonlyusingonedocumentata
*andthezeromakessurethedocumentisnotsaved.Itkeepsthings
simple,
*andtokeepthememoryusagetoaminimum.
.Close(0)
.OpenInWindowEx(tcPDF,this.Hwnd,AV_EXTERNAL_VIEW,;
.T.,0,PDUseNone,AVZoomPreferred,;
100,30,0)
this.oAVPage=.GetAVPageView()
*Setthezoomoptions
this.ResizeAcrobat()
IF!ISNULL(this.oAVPage)
*Turnon,presetthezoomcontrolontheform.Thenzoomtothe
*correctPDFsize.
this.oAVPage.ZoomTo(0,100)
this.oAvPDDoc=.GetPDDoc()
ENDIF
this.cOpenPDF=this.FormatFileName(tcPDF)
this.Refresh()
ENDWITH
ELSE
MESSAGEBOX("PDFFileselecteddoesnotexist",;
0+64,this.Caption)
ENDIF
ENDIF
RETURN
We decided to include all the #DEFINEs so you can see the various options available. The 
Navigate method first closes an existing PDF if one is open, then opens up the selected PDF 
and displays it. The Navigate method also instantiates two more Acrobat objects. The first is 
based on the CAcroAVPageView interface. There are a number of methods available on this 
object to manipulate to a specific location in the document and determine what the user will 
see. Methods include ScrollTo (to scroll to a specific location on a page), ZoomTo (to zoom 
the document to a certain percentage), DoGoBack (to return to the previous position in the 
view history stack), and DoGoForward (to return to the next view in the history stack). The 
second is based on the CAcroPDDoc interface. This object provides methods GetNumPages 
(to find out the number of pages, handy when printing the documents or ranges of pages), 
C# PDF Convert to Word SDK: Convert PDF to Word library in C#.net
PDF document, keeps the elements (like images, tables and chats) of original PDF file and maintains the original text style (including font, size, color, links
pdf files optimized; pdf markup text size
C# Convert: PDF to Word: How to Convert Adobe PDF to Microsoft
Support fast Word and PDF conversion with original document page size remained. Microsoft Office Word 2003 (.doc) and 2007 (.docx) versions are available.
change page size pdf; best pdf compressor online
26  MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
GetFileName (to know what PDF is open), DeletePages/CreateThumbs/DeleteThumbs (if you 
want to manipulate the contents of the documents), and Save (does what you would expect). 
We did not implement all of these methods, we thought that it would take all the fun away 
from you and left that as an exercise for you to become familiar with the different objects. 
The sample form will open up without showing a PDF if you do not pass the file as a 
parameter. The user can then use the ellipses button (three dots) to select a PDF. This button 
uses the 
GETFILE
function to obtain the PDF name then calls the Navigate method. The user 
can resize it and have the PDF viewer resize itself as well. The only real drawback of this 
technique is that it is only available to users that have the full version of Acrobat installed. 
What is Acrobat Forms Author technology? 
(Example: 
SHAppBuildPermitData.pdf)
Acrobat ships with a cool feature called Acrobat Forms Author Technology that is provided 
via a plug-in (add-on or extension to the base product). This technology allows end users to 
convert paper forms into electronic forms that have the exact look of the original paper forms. 
These forms can be displayed in Acrobat and the end users can enter data in the same exact 
format they used when filling out the paper directly. This form might be a company standard, 
an industry directive, or a governmental dictate. 
If your users are as demanding as ours, you have probably run into the situation where 
you have been asked to produce an interface form that duplicates the existing paper version. 
You go off to develop this slick interface and demo the prototype to the users. The first thing 
they mention is that it does not mimic the paper version of the form “exactly”. The flip side is 
printing reports that mimic the paper version. While this is usually easier than the data entry 
part of the equation, generating reports with various lines and boxes, detail lines that exceed 
the facilities of the Visual FoxPro Report Designer or even some of the third party report 
writers can be a challenge. Once and awhile it is impossible. Acrobat Forms can assist us in 
getting data via data entry and outputting data to the forms for printing. 
Chapter 8: Integrating PDF Technology  27 
##IMAGE MF08010.tif 
Figure 8.11 This form is the city of Sterling Heights Building Permit form with some 
data filled in as the user would see it in Acrobat. 
The Forms Author plug-in capability is included with the full version of Acrobat. The data 
entry mode is available in the Reader version as well as full Acrobat, and a new product called 
Acrobat Approval. So what are the advantages? For one, the forms can be replicated 
electronically just like they are on paper. Since Acrobat printing is truly What-You-See-Is-
What-You-Get (WYSIWYG) the forms can be printed after being filled in. They can be saved 
with the data entered, which provides an audit trail. Most importantly, the information can be 
extracted and saved in a database for further analysis. 
Visual FoxPro developers might be asking the question, why would I need Acrobat forms 
when I have a great forms designer in Visual FoxPro? The difference is that Acrobat Forms 
can also be implemented in a distributed environment via the Internet without the overhead of 
the ActiveDoc technology used in Visual FoxPro. This means that the PDF file can be 
accessed on the web, users can enter in data, and the information can be submitted to the web 
server for processing and the data extracted and stored into a database. 
There are a couple of concepts in developing these forms that are very familiar to Visual 
FoxPro developers. The Acrobat Forms “designer” has similar functionality as the Visual 
FoxPro form designer. You change the mode of Acrobat with the PDF from “entry” to 
“designer” via the Form Tool icon on the left-side toolbar icon (second from the bottom on the 
left side toolbar in Figure 8.12). This toggles the mode so the form editor is available. Right-
28  MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
click on any object will bring up the shortcut menu. One of the many menu options is 
Properties. Selecting this option will introduce the Acrobat form field property sheet (see 
Figure 8.13 for one page in this dialog). There are properties to name the objects, comment 
their use, adjust fonts, format the entry, set colors, require data, make it read only, have default 
values, set the tab order, and align the text. There are settings to run code for events and 
perform validation. Sound familiar? Sounds like what we do with the Visual FoxPro Class and 
Form Designers on a regular basis. Object types include Text (TextBox), CheckBox, 
ComboBox, ListBox, RadioButton (OptionGroup), Button (CommandButton) and Signature 
(no Visual FoxPro equivalent). 
The property dialog is very comfortable to Visual FoxPro developers. The biggest 
difference is that the code is written in JavaScript. Dropping objects on the PDF form is 
completed by changing the PDF into “designer mode” as noted earlier, and clicking and 
dragging to size the new object. This will open the field properties dialog. You select the 
object type and start setting the various properties. Each subsequent time you drag on another 
object it will default to the same object type as the previous one added. 
##IMAGE MF08011.tif 
Figure 8.12 This is the same form, but now seen in “designer mode”. 
Implementation of a PDF with Forms is identical to a regular PDF file. These files can be 
opened, data entered, forms printed with the Reader version of Acrobat. The PDF can also be 
Chapter 8: Integrating PDF Technology  29 
saved with the data included using the full version of Acrobat. The Amyuni product does not 
have any functionality concerning Acrobat Forms. 
##IMAGE MF08012.tif 
Figure 8.13 This is the Appearance page on the Acrobat Form Object Property Sheet 
for a Text object. 
To this point we have not discussed the interaction with Visual FoxPro. The data captured 
in an Acrobat Form is exported via the File | Export | Form Data… menu option. This option is 
only available with the Business Tools or full Acrobat editions in version 4 of Acrobat. 
Version 5 requires the Approval or full Acrobat version. The export process creates a FDF file. 
This file is a flat text file that includes tags and data. Here is the information in the FDF file as 
it was exported from the SHBuildPermitData.pdf (included with downloads): 
%FDF-1.2
%âãÏÓ
10obj
<<
/FDF<</Fields[<</V/Off/T(chkNonResidentialTheater)>><</V/Off/T
(chkResidentialChurch)>>
<</V/Off/T(chkResidentialGasStation)>><</V/Off/T
(chkResidentialHospital)>>
<</V/Off/T(chkResidentialHotelMotel)>><</V/Yes/T
(chkResidentialIndustrial)>>
<</V/Off/T(chkResidentialOffice)>><</V/Off/T(chkResidentialOther)>>
<</V/Off/T(chkResidentialParkingStructure)>><</V/Off/T
(chkResidentialPlanNumberOnFile)>>
<</V/Off/T(chkResidentialPublicUtility)>><</V/Off/T
(chkResidentialSchool)>>
30  MegaFox: 1002 Things You Wanted to Know About Extending Visual FoxPro 
<</V/Off/T(chkResidentialSingle)>><</V/Off/T(chkResidentialStore)>>
<</V/Off/T(chkResidentialTwoOrMore)>><</V/Off/T(chkTypeAddition)>>
<</V/Off/T(chkTypeAlteration)>><</V/Off/T(chkTypeConcrete)>>
<</V/Off/T(chkTypeDeck)>><</V/Off/T(chkTypeDemolition)>>
<</V/Off/T(chkTypeFireRepair)>><</V/Off/T(chkTypeGarage)>>
<</V/Off/T(chktypeMobileHome)>><</V/Yes/T(chkTypeNewBuilding)>>
<</V/Off/T(chkTypePool)>><</V/Off/T(chkTypeRelocate)>>
<</V/Off/T(chkTypeRepair)>><</V/Off/T(chkTypeRoofing)>>
<</V/Off/T(chkTypeShed)>><</V(11/15/2001)/T(txtAppDate)>>
<</V(12/31/2099)/T(txtContactorHomeExpirationDate)>><</V(38-9999999)/T
(txtContactorHomeFedId)>>
<</V(987654321)/T(txtContactorHomeLicenseNumber)>><</V(VFPSpecialists)/T
(txtContactorHomeLicenseType)>>
<</V(SterlingHeights)/T(txtContactorHomeOwnerCity)>><</V(48313)/T
(txtContactorHomePostalCode)>>
<</V(MI)/T(txtContactorHomeState)>><</V(5865551234)/T
(txtContactorHomeTelephoneNumber)>>
<</V(WeaselandShiftyInsuranceGroup,Inc.)/T
(txtContactorHomeWorkerCompIns)>>
<</V(SteveBodnar,SteveSawyer,orRickSchummer)/T(txtContactPerson)>>
<</V(3134181290)/T(txtContactPhoneNumber)>><</V(AcmeConstruction)/T
(txtContractorHomeOwner)>>
<</V(9999ElmsStreet)/T(txtContractorHomeOwnerAddress)>><</V(NewGeeks
andGurusnortherDetroitoffice)/T(txtDescriptionOfWorkOther)>>
<</V(D3726312873621878)/T(txtDriverLicense)>><</V(999999999999)/T
(txtMESC)>>
<</V(5869400081)/T(txtOwnerPhoneNumber)>><</V(42424FrontStreet)/T
(txtOwnersAddress)>>
<</V(SterlingHeights)/T(txtOwnersCity)>><</V(GeeksandGurus,Inc.)/T
(txtOwnersName)>>
<</V(48314)/T(txtOwnersPostalcode)>><</V(MI)/T(txtOwnersState)>>
<</V(DowntownSterlingHeights)/T(txtSiteLocation)>><</V(9876Main
Street)/T(txtStreetAddress)>>
]
/F(SHAppBuildPermitData.pdf)/ID[
<8c562dff8dbc2284ab14a9e4b572b02f><98995e30afea0090038a1c9c79587e1d>
]>>
>>
endobj
trailer
<<
/Root10R
>>
%%EOF
At this point we can see that the data entered can be output to a flat file. This file can be 
parsed using Visual FoxPro’s Low-Level File Input and Output commands and added to tables 
which are much easier for us to process. It would require that some fundamentally mundane 
code be written to separate the information from the tags and to get this information into a 
table. While most of us would not mind writing this code, wouldn’t it be cool if there was a 
better mechanism to extract the data from the FDF format? There is and it is called the FDF 
Toolkit, from Adobe. 
How can I extract data out of a PDF form file? 
(Example: 
FDFRead.prg)
Documents you may be interested
Documents you may be interested