简洁版本:
- 有什么方法可以让 MS Word 2007(或更新版本)使用操作类型
Launch
而不是URI
(Adobe 便携式文档格式 PDF 参考第 1.7 版第 653 页上指定的两种类型)对相对文件超链接(指向另一个 PDF 文件的超链接)进行编码 -http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf)?或者唯一的解决方案是实现一个后处理器,它可以将所有“错误”URI
编码的文件超链接更改为其Launch
等效内容?
详细版本:
我有两个 Word 文档;doc1.docx
和doc2.docx
(均用 MS Word 2007 编译)。
我doc1.docx
在第二个文档的 PDF 版本中放置了一个超链接(doc2.pdf
) - 所以现在我得到:
然后,我将doc1.docx
文件另存为-生成由 MS Word 2007 中的内置 PDF 发布器使用以下选项处理:.docx
.pdf
PDF
到目前为止一切顺利-我有以下文件夹结构:
/superuser
- doc1.docx
- doc1.pdf
- doc2.docx
- doc2.pdf
然后我doc1.pdf
用 Adobe Reader X (版本 10.1.3) 打开并点击指向的超链接doc2.pdf
。由于链接是相对的,我猜测/假设 Adobe Reader X 只会在单独的窗口或 Adobe Reader X 的同一个实例中打开目标 PDF 文件(取决于Open cross-document links in same window
:中指定的选项Edit -> Preferences -> Documents
)。
然而,这是不是相反,Adobe Reader X 使用默认浏览器(在我的情况下是 Windows 7 x64 上的 Google Chrome v21+)解析超链接 - 并且要清楚 -这就是问题。我希望 Adobe Reader X(及其大多数前身)通过在另一个 Adobe Reader X 实例中打开目标 PDF 来解析超链接(假设我已取消选中该Open cross-document links in same window
选项)。使用我的(默认)PDF 阅读器重复相同的场景;Sumatra PDF 工作正常 - Sumatra PDF 在单独的窗口中打开目标 PDF 文件并向我显示内容doc2.pdf
。那么你可能会问,为什么不使用 Sumatra PDF?我很乐意 - 然而,问题是我正在开展一个可能有很多最终用户的项目,我不能假设他们所有人都使用除 Adobe Reader X 之外的其他 PDF 阅读器 - 因此,没有其他方法可以弄清楚 Adobe Reader X 发生了什么。
为了到达那里,我开始挖掘。
首先,通过查看 Chrome 中的地址栏,可以看到 Adobe Reader X 尝试doc2.pdf
使用file
URI 方案进行解析:file:///C:/superuser/doc2.pdf
——这对我来说似乎是公平的(将相同的 URI 粘贴到Run
Windows 7 中的对话框中会导致我的默认 PDF 阅读器(Sumatra PDF)打开该文件)——但为什么 Adobe Reader X 要求默认浏览器处理 PDF?
为了回答这个问题,我继续挖掘。doc1.pdf
在 notepad++ 中打开后发现,超链接已使用URI
操作类型进行编码(请参阅 Adobe 便携式文档格式 PDF 参考第 1.7 版第 653 页和 662 页 -http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf):
/Type/Action/S/URI/URI(doc2.pdf)
PDF 参考(第 662 页)对URI
动作类型作出了如下规定:
统一资源标识符 (URI) 是一个字符串,用于标识(解析为)互联网上的资源(通常是超文本链接的目标文件,但也可以解析为查询或其他实体)。
因此,乍一看似乎是 Adobe Reader X 中的一个重大错误,但后来看起来却像是一个合理的实现。至少,此时我弄清楚了 Adobe Reader X 的行为方式,这又引出了一个新问题:如何正确编码文件超链接(例如指向 的链接doc2.pdf
),以便生成的 PDF 让 Adobe Reader X 自己处理链接(而不是让默认浏览器执行其工作)?
为了回答这个问题,我再次查看了 PDF 规范并找到了动作类型Launch
- 关于该类型,PDF 参考指出以下内容(第 659 页):
启动操作会启动应用程序或者打开或打印文档。
因此通过进行以下更改(使用 notepad++):
更换:
/Type/Action/S/URI/URI(doc2.pdf)
有了这个:
/Type/Action/S/Launch/F(doc2.pdf)
doc2.pdf
... 然后,Adobe Reader X 通过在单独的窗口/另一个 Adobe Reader X 实例中打开文件来解析链接- 再次假设我取消选中该Open cross-document links in same window
选项(万岁!!)。
现在到了我还没有解决的实际/最后一个问题 - 有什么方法可以让 MS Word 2007(或更新版本)使用操作类型而不是(Launch
AdobeURI
便携式文档格式 PDF 参考第 1.7 版第 653 页上指定的两种类型)对相对文件超链接(指向例如另一个 PDF 文件的超链接)进行编码 -http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/pdf_reference_1-7.pdf)?或者唯一的解决方案是实施某种后处理器应用程序,将所有“错误”URI
编码的文件超链接更改为其Launch
等效内容?
我知道这可能会导致很多“TLDR” - 但如果您设法到达这里,我真的很感谢您的兴趣,我希望您或其他人可以为我指明正确的方向。
谢谢。
答案1
感谢您的精彩文章。它确实有效!起初对我来说不是这样,但后来我发现您必须关闭 Adobe X 中的“保护模式”。我在 Adobe 9 上根本没有遇到这个问题。在我看来,这个行业正在以安全的名义在功能上倒退。
因此在 Adobe Reader X 中执行以下操作:
- 确保打开跨文档..未选中。(正如你所说)
- 关闭保护模式:编辑»首选项»常规
- 使用合适的十六进制编辑器
/Type/Action/S/URI/URI
进行搜索和替换/Type/Action/S/Launch/F(
我们想要做的是让任何只使用 PDF 阅读器而无需进行任何设置的用户浏览文件夹,但对于这个问题,没有简单的解决方案。
但再次感谢您所做的所有工作以及它对这个问题的阐释。
答案2
无论如何,我认为如果文件名包含空格,链接在 Sumatra 中不起作用(在文件名两边加上引号也没用,因为 Word 在创建链接时似乎会删除这些空格)。我不认为可以改变 Word 的行为,所以...
解决方法#1:使用更好的 PDF 创建器。
解决方法 #2:照常使用 Word 创建 PDF,然后使用十六进制编辑器或命令行实用程序,例如http://stahlforce.com/dev/index.php?tool=rep替换所有必需的实例/类型/操作/S/URI/URI(和/类型/动作/S/发射/F(。
答案3
回复相对超链接问题。
MS Office 帮助指出,设置“保存时更新链接”(Office 按钮/Word 选项按钮/高级/Web 选项按钮)会导致插入的超链接为相对链接。如果未选中,则它们变为绝对链接。但是,此设置对我的尝试没有任何影响。真正起作用的是文件保存的时间点。为了建立相对链接,我打开一个新的空白文件并将其保存到适当的文件夹中,然后再插入任何链接。在“插入超链接框”中选择“现有文件夹”。框中显示的文件夹就是刚刚保存的文件夹,向下树状排列 - 而不是向上树状排列。即相对
为了建立绝对链接,我打开一个新的空白文件,不保存它,插入链接。插入框现在在顶层显示现有文件夹。向下钻取要链接到的文件,框底部显示的路径是返回 C: 的完整路径。... . . . . .(显示驱动器号),即绝对路径。
将光标悬停在两个 Word 文件中的链接上,在两种情况下都会显示完整的绝对路径。但是,如果将父文件夹复制到另一个驱动器,则相对链接会打开新驱动器中的文件夹,而绝对链接会返回到 C: 驱动器文件夹,这正是我想要看到的。我还没有发现如何在一个文件中创建两种链接。但我无论如何都不需要这个。我能够使用上面的十六进制编辑修改将我的两个 MS Word 文件转换为 pdf,并且它们都有效,一个是绝对模式,另一个是相对模式。
回复你的“十六进制编辑替换方法”
在某些情况下,它对我来说很有效,但在其他情况下则不然。我发现我必须确保目标文件名中没有空格。我用下划线符号替换它们。然后它们就起作用了。
答案4
我已经尽可能地弄清楚了这个问题。由于它与原始问题直接相关,因此我只会给出我的最终总结。
关于同一文档中的绝对链接和相对链接
查看插入超链接框底部显示的路径。如果顶层文件夹是您选择的文件夹,则链接将与其相关。要使其成为绝对链接,请使用“插入”框中的树结构向上钻取直至驱动器号。当文件首次保存到“父”文件夹时,默认为相对链接。
创建可传输索引链接文件夹的步骤
(使用“索引”文档链接到子文件夹中的文件。)
在某处创建一个新文件夹,作为要传输的文件夹(“父”文件夹)。
创建或将包含其文件的子文件夹放入父文件夹中。
现在打开一个 Word 2007 文档,它将是您的“索引文档”。在插入任何链接之前,请将此文件保存到您的“父级”中。
现在执行“插入超链接”。 “插入超链接”框将显示从“父级”向下(即相对)的文件夹/文件树结构。 要创建绝对链接,请一直向上钻取到驱动器号。
保存 Word 文件,它现在将作为您的“索引文档”
要将“索引文档”转换为 pdf,请打开 word 文件并另存为 PDF。此版本的索引文档将通过浏览器打开目标文件,下载它们或在浏览器中显示为 PDF。
要使“Index.pdf”文档在其本机应用程序中打开链接,请使用前面描述的十六进制编辑方法修改文件,并将 /Type/Action/S/URI/URI( 替换为 /Type/Action/S/Launch/F(
3.重要提示!在修改 .pdf 文件之前,请确保所有文件夹和文件名称中没有空格。用下划线或破折号代替空格。