我一直在使用PDF文件中的命名目的地在文件中的特定位置打开PDF文件。负责生成PDF文档的团队使用一个工具从书签自动生成指定的目的地,因此命名的目的地往往有像*9_Glossary*或*Additional_Information*这样的名称。我们被要求用多种语言制作相同的文档。我预计我们将得到PDF文件的多种外国语言与书签在同一地点,但书签的名称当然将在这些其他语言,自动生成的命名目的地将以外文。我希望所有文件中的指定目的地是相同的。
我不可能是第一个遇到这个问题的人,所以我很有兴趣看看其他人是否已经解决了这个问题。
有一种想法可能是在外文文档中重命名目的地。我使用iSharpText提取了一个指定目的地的列表。iSharpText可以重命名目标吗?理想情况下,我有一个工具,我的翻译可以用它来匹配每种语言中的命名目标名,然后让工具替换命名的目标名。
另一个想法是维护一个实时执行翻译的数据库;翻译人员仍然必须匹配命名的目标名称,但它们被存储在数据库中。命令Adobe打开的程序将使用英文版本查找外文名称,然后使用该名称打开文档。
我还会对PDF创作工具的建议感兴趣,这些工具可能会使这个问题更容易解决。
发布于 2013-11-24 12:59:09
请看一下RenameDestinations示例。它所做的比您需要的要多,因为原始文档本身包含指向命名目的地的链接,为了使这些链接继续工作,我们需要更改引用我们更改的名称的操作。
这是与你相关的部分:
PdfDictionary catalog = reader.getCatalog();
PdfDictionary names = catalog.getAsDict(PdfName.NAMES);
PdfDictionary dests = names.getAsDict(PdfName.DESTS);
PdfArray name = dests.getAsArray(PdfName.NAMES);
for (int i = 0; i < name.size(); i += 2) {
PdfString original = name.getAsString(i);
PdfString newName = new PdfString("new" + original.toString());
name.set(i, newName);
}首先,您将得到根字典(或目录)。您将获得/Names字典,查找指定的目的地(/Dests)。在我的例子中,我有一个简单的数组,其中包含一对PdfString和对PdfArray值的引用。我将所有字符串值替换为新名称。
我改变的结构是一个名字树,它通常不是线性的。在您的PDF中,这棵树可以有分支,因此您可能需要编写一个递归方法来遍历这些分支。我没有时间写一个更详细的例子,我也不想为你偷你的工作。这个例子在你的路上会对你有所帮助。
请注意,我在名为Map的renamed中跟踪原始名称和新名称。我使用此地图更改链接注释在第一页上的目的地。
发布于 2020-09-11 14:14:27
我在派对上迟到了,哈哈,但这可能会让其他人从谷歌搜索中找到这条线索。
我建议让自动书签专业,它提供了许多工具书签,链接和命名的目的地。
导出要容易得多,然后使用文本编辑器更改名称,然后重新导入。
请记住,如果指定的目的地附加到链接,您将不得不重置这些链接,因为它们不会自动更新。
https://stackoverflow.com/questions/20131610
复制相似问题