Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 西里尔符号_Java_Pdf_Itext_Itext7 - Fatal编程技术网

Java 西里尔符号

Java 西里尔符号,java,pdf,itext,itext7,Java,Pdf,Itext,Itext7,我用的是iText7。 我的类处理pdf文件,这是一个带有西里尔字母符号的模板,在服务器上 首先我看了文件。 第二,我编辑了一些信息,并试图将其保存在本地计算机上,但我遇到了一个问题。我的新文本显示不正确 如果我用ttf字体创建一个新的pdf文件,并将其添加到新创建的pdf文件中,一切正常,但如果我修改模板,则文本不仅适用于西里尔字母符号 我试着用一个来自官方网站的简单例子- 以下是我的代码的相关部分: PdfDocument document = new PdfDocument(new Pdf

我用的是iText7。 我的类处理pdf文件,这是一个带有西里尔字母符号的模板,在服务器上

首先我看了文件。 第二,我编辑了一些信息,并试图将其保存在本地计算机上,但我遇到了一个问题。我的新文本显示不正确

如果我用ttf字体创建一个新的pdf文件,并将其添加到新创建的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专家。问题不在于你做错了什么。真正的问题是你没有做错什么!