当前位置: 首页 > 知识库问答 >
问题:

Apache FOP-不接受自定义字体

罗智刚
2023-03-14

当尝试使用<code>Apache FOP</code>使用自定义字体(Google Lato Font)时,我遇到以下错误。我已根据文档将ttf字体转换为xml

警告:< code>Font "Lato,normal,700 "找不到。替换为“any,normal,700”< br >警告:< code>Font "Lato,normal,400 "未找到。替换为“任何,正常,400”。

配置文件:

<?xml version="1.0"?>
<fop version="1.0">
    <base>.</base>
    <source-resolution>72</source-resolution>
    <target-resolution>72</target-resolution>
    <default-page-settings height="11.00in" width="8.50in"/>
    <renderers>
        <renderer mime="application/pdf">
            <filterList>
                <!-- provides compression using zlib flate (default is on) -->
                <value>flate</value>
            </filterList>
            <fonts>
                <font metrics-url="Lato-Regular.xml" kerning="yes" embed-url="Lato-Regular.ttf">
                    <font-triplet name="Lato" style="normal" weight="400"/>
                </font>
                <font metrics-url="Lato-Bold.xml" kerning="yes" embed-url="Lato-Bold.ttf">
                    <font-triplet name="Lato" style="normal" weight="700"/>
                </font>
            </fonts>
        </renderer>
    </renderers>
</fop>

执行代码:

public static void main(String[] args) throws SAXException, IOException, TransformerException, URISyntaxException {
        File fopConf = new File("\\fop.xconf");
        FopFactory fopFactory = FopFactory.newInstance(fopConf);

        OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("D:/Hello.pdf")));

        try {
            // Step 3: Construct fop with desired output format
            Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

            TransformerFactory factory = TransformerFactory.newInstance();
            Source xslt = new StreamSource(new File(ClassLoader.getSystemResource("resources/foo.xsl").toURI()));
            Transformer transformer = factory.newTransformer(xslt);

            // Resulting SAX events (the generated FO) must be piped through to FOP
            Result res = new SAXResult(fop.getDefaultHandler());

            Source src = new StreamSource(new File(ClassLoader.getSystemResource("resources/name.xml").toURI()));
            // Step 6: Start XSLT transformation and FOP processing

            transformer.transform(src, res);

        } finally {
            //Clean-up
            out.close();
        }
    }

有什么建议吗?我浪费了一整天的时间在谷歌上寻找,但找不到相关的解决方案。我见过 stackoverflow 帖子提到使用真实/绝对路径、子字体等,但似乎都不起作用

  • FOP 2.2
  • 将在Web上使用此代码进行动态pdf生成
  • JDK 1.8

共有1个答案

席成仁
2023-03-14

遵循@Eduard方法

>

  • 更改了执行代码以将其作为文件读取

    FOP 2.2中不需要XML转换

  •  类似资料:
    • 字体始终显示默认字体。 我的字体存储在资源/字体中。我尝试使用其他字体,并对字体进行重新编码。此外,PixlUI库并没有解决这个问题。 主要活动。Java语言 activity\u main。xml

    • 1.1. 自定义接入 1.1.1. 开发者使用说明 1.1. 自定义接入 使用 自定义接入 功能可以很方便的调试开发中的远程驱动, 目前支持 HTTP 远程驱动, TCP 远程驱动的调试。 1.1.1. 开发者使用说明 启动远程驱动,比如你的驱动的地址是 http://192.168.0.1。 在 Rokid App 中,点击添加设备,选择 自定义接入, 然后点击 绑定。 点击绑定后,在接下来的界

    • 我正在尝试使用docker容器中的kafka connect和一个自定义连接器(PROGRESS _ DATADIRECT _ JDBC _ OE _ all . jar)来连接openedge数据库。 我将JAR文件放在插件路径(usr/share/java)中,但它不会作为连接器加载。 我可以通过将另一个(标准)连接器放在插件路径中来加载它。这行得通 有点不知道如何前进,我对Kafka很陌生。

    • 我有一个网站,我想运行购物车功能的完整过程。一切顺利,直到我点击付款方式,选择借记卡和。在将数据放入字段时,它不接受。如何将数据放入字段中。以下是测试网站的链接:https://vapesuite.allomate.solutions/#/.下面是将数据输入字段的代码。

    • 介绍 model 参考文档已经介绍了如何使用 Django 的标准字段类;例如 CharField, DateField,等等。对于很多应用来说,这些类足够用了。 但是在某些情况下, 你所用的Django 不具备你需要的某些精巧功能,或是你想使用的字段与 Django 自带字段完全不同。 Django 内置的字段类型并不能覆盖所有可能遇到的数据库的列类型,仅仅是些普通的字段类型,例如VARCHAR

    • 问题内容: 我确实不明白这小段代码的错误所在: 它给了我错误: 问题答案: 在Python 3.3和更高版本中,如果您同时覆盖和,则需要避免将任何其他参数传递给您要覆盖的方法。如果您仅覆盖这些方法之一,则可以将额外的参数传递给另一个方法(因为通常在没有您帮助的情况下会发生这种情况)。 因此,要修复您的类,请按以下方式更改方法: