You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Jaysheel Bhavsar <jb...@HostMySite.com> on 2005/01/27 16:38:39 UTC

embedding fonts into all dynamically generate pdfs using coldfusion and fop.

Hi all,
  I am very new to xsl-fop and to the world of xml and xsl. I am
currently working on creating dynamic pdf using coldfusion mx and FOP. I
am using Nate Nelson's tutorial published in ColdFusion Dev Journal.
Everything is working great, except I want to embed couple of fonts into
my pdf, and they are all generated real time. I have transformed the
.pfm files to .xml based on a tutorial found online. And I made changed
to the userconfig.xml file as well. Now I cannot figure out who to
include the userconfig.xml file into all the pdf that will be created.
Here is the code that I am using to create my pdfs.
-----------------------------------------
<CFSET MyStylesheet = "style.xsl">
<cfset pdfFile = "Result.pdf">
<cfset MyXml = "Output.xml">

<!--- get contents of xml file and xsl file --->
<!--- <CFFILE ACTION="READ" FILE="#expandpath(MyXml)#"
VARIABLE="XMLFileContent"> --->
<CFFILE ACTION="READ" FILE="#expandpath(MyStylesheet)#"
VARIABLE="XSLFileContent">

<!--- perform xml transformation with XMLFileContent agaisnt
XSLFileContent --->
<CFSET TransformedXmlCode = XmlTransform(proposal, XSLFileContent)>

<!--- now invoke the FOP component - pass in transformed xml and pdf
file to be created --->
<cfinvoke component="FOP" method="ConvertStringToPDF"
foString="#TransformedXMLCode#" returnvariable="FOPByteArray">

<!--- No display PDF file to browser --->
<cfscript>
   //Retrieve the page context's response object
   context = getPageContext();
   context.setFlushOutput(false);
   response = context.getResponse().getResponse();
   out = response.getOutputStream();
   //Set the MIME type
   response.setContentType("application/pdf");
   //We must specify the content length but that's easy using the
   //ByteArrayOutputStream's size method
   response.setContentLength(FOPByteArray.size());
   //Write the output to the browser and flush (to actually send)
   out.write(FOPByteArray.toByteArray());
   out.flush();
   //Close the output stream object
   out.close();
</cfscript>
------------------------------------------
and here is the fop.cfc file
-----------------------------------------
<cfcomponent>
   <!--- Initialize the FOP driver from xml.apache.org --->
   <cfset variables.driver = CreateObject("java",
"org.apache.fop.apps.Driver")>
   <cfset variables.lockname = CreateUUID()>

   <cffunction name="ConvertFileToPDF" access="public">
      <cfargument name="foFile" type="string" required="true">
      <cfset var output = "" />
      <!--- Set up Java input source --->
      <cfset var input = CreateObject("java",
"org.xml.sax.InputSource")>
      <cfset input.init( ARGUMENTS.foFile)>
      <!--- Proceed with PDF generation --->
      <cfset output = private_generatePDF(input)>
      <cfreturn output />
   </cffunction>

   <cffunction name="ConvertStringToPDF" access="public">
      <cfargument name="foString" type="string" required="true">
      <!--- Set up Java input source --->
      <cfset var reader = CreateObject("java", "java.io.StringReader")>
      <cfset var input = CreateObject("java",
"org.xml.sax.InputSource")>
      <cfset reader.init(foString)>
      <cfset input.init(reader)>
      <!--- Proceed with PDF generation --->
      <cfset output = private_generatePDF(input)>
      <cfreturn output />
   </cffunction>

   <cffunction name="private_generatePDF" access="private">
      <cfargument name="input" type="any" required="true">
      <!--- Output stream for writing PDF file --->
      <cfset var output = CreateObject("java",
"java.io.ByteArrayOutputStream")>
      <!--- Turn on the output stream --->
      <cfset output.init()>
      <!--- Hook the FOP driver to the input/output --->
      <cfset variables.driver.setInputSource(input)>
      <cfset variables.driver.setOutputStream(output)>
      <!--- Perform the actual PDF generation --->
      <cfset variables.driver.run()>
      <cfreturn output />
   </cffunction>
</cfcomponent>
--------------------------------
you can also take a look it at
http://photos.sys-con.com/story/res/45575/source.html

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-user-unsubscribe@xml.apache.org
For additional commands, e-mail: fop-user-help@xml.apache.org