如何使用 latex 将纯文本数据嵌入到 pdf 中

如何使用 latex 将纯文本数据嵌入到 pdf 中

有没有办法将数据(例如 CSV 数据)嵌入 PDF。我想要一个包含数字数据的表格,阅读器应该能够直接获取数据,而无需从 PDF 中复制和粘贴(这通常不起作用)。

使用数据 URI,可以创建包含数据本身的链接。例如,将data:text/plain;charset=utf-8;base64,MSAyIDMNCjQgNSA2as 放入 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

可以使用该attachfile包嵌入文件。但是,并非所有 PDF 查看器都可以打开嵌入文件,例如,它可以在 Adob​​e Reader 中运行,但在 Evince 中无法(正常)运行。

请注意,该文件实际上嵌入在 pdf 中,即,您在分发文档时无需单独提供该文件。

梅威瑟:

\documentclass{article}
\usepackage{attachfile}
\begin{document}
The csv file is attached: \attachfile{embed.csv}
\end{document}

结果:

在此处输入图片描述

答案2

我在这里使用accsupp软件包的功能。这里我介绍了以正常方式csvtabular排版的环境tabular,但使用 PDF 上的复制/粘贴,会产生 CSV 样式的输出。

\BODY它通过获取包environ提供的并使用listofitems解析来替换&,替换\\来实现这一点。请注意,在最后一行数据上\n添加尾随,虽然对无害,但会中断...不要这样做!\\tabularcsvtabular

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

相关内容