【发布时间】:2017-02-22 11:14:47
【问题描述】:
我尝试使用官方 itext 页面的示例替换由 OpenOffice 创建的 PDF 的文本,但我不能
http://developers.itextpdf.com/examples/stamping-content-existing-pdfs-itext5/replacing-pdf-objects
我将所有流提取到一个文件中,但我没有本地化我想要替换的文本。
这是一个操作PDF的例子:
public void manipulatePdf(PdfReader reader,String temp) throws IOException, DocumentException {
PdfObject obj;
for (int i = 1; i <= reader.getXrefSize(); i++) {
obj = reader.getPdfObject(i);
if (obj != null && obj.isStream()) {
PRStream stream = (PRStream)obj;
byte[] b;
try {
b = PdfReader.getStreamBytes(stream);
String p = new String(b);
//stream.setData(new String(p).replace("firmantes", "HELLO WORLD").getBytes());
stream.setData(p.replace("HOLA MUNDO", "mamamamamamamam").getBytes());
}
catch(UnsupportedPdfException e) {
b = PdfReader.getStreamBytesRaw(stream);
}
FileOutputStream fos = new FileOutputStream(String.format(DEST_STREAMS, i));
fos.write(b);
fos.flush();
fos.close();
}
}
}
我的文档只有文本“HOLA MUNDO”。
这是我认为包含我的数据的流:
0.1 w
q 0 0.1 595.2 841.8 re
W* n
q 0 0 0 rg
BT
56.8 774.1 Td /F1 12 Tf[<01>-2<02>-2<03>2<04>55<0506>-2<07>5<08>-2<09>5<02>]TJ
ET
Q
Q
为什么我看不到文字?
谢谢
【问题讨论】:
-
很可能,您的文本已“优化” - 转换为字形而不映射到原始字符。 “HOLA MUNDO”在
[<01>-2<02>-2<03>2<04>55<0506>-2<07>5<08>-2<09>5<02>]中被描述,其中 O 是符号 - 请注意,它在最后一个字符中重复使用。 -
@Lyth 不一定没有映射到原始字符i>:我相当乐观地认为 OpenOffice 会为匹配的字体定义添加足够的 ToUnicode 映射允许文本提取。