2

Thank you for taking the time to read this problem.
I want to use \href to create a hyperlink to my other PDF file. Unfortunately, there are two cases of problems:

  1. If I use \href{run:\path\to\file}{text}, the code works fine for PDF readers like Adobe Acrobat or SmartPDF. However, they don't work on web browsers.

  2. When I use \href{\raletive-path\to\file}{text} when using the .txt suffix, the code works well. However, when using .pdf suffix, the href link will be considered as an anchor and the link does not work. Meanwhile, \url command does not have this problem.

Here is some test code:

\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}

Environment setting:

Windows 2004 64-bit
TexLive 2019
XeTex, pdfTex

1
  • 2
    the result of your \url is not a real URI, it is missing the protocol. If it works it is more by chance or because the pdf viewer is guessing right. Commented Jul 24, 2020 at 9:31

1 Answer 1

2

You can compile the following document to understand the behavior of 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}

The produced PDF is now uncompressed so you can open it with your favorite text editor.

First you find all the annotations (this is what links are called in a PDF document) added to the page by their stream number (in the same order as in the source file):

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

Then you find the stream object (from #7 to #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

In each case, streams contains a /Subtype/Link/A annotation.

All links produced by \url and the link to .txt file produced by \href are /Type/Action/S/URI (a link to an external URI/URL) with correct link URL (relative URL).

The explicit link to .pdf file produced by \href (#7 obj) is F(./test/test.pdf)/S/GoToR/D[0/Fit] (a link to an external PDF file). This is convenient because the PDF viewer then knows that it can open the file itself.

The link from a URL without an extension generated by \href looks weird (the .pdf extension is added to the link).

Note about PDF viewer of web browers

In PDF viewer of web browsers, if your base URL (the URL of your document) uses the file: scheme, all relative links seem disabled (presumably for security reasons).

1
  • 1
    So is the tl;dr: "You should use the .pdf extension on your links"?
    – Teepeemm
    Commented Jul 24, 2020 at 22:20

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .