在网上发布文件中嵌入电子邮件的 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}