如何在使用 iText 创建的 PDF 中显示阿拉伯语

2024-01-05

我需要您的帮助来显示阿拉伯语内容并在我尝试创建的 PDF 示例中从右向左开始书写。这是示例代码:

public static void main(String[] args) throws IOException {
    try {

        BaseFont ArialBase = BaseFont.createFont("C:\\Users\\dell\\Desktop\\arialbd.ttf", BaseFont.IDENTITY_H, true);
        Font ArialFont = new Font(ArialBase, 20);


        Document document = new Document(PageSize.LETTER);


        PdfWriter.getInstance(document, new FileOutputStream("C:\\Users\\dell\\Desktop\\HelloWorld.pdf"));
        document.setMargins(72f, 72f, 72f, 0f);

        document.open();
        document.add(new Paragraph("الموقع الإلكتروني,",ArialFont));
        document.close();
        System.out.println("PDF Completed");

    } catch (DocumentException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

}

通过上述代码,阿拉伯文本将显示如下:

الموقØ1 الإلÙсتروني,

这是未知的,并且文本是从左到右的。那么我该如何解决这个问题呢?


编码错误:

在源代码中使用非 ASCII 字符是一种不好的编程习惯。例如,你有"الموقع الإلكتروني". This String应被解释为双字节 UNICODE 字符。然而,当你save使用与 UNICODE 不同的编码的源代码文件,或者当您compile该代码使用不同的编码,或者当your JVM使用不同的编码每个双字节字符都有被损坏的风险,从而导致乱码,例如"الموقع الإلكتروني"

如何解决这个问题?使用 UNICODE 表示法:"\u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a"

请查阅官方文档、免费电子书StackOverflow 上最好的 iText 问题 http://pages.itextpdf.com/ebook-stackoverflow-questions.html,您会发现这个问题已经在这里描述过:生成 PDF 时无法获取捷克语字符 https://stackoverflow.com/questions/26631815/cant-get-czech-characters-while-generating-a-pdf

字体错误:

如果您仔细阅读本书,您会发现您的示例可能无法运行,因为您可能使用了错误的字体。我在这个问题的回答中对此进行了解释:使用 iText 将阿拉伯字符从 html 内容转换为 pdf https://stackoverflow.com/questions/30214147/arabic-characters-from-html-content-to-pdf-using-itext

你假设arialbd.ttf可以产生阿拉伯字形。据我所知仅arialuni.ttf支持阿拉伯语。

错误的做法:

此外,您忽略了这样一个事实,即您只能在上下文中使用阿拉伯语ColumnTextPdfPCell目的。这里解释一下:如何使用 Eclipse 在 pdf 中创建波斯语内容 https://stackoverflow.com/questions/26818555/how-to-create-persian-content-in-pdf-using-eclipse

例如:

BaseFont bf = BaseFont.createFont(
    "c:/windows/fonts/arialuni.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(bf, 20);
ColumnText column = new ColumnText(writer.getDirectContent());
column.setSimpleColumn(36, 730, 569, 36);
column.setRunDirection(PdfWriter.RUN_DIRECTION_RTL);
column.addElement(new Paragraph(
    "\u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a", font));
column.go();

请注意,我正在使用Identity-H编码,因为涉及UNICODE。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用 iText 创建的 PDF 中显示阿拉伯语 的相关文章

  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • Java:迭代 Collection 的最佳方法(此处为 ArrayList)

    今天 当我看到一段我已经使用了数百次的代码时 我很高兴地开始编码 迭代集合 此处为 ArrayList 出于某种原因 我实际上查看了 Eclipse 的自动完成选项 这让我想知道 在什么情况下以下循环比其他循环更好使用 经典的数组索引循环
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • 如何使用 Java 处理 Selenium WebDriver 中的新窗口?

    这是我的代码 driver findElement By id ImageButton5 click Thread sleep 3000 String winHandleBefore driver getWindowHandle drive
  • 如何使用间隙分隔pdf中的段落?

    我有一些 pdf 文件 每页有 2 3 个段落 每个段落都由一些行间隙分隔 但是在使用 pymupdf 阅读时 我看不到段落之间有任何机器可打印的分隔符 还有其他方法吗 其他图书馆可以做到这一点吗 code import fitz from
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • JAVA - Xuggler - 组合 MP3 音频文件和 MP4 电影时播放视频

    使用 JAVA 和 Xuggler 以下代码组合 MP3 音频文件和 MP4 电影文件并输出组合的 mp4 文件 我希望在合并音频和视频文件时应自动播放输出视频文件 String inputVideoFilePath in mp4 Stri
  • 如何安全地解决这个 Java 上下文类加载器问题?

    我的数百名用户中只有一位在启动我的 Java 桌面应用程序时遇到问题 他只有大约三分之一的时间开始 另外三分之二的时间在启动时抛出 NullPointerException Exception in thread AWT EventQueu
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • Netty:阻止调用以获取连接的服务器通道?

    呼吁ServerBootstrap bind 返回一个Channel但这不是在Connected状态 因此不能用于写入客户端 Netty 文档中的所有示例都显示写入Channel从它的ChannelHandler的事件如channelCon
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话

随机推荐

  • Angular 9 生产构建错误 - 需要伪类或伪元素

    Angular 9 项目 ng 服务工作正常 但是当我进行生产构建时出现以下错误 块 runtime 5d6d7c5bcca533f7263c js 运行时 1 46 kB 条目 渲染 块 1 main d2b72f349c71c888a6
  • Hsqldb 存储过程

    我正在尝试在内存 Hsqldb 数据库中设置一个存储过程以进行测试 我正在使用的存储过程是在 MySql 中开发的 因此我想使用 HSqlDb 设置它以适应我的测试套件 我正在尝试创建该过程的简化版本 但目前还没有任何乐趣 程序是 CREA
  • Tensorflow Metal 插件已注册错误

    我已经使用安装了 Tensorflow 和 Metal 插件pip在 Mac Mini 2020 M1 上 pip3 install tensorflow macos tensorflow metal pip3 uninstall nump
  • 如何限制 while 循环中的项目

    这是我的项目中的 while 循环 div class index a href img width 200 height 171 alt src a div
  • jQuery 多次点击事件

    我被迫使用从外部服务器加载的脚本 该脚本基本上添加了一个元素 div class myClass 并绑定一个click的方法 事情是 在click与元素关联的函数 它们有一个return false声明在最后 我也有自己的脚本 我正在尝试添
  • 如何在 OSX 上卸载 pip?

    我运行了以下命令 easy install pip sudo pip install setuptools no use wheel upgrade 如何反转这两个命令以使我的 python 在 OSX 中恢复到其原始状态 删除 pip 作
  • R Shiny:数据表行的鼠标悬停文本

    有没有办法在将鼠标悬停在数据表显示中的行 记录 上时显示鼠标悬停文本 在 StackOverflow 上解决了一些类似的问题后 我发现了 2 个示例代码 一个显示列单元格的悬停文本 另一个在鼠标悬停时突出显示整行 显示列单元格悬停文本的示例
  • 示例 XSD 失败并显示“错误:未找到元素 X 的声明”

    尽管我是 xml 解析领域的新手 但我能够xsd创建有效的c 并成功编译和链接 但编译器优化 了实例化 所以 从第一步开始 我尝试你好世界CodeSynthesis 中的 xml 示例 http www codesynthesis com
  • 如何查看有关 Firebase JavaScript 客户端正在执行的操作的更多详细信息?

    我想更深入地了解 Firebase JavaScript 客户端库正在做什么 我正在使用 Firebase 开发一个 JavaScript 应用程序 该应用程序必须处理很多复杂性 例如 它必须处理网络中断和间歇性高延迟期 客户端库正在处理这
  • 如何在 Python 上使用 PuLP GLPK 为混合整数线性规划 (MILP) 的决策变量编写 IF 条件?

    我正在尝试使用 PuLP 上的混合整数线性规划和 Python 上的 GLPK 求解器来解决优化问题 到目前为止 我已经成功解决了带有约束的基本优化问题 例如 prob LpProblem MILP LpMinimize x1 LpVari
  • PHP 对象运算符优先级 (->)

    我写了一些代码 class a public b f gt c a new a b b echo a gt b f 当我使用 cli 时 它输出 c 但是当我使用 apache http 服务器时 抛出错误Illegal string of
  • 无需 JavaScript 即可模拟 bootstrap side popover

    我有一个仅支持现代浏览器的网站 我喜欢 bootstrap popover 的美感 但真的不喜欢它如何依赖 jquery 小部件和 javascript 来定位箭头 我理解为什么它曾经是必要的 但现在确实不应该了 我想看看我是否能得到类似的
  • 在 Dart 中如何判断 DOM 何时准备就绪?

    我想在页面准备好后获取有关某些 DOM 元素的一些信息 但我还没有弄清楚如何判断这是什么时候 我尝试过使用document on contentLoaded and document on readyStateChange 但似乎都不起作用
  • 为不同的存储库设置不同的配置[重复]

    这个问题在这里已经有答案了 我想知道如何更改命令的内容git config list 我将从中提取 分叉一个存储库GitHub https github com 我将在我的 Windows Linux 和 Mac 工作站上配置此类存储库 如
  • 在 MATLAB 中计算函数的反函数

    如何在 MATLAB 中计算函数的反函数 假设你想计算 f x e x 的倒数 代码是什么 如果分析方法失败 尽可能首选 请使用数值方法 给定 y 并猜测 x0 的逆 x fzero x f x y x0 或者当 x 的范围已知在 xmin
  • Android:检测活动何时返回到上一个活动

    我有一个带有 listView 的活动 A 用户单击启动活动 B 的任何项目 根据用户在活动 B 中执行的操作 可能会更改活动 A 上的 listView 所以我的问题是 当用户从活动 B 返回到活动 A 时 如何告诉活动 A 它已恢复 我
  • 数据列值不会更改为浮点型

    我有一个数据框 df Name Stage Description 0 sri 1 sri is one of the good singer in this two 1 nan 2 thanks for reading 2 ram 1 r
  • 找不到 JupyterLab 应用程序资产

    我刚刚在我的 MacBook 上使用 pip 下载了 jupyter lab 当我在终端上运行 jupyter lab 时 浏览器打开并出现以下错误 JupyterLab 错误 JupyterLab 应用程序资产未在以下位置找到 选择 自制
  • Bootstrap 中的固定宽度表格列

    我正在使用 Bootstrap 3 作为后端应用程序 该应用程序在表中显示数据 每行末尾有一个删除按钮 有时还有编辑按钮 我对具有删除按钮的列使用 col md 1 而在其他列上使用 col md x 的变体 效果很好 让我烦恼的一件事是
  • 如何在使用 iText 创建的 PDF 中显示阿拉伯语

    我需要您的帮助来显示阿拉伯语内容并在我尝试创建的 PDF 示例中从右向左开始书写 这是示例代码 public static void main String args throws IOException try BaseFont Aria