PdfBox 编码符号货币欧元

2023-12-06

我使用 Apache PDFBox 库创建了一个 PDF 文档。我的问题是在页面上绘制字符串时对欧元货币符号进行编码,因为基本字体 Helvetica 不提供此字符。如何将输出“þÿ Ø”转换为符号“€”?


不幸的是,PDFBox 的字符串编码还远非完美(版本 1.8.x)。不幸的是,在通用 PDF 对象中编码字符串时,它使用与在内容流中编码字符串时相同的例程,这是根本错误的。因此,不要使用PDPageContentStream.drawString(使用错误的编码),您必须自己翻译为正确的编码。

例如。而不是使用

    contentStream.beginText();
    contentStream.setTextMatrix(100, 0, 0, 100, 50, 100);
    contentStream.setFont(PDType1Font.HELVETICA, 2);
    contentStream.drawString("€");
    contentStream.endText();
    contentStream.close();

这导致

€ wrong encoding

你可以使用一些像

    contentStream.beginText();
    contentStream.setTextMatrix(100, 0, 0, 100, 50, 100);
    contentStream.setFont(PDType1Font.HELVETICA, 8);
    byte[] commands = "(x) Tj ".getBytes();
    commands[1] = (byte) 128;
    contentStream.appendRawCommands(commands);
    contentStream.endText();
    contentStream.close();

导致

€ correct encoding

如果您想知道我如何使用 128 作为 € 的字节码,请查看 PDF 规范ISO 32000-1,附件D.2,拉丁字符集和编码它表示 WinAnsiEncoding 中 € 符号的八进制值 200(十进制 128)。


PS:同时其他答案提出了另一种方法,在欧元符号的情况下相当于:

    contentStream.beginText();
    contentStream.setTextMatrix(100, 0, 0, 100, 50, 100);
    contentStream.setFont(PDType1Font.HELVETICA, 8);
    contentStream.drawString(String.valueOf(Character.toChars(EncodingManager.INSTANCE.getEncoding(COSName.WIN_ANSI_ENCODING).getCode("Euro"))));
    contentStream.endText();
    contentStream.close();

这确实也绘制了“€”符号。但即使这种做法看起来更干净(它不使用byte数组,它不会手动构造实际的 PDF 流操作),它is dirty以它自己的方式:

用一个破方法,其实breaks它的字符串参数以正确的方式抵消方法中的错误。

因此,如果 PDFBox 人员决定修复损坏的 PDFBox 方法,则这里看似干净的解决方法代码将开始失败,因为它随后会向固定方法提供损坏的输入数据。

诚然,我怀疑他们会在 2.0.0 之前修复这个错误(并且在 2.0.0 中修复的方法有不同的名称),但人们永远不知道......

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

