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.
(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>
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.
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>
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>