有没有办法将数据(例如 CSV 数据)嵌入 PDF。我想要一个包含数字数据的表格,阅读器应该能够直接获取数据,而无需从 PDF 中复制和粘贴(这通常不起作用)。
使用数据 URI,可以创建包含数据本身的链接。例如,将data:text/plain;charset=utf-8;base64,MSAyIDMNCjQgNSA2
as 放入 html 链接将导致显示纯文本数据的“网站”:
1 2 3
4 5 6
我尝试用乳胶将其放入 PDF 中,并\href{URI}{click here to get data}
在 PDF 中使用,但单击链接时什么也没有发生(只有在浏览器中复制并粘贴链接时才有效)。
是否有某种方法可以嵌入表格的机器可读数据?
以下是我目前所做的:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{table}
\centering
\begin{tabular}{ccc}
1 & 2 & 3 \\
4 & 5 & 6 \\
\end{tabular}
\caption{To get the data, click \href{data:text/plain;charset=utf-8;base64,MSAyIDMNCjQgNSA2}{here}.}
\end{table}
\end{document}
答案1
答案2
我在这里使用accsupp
软件包的功能。这里我介绍了以正常方式csvtabular
排版的环境tabular
,但使用 PDF 上的复制/粘贴,会产生 CSV 样式的输出。
\BODY
它通过获取包environ
提供的并使用listofitems
解析来替换&
和,
替换\\
来实现这一点。请注意,在最后一行数据上\n
添加尾随,虽然对无害,但会中断...不要这样做!\\
tabular
csvtabular
\documentclass{article}
\usepackage{accsupp,environ,listofitems}
\makeatletter
\NewEnviron{csvtabular}[1]{
\setsepchar{\\/&}%
\readlist*\mylist{\BODY}%
\def\tmp{}%
\foreachitem\myrow\in\mylist{%
\foreachitem\mycol\in\mylist[1]{%
\ifnum\mycolcnt=1\else\g@addto@macro\tmp{, }\fi%
\expandafter\expandafter\expandafter\g@addto@macro%
\expandafter\expandafter\expandafter\tmp\expandafter%
\expandafter\expandafter{\mylist[\myrowcnt,\mycolcnt]}
}%
\g@addto@macro\tmp{\string\n }%
}%
\BeginAccSupp{method=escape,ActualText={\tmp}}
\begin{tabular}{#1}
\BODY
\end{tabular}
\EndAccSupp{}
}
\makeatother
\begin{document}
\begin{table}
\centering
\begin{csvtabular}{ccc}
1 & 2 & 3 \\
4 & 5 & 6
\end{csvtabular}
\caption{To get the data, highlight the tabular data and copy/paste.}
\end{table}
\end{document}
以下是复制并粘贴表格数据后得到的结果:
1, 2, 3\n4, 5, 6\n
原始(手动)方法
\documentclass{article}
\usepackage{accsupp}
\begin{document}
\begin{table}
\centering
\BeginAccSupp{method=escape,ActualText={1, 2, 3<CR> 4, 5, 6<CR>}}
\begin{tabular}{ccc}
1 & 2 & 3 \\
4 & 5 & 6 \\
\end{tabular}
\EndAccSupp{}
\caption{To get the data, highlight the tabular data and copy/paste.}
\end{table}
\end{document}