Las*_*sen 9 pdf adobe-reader microsoft-word
精简版:
Launch
而不是URI
(Adobe 便携式文档格式的第 653 页上指定的两种类型, PDF 参考,1.7 版,第六版 - 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
我放置了一个指向我的第二个文档 ( doc2.pdf
)的 PDF 版本的超链接- 所以现在我得到了:
然后我将doc1.docx
文件另存为.docx
和.pdf
-PDF
生成由 MS Word 2007 中的内置 PDF 发布器使用以下选项处理:
到目前为止一切顺利 - 然后我有以下文件夹结构:
/superuser
- doc1.docx
- doc1.pdf
- doc2.docx
- doc2.pdf
Run Code Online (Sandbox Code Playgroud)
然后我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
. 那么你问为什么不使用苏门答腊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
在记事本++中打开显示超链接已使用URI
动作类型进行编码(参见 Adobe 便携式文档格式的第 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 上的资源 — 通常是作为超文本链接目标的文件,尽管它也可以解析为查询或其他实体。
因此,乍一看是 Adobe Reader X 中的一个主要错误,但开始看起来像是一个公平的实现。至少,在这一点上,我弄清楚了为什么 Adobe Reader X 的行为如此 - 导致一个新问题需要回答:我如何正确编码文件超链接(例如指向 的链接doc2.pdf
),以便生成的 PDF 使 Adobe 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)
... Adobe Reader X 然后通过doc2.pdf
在单独的窗口/Adobe Reader X 的另一个实例中打开文件来解析链接- 再次假设我已取消选中该Open cross-document links in same window
选项(万岁!!)。
现在回到我尚未解决的实际/最终问题 - 有什么方法可以让 MS Word 2007(或更新版本)使用操作类型Launch
而不是URI
(在 Adobe 便携式文档格式,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”——但如果你设法来到这里,我真的很感激你的兴趣,我希望你或其他人能指出我正确的方向。
谢谢。
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( .
归档时间: |
|
查看次数: |
3344 次 |
最近记录: |