Java 西里尔符号
我用的是iText7。 我的类处理pdf文件,这是一个带有西里尔字母符号的模板,在服务器上 首先我看了文件。 第二,我编辑了一些信息,并试图将其保存在本地计算机上,但我遇到了一个问题。我的新文本显示不正确 如果我用ttf字体创建一个新的pdf文件,并将其添加到新创建的pdf文件中,一切正常,但如果我修改模板,则文本不仅适用于西里尔字母符号 我试着用一个来自官方网站的简单例子- 以下是我的代码的相关部分:Java 西里尔符号,java,pdf,itext,itext7,Java,Pdf,Itext,Itext7,我用的是iText7。 我的类处理pdf文件,这是一个带有西里尔字母符号的模板,在服务器上 首先我看了文件。 第二,我编辑了一些信息,并试图将其保存在本地计算机上,但我遇到了一个问题。我的新文本显示不正确 如果我用ttf字体创建一个新的pdf文件,并将其添加到新创建的pdf文件中,一切正常,但如果我修改模板,则文本不仅适用于西里尔字母符号 我试着用一个来自官方网站的简单例子- 以下是我的代码的相关部分: PdfDocument document = new PdfDocument(new Pdf
PdfDocument document = new PdfDocument(new PdfReader(template), new PdfWriter(dest));
PdfPage page = document.getFirstPage();
PdfDictionary dictionary = page.getPdfObject();
PdfObject object = dictionary.get(PdfName.Contents);
if (object instanceof PdfStream) {
PdfStream stream = (PdfStream) object;
byte[] data = stream.getBytes(true);
stream.setData(new String(data).replace("user_fio", "Петров А.А.").getBytes("utf-8"));
}
document.close();
我正在尝试使用区域设置:
但结果是?。?。或者类似的
我做错了什么?谢谢大家! PDF不是所见即所得格式。您不能希望简单地替换内容流中的信息并拥有一个好看的pdf。 这有两个原因 PDF文档将其信息存储在对象中。为了能够引用对象,存储了字节偏移量。如果你开始替换数据,你就把这个字节偏移量的内部表搞砸了 PDF文档不包含文本本身。你应该把它们更多地看作是指令的容器。更改指令的顺序或某些指令的内容不会得到您想要的结果 在插入、删除或替换文本时自动布局文本的回流无法在文档中动态完成。当你使用像你这样的代码时,它几乎总是会搞砸回流焊 也有例外。在网站上的一个例子中,单词World被Bruno替换。这是因为World和Bruno具有相同的字母数,因此字节数相同,在我提到的示例中,它们在各自的行中显示为最后一个单词。因此,回流焊不是问题 总结: -PDF不是可编辑格式
如果你想做类似于你的事情,考虑下面的选项:
每次都从头开始生成PDF 使用表单XFA或Acro可以有某种类型的字段来接受动态内容 使用pdfHTML将动态生成的HTML转换为PDF如果你读了我在你提到的例子中添加的评论,你会发现我写道:这是一个快速而肮脏的方法,尤其是非常肮脏,你可能会严重破坏布局。在您的例子中,您用一种完全不同的字体替换一种字体中的文本,希望这样做简单易行。不是那么简单。您不应该断章取义地使用此示例。该示例仅适用于PDF专家,而您不是PDF专家。问题不在于你做错了什么。真正的问题是你没有做错什么!