hyperref 中 .pdf 文件中 \href 的奇怪行为

hyperref 中 .pdf 文件中 \href 的奇怪行为

感谢您花时间阅读此问题。
我想使用\href它来创建指向我的其他 PDF 文件的超链接。不幸的是,有两种情况出现问题:

  1. 如果我使用\href{run:\path\to\file}{text},代码可以在 Adob​​e Acrobat 或 SmartPDF 等 PDF 阅读器上运行良好。但它们无法在 Web 浏览器上运行。

  2. 当我使用带后缀的\href{\raletive-path\to\file}{text}链接时.txt,代码运行良好。但是,当使用.pdf后缀时,href 链接将被视为链接,anchor并且链接不起作用。而\url命令则不存在此问题。

以下是一些测试代码:

\documentclass{article}
\usepackage[colorlinks,linkcolor=red,anchorcolor=blue,citecolor=green,CJKbookmarks=True]{hyperref}
\pagestyle{plain}

\begin{document}
    \section{Problem}
    When use URL .pdf: \url{./test/test.pdf} \\
    When use href .pdf: \href{./test/test.pdf}{testfile}\\ 
    \newline
    When use URL .txt: \url{./test/test.txt} \\
    When use href .txt: \href{./test/test.txt}{testfile}\\ 
    \newline
    When use URL without extension: \url{./test/test} \\
    When use href without extension: \href{./test/test}{testfile}\\ 
\end{document}

环境设置:

Windows 2004 64 位
TexLive 2019
XeTex、pdfTex

答案1

您可以编译以下文档来了解的行为hyperref

\documentclass{article}
\pdfobjcompresslevel=0
\pdfcompresslevel=0
\usepackage[colorlinks,linkcolor=red,anchorcolor=blue,citecolor=green,CJKbookmarks=True]{hyperref}
\pagestyle{plain}

\begin{document}
\section{Problem}
When use URL .pdf: \url{./test/test.pdf} \\
When use href .pdf: \href{./test/test.pdf}{testfile}\\ 
\newline
When use URL .txt: \url{./test/test.txt} \\
When use href .txt: \href{./test/test.txt}{testfile}\\ 
\newline
When use URL without extension: \url{./test/test} \\
When use href without extension: \href{./test/test}{testfile}\\ 
\end{document}

生成的 PDF 现在已解压缩,因此您可以使用您喜欢的文本编辑器打开它。

首先,您会通过流编号(与源文件中的顺序相同)找到添加到页面的所有注释(这是 PDF 文档中所称的链接):

/Annots [ 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R ]

然后找到流对象(从#7到#12):

7 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [227.749 632.204 308.197 643.329]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test.pdf)>>
>>
endobj
8 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 .5 .5]
/Rect [223.626 620.526 254.455 631.374]
/Subtype/Link/A<</F(./test/test.pdf)/S/GoToR/D[0/Fit]>>
>>
endobj
9 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [226.366 597.722 306.813 607.464]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test.txt)>>
>>
endobj
10 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [222.242 586.598 253.071 595.509]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test.txt)>>
>>
endobj
11 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 1 1]
/Rect [288.411 561.857 347.937 571.598]
/Subtype/Link/A<</Type/Action/S/URI/URI(./test/test)>>
>>
endobj
12 0 obj
<<
/Type /Annot
/Border[0 0 0]/H/I/C[0 .5 .5]
/Rect [284.288 550.732 315.116 559.643]
/Subtype/Link/A<</F(./test/test.pdf)/S/GoToR/D[0/Fit]>>
>>
endobj

在每种情况下,流都包含一个/Subtype/Link/A注释。

产生的所有链接和产生的文件\url链接(到外部 URI/URL 的链接)均具有正确的链接 URL(相对 URL)。.txt\href/Type/Action/S/URI

(#7 obj).pdf生成的文件显式链接是(指向外部 PDF 文件的链接)。这很方便,因为 PDF 查看器知道它可以自己打开文件。\hrefF(./test/test.pdf)/S/GoToR/D[0/Fit]

没有扩展名的 URL 生成的链接\href看起来很奇怪(.pdf扩展名被添加到链接中)。

关于网络浏览器 PDF 查看器的注意事项

在网络浏览器的 PDF 查看器中,如果您的基本 URL(文档的 URL)使用该file:方案,则所有相关链接似乎都被禁用(大概是出于安全原因)。

相关内容