首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >西里尔符号

西里尔符号
EN

Stack Overflow用户
提问于 2017-09-11 12:08:01
回答 1查看 338关注 0票数 0

我在用iText7。

我的类在服务器上处理pdf文件(这是一个带有西里尔符号的模板)。

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

如果我用ttf字体创建了一个新的pdf文件并将其添加到新创建的pdf文件中,那么所有操作都很好,但是如果我修改了我的模板,文本是不正确的(仅针对Cyrillic符号)。

我正在尝试使用一个来自官方网站的简单例子- http://developers.itextpdf.com/examples/stamping-content-existing-pdfs/clone-replacing-pdf-objects

下面是我代码的相关部分:

代码语言:javascript
复制
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();

我正在尝试使用地区:http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html

但结果是“?”或者类似的东西。

我做错了什么?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-11 12:24:53

PDF不是wysiwyg格式。你不能希望简单地替换内容流中的信息,并且有一个好看的pdf。这有两个原因

  1. PDF文档将它们的信息存储在对象中。为了能够引用对象,存储一个字节偏移量。如果您开始替换数据,则会破坏这个字节偏移量的内部表。
  2. PDF文档不包含文本本身。你应该更多地把它们看作是指令的容器。更改指令的顺序或某些指令的内容不会得到您想要的结果。 在文档中不能动态地进行再流(在插入、删除或替换文本时自动布局文本)。当您使用像您这样的代码时,它(几乎总是)会(几乎总是)搞乱再流。 也有例外。在网站的一个例子中,“世界”一词改为"Bruno“。这是因为"World“和"Bruno”的字母数相同(因此字节数相同),在我提到的示例中,它们在各自的行中显示为最后一个单词。所以再流不是问题。

摘要:- PDF不是可编辑的格式!

如果您希望执行类似于您的usecase的操作,请考虑以下选项:

  • 每次从零开始生成PDF
  • 使用表单(XFA或Acro)具有某种可以接受动态内容的字段
  • 使用pdfHTML将HTML (动态生成)转换为PDF
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46155409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档