首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么字体扩展只适用于PDF,而不适用于其他格式(HTML、XLS、DOC)?

为什么字体扩展只适用于PDF,而不适用于其他格式(HTML、XLS、DOC)?
EN

Stack Overflow用户
提问于 2017-09-27 12:44:44
回答 1查看 1.8K关注 0票数 4

通过Jaspersoft Studio,我们使用以下设置将内置的Windows杯状字体变体导出到字体扩展名JAR中,以便在we应用程序中使用:

导出的jrfontextensions.jar中的目录结构如下:

代码语言:javascript
运行
复制
--jrfontextensions
  --jasperreports_extension.properties
  --fonts
    --fontsfamily1505796949749.xml
    --Custom_Font
      --calibri.ttf
      --calibrib.ttf
      --calibrii.ttf
      --calibriz.ttf

Jasperreports_extension.properties的内容:

代码语言:javascript
运行
复制
net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.ireportfamily1505796949749=fonts/fontsfamily1505796949749.xml

FontsFamy1505796949749.xml的内容:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="Custom-Font">
        <normal><![CDATA[fonts/Custom_Font/calibri.ttf]]></normal>
        <bold><![CDATA[fonts/Custom_Font/calibrib.ttf]]></bold>
        <italic><![CDATA[fonts/Custom_Font/calibrii.ttf]]></italic>
        <boldItalic><![CDATA[fonts/Custom_Font/calibriz.ttf]]></boldItalic>
        <pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
        <pdfEmbedded><![CDATA[true]]></pdfEmbedded>
        <exportFonts>
            <export key="html"><![CDATA[Custom-Font]]></export>
            <export key="rtf"><![CDATA[Custom-Font]]></export>
            <export key="xhtml"><![CDATA[Custom-Font]]></export>
        </exportFonts>
    </fontFamily>
</fontFamilies>

现在,当我们将此报告导出为PDF时,嵌入到PDF中的杯状字体如自定义字体一样正确显示,就像预期的那样。

但是,当我们试图将报表导出到其他格式(如HTML、DOC和XLS )时遇到了问题。web浏览器或办公应用程序似乎不认识“自定义字体”,并退回到它们的默认字体: XLS报告默认为DejaVu Sans,而HTML报告默认为Times。PDF、XLS、DOC和HTML中的输出分别如下:

我觉得我们一定缺少了一些显而易见的东西--也许我们缺少一些模糊的JRExporter配置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-28 07:27:05

一些背景

字体通常存在于文档之外(安装在pc上),并不是所有的文档类型都允许您在文档本身中嵌入(包括)字体。与文档类型相关,这是将字体嵌入到文档中的可能性。

  • PDF,是的,你可以嵌入字体
  • HTML,字体不能直接嵌入,但是jasper-会创建包含@font-face和url的css,因此如果broswer支持它,字体将被下载。
  • Office (xls、xlsx、doc、docx、ppt)在阿帕奇 ( jasper使用的库)中嵌入字体可能是可能性,但是jasper报告没有开发代码来尝试和使用它,因为库不直接支持它。

我现在该怎么办

您误解了字体映射接口。

指定要使用的替换字体。当不可用时

在此界面中,您不应该将字体的名称、字体名称、字体系列(当字体为不可用的)中使用,您需要指定其他标准默认字体,如果找不到字体,则应该使用这些字体。

另一个很好的设计规则(没有很好的文档)是作为“姓氏”(当您配置字体系列时)--字体的确切名称(如果已安装),因此如果计算机安装了字体,就会找到它,因为您的名称将映射安装的名称。在您的例子中,您应该将“自定义字体”替换为"Calibri“。

为什么我的html不能工作?,如评论 by dada67所示,如果您喜欢使用自定义字体(映射将重定向到映射的字体),则不应该对html使用字体映射,然后使用如下代码搜索css

代码语言:javascript
运行
复制
JasperReport report = JasperCompileManager.compileReport("jasper/FontExportTest.jrxml");
JasperPrint jasperPrint = JasperFillManager.fillReport(report, new HashMap<String, Object>(), new JREmptyDataSource());
        
HtmlExporter exporter = new HtmlExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleHtmlExporterOutput(new File("myHtml.html")));
SimpleHtmlExporterConfiguration configuration = new SimpleHtmlExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();

JasperReport既会创建文件myHtml.html,也会创建一个名为myHtml_htmlfiles的文件夹,在这个文件夹中,myHtml_htmlfiles应该与您的.ttf字体一起出现。如果您将它自然地部署到服务器上,则需要同时部署两者。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46448242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档