繁体   English   中英

如何使用 MathML 从 XSL-FO 转换为 PDF

[英]How to convert to PDF from XSL-FO with MathML

我正在尝试使用 Apache FOP 2.1 将带有 MathML 的 XSL-FO 文件转换为 PDF,但我收到一些警告和错误。

如何使用 FOP 将 MathML 打印为 PDF?

我的Test.fo文件:

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

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns="http://www.w3.org/1998/Math/MathML">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="my-page">
            <fo:region-body margin="1in"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="my-page">
         <fo:flow flow-name="xsl-region-body" font="12pt Times">
            <fo:block font-size="1.5em" font-weight="bold" role="html:p">
                <fo:instream-foreign-object>
                    <math display="inline">
                        <mrow>
                            <mi>A</mi>
                            <mo>=</mo>
                            <mi>Ï€</mi>
                            <msup>
                                <mi>r</mi>
                                <mn>2</mn>
                            </msup>
                        </mrow>
                    </math>
                </fo:instream-foreign-object>
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

我得到的输出

$ fop test.fo 123.pdf

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }math”( fo:instream-foreign-object}.(见位置 13:72)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }mrow”(数学}.(见位置 14:13)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }mi”( mrow}.(见位置 15:12)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }mo”( mrow}.(见位置 16:12)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }mi”( mrow}.(见位置 17:12)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }msup”( mrow}.(见位置 18:14)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }mi”( msup}.(见位置 19:13)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 警告:遇到未知格式对象“{ http://www.w3.org/1998/Math/MathML }mn”( msup}.(见位置 20:13)

2016 年 9 月 30 日下午 1:45:12 org.apache.fop.events.LoggingEventListener processEvent 严重:无法确定流内外部对象的内在维度。 (见位置 12:33)

2016 年 9 月 30 日下午 1:45:13 org.apache.fop.events.LoggingEventListener processEvent INFO:呈现页面 #1。

输出 PDF 为空。

开源项目JEuclid包括一个 FOP 插件。

尽管插件页面声明它仅适用于 FOP 0.95beta 或 0.95,但我使用最新的 FOP 2.1 对其进行了测试,并且它有效(0.95 可能是网页上次更新时的最新版本)。

这是我得到的输出,没有任何错误或警告消息:

生成的 PDF 的屏幕截图

你只需要:

  • 下载JEuclid
  • 复制 FOP 的lib/目录中的jeuclid-core-xxxjarjeuclid-fop-xxxjar (或创建链接)
  • 像往常一样运行 FOP

基于 lfurini 的回答,Ubuntu 14.04 上的 fop 安装无法识别/usr/share/fop (或某些子文件夹 /lib)中 jeuclid 的 jar 文件(版本 3.1.9)。 我能够通过修改/usr/bin/fop让它工作,它实际上只是一个 shell 脚本包装器。 修改部分如下:

...
find_jars /usr/share/fop/fop-hyph.jar
find_jars /usr/share/fop/jeuclid-core-3.1.9.jar
find_jars /usr/share/fop/jeuclid-fop-3.1.9.jar
find_jars fop
...

有了这个,我就可以编译上面的文件而没有问题

fop -fo test.fo -pdf test.pdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM