- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 Java 应用程序中使用 Apache FOP 2.2 通过 mangal.ttf 打印 PDF 中的印地语字符串时,某些印地语字符无法正确显示。
我正在使用 JDK 1.8 和 spring MVC。
我尝试了 lohit.ttf、devanagari.ttf、aparajita.ttf 和 kokila.ttf,但都有相同的问题。
当fop-conf.xml设置如下时:
<font kerning="yes" embed-url="classpath:/mangal.ttf" >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>
结果:से显示为से,如截图所示
当fop-conf.xml设置如下时:
<font kerning="yes" metrics-url="classpath:/mangal.xml" embed-url="classpath:/mangal.ttf" >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>
结果:案例 1 中列出的问题已解决,但我面临另一个附加问题,如以下屏幕截图所示
<小时/>您可以在链接 https://www.fonts.com/font/microsoft-corporation/aparajita 中看到预期的输出)使用此示例文本:
से and ग्रामीण should be printed in pdf
我尝试过的其他事情:
<fop version="1.0"> <complex-scripts disabled="true"/> ... </fop>
script
属性:<fo:block font-family="ARIALUNI" script="dev2" > देवी ग्रामीण</fo:block>
FOP 中是否有我缺少的配置设置?
最佳答案
如果配置了字体但输出不正确,问题可能是 FOP 错误地确定了要使用的脚本模式。
解决方案:显式设置 script
FO 文件中的属性,使用 standard或 extended脚本代码。
请注意,印度语脚本既有标准代码,也有扩展代码(例如梵文的 deva
和 dev2
),并且生成的输出不同,因此您可能需要同时尝试这两种代码并选择合适的代码。
我没有您提到的可用字体,因此我使用Amiko进行了测试谷歌开放字体。
更重要的是,我对梵文脚本一无所知,所以我真的不能说输出是正确还是错误,我只能将其与您的图像进行比较。
这是我使用的完整输入文件,其中的句子是从您的问题中复制的:
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="Amiko" script="deva">deva: से and ग्रामीण should be printed in pdf</fo:block>
<fo:block font-family="Amiko" script="dev2">dev2: से and ग्रामीण should be printed in pdf</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
这是一个最小的配置:
<?xml version="1.0"?>
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="Amiko/Amiko-Regular.ttf">
<font-triplet name="Amiko" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
产生这个输出:
如果我理解正确,您想要实现的输出是 script="deva"
的输出。 .
请注意 metrics-url
不需要配置中的属性。
此外,输入 <complex-scripts disabled="true"/>
您的配置中具有禁用“复杂脚本”支持的效果,因此我预计这会产生错误输出。
此配置
<?xml version="1.0"?>
<fop version="1.0">
<complex-scripts disabled="true"/>
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="Amiko/Amiko-Regular.ttf">
<font-triplet name="Amiko" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
产生以下输出:
关于java - Apache FOP 中的印度字体支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399302/
我使用嵌入在 Java 应用程序中的 Apache FOP 1.1 成功地将 XML 转换为 PDF。不幸的是,我被指示降级到 FOP 1.0 以遵守公司许可。因此,我用 1.1 jar 替换了 1.
我刚刚使用 Apache FOP 制作了要提交给照片打印服务的 PDF/X 相册。一切似乎都很好,但字距调整。使用自定义衬线字体,例如“portfolio”这个词没有正确呈现(问题在于 f-o,因为
我需要使用 XSL - Apache FOP (Java) 将 XML 转换为 PDF 文档。我收到以下错误 The method getDefaultHandler() is undefined f
我已将 FOP 版本从 fop 1.1 升级到 fop 2.3 版本,但得到 org.apache.fop.events.LoggingEventListener processEvent Image
现在我正在开发一个调用 SOAP Web 服务的 JDK-14 应用程序,在收到 XML 结果之后,它接下来必须调用一个方法来通过 Apache FOP 库生成 PDF 文档。请注意,我没有为此项目使
我最近在现有应用程序中添加了一个 fop pdf 生成器。在本地一切正常,但当我部署到 Azure 上时,出现以下错误: org.apache.fop.apps.FOPException: .fop
我用: Apache fop 1.0 Java 我需要处理 unicode 高于 u0100 的特殊字符。我应该使用的目标字体是 Arial。由于我不能期望目标平台(例如 Linux)上存在 Aria
无法在 fop 中获取外部字体,正在获取消息: java.lang.UnsupportedOperationException:类 org.apache.fop.fonts.FontCache 不允许
我想创建一个有效的 PDF/A2-b 文件。在那之后想用 PDFLib 库输入 ZUGFeRD 发票。 每次我用 Online Validator 查看 PDF我收到以下错误: rechnung.pd
使用 asdf 版本管理器安装 Erlang 时,上面的构建警告表明 apache fop library没有安装在系统上,或者没有被 asdf 版本管理器识别。结果是 Erlang 文档不会作为安装
我使用 ikvm 从 fop-1.0 生成了 fop.dll: ikvmc -target:library -reference:IKVM.OpenJDK.Core.dll -recurse:{myP
我使用了 apache FOP 2.0 jar 和下面的代码 FopFactory fopFactory = FopFactory.newInstance(new File(".")); 并出现以
我需要帮助在 Java 中使用 FOP 显示西里尔字符。 我创建了内容的 xml 和将格式化新 PDF 的 xsl 文件。 它们都使用 UTF-8 字符编码。 但在结果文件中,我只看到“#”字符而不是
我正在尝试使用 FOP 生成 PDF。 我的要求—— 第 1 页 - 标题和内容 第 2 页 - 条款的静态页面 第 3 页 - 从第 1 页溢出 但是,当第 1 页没有溢出时,不会生成第 2 页。即
我正在使用 org.apache.xmlgraphics FOP 2.3 来生成表格。表的其中一列包含一个复合标识符,该标识符包含由正斜杠分隔的四个部分 注意:我在使用 1.1 版 FOP 时也遇到了
即使页面不包含前向引用并且 block 非常小,如何避免 FOP 消耗越来越多的内存? 这是一个测试 java 程序,它使用手工制作的 FO 为 FOP 提供数据,该 FO 只是一遍又一遍地重复相同
你好,我正在尝试使用 FOP 将 xml 文件转换为 pdf,但我一直遇到错误,现在我遇到了错误 Exception in thread "main" java.lang.NoClassDefFoun
我目前正在使用 FOP 从 XML 文件生成 PDF。 但我面临着两个大问题: 第一:FOP无法管理OpenType字体文件 其次:fo:float还没有实现 所以我不可能用 FOP 生成我想要的 P
嗨,我想使用 FOP 准备一个 XML 文档以供打印 (ps/pdf)。是否可以将参数发送到 FOP 以执行 xsl 处理器中存在的条件格式 XSL: no .... Copy ....
我正在使用 Apache FOP 将我的文件打印成 PDF。从 FO 转换为 PDF 时出现以下错误: Invalid property value encountered in column-num
我是一名优秀的程序员,十分优秀!