FOP: Creating PDF Files with embedded images

We are using the great Apache FOP (Formatting Objects Processor).

Currently there is no problem to embed images (png,gif,jpg,tif).

For running FOP also see this running fop page.

FO File to embed a .bmp file

(adapted from examples/size.fo).

When running fop-0.93\fop bmp.fo -pdf bmp.pdf everything runs fine, and this PDF is created.

bmp.fo

<?xml version="1.0" encoding="utf-8"?>
<fo:root font-family="Times Roman" font-size="12pt" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>
    <fo:simple-page-master
  margin-right="1.5cm"
  margin-left="1.5cm"
  margin-bottom="2cm"
  margin-top="1cm"
  page-width="21cm"
  page-height="29.7cm"
  master-name="left">
      <fo:region-body margin-top="0.5cm" margin-bottom="1.7cm"/>
      <fo:region-before extent="0.5cm"/>
      <fo:region-after extent="1.5cm"/>
    </fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence id="N2528" master-reference="left">

<fo:static-content flow-name="xsl-region-after">
  <fo:block text-align-last="center" font-size="10pt">
    <fo:page-number/>
  </fo:block>
</fo:static-content>

<fo:flow flow-name="xsl-region-body">
<fo:block font-size="18pt" font-weight="bold" text-align="center">FOP test for images</fo:block>
<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em">Normal</fo:block>
  <fo:block>
The image (<fo:external-graphic src="img/linux.bmp"/>) is placed normally.
  </fo:block>
</fo:block>


<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em">Clipped</fo:block>
  <fo:block>
The image
(<fo:external-graphic width="100pt" height="100pt" content-width="200pt" content-height="200pt" overflow="hidden" src="img/linux.bmp"/>)
is clipped with the content size double the viewport size.
  </fo:block>
</fo:block>

<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em"/>
  This section is only required to show that the layout still works.
</fo:block>
</fo:flow>
</fo:page-sequence>

</fo:root>

FO File to embed a .pdf file

When running fop-0.93\fop pdf.fo -pdf pdf.pdf the error content is not allowed in prolog occurs, and the PDF is created without the embedded pdf.
FIXME What to change on the fo-file below to embed PDF Files ?

error on fop size.fo -pdf b-1.pdf

"java"
[Fatal Error] :1:1: Content is not allowed in prolog.
18.01.2007 09:07:28 org.apache.fop.image.analyser.XMLReader createDocument
WARNUNG: Error while constructing image from XML
org.xml.sax.SAXParseException: Content is not allowed in prolog.
        at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
        at org.apache.fop.image.analyser.XMLReader.createDocument(XMLReader.java:115)
        at org.apache.fop.image.analyser.XMLReader.loadImage(XMLReader.java:95)
        at org.apache.fop.image.analyser.XMLReader.verifySignature(XMLReader.java:65)
        at org.apache.fop.image.analyser.ImageReaderFactory.make(ImageReaderFactory.java:85)
        at org.apache.fop.image.ImageFactory.loadImage(ImageFactory.java:220)
        at org.apache.fop.image.ImageLoader.loadImage(ImageLoader.java:56)
        at org.apache.fop.image.ContextImageCache.getImage(ImageFactory.java:432)
        at org.apache.fop.image.ImageFactory.getImage(ImageFactory.java:157)
        at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:68)
        at org.apache.fop.fo.FObj.processNode(FObj.java:118)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:321)
        at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:185)
        at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:165)
        at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115)
        at org.apache.fop.cli.Main.startFOP(Main.java:160)
        at org.apache.fop.cli.Main.main(Main.java:191)
18.01.2007 09:07:28 org.apache.fop.image.ImageFactory loadImage
SCHWERWIEGEND: Error while recovering image information (img/01.pdf) : null
java.lang.NullPointerException
        at org.apache.fop.image.analyser.XMLReader.verifySignature(XMLReader.java:66)
        at org.apache.fop.image.analyser.ImageReaderFactory.make(ImageReaderFactory.java:85)
        at org.apache.fop.image.ImageFactory.loadImage(ImageFactory.java:220)
        at org.apache.fop.image.ImageLoader.loadImage(ImageLoader.java:56)
        at org.apache.fop.image.ContextImageCache.getImage(ImageFactory.java:432)
        at org.apache.fop.image.ImageFactory.getImage(ImageFactory.java:157)
        at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:68)
        at org.apache.fop.fo.FObj.processNode(FObj.java:118)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuilder.java:321)
        at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:185)
        at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1072)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
        at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:484)
        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:165)
        at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:115)
        at org.apache.fop.cli.Main.startFOP(Main.java:160)
        at org.apache.fop.cli.Main.main(Main.java:191)
18.01.2007 09:07:28 org.apache.fop.fo.flow.ExternalGraphic bind
SCHWERWIEGEND: Image not available: img/01.pdf
18.01.2007 09:07:29 org.apache.fop.fo.flow.ExternalGraphic bind
SCHWERWIEGEND: Image not available: img/01.pdf

pdf.fo

<?xml version="1.0" encoding="utf-8"?>
<fo:root font-family="Times Roman" font-size="12pt" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>
    <fo:simple-page-master
  margin-right="1.5cm"
  margin-left="1.5cm"
  margin-bottom="2cm"
  margin-top="1cm"
  page-width="21cm"
  page-height="29.7cm"
  master-name="left">
      <fo:region-body margin-top="0.5cm" margin-bottom="1.7cm"/>
      <fo:region-before extent="0.5cm"/>
      <fo:region-after extent="1.5cm"/>
    </fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence id="N2528" master-reference="left">

<fo:static-content flow-name="xsl-region-after">
  <fo:block text-align-last="center" font-size="10pt">
    <fo:page-number/>
  </fo:block>
</fo:static-content>

<fo:flow flow-name="xsl-region-body">
<fo:block font-size="18pt" font-weight="bold" text-align="center">FOP test for images</fo:block>
<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em">Normal</fo:block>
  <fo:block>
The image (<fo:external-graphic src="img/01.pdf"/>) is placed normally.
  </fo:block>
</fo:block>


<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em">Clipped</fo:block>
  <fo:block>
The image
(<fo:external-graphic width="100pt" height="100pt" content-width="200pt" content-height="200pt" overflow="hidden" src="img/01.pdf"/>)
is clipped with the content size double the viewport size.
  </fo:block>
</fo:block>

<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em"/>
  This section is only required to show that the layout still works.
</fo:block>
</fo:flow>
</fo:page-sequence>

</fo:root>

Generate a tif from pdf and embed this

To solve the above problem, you can use imagemagick to convert the pdf file to a high resolution tiff and embed this.

convert

convert -density 600x600 a1.pdf a1.tif

tif.fo

<?xml version="1.0" encoding="utf-8"?>
<fo:root font-family="Times Roman" font-size="12pt" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<fo:layout-master-set>
    <fo:simple-page-master
  margin-right="1.5cm"
  margin-left="1.5cm"
  margin-bottom="2cm"
  margin-top="1cm"
  page-width="21cm"
  page-height="29.7cm"
  master-name="left">
      <fo:region-body margin-top="0.5cm" margin-bottom="1.7cm"/>
      <fo:region-before extent="0.5cm"/>
      <fo:region-after extent="1.5cm"/>
    </fo:simple-page-master>

</fo:layout-master-set>

<fo:page-sequence id="N2528" master-reference="left">

<fo:static-content flow-name="xsl-region-after">
  <fo:block text-align-last="center" font-size="10pt">
    <fo:page-number/>
  </fo:block>
</fo:static-content>

<fo:flow flow-name="xsl-region-body">

<fo:block>
  <fo:block border="solid">
<fo:external-graphic  width="65mm" height="90mm" content-width="65mm" content-height="90mm" overflow="hidden" src="img/a1.tif"/>
  </fo:block>
</fo:block>

<fo:block>
  <fo:block font-size="16pt" font-weight="bold" space-before.minimum="1em" space-before.optimum="1.5em" space-before.maximum="2em"/>
  This section is only required to show that the layout still works.
</fo:block>
</fo:flow>
</fo:page-sequence>

</fo:root>
 
wissen/gpl/fop-xmlgraphics-apache-creating-pdf-files-with-embedded-images.txt · Zuletzt geändert: 05.09.2010 20:31
 
Recent changes RSS feed Donate Valid XHTML 1.0 Valid CSS Recent cached RSS feed cacert-signed web site: inhalt.serviert.de