带有Java的Apache FOP 1.1中的PDF图像 [英] image in PDF from Apache FOP 1.1 with Java

查看:96
本文介绍了带有Java的Apache FOP 1.1中的PDF图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的问题. 即时通讯使用apache FOP 1.1从Java创建PDF文档. 如果我从eclipse创建此文件,则效果很好. 如果我将Programm导出为jar文件,则无法正常工作.

i have a strange problem. im creating a PDF document from Java with apache FOP 1.1. If i create this file from eclipse, it works well. If i export my Programm as a jar file, it doesn work.

XSL-FO文件为:

the XSL-FO File is:

<?xml version="1.0" encoding="ISO-8859-1"?>

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">

    <fo:root font-family="Arial">
        <fo:layout-master-set>
            <fo:simple-page-master master-name="A4-portrait"
                page-height="29.7cm" page-width="21.0cm" margin="2cm">
                <fo:region-body region-name="xsl-region-body"
                    margin-bottom=".5in" />
                <fo:region-before region-name="xsl-region-before"
                    extent=".4in" />
                <fo:region-after region-name="xsl-region-after"
                    extent=".4in" />
            </fo:simple-page-master>

        </fo:layout-master-set>
        <fo:page-sequence master-reference="A4-portrait">

            <fo:static-content flow-name="xsl-region-before">
                <fo:block text-align="right">
                    **<fo:external-graphic width="150pt" height="150pt" content-width="150pt" content-height="150pt" src="C:/Users/user/Desktop/logo.jpg"/>**
                </fo:block>

            </fo:static-content>


            <fo:static-content flow-name="xsl-region-after">
                <fo:table table-layout="fixed" width="170mm">

                    <fo:table-column column-width="67mm" />
                    <fo:table-column column-width="67mm" />
                    <fo:table-column column-width="33mm" />
                    <fo:table-body start-indent="0mm" end-indent="0mm">


                        <fo:table-row>


                            <fo:table-cell margin-left="2mm">

                                <fo:block font-size="6pt">
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    <xsl:value-of select="<vaules>" />&#8239;<xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                            </fo:table-cell>

                            <fo:table-cell margin-left="2mm">

                                <fo:block font-size="6pt">
                                    Telefon:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    Fax:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    Internet:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    E-Mail:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                            </fo:table-cell>

                            <fo:table-cell margin-left="2mm">

                                <fo:block font-size="6pt">
                                    IBAN:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    BIC:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    Bank:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                                <fo:block font-size="6pt">
                                    USTNr.:
                                    <xsl:value-of select="<vaules>" />
                                </fo:block>
                            </fo:table-cell>

                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:static-content>
            <fo:flow flow-name="xsl-region-body">


                <fo:block>
                    <fo:leader />
                </fo:block>

                <fo:block>
                    <fo:leader />
                </fo:block>

                <fo:block>
                    <fo:leader />
                </fo:block>

                <fo:block>
                    <fo:leader />
                </fo:block>

                <fo:block>
                    <fo:leader />
                </fo:block>

                <fo:block font-size="8pt">
                    <xsl:value-of select="<vaules>" />
                    ,
                    <xsl:value-of select="<vaules>" />
                    ,
                    <xsl:value-of select="<vaules>" />&#8239;<xsl:value-of select="<vaules>" />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>


                <fo:block font-size="12pt">
                    <xsl:value-of select="<vaules>" />
                </fo:block>
                <fo:block>
                    <xsl:value-of select="<vaules>" />&#8239;<xsl:value-of select="<vaules>" />
                </fo:block>
                <fo:block>
                    <xsl:value-of select="<vaules>" />
                </fo:block>
                <fo:block>
                    <xsl:value-of select="<vaules>" />&#8239;<xsl:value-of select="<vaules>" />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block text-align="right">
                    <xsl:value-of select="<vaules>" />,<xsl:value-of select=<vaules>" />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block text-align="right">
                    **<fo:external-graphic src="PDF/barcode.png"/>**
                </fo:block>
                <fo:block text-align="left" font-size="14pt">
                    Rechnung #<xsl:value-of select="<vaules>" />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <fo:block>
                    <fo:leader />
                </fo:block>
                <xsl:choose>
                    <xsl:when test="<vaules>">
                        <fo:block font-size="12pt">
                            Sehr geehrter
                            <xsl:value-of select="<vaules>" />&#8239;<xsl:value-of select="<vaules>" />,
                        </fo:block>
                    </xsl:when>
                    <xsl:when test="<vaules>">
                        <fo:block font-size="12pt">
                            Sehr geehrte
                            <xsl:value-of select="<vaules>" />&#8239;<xsl:value-of select="<vaules>" />,
                        </fo:block>
                    </xsl:when>
                    <xsl:otherwise>
                        <fo:block font-size="12pt">Nichts</fo:block>
                    </xsl:otherwise>
                </xsl:choose>
                <fo:block>

...更多文本.

在终端中,它给我带来以下错误:

in the terminal it brings me the following error:

    Sep 20, 2014 10:39:08 AM org.apache.fop.events.LoggingEventListener processEvent

**SCHWERWIEGEND: Image not available. URI: C:/Users/user/Desktop/logo.jpg. Reason:
 org.apache.xmlgraphics.image.loader.ImageException: The file format is not supp
orted. No ImagePreloader found for C:/Users/user/Desktop/logo.jpg (See position
13:134)**
org.apache.xmlgraphics.image.loader.ImageException: The file format is not suppo
rted. No ImagePreloader found for C:/Users/niko/Desktop/logo.jpg
        at org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageMa
nager.java:180)
        at org.apache.xmlgraphics.image.loader.cache.ImageCache.needImageInfo(Im
ageCache.java:128)
        at org.apache.xmlgraphics.image.loader.ImageManager.getImageInfo(ImageMa
nager.java:122)
        at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:81)
        at org.apache.fop.fo.FObj.processNode(FObj.java:124)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuil
der.java:280)
        at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:175)
        at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(Tra
nsformerIdentityImpl.java:1072)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Sour
ce)
        at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unkn
own Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unkn
own Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known 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(Transf
ormerIdentityImpl.java:484)
        at pdfcreator_paket.CreatePDF.convertXML2FO(CreatePDF.java:104)
        at side_pakets.XMLParser.printRechnung(XMLParser.java:447)
        at auftrag_paket.Auftragsverwaltung.btnDruckenClick(Auftragsverwaltung.j
ava:691)
        at auftrag_paket.Auftragsverwaltung.access$3(Auftragsverwaltung.java:571
)
        at auftrag_paket.Auftragsverwaltung$8.actionPerformed(Auftragsverwaltung
.java:1197)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$400(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Sep 20, 2014 10:39:08 AM org.apache.fop.events.LoggingEventListener processEvent

**SCHWERWIEGEND: Image not available. URI: PDF/barcode.png. Reason: org.apache.xml
graphics.image.loader.ImageException: The file format is not supported. No Image
Preloader found for PDF/barcode.png (See position 109:45)**
**org.apache.xmlgraphics.image.loader.ImageException: The file format is not suppo
rted. No ImagePreloader found for PDF/barcode.png**
        at org.apache.xmlgraphics.image.loader.ImageManager.preloadImage(ImageMa
nager.java:180)
        at org.apache.xmlgraphics.image.loader.cache.ImageCache.needImageInfo(Im
ageCache.java:128)
        at org.apache.xmlgraphics.image.loader.ImageManager.getImageInfo(ImageMa
nager.java:122)
        at org.apache.fop.fo.flow.ExternalGraphic.bind(ExternalGraphic.java:81)
        at org.apache.fop.fo.FObj.processNode(FObj.java:124)
        at org.apache.fop.fo.FOTreeBuilder$MainFOHandler.startElement(FOTreeBuil
der.java:280)
        at org.apache.fop.fo.FOTreeBuilder.startElement(FOTreeBuilder.java:175)
        at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(Tra
nsformerIdentityImpl.java:1072)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Sour
ce)
        at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unkn
own Source)
        at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unkn
own Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(Unknown Source)
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known 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(Transf
ormerIdentityImpl.java:484)
        at pdfcreator_paket.CreatePDF.convertXML2FO(CreatePDF.java:104)
        at side_pakets.XMLParser.printRechnung(XMLParser.java:447)
        at auftrag_paket.Auftragsverwaltung.btnDruckenClick(Auftragsverwaltung.j
ava:691)
        at auftrag_paket.Auftragsverwaltung.access$3(Auftragsverwaltung.java:571
)
        at auftrag_paket.Auftragsverwaltung$8.actionPerformed(Auftragsverwaltung
.java:1197)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$400(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Sep 20, 2014 10:39:08 AM org.apache.fop.events.LoggingEventListener processEvent

WARNUNG: Content overflows the viewport of the fo:region-before on page 1 in blo
ck-progression direction by 126864 millipoints. (See position 11:50)
Sep 20, 2014 10:39:08 AM org.apache.fop.events.LoggingEventListener processEvent

有人可以帮助我吗?

真诚的

推荐答案

当以jar运行时,程序似乎难以解析图像文件路径.值得记住的是,src属性指向URI而不是文件路径,并且根据其结构,直接运行而不是从可执行jar中运行时,解析方式会有所不同.我要尝试的第一件事是将文件路径更改为如下所示:

It looks like the program is struggling to resolve the image file paths when run as a jar. It's worth remembering the src attribute points to a URI rather than a file path and, depending on its structure, will be resolved differently when run directly rather than from an executable jar. The first thing I would try is to change the file path to something like this:

src="file:///C:/Users/user/Desktop/logo.jpg"

或者这个:

src='url("file:///C:/Users/user/Desktop/logo.jpg")'

您是否可以整理文件,以便可以使用相对路径?绝对路径可能很难维护.您可能还需要考虑将所有XSL和图像文件包含在jar文件本身中.很好地解释了这种方法的来龙去脉

Are you able to arrange your files so you can use relative paths instead? Absolute paths can be quite brittle to maintain. You may also want to consider including all the XSL and image files in the jar file itself. There's a nice explanation of the ins and outs of this approach here.

这篇关于带有Java的Apache FOP 1.1中的PDF图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