Any interactive elements, such as links, embedded multimedia, PDF Layers, are stripped off while embedding a PDF by means of the usual commands from the graphicx
and pdfpages
packages.
There is an experimental package on CTAN, ↗pax
, which attempts to re-create such elements using an external Java programme. But the project seems to be discontinued.
Currently, re-inserting interactive elements require a tedious, manual procedure, which can be simplified a bit by package onimage
, introduced ↗here. It can be downloaded as onimage.dtx
↗here. Run pdflatex
twice on it to get onimage.sty
and the documentation onimage.pdf
.
onimage
was designed to facilitate annotating embedded image files. Optionally it can show a grid of helper lines that greatly simplifies finding the link rectangle coordinates.
For convenience, we define \linkRect(<lowerleft>)(<upper right>){...}
which can be used inside a tikzonimage
or tikzpicture
environment to create a link rectangle between (<lowerleft>)
and (<upper right>)
, e. g. as
\linkRect(llx,lly)(urx,ury) {\href{URL}{~}};
Use ~
as a placeholder for the link text.
The Perl-Script extractURIs.pl
listed below extracts all URI (i. e. external) links from a given uncompressed PDF and writes readily formatted
\linkRect(llx,lly)(urx,ury) {\href{URL}{~}};
commands to the terminal. For uncompressing, use pdftk
commandline tool:
pdftk input.pdf output - uncompress | extractURIs.pl
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage{hyperref}
\usepackage{onimage}
% use `~' as placeholder for the link text
% \linkRect(llx,lly)(urx,ury) {\href{URL}{~}};
\def\linkRect(#1)(#2){
\coordinate (ll) at (#1); \coordinate (ur) at (#2);\def~{\tikz \useasboundingbox (ll) rectangle (ur);}
\node [anchor=south west, inner sep=0] at (ll)
}
\begin{document}
\begin{tikzonimage}[width=5cm]{example-image-a}[tsx/show help lines]
\linkRect(0.35,0.25)(0.65,0.75) {\href{https://www.google.de/search?q=onimage.dtx&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&dcr=0&ei=6lW6Wq_yEt6CgAfZq5mgDA}{~}};
\end{tikzonimage}
\end{document}
Perl scipt extractURIs.pl
:
#!/usr/bin/perl -w
@linkRect=();
@linkUri=();
$isLink=0;
$isUri=0;
while(<>){
if (/\/MediaBox\s+\[([\d\.\s]+\d)\]/) {
@mediaBox=split /\s+/, $1;
}
elsif(/\/Subtype\s*\/Link/) {$isLink=1;}
elsif(/\/Rect\s+\[([\d\.\s]+\d)\]/) {
$rect=$1;
}
elsif(/\/URI\s+\((.*)\)\s*$/) {
$uri=$1;
$isUri=1;
}
elsif(/endobj/) {
if($isUri && $isLink) {
push @linkUri, $uri;
push @linkRect, $rect;
}
$isUri=0;
$isLink=0;
}
}
$width=$mediaBox[2]-$mediaBox[0];
$height=$mediaBox[3]-$mediaBox[1];
for($i=0; $i<@linkUri; $i++) {
($llx,$lly,$urx,$ury) = split /\s+/, $linkRect[$i];
$llx=($llx-$mediaBox[0])/$width;
$urx=($urx-$mediaBox[0])/$width;
$lly=($lly-$mediaBox[1])/$height;
$ury=($ury-$mediaBox[1])/$height;
print "\\linkRect($llx,$lly)($urx,$ury) {\\href{$linkUri[$i]}{~}};\n";
}
Best Answer
For me your code gives a correct broken url. Probably you are just using a compiler that conflicts with this setup. As @Cupora states
latex+dvipdf
seem to refuse making the right links.I've compiled with
pdflatex
andlualatex
and they both show the following output:xelatex
seems to fail usingbreakurl
, but that may be an issue with my setup.