MS Word 2007+ - 在将“.docx”文件发布到 PDF 时,它能否使用 PDF 操作类型“启动”而不是“URI”对超链接进行编码?

Las*_*sen 9 pdf adobe-reader microsoft-word

精简版:

精制版:

我有两个 Word 文档;doc1.docxdoc2.docx(均使用 MS Word 2007 编译)。

doc1.docx我放置了一个指向我的第二个文档 ( doc2.pdf)的 PDF 版本的超链接- 所以现在我得到了:

<code>doc1.docx</code> 中 <code>doc2.pdf</code> 超链接的属性

然后我将doc1.docx文件另存为.docx.pdf-PDF生成由 MS Word 2007 中的内置 PDF 发布器使用以下选项处理:

MS Word 2007 PDF 发布属性

到目前为止一切顺利 - 然后我有以下文件夹结构:

/superuser
    - doc1.docx
    - doc1.pdf
    - doc2.docx
    - doc2.pdf
Run Code Online (Sandbox Code Playgroud)

然后我doc1.pdf用 Adob​​e Reader X(版本 10.1.3)打开并单击指向doc2.pdf. 由于链接是相对的,我会猜测/假设 Adob​​e Reader X 将简单地在单独的窗口或 Adob​​e Reader X 的同一实例中打开目标 PDF 文件(取决于Open cross-document links in same window:中指定的选项Edit -> Preferences -> Documents)。

然而,事实并非如此。相反,Adobe Reader X 使用默认浏览器(在我的情况下是 Windows 7 x64 上的 Google Chrome v21+)解析超链接 - 需要明确的是 -这就是问题所在。我希望 Adob​​e Reader X(及其大多数前辈)通过在另一个 Adob​​e Reader X 实例中打开目标 PDF 来解析超链接(假设我已取消选中该Open cross-document links in same window选项)。使用我的(默认)PDF 阅读器重复相同的场景;Sumatra PDF 按预期工作 - Sumatra PDF 在单独的窗口中打开目标 PDF 文件并向我显示doc2.pdf. 那么你问为什么不使用苏门答腊PDF呢?我很想 - 但是,问题是我正在处理一个可能有很多最终用户的项目,我不能假设他们所有人都使用 Adob​​e Reader X 以外的其他 PDF 阅读器 - 所以,别无他法弄清楚 Adob​​e Reader X 发生了什么。

所以为了到达那里,我开始挖掘。

首先,通过查看 Chrome 中的地址栏,可以看到 Adob​​e Reader X 尝试doc2.pdf使用fileURI 方案进行解析:file:///C:/superuser/doc2.pdf- 这对我来说似乎很公平(将相同的 URI 粘贴到RunWindows 7的对话框中会导致我的默认 PDF 阅读器(Sumatra PDF ) 打开文件 ) - 但为什么 Adob​​e Reader X 要求默认浏览器处理 PDF?

为了回答这个问题,我继续挖掘。doc1.pdf在记事本++中打开显示超链接已使用URI动作类型进行编码(参见 Adob​​e 便携式文档格式的第 653 和 662 页,PDF 参考,版本 1.7,第六版 - 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)
Run Code Online (Sandbox Code Playgroud)

PDF 参考(第 662 页)说明了有关URI操作类型的以下内容:

统一资源标识符 (URI) 是一个字符串,用于标识(解析为)Internet 上的资源 — 通常是作为超文本链接目标的文件,尽管它也可以解析为查询或其他实体。

因此,乍一看是 Adob​​e Reader X 中的一个主要错误,但开始看起来像是一个公平的实现。至少,在这一点上,我弄清楚了为什么 Adob​​e Reader X 的行为如此 - 导致一个新问题需要回答:我如何正确编码文件超链接(例如指向 的链接doc2.pdf),以便生成的 PDF 使 Adob​​e Reader X处理链接本身(而不是要求默认浏览器完成它的工作)?

为了回答这个问题,我再次查看了 PDF 规范并找到了 Action Type Launch- 关于该类型,PDF 参考声明如下(第 659 页):

启动操作启动应用程序或打开或打印文档。

因此,通过进行以下更改(使用记事本++):

更换:

/Type/Action/S/URI/URI(doc2.pdf)
Run Code Online (Sandbox Code Playgroud)

有了这个:

/Type/Action/S/Launch/F(doc2.pdf)
Run Code Online (Sandbox Code Playgroud)

... Adob​​e Reader X 然后通过doc2.pdf在单独的窗口/Adobe Reader X 的另一个实例中打开文件来解析链接- 再次假设我已取消选中该Open cross-document links in same window选项(万岁!!)。

现在回到我尚未解决的实际/最终问题 - 有什么方法可以让 MS Word 2007(或更新版本)使用操作类型Launch而不是URI(在 Adob​​e 便携式文档格式,PDF 参考,版本 1.7,第六版的第 653 页中指定的两种类型 - http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en /devnet/pdf/pdfs/pdf_reference_1-7.pdf)?或者是实现某种后处理器应用程序的唯一解决方案,该应用程序可以将所有“错误”URI编码的文件超链接更改为它们的Launch等效链接?

我知道这可能会导致很多“TLDR”——但如果你设法来到这里,我真的很感激你的兴趣,我希望你或其他人能指出我正确的方向。

谢谢。

Kar*_*ran 0

FWIW,如果文件名包含空格,我认为链接在苏门答腊岛不起作用(在名称周围放置引号没有帮助,因为 Word 在创建链接时似乎会删除这些空格)。我不相信可以改变Word的行为,所以......

解决方法#1:使用更好的 PDF 创建器。

解决方法 #2:像往常一样使用 Word 创建 PDF,然后使用十六进制编辑器或命令行实用程序(例如http://stahlforce.com/dev/index.php?tool=rep )替换所有必需的/Type/实例Action/S/URI/URI(/Type/Action/S/Launch/F( .