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

如何将古吉拉特邦印第安语字体导出为pdf?

沙小白
2023-03-14

我想在jasper report 5.1版导出的PDF报告中显示不同的字体(古吉拉特邦印第安语)。

我尝试的内容:运行工具后,在位置下方打开步骤1:

工具-

net.sf.jasperreports.default.font.name=Arial Unicode MS - the default     font name.
net.sf.jasperreports.default.font.size=10 - the default font size.
net.sf.jasperreports.default.pdf.font.name=Identity-H - the default PDF font.
net.sf.jasperreports.default.pdf.encoding=UTF-8 - the default PDF character encoding.
net.sf.jasperreports.default.pdf.embedded=true - by default PDF fonts are not embedded

安装了字体“Arial Unicode MS”,并创建了jar文件。JARPER报告的类路径中存在Jar文件。

链接如下:1)字体2)示例字体

第二步:irfonts。xml

默认情况下,jasper报告给出了我将其更改为的此文件中的其他字体。

<fontFamily name="Arial Unicode MS">
<normal>net/sf/jasperreports/fonts/dejavu/ArialUnicodeMS.ttf</normal>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>

步骤3:

我得到的结果是:હીપ્સ 我真正想要的是:હિપ્સ

花了一段时间后,我才知道,当你在Jasper报表的模板中呈现页面时,字体会根据需要工作,但当你将其导出为pdf时,所有字体都会通过“itext pdf引擎”更改原因。

现在,窍门是itext没有我当前使用的字体。

我有什么方法可以做到这一点吗?

注意:它不是使用Java创建的。我是一名Oracle数据库开发人员,因此只使用工具创建,并使用工具边界打印。

示例代码:

<textField>
<reportElement x="111" y="26" width="100" height="20" uuid="5a471a16-de7b-4f55-9c9f-b01d37938b9f"/>
 <textElement>
    <font fontName="Arial Unicode MS" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression><![CDATA[$F{my_column_values}]]></textFieldExpression>

堆栈溢出中也存在一些类似的问题,但它们都使用java来调用和打印。

所以,我可以更改itext库或任何其他解决方法吗。我是如何创建的:

1)贾斯珀报告

2) 贾斯珀

共有2个答案

施念
2023-03-14

我创建了一个新问题,只与itext相关,由@AmedeVanGasse建议,我将在这篇文章中展示Alexey Subach的答案如何在jasper报告中实现。

注意:Alexy Subach指出“实现非常糟糕,您无法期望获得正确的结果”

添加到classpath itext5库(注意,最新的jasper报告使用itext2,两者都需要),并将古吉拉特邦分类定义为变量,然后在每次需要输出时处理文本。

实例

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="FontTest" columnCount="5" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="111" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2347c131-1884-430a-b77f-59f08f896c8a">
    <variable name="g" class="com.itextpdf.text.pdf.languages.GujaratiLigaturizer">
        <initialValueExpression><![CDATA[new com.itextpdf.text.pdf.languages.GujaratiLigaturizer()]]></initialValueExpression>
    </variable>
    <title>
        <band height="25">
            <textField pattern="">
                <reportElement x="0" y="0" width="200" height="25" uuid="ee49d149-394b-4ac6-a0a2-6d207b0c8d89"/>
                <textElement>
                    <font fontName="Arial Unicode MS" size="14"/>
                </textElement>
                <textFieldExpression><![CDATA[$V{g}.process("\u0ab9\u0abf\u0aaa\u0acd\u0ab8")]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

重要提示:只有pdf导出才是正确的!

pdf结果

在通过java导出之前,如果需要生成pdf,请在导出之前切换JasperPrint对象中的文本

JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, Object>(), theDatasource);
IndicLigaturizer g = new GujaratiLigaturizer();
for (JRPrintPage page : print.getPages()) {
    for (JRPrintElement element : page.getElements()) {
        if (element instanceof JRTemplatePrintText){
            JRTemplatePrintText text = (JRTemplatePrintText)element;
            text.setText(g.process(text.getText()));
        }
    }
}
凤衡
2023-03-14

请尝试JasperReports 6.2.0或更新版本。它附带了对Indi脚本的PDF支持(通过将AWT文本布局传输到PDF来实现)。

JasperReports发行版中的Unicode报告示例(在demo/samples/Unicode下)显示了几种印度文脚本中的文本,包括古吉拉特文(使用谷歌Noto字体)。

 类似资料:
  • 这是关于如何将古吉拉特邦印第安语字体导出为pdf的问题的后续讨论@iText的QA工程师amedee van gasse让我向相关mcve发布一个针对iText的问题。 为什么此unicode序列未正确呈现? 应如下所示进行渲染: હિપ્સ , 还使用unicode转换器进行了测试 但是,此代码(示例改编自iText:第11章:选择正确的字体) 生成此结果: 看起来不同于 હિપ્સ 我用ite

  • 我正在为jasper reports使用I-report 5.5.0。我需要将印地语文本导出为PDF格式,但印地语部分正在转换为 。 我已经使用了字体扩展,但没有帮助: 字体名称:“lohit Devanagari” PDF嵌入:选中 PDF编码:Identity-H 我也尝试过其他印地语字体,但到目前为止没有任何效果。。

  • 我在Swift中遇到了一个印地语数字集整数值的问题 这是关于我们如何将印地语转换成英语的任意数值。 想知道如何将一种语言的数字转换成另一种语言的数字吗 例如:试图将印地语数字转换为阿拉伯语 这是我在操场上试过的代码: 这是它仅以英文显示的输出 我已经搜索了这个问题,但没有找到这种具体的解决方案,所以发布了一个新的问题。 注意:不寻找任何静态转换扩展或此类函数。 编辑:我不想要这种解决方案 在Swi

  • 我的问题是如何在android中的自定义listview中更改印地语字体。我正在使用此代码Typeface hIndiFont=Typeface.createFromAsset(getAsset(),"fonts/DroidHindi.ttf "); // 将menuItems添加到ListView 请帮帮我。提前谢谢!!!!!!!!! 我正在重写getView方法,但无法工作。请帮帮我。

  • 我正在尝试从.jasper文件生成pdf报告到使用struts框架的基于web的java应用程序中。但是pdf报表中的字体显示不正确(这里是打印屏幕),而在预览时,它可以正常工作,或者我们可以将相同的报表导出为其他格式,如docx,html格式,它可以正常工作(这里是打印屏幕)

  • 问题内容: 尝试使用iText将越南文文档导出为PDF时遇到问题。我将越南语单词放在.xml文件中,像这样 然后让Java从xml文件中获取短语,然后使用以下方法将其转换为Unicode: 之后,将String导出为PDF-编码为UTF-8。但是程序无法显示越南语字符“ \ u1ED5”和“ \ u1EE9”。输出变为“ T chc tham gia”。能否请您告诉我如何解决此问题?谢谢 :) 问