在是否可以生成包含不可复制文本的 PDF?,建议使用以下代码来禁用 pdf 查看器中的可复制文本。
% pdflatex is required
\documentclass{article}
\usepackage[resetfonts]{cmap}
\usepackage{fancyvrb}
\begin{VerbatimOut}{OT1.cmap}
%!PS-Adobe-3.0 Resource-CMap
%%DocumentNeededResources: ProcSet (CIDInit)
%%IncludeResource: ProcSet (CIDInit)
%%BeginResource: CMap (TeX-OT1-0)
%%Title: (TeX-OT1-0 TeX OT1 0)
%%Version: 1.000
%%EndComments
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (TeX)
/Ordering (OT1)
/Supplement 0
>> def
/CMapName /TeX-OT1-0 def
/CMapType 2 def
1 begincodespacerange
<00> <7F>
endcodespacerange
8 beginbfrange
<00> <01> <0000>
<09> <0A> <0000>
<23> <26> <0000>
<28> <3B> <0000>
<3F> <5B> <0000>
<5D> <5E> <0000>
<61> <7A> <0000>
<7B> <7C> <0000>
endbfrange
40 beginbfchar
<02> <0000>
<03> <0000>
<04> <0000>
<05> <0000>
<06> <0000>
<07> <0000>
<08> <0000>
<0B> <0000>
<0C> <0000>
<0D> <0000>
<0E> <0000>
<0F> <0000>
<10> <0000>
<11> <0000>
<12> <0000>
<13> <0000>
<14> <0000>
<15> <0000>
<16> <0000>
<17> <0000>
<18> <0000>
<19> <0000>
<1A> <0000>
<1B> <0000>
<1C> <0000>
<1D> <0000>
<1E> <0000>
<1F> <0000>
<21> <0000>
<22> <0000>
<27> <0000>
<3C> <0000>
<3D> <0000>
<3E> <0000>
<5C> <0000>
<5F> <0000>
<60> <0000>
<7D> <0000>
<7E> <0000>
<7F> <0000>
endbfchar
endcmap
CMapName currentdict /CMap defineresource pop
end
end
%%EndResource
%%EOF
\end{VerbatimOut}
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}
此过程适用于 pdfLaTeX 和 LuaTeX。
在第二种情况下(使用 LuaTeX 编译),当我使用操作系统上安装的某些字体时,不起作用。是不是因为我必须编写另一个 cmap 文件?如果是,我该如何编写?如果没有 LuaLaTeX 解决方案,有人可以告诉我是否有外部免费软件能够从 pdf 中删除可复制的文本吗?
答案1
当使用 LuaTeX 和系统 OpenType 字体时,CMAP 资源位于字体内部;因此,除非能够找到一种方法来覆盖字体(部分)嵌入时写入 PDF 文件中的资源,否则我认为没有办法实现您的计划。
实际上,如果我编译您的示例,使用 Skim(在 Mac OS X 上)打开 PDF,选择单词“sollicitudin”,从菜单中执行“复制”,然后执行“粘贴”到 Emacs 窗口中,我得到
^R^N^K^K^H^B^H^S^T^C^H
因此字母“solictu d”是可识别的(并且在整个文档中呈现相同)。其他字母产生不同的控制字符,并且当一个人拥有一半字母表时,其余字母很容易解码。
因此,您的方法实际上并不能防止文本被复制。此外,由于字符清晰度高,OCR 设备几乎可以立即正确地检索文本。人们可以通过播放和录制音乐来破解音乐上的 DRM;当然,质量会降低。文本可以快速重新输入而不会降低质量,并且校对良好。