From: Jeremias M. <de...@je...> - 2011-04-18 14:29:40
|
Hi Jeppe I think you may be mixing up some things here. Are you trying to produce HTML (i.e. a web page) or are you trying to produce a PDF with Apache FOP (or print to a printer in general)? If you want to do the latter (PDF with Apache FOP), then the approach 3) is correct if it weren't for the HTML tags in there. Mixing HTML with XSL-FO is unusual to begin with. If you want to have a barcode on a web page, you should use the barcode servlet. In that case, you simply put the right URL in the HTML and the browser will call the servlet to generate the barcode when the HTML page is rendered, not when it is requested. You don't use any Saxon or Xalan extension at all because you can't embed the barcode in the HTML. Well, with HTML 5 and wide-spread SVG support, this will become different. At any rate, the tags from the XSL-FO namespace should not be used in the HTML case. See here for more information: http://barcode4j.sourceforge.net/2.1/servlet.html On 18.04.2011 14:52:13 Jeppe Fjord wrote: > > Hi. > > I need some help. I'm trying to print a barcode from a XSL file, but it doesn´t work for me. The XLS file is called successfully, but the barcode fo:block element shows an error. > I have tried 3 different approaches: > > **** > > 1) SAXON approach. > > I added barcode4j.jar and saxon9.jar to WEB-INF/lib/ > > My XSL code looks like: > > <?xml version="1.0" encoding="ISO-8859-1"?> > <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:barcode="java:/org.krysalis.barcode4j.saxon8.BarcodeExtensionElementFactory" extension-element-prefixes="barcode"> > <xsl:template match="/"> > <html> > <body> > <div id="barCode"> > <fo:block> > <fo:instream-foreign-object> > <barcode:barcode message="12345678" orientation="90"> > <barcode:code128> > <barcode:height>8mm</barcode:height> > </barcode:code128> > </barcode:barcode> > </fo:instream-foreign-object> > </fo:block> > </div> > </body> > </html> > </xsl:template> > </xsl:stylesheet> > > RESULT: > Element 'barcode:barcode' is not a recognized extension element. > > What did I miss? > > **** > > 2) XALAN approach: > > I added barcode4j.jar and xalan.jar to WEB-INF/lib/ > > My XSL code looks like: > > <?xml version="1.0" encoding="ISO-8859-1"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:fo="http://www.w3.org/1999/XSL/Format" > xmlns:barcode="org.krysalis.barcode4j.xalan.BarcodeExt" > extension-element-prefixes="barcode"> > <xsl:template match="/"> > <html> > <body> > <div id="barCode"> > <fo:block> > <fo:instream-foreign-object> > <xsl:variable name="barcode-cfg"> > <barcode> > <code128> > <height>8mm</height> > </code128> > </barcode> > </xsl:variable> > <xsl:copy-of select="barcode:generate($barcode-cfg, '0123456789')"/> > </fo:instream-foreign-object> > </fo:block> > </div> > </body> > </html> > </xsl:template> > </xsl:stylesheet> > > RESULT: > Namespace 'org.krysalis.barcode4j.xalan.BarcodeExt' does not contain any functions > > What did I miss here? > > 3) FOP approach: > > I added barcode4j.jar, barcode4j-fop-ext.jar and fob.jar to WEB-INF/lib/ > > My XSL code looks like: > > <?xml version="1.0" encoding="ISO-8859-1"?> > <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> > <xsl:template match="/"> > <html> > <body> > <div id="barCode"> > <fo:block> > <fo:instream-foreign-object> > <barcode:barcode > xmlns:barcode="http://barcode4j.krysalis.org/ns" > message="12345678" orientation="90"> > <barcode:code128> > <barcode:height>8mm</barcode:height> > </barcode:code128> > </barcode:barcode> > </fo:instream-foreign-object> > </fo:block> > </div> > </body> > </html> > </xsl:template> > </xsl:stylesheet> > > RESULT: > The HTML file prints the text: "8mm". > > **** > > Any help would be appreciated. Thanks in advance. > > > Best regards > Jeppe > Jeremias Maerki |