如何在没有编码问题的情况下用 iText 替换 PDF 中的文本? (Android)
How can I replace text in PDF with iText without encoding issue? (Android)
我需要一些帮助。我想用 PDF 文件中的另一个文本替换一个文本(我正在使用 iText 库),但是当我尝试用重音字母替换它时,它有编码问题。
public static void manipulatePdf(String src, String dest) throws IOException, DocumentException {
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 eredeti = "öüóá";
final String s = new String(eredeti.getBytes(), BaseFont.CP1250);
stream.setData(new String(data).replace("Hello World", s).getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
}
但是当我打开 PDF 文件时,我看到了这个:
Wrong PDF
我已经尝试了所有编码类型,以获得正确的字母 (öüóá),但它对我没有用。
有人知道我该怎么做吗?
我已经找到了解决方案 ;)
问题是,我在将字符串放入 PDF 文件之前对其进行了编码。您应该在将字符串准确放入 PDF 时对其进行编码,就像这里一样:
stream.setData(new String(data).replace("Hello World", s).getBytes("ISO-8859-2"));
你可以在这里看到我的代码的最终形式:
public static void manipulatePdf(String src, String dest) throws IOException, DocumentException {
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 eredeti = "öűóá";
final String s = new String(eredeti.getBytes());
stream.setData(new String(data).replace("Hello World", s).getBytes("ISO-8859-2"));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
Paragraph preface = new Paragraph();
preface.setAlignment(Element.ALIGN_CENTER);
reader.close();
}
我需要一些帮助。我想用 PDF 文件中的另一个文本替换一个文本(我正在使用 iText 库),但是当我尝试用重音字母替换它时,它有编码问题。
public static void manipulatePdf(String src, String dest) throws IOException, DocumentException {
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 eredeti = "öüóá";
final String s = new String(eredeti.getBytes(), BaseFont.CP1250);
stream.setData(new String(data).replace("Hello World", s).getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
}
但是当我打开 PDF 文件时,我看到了这个: Wrong PDF
我已经尝试了所有编码类型,以获得正确的字母 (öüóá),但它对我没有用。
有人知道我该怎么做吗?
我已经找到了解决方案 ;)
问题是,我在将字符串放入 PDF 文件之前对其进行了编码。您应该在将字符串准确放入 PDF 时对其进行编码,就像这里一样:
stream.setData(new String(data).replace("Hello World", s).getBytes("ISO-8859-2"));
你可以在这里看到我的代码的最终形式:
public static void manipulatePdf(String src, String dest) throws IOException, DocumentException {
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 eredeti = "öűóá";
final String s = new String(eredeti.getBytes());
stream.setData(new String(data).replace("Hello World", s).getBytes("ISO-8859-2"));
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
Paragraph preface = new Paragraph();
preface.setAlignment(Element.ALIGN_CENTER);
reader.close();
}