自动将电子邮件地址显示为图像

自动将电子邮件地址显示为图像

在网上发布文件中嵌入电子邮件的 PDF 手稿会导致垃圾邮件。

更一般地说,我正在寻找一种方法来自动化字符串到图像的转换。

使用以下方法可以很容易地解决这个老问题\includegraphics一个图像(更多的这里)的问题是,您需要一个独立的文件和排版运行,并且最终您会得到一些不必要的图像文件,而您不能随意删除这些文件,以免连非生成的图像也删除。

你能想出一个即时的方法吗?据了解,如果人们需要给你发消息,他们必须输入电子邮件地址,但这就是重点。

更简短/具体地...

什么可以替代#1

\documentclass{article}
\newcommand\showasimage[1]{#1}
\begin{document}
\showasimage{[email protected]}
\end{document}

就像#1是一个图像一样?

编辑

如果 pdf 文件保持矢量形式,那就太好了。

答案1

以下解决方案不再使用 ImageMagick 的convert命令,因为这将始终创建光栅图像,这些图像将与文本区分开来。相反,它使用 Ghostscript 对字母进行矢量化,使它们看起来像普通文本,但实际上是不可复制的图像。请注意,您还必须在启用开关的情况pdflatex下运行--shell-escape,以便命令\write18确实会发送到 shell。

图像将被裁剪,以便将其放置在基线上(考虑到下行部分),并且字体将与上下文中的字体相匹配。临时文件(使用计数器允许同一页面上有多个图像)将在最后被删除。

\documentclass{article}
\usepackage{graphicx}
\makeatletter
\newcount\@emailcount
\newcommand\showasimage[1]{%
  \global\advance\@emailcount 1
  \edef\x{email-\the\@emailcount}%
  \immediate\write18{echo '\unexpanded{\\font\\1=}\fontname\font' > \x.tex}%
  \immediate\write18{echo '\unexpanded{\\1#1\\nopagenumbers\\bye}' >> \x.tex}%
  \immediate\write18{pdftex \x.tex}%
  %\immediate\write18{convert -units PixelsPerInch -density 300 -trim \x.pdf \x.png}% raster
  \immediate\write18{gs -dNOCACHE -sDEVICE=epswrite -dQUIET -o \x.eps \x.pdf}% vector
  \immediate\write18{epstopdf --hires \x.eps}%
  \settodepth{\@tempdima}{#1}%
  \raisebox{-\the\@tempdima}{\includegraphics{\x.pdf}}%
}
\AtEndDocument{%
  \loop
    \immediate\write18{rm email-\the\@emailcount.*}%
    \advance\@emailcount-1
    \ifnum\@emailcount>0\repeat
}
\makeatother
\begin{document}
Email \showasimage{[email protected]} not copyable

\textit{match font and depth: \showasimage{[email protected]}} 

\end{document}

结果是(选定第一行):

以图片形式发送邮件

答案2

这对我来说是可行的,但我不知道你的操作系统,所以我不确定它是否适合你。请注意,命令convert图像魔术师. 启用后进行编译-shell-escape

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{bashful,graphicx}

\begin{document}

\bash
echo "[email protected]" | convert label:@- email.png
\END
\includegraphics{email.png}

\end{document}

然而,这在 中不起作用\newcommand。但这似乎有效(仍然在 上bash):

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{graphicx}

\newcommand{\showasimage}[2]{%
\immediate\write18{echo "#1" | convert label:@- #2.png}%
\includegraphics{#2.png}%
}

\begin{document}

\showasimage{[email protected]}{email2}

\end{document}

相关内容