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

Fonts 如何将古吉拉特邦印度语字体导出为pdf?,fonts,jasper-reports,export-to-pdf,Fonts,Jasper Reports,Export To Pdf,我想在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.jasper

我想在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文件也已创建。jar文件存在于jasper报告的类路径中

链接:1) (二)

步骤2:irfonts.xml

默认情况下,jasper report会在我将其更改为的文件中提供其他字体

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

net/sf/jasperreports/font/dejavu/arialunicodes.ttf
身份-H
真的

步骤3:

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

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

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

我有没有办法做到这一点

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

也关注了这个博客,但它是java的,所以不知道在哪里进行更改。

示例代码:

<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库或任何其他解决方法都可以。 我如何创建:

(一)

2)

我创建了一个新的仅与itext相关的@AmedeeVanGasse,我将在本答案中展示如何在jasper报告中实现

注意:亚历克西·苏巴赫(Alexy Subach)表示,“实施非常糟糕 你不能指望用它得到正确的结果”

策略1:您只需要导出pdf 添加到classpath itext5库(请注意,最新的jasper report使用itext2,您需要两者),并将
GujaratiLigaturizer
类定义为变量,然后在每次需要输出时处理文本

示例

<?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>

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


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

我是一名Oracle数据库开发人员,因此仅使用工具创建,并使用工具边界打印。
-使用JasperReports生成报告的方法是什么?您的任务是什么?基于将使用我的数据库列的数据源和我创建的用于呈现数据的报告列。您可以查看此项以缩小您的问题和呈现问题,注意您需要使用字体扩展。查看此项尝试缩小范围,然后您需要提供一个最小的jrxml(也没有数据,例如使用标题栏和参数),链接到ttf字体、当前结果和预期结果。这样我们可以得到一个很好的问题,并为您提供一个像样的答案。@peter我在尝试预览java.lang.ClassNotFoundException时遇到此错误:将不会从默认包(GujaratiLigaturizer)加载类。在实现上述内容之后。@PranavShah,您需要将itext5添加到您的类路径是的,我从这里下载了它,然后添加到类路径…inTools-->option->JasperReportProperties,之后创建了一个变量,该变量的值将如您所述,变量class=GujaratiLigaturizer和initialValueExpression=com.itextpdf.text.pdf.languagesGujaratiLigaturizer@PranavShah嗯,这就是你需要的bin的来源,官方在github上,但我不知道在哪里…(sourceforge只是一个备份,但会很好地为你服务)我得到了这个错误java.lang.ClassNotFoundException:不会从默认包(GujaratiLigaturizer)加载类我只能使用uptill版本5.1。@PranavShah,因为“实现非常糟糕”(它适用于您的示例,但可能不适用于其他一些示例),我真的建议您更新jasper reports并使用此方法。@Pranavsha我认为您发布了错误的问题,评论似乎与主题无关。在此处创建了一个新问题
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()));
        }
    }
}