I've known the folks at U.S. Senate Sergeant at Arms for quite a while, they are dedicated CF and Flex shop, and are a great group to spend time with. And now Matt Wooward has announced that he's joining them as Principal Information Technology Specialist. Congrats, Matt!
For a limited time, Adobe is offering two special RIA bundles exclusively for our federal government customers:
- RIA Starter Package: Purchase ColdFusion MX 7.0.2 Enterprise and get a free copy of Flex Builder 2 with Charting (a $750 value) plus a free training certificate. Use the training certificate to attend a two hour training session that will show you how to use ColdFusion Extensions for Flex Builder 2 to quickly build data-driven Flex applications that connect to a ColdFusion server.
- RIA Enterprise Edition: The complete RIA-in-a-Box - one copy ColdFusion MX 7.0.2 Enterprise, one 2CPU license of Flex Data Services 2 Departmental, 2 copies of Flex Builder 2 with Charting plus a free training certificate. Our discounted price for the complete RIA-in-a-Box is over 20% off the list price. Use the training certificate to attend a two hour training session that will provide details on ColdFusion/Flex integration with a focus on integrating ColdFusion with Flex Data Services (FDS).
This promotion is available through select resellers, and expires September 30, 2006.
For more information, call us at 1-877-99-Adobe or contact our partner
Carahsoft.
A user wrote to ask how the recently released XPPAJ libraries (used in my cf_pdfform tag) could be used to determine basic PDF file information (version, page count, and so on). And yes, it sure can. The following is a quick UDF I threw together that returns PDF version, page count, attachment count, and a flag indicating whether or not the PDF contains a form.
<!--- Uses XPAAJ to return info about a PDF file --->
<cffunction name="GetPDFInfo" returntype="struct" access="public" output="no">
<cfargument name="PDFFile" type="string" required="yes">
<cfscript>
// Init all vars
var formIS="";
var PDFfactory="";
var PDFdoc="";
var formType="";
var attachments="";
var result=StructNew();
// PDF form input stream
formIS=CreateObject("java", "java.io.FileInputStream");
formIS.init(ARGUMENTS.PDFFile);
// Get PDF document object
PDFfactory=CreateObject("java", "com.adobe.pdf.PDFFactory");
PDFdoc=PDFfactory.openDocument(formIS);
// Get page count and version
result.pages=PDFdoc.getNumberOfPages();
result.version=PDFdoc.getVersion();
// Get formtype object
formType=PDFdoc.getFormType();
// Determine type
if ((formType EQ FormType.XML_FORM)
OR (FormType EQ FormType.ACROFORM))
result.isform=TRUE;
else
result.isform=FALSE;
// Get attachments
attachments=PDFdoc.getFileAttachmentNames();
// If have any, get count
if (IsDefined("attachments") AND IsArray(attachments))
result.attachments=ArrayLen(attachments);
else
result.attachments=0;
</cfscript>
<cfreturn result>
</cffunction>
To use the UDF just pass it the fully qualified path to a PDF file, like this:
<cfset PDFFile=ExpandPath("myPDFFile.pdf")>
<cfdump var="#GetPDFInfo(PDFFile)#">
Obviously, XPAAJ must be present to use this UDF.