- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 itext 读取文档并替换其中的字符串。但一旦被操纵,所有的西类牙字符就变成了垃圾字符。下面是更改pdf的代码。
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
if (object instanceof PRStream) {
PRStream stream = (PRStream) object;
byte[] data = PdfReader.getStreamBytes(stream);
String dataString = new String(data);
dataString = dataString.replace(sourceString, replacementString);
stream.setData(dataString.getBytes("UTF-8"));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
在实际的 pdf 中,有一个字符串 ${address-line-one},我将其替换为“20th Street”
这有效,但是对于流中的这个西类牙语单词
Documentación 成为 Documentaci�n
其他西类牙语单词也是如此。
我还在java控制台中打印了bytes[],发现读取本身无法正确获取该字符。
有什么建议吗?
最佳答案
您使用
new String(data)
将字节转换为字符串(使用某种默认编码)和
dataString.getBytes("UTF-8")
将字符串转换回字节(使用 utf-8)。
因此,如果第一个操作中的默认编码与 utf-8 不匹配,这些转换将创建如上所示的伪影。
所以请使用
new String(data, encoding)
和
dataString.getBytes(encoding)
相反。
<小时/>话虽如此,utf-8 在这里是一种非常不合适的编码,请使用类似于 Latin-1/ISO-8559-1 的编码。
<小时/>也就是说,您编辑内容的方法仅适用于非常特定的 PDF。特别是,所使用字体的编码必须是WinAnsiEncoding,并且线条或“字段”必须在每个指令中绘制。此外,您的替换内容不得比替换文本长太多,并且不得包含 Latin-1 和 WinAnsiEncoding 不同的字符或在 PDF 中具有特殊含义的字符,并且您必须确保不会偶然更改超出范围的说明。字符串。
关于java - IText - 使用 PdfDictionary 和 PDF Stamper 编辑西类牙语文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47065334/
我是 Android 的新手,我想根据我的相机获取方向。如何根据我的相机获取方向信息?你能给出一个想法吗? 最佳答案 TYPE_ORIENTATION 已弃用 我们不能再使用方向传感器了,我们可以串联
我想知道矩阵除对角线之外的 4 个主要区域的条件。 例如下面的矩阵 A=[1,2,3,4,5; 6,7,8,9,10; 11,12,13,14,15; 16,17,18,19,20;
let latitude: = 36.6839559; let longitude = 3.6217802; 此API需要东西南北参数 const API = `http://api.geonames
我是一名优秀的程序员,十分优秀!