- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经尝试过 iText、PDFBox 和 Oracle Forms。在 iText 的情况下,我也成功生成了古吉拉特语 PDF 文档。但是,不幸的是,它没有以古吉拉特语 (UTF-8) 语言生成正确的字体。
我在 jdk 1.4 中有我的项目,它是强制使用的。因此,我需要支持古吉拉特语字体的旧版 API。
请建议是否有可用的选项。
示例代码:
public void GeneratePDFusingiText(String lStrGujaratidata)
{
try
{
BaseFont bf = BaseFont.createFont("C:\\Windows\\Fonts\\Shruti.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 12);
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("D:/GeneratePDFusingiText.pdf"));
document.open();
document.add(new Paragraph(lStrGujaratidata, font));
document.close();
}
catch(Exception e)
{
System.out.println("Exception while generating PDF");
e.printStackTrace();
}
}
编辑 1:
可能图片没有显示。已上传here .
编辑 2:
第 1 步) 我输入古吉拉特语字符串 Google 音译。
第 2 步) 我使用 BableMap 软件将其转换为 unicode,以便使用 Resourse Bundle。
问题给我一个字符串:બિલાડી (Biladi)
它的 unicode 将是:\u0AAC \u0ABF\u0AB2\u0ABE\u0AA1\u0AC0
检查上面的粗体 Unicode 字符。那就是我遇到问题的地方。现在,如果我将此 unicode 更改为 \u0ABF\u0AAC\u0AB2\u0ABE\u0AA1\u0AC0 ,它会以 PDF 格式打印正确的输出。
同时它在 HTML 中打印错误的输出即:િબલાડી
我必须在它们之间进行管理。
我试过使用“gu”和“gu.UTF-8”和“UTF-8”。但是,每次我得到相同的输出。
最佳答案
更新的答案
在你的评论之后我意识到我错了,即变音字符应该出现在字节序列中的第二个,即使它应该呈现在主要字符的左边.
因此,事实证明,iText 不支持这种在印度字符集上的渲染。粗略地说,iText 使用 awt 的 Graphics2D
将非拉丁 unicode 字符逐一呈现为 PDF 中的图像。 (我猜这是因为适当的字体不一定安装在每个人的电脑上)。此功能不考虑这种特殊排序。
iText 确实支持阿拉伯语的类似行为,使用其他开发人员提供的类。参见 com.itextpdf.text.pdf.ArabicLigaturizer .也许您可以自己创建一个类似的? (!)
这看起来像以前出现过:
原始答案
金秋,
我相信 iText 正在显示正确的字符,但在将字符串转换为 unicode 点之前,输入的前 2 个字符已被“翻转”。因此,问题甚至在数据到达 iText 之前就发生了。
潜在的问题是“第一个”字符是一个“pre-base”字符,它是 Diacritic 的一种类型.它有点像欧洲文字中的“口音”,不能单独存在,其目的是为了美化另一个角色。在这种情况下,它会将“Ba”(બ) 变成“Bi”。
您会看到 Unicode 代码页,第一个字符 (િ) 确实是代码点\u0ABF,第二个 (બ) 是\u0AAC:http://en.wikipedia.org/wiki/Gujar%C4%81ti_script#Unicode
因此,在 Google Transliterate 和您的代码点表示之间的某个地方,这些字符被翻转了。所以,你需要回顾一下你是如何进行翻译的。
您是如何将这些字符转换为代码点的?
似乎有些口译员将“前基”放在主辅音之后,而不是之前:
因此,如果您能弄清楚这种“翻转”发生的位置,那么希望您的解决方案能够 self 呈现。
希望对你有帮助
关于java - 哪个 PDF 生成 API (Java) 支持古吉拉特语字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499183/
这个问题已经有答案了: What is the Java ?: operator called and what does it do? (17 个回答) 已关闭 8 年前。 ltVal = node
我是一名 Java 学生,我在嵌套该程序的条件语句时遇到问题 Exercise CozaLozaWoza (Loop & Condition): Write a program called Coza
首先,我想给出用户想要留下的句子的数量,当他的写作结束时,我的代码开始将每个单词的第一个字母大写(在 Java 中)。 import java.util.Scanner; public class I
我尝试在基类中实现一个函数,该函数使用子函数(defiend 作为基类中的抽象函数)。我认为一个例子可以最好地说明这个问题。 abstract class Animal{ public void
就像在口吃中一样,如果文本为“dean”并且乘数为 3,则结果将是“dddeeeaaannn”。 public static void repeatLetters() { String text
public void insert(int data) { if (root == null) root = new AVLNode(data); else {
我是 XPATH 的新手,并且遇到以下问题: 我有以下代码片段,但似乎无法按我的预期工作: String XML = cdataContent;
例如,Java 数据类型字节将数据从 -128 到 127 存储在单个字节中。为了能够区分 - 1 到 -128 从 0 到 127 将需要额外的数据,这些数据将采用数据类型覆盖其分配的存储空间。不可
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
Dataset: P1: Lion, Snow, Chair P2: Min: 0, Max: 28 P3: Min: 34, Max is 39. 我的程序 以一系列数组列表的形式提供上述数据集(P
我正在构建一个应该 24/7 全天候运行的客户端服务器应用程序。应用程序指定检测网络故障(使用心跳)并尽快重新连接到服务器。 我做的第一个测试只是停止客户端或服务器,然后重新启动,一切正常。我想知道是
我怀疑它是编写它的类的类型,但我不是 100% 确定,有人可以证实我的怀疑并可能提供对定义此行为的 Java 语言规范的引用吗? 假设类 A 有一个方法 a(),它在其主体中使用了 this 关键字,
我已经在谷歌上搜索了两个小时,但没有成功。 如果我有一个模板函数并且我想在模板类型上强制执行一个接口(interface),我该怎么做? 例如。 void doStuff(T)(bool param)
我正在尝试获取用户输入并对其进行修改,以便打印不带任何元音的字符串。我已经能够使用以下代码成功完成此操作。 Scanner in = new Scanner(System.in); Syste
每当我使用 Thread.sleep(); 时在 do while 循环中,提示告诉我,“在循环中调用 Thread.sleep 可能会导致性能问题。”我从许多其他网站和书籍上听到过这一点。我可以用什
请不要将其视为以下内容的重复项而将其忽略: How to generate random positive and negative numbers in java 我需要使用带有种子的随机数生成器。
我想在一个数字范围内选择随机数,但权重偏向该范围的一部分。例如: 选择1-10之间的随机数 对其进行加权,使 1-5 比 6-10 的可能性高 20% 这可能吗?我该怎么做? 最佳答案 这取决于您希望
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我有一个付款 Activity 和启动 Activity ,它在用户购买后显示内容应用程序。付款 Activity 是Manifest.xml中的默认启动器,我想将启动器 Activity 设置为启动
我有一个指针和长度。如何从他们那里得到一个动态数组? 最佳答案 设ptr是一个指针,len是一个长度,那么很容易如下: ptr[0..len] 请注意,这不会复制数组,而是就地使用数据。 如果要复制数
我是一名优秀的程序员,十分优秀!