【发布时间】:2019-03-13 21:42:36
【问题描述】:
我正在尝试在一个文本中替换 PDF 的内容,但字母“X”没有被替换。
public static void main(String[] args) {
String DEST = "/home/diego/Documentos/teste.pdf";
try {
PdfReader reader = new PdfReader("termoAdesaoCartao.pdf");
PdfDictionary dictionary = reader.getPageN(1);
PdfObject object = dictionary.getDirectObject(PdfName.CONTENTS);
if (object instanceof PRStream) {
PRStream stream = (PRStream)object;
byte[] data = PdfReader.getStreamBytes(stream);
stream.setData(new String(data).replace("Nome Completo", "A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z").getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(DEST));
stamper.close();
reader.close();
} catch (IOException | DocumentException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
字体很可能只是部分嵌入,大写字母 K、W、X 和 Y 没有嵌入。只有在非常幸运的情况下才能像您一样编辑内容。
-
此外,正如 Viacheslav Vedenin 的回答中所指出的,在没有明确选择编码的情况下对字符串进行编码和解码通常是一个坏主意。但是假设 PDF 页面的内容流是 utf-8 编码的也好不了多少。一般来说,为整个内容流假设单一编码甚至没有意义,必须使用为各个内容流部分选择的字体的编码。
-
@DiegoMacario 你说你有同样的问题。因此,也许您可以在您的用例中提供一个示例 PDF 代表。关于 OP 的 PDF,我们只能猜测并查看所描述的症状指向的位置。一个实际的样本将允许展示。
-
@Diego 我得到了文件的字符集 - 我不确定我是否理解正确。正如我在回答中所解释的,通常 没有单个字符集 可以用来解码内容流。我要求提供该文件以检查是否有解决方法。
-
@DiegoMacario 如果您碰巧找到了表演者,请随时询问更多详细信息。