PdfBox 编码符号货币欧元 的相关文章

  • Heron 中发生 java.lang.VerifyError: Bad type on operand stack 异常

    我尝试使用以下代码从zookeeper获取PhysicalPlan String stateMgrClass Context stateManagerClass this config IStateManager stateManager
  • 如何在servlet 3.0的web.xml-less中定义

    我有现有的 web 应用程序 我想将其转换为 servlet 3 0 的 web xml less 我已经设法让它工作 但是 web xml 中有 2 个标签 我仍然不知道无 web xml 环境中的等效代码
  • 异步 Spring MVC 控制器方法后记录响应正文

    我的 Spring MVC 应用程序中有以下内容 RestController public class SomeController GetMapping value csv produces text csv MediaType APP
  • 纯java adb客户端[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 ADB http developer android com tools help adb html分
  • 进入活动后设置自定义对话框

    我的列表活动由多行组成 每行打开活动包含文本和两个按钮 其中一个打开无限图库 另一个打开对话框 每个对话框都有不同的字符串 我有 20 行 所以我添加了 20 次对话框 这是多余的 而且它工作正常 但我认为有比我所做的更好的方法 任何获得它
  • PHP Socket Java 消息交换

    我正在尝试在 PHP 页面和正在运行的 Java 服务器之间进行通信 只是通过套接字进行简单的字符串交换 这是我处理连接的线程的 Java 代码 InputStream in clientSocket getInputStream Buff
  • 如何使用 spring data jpa 调用数据库函数?

    我想从 Spring Boot 应用程序调用数据库函数 该函数将返回解密的值 是否可以使用spring data jpa调用数据库函数 如果可以的话怎么办 如果无法使用 spring data jpa 是否有其他方法可以从 Spring B
  • 更改Java日期的格式[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有格式为 Date 的对象 107 2013 12 00 00 AM 我的期望值 2013 07 01 我如何做到这一点 我正在尝试使用这
  • 将 Scala 库转换为 DLL (.NET)

    我正在尝试从 scala 类创建一个 Dll 我将 IntelliJ 与 SBT 一起使用 我已经找到了一种使用 ikvm converter 将 jar 文件转换为 Dll 的方法 现在的问题是 当我在 SBT 下使用 package 从
  • gwt rpc 中的会话 ID cookie

    假设我正在滚动自己的会话代码 那么在 java 中生成唯一且安全的会话 id cookie 的正确方法是什么 我不应该自己推出而是使用已经标准化的东西吗 我正在使用 gwt 和 google app engine 平台 如何使会话在浏览器
  • 配置 Restlet 以在 Google App Engine 上返回 JSP?

    我开发了一个 Restlet 应用程序 我想通过 Restlet 返回一个 URL 请求的 JSP 文件 在不使用重定向的情况下如何实现此目的 IE 假设我在 mydomain com 上有文件 contact jsp 并且我希望人们能够访
  • Java字符串模式识别

    我有一个大约一千个字符长的字符串 由 L T 和 A 组成 我很确定其中有一个简单的模式 我想知道是否有任何快速简便的方法可以找到它 该字符串会发生变化 因此这不仅仅是一次性的 我正在寻找的模式例如如果字符串是 LLLLLLLLAATAAL
  • 跨不同的类访问 @BeforeTest 和 @AfterClass (TestNG) 中的变量?

    我正在使用 Java 和 TestNG 框架为我的公司编写一些 selenium 自动化 UI 测试 我正在定义驱动程序Base类 我想在一个中实际初始化驱动程序 BeforeTest并退出它 AfterTest方法 假设它们位于不同的类中
  • 使用Java在数组中查找子字符串索引

    我想使用 Java 从字符数组中返回用户输入子字符串的索引 该数组被初始化 打乱 然后进行搜索 我对此很陌生 尝试了两种不同的方法但没有成功 我在忽略什么 提前致谢 方法一 import java lang Math import java
  • 重写等于方法

    新手问题在这里 因此 在我的大学作业中 我必须为我创建的新类重写对象类 equals 方法 新的类是 Product 每个产品都有一个唯一的 id 属性 这就是我重写它的方式 Override public boolean equals O
  • JPA:如何在不加载延迟加载集的情况下计算子记录数

    我正在编写一个 J2EE JPA Spring 3 应用程序 试图保持纯粹的 JPA 2 0 我想获得子对象的计数而不必加载它们 因为这显然是一个昂贵的操作 例如 这是一个简化的示例 Organisation OrgID OrgName E
  • Protobuf RPC 在 Hadoop 2.2.0 单节点服务器上不可用?

    我正在尝试在按照本教程安装的本地单节点集群上运行 hadoop 2 2 0 mapreduce 作业 http codesfusion blogspot co at 2013 10 setup hadoop 2x 220 on ubuntu
  • 用于只读 DB 的 java ORM

    我了解 hibernate 但我想知道是否有一个更轻的 ORM 引擎只读数据库 我的意思是 我不需要一些事务查询或更新一些记录 另一方面 我需要处理一些大的记录列表 List
  • JsonNode findValue 不搜索子节点

    我有一个结构如下的资源 activity activity type Like activity id 123456 object id product id reference activity activity type Rating
  • java:抛出 RuntimeException [重复]

    这个问题在这里已经有答案了 下面这一项如何正确 我希望编译器告诉我使用throws Exception or throws RuntimeException public void method1 throws NullPointerExc

随机推荐

  • 如果 div 高度为奇数,则将其舍入为最接近的偶数

    基本上我想使用transformY 但子像素模糊非常烦人 并且仅在div为奇数高度时才会发生 由于高度取决于文本视口等 因此需要灵活 因此实际上需要它来获取 div 的高度 将其除以 2 四舍五入到最接近的数字 然后 x 2 这样它总是会产
  • Groovy 脚本读取 xml 文件并使用文件内容更新下一步请求

    要求 从文件夹中读取xml文件并将文件内容传递给Soap请求 Issue我试图使用groovy脚本读取保存在文件夹中的文件 但无法读取文件的内容 我在尝试打印 xml 文件的内容时遇到空指针异常 def fileList new File
  • 创建计算列并舍入

    我有 3 个numeric 18 2 我的表中的列 我想创建一个fourth column那是computed 我在 SSMS 中创建了计算列numeric 18 2 就像其他 3 列一样 当我运行SELECT针对我的新列 它计算得很好 但
  • 在 Nuxt 中设置输出文件夹的路径

    在 Windows 中工作 我可以使用 nuxt 项目生成静态站点 npx nuxt generate 我有兴趣为生成的静态文件设置输出文件夹 我正在通读https nuxtjs org api configuration generate
  • DBRefs(Mongo 文档引用)未立即获取

    我正在以最简单的方式使用 Mongo 与 Spring Data 结合使用 我有两个 第一类 实体 Documents A 和 B 其中 A 中有 B 的引用 DBRef 创建 A 和 B 时一切正常 但是 当读取对象 A 通过 Id 时
  • Javascript中是否有“0b”或类似的东西来表示二进制数

    我知道0x是 Javascript 中十六进制数字的前缀 例如 0xFF代表数字255 二进制数有类似的东西吗 我希望0b1111来表示数字15 但这对我不起作用 Update 较新版本的 JavaScript 特别是 ECMAScript
  • oracle中的条件选择语句

    我有两个表 分别称为订单和公共假期 如下所示 订单表 OrderId OrderDate 1 10 Mar 2017 2 12 Mar 2017 3 30 Mar 2017 公众假期表 HoliId HolidayDate 1 10 Mar
  • 如何设置 View.setVisibility(GONE) 动画

    我想做一个Animation当一个View将其可见性设置为GONE 不但没有消失 View应该 崩溃 我尝试过这个ScaleAnimation但随后View是折叠的 但布局只会在折叠之后 或之前 调整其空间大小Animation停止 或开始
  • 颜色不被子元素继承?

    我已尝试尽可能简化下面的 HTML 为什么CSS属性 color 01FFDD 被嵌套表的所有元素忽略 嵌套 CSS 使用 div 一般对我有用 但在这里不行 难道我做错了什么 div
  • 一系列承诺[重复]

    这个问题在这里已经有答案了 我正在写一篇文章 我必须从不同城市的 API 获取 json 数据并构建 DOM 到目前为止 我已经能够做到这两点了 唯一的问题是不同城市的API响应时间不同 因此 当我构建 DOM 时 它们的顺序与我调用函数的
  • 从itextsharp注释中弹出一个窗口来显示图像和文本

    我想在 C 项目中添加并弹出窗口 通过单击 itextsharp 注释来显示图像和文本 iTextSharp text pdf PdfAnnotation annot iTextSharp text pdf PdfAnnotation Cr
  • 永久隐藏Android状态栏

    我正在尝试隐藏 Android 4 4 设备上的系统状态栏 这是针对信息亭模式的 其中我的应用程序将是设备上运行的唯一应用程序 目前的目标设备是 2013 款 Nexus 7 该设备已获得 root 权限 并且我已经能够完全删除底部导航栏
  • 使用 ToLower() 进行切换会导致错误 CS0426 类型名称 '' 在类型 '' 中不存在

    为什么编译器仅在 switch 语句中为常量值调用方法时才会抱怨 为什么会出现错误The type name A does not exist in the type CS0426 类型中不存在类型名称 A ClassificationId
  • 非递归地检索二叉树节点的深度

    任何人都可以指出一种获取二叉树中节点深度的方法 不是平衡树 或 BST 不使用递归 最好使用 Java C C 节点表示为 class Node Node Left Node Right string Value int Depth 我的第
  • Camel-K 无法识别本地包

    我有一个使用自己的处理器的 RouteBuilder 类 当使用 Maven 在 Camel 中本地运行时 它运行良好 但是 当我尝试使用camel k时 它说找不到该包 有什么我需要做的吗 我的处理器 package com test p
  • 帕累托优化 - 非支配点

    我编写了一个算法 它返回一个与 nsga2 返回的列表类似的列表 mco 包的 nsga2 pdf 该算法本身无法识别一个点是否为非支配点 它返回的一些点是主导的 它只包含点及其值 而不包含 nsga2 返回的逻辑向量 我试图获得非支配点
  • 从对象(日期对象)解构函数

    如果我想破坏一个对象我会这样做 const obj a a fn gt some function const fn obj fn OR const a fn obj console log fn 这不适用于Date目的 未捕获的类型错误
  • Python 中的字典有单一的 repr 值吗?

    In this question 有人建议在字典上调用 repr 是将其存储在另一个字典中的好方法 这取决于 repr 是否相同 无论键如何排序 是这样吗 附言 最初问题的最优雅的解决方案实际上是使用 freezeset 不 键添加到字典的
  • ipython笔记本工具栏自定义

    我想在 ipython 笔记本上添加一个新的工具栏按钮 我得到了一个好的link提到了这一点 所以我创建一个新文件 ipython profile default static custom custom js 包含以下内容 IPython
  • PdfBox 编码符号货币欧元

    我使用 Apache PDFBox 库创建了一个 PDF 文档 我的问题是在页面上绘制字符串时对欧元货币符号进行编码 因为基本字体 Helvetica 不提供此字符 如何将输出 转换为符号 不幸的是 PDFBox 的字符串编码还远非完美 版