PDF复制乱码

最后修改时间:2026/4/9 16:17:12

在CTEX2.9.2中,中文编译后的pdf文件能够正常显示汉字,但是复制得到的是乱码。这个在新版本中作为BUG被修复了。但是这个功能一定程度上能够防止文档被复制。

可以通过下面的代码来实现类似效果。

import pikepdf
import sys

def main(filename):
    pdf = pikepdf.Pdf.open(filename)
    for page in pdf.pages:
        print(f'处理页面:{page.index+1}')
        if '/Resources' in page and '/Font' in page['/Resources']:
            fonts = page['/Resources']['/Font']
            for font_key in fonts:
                font = fonts[font_key]
                if '/ToUnicode' in font: del font['/ToUnicode']
                #if '/Encoding' in font: del font['/Encoding']
    pdf.save(filename.replace('.pdf', '_protected.pdf'))

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('请拖入 PDF 文件')
        input('按回车退出...')

    for input_pdf in sys.argv[1:]:
        print(f'处理文件:{input_pdf}')
        main(input_pdf)
        print(f'完成:{input_pdf}')
    input('全部任务完成,按回车退出...')


经过测试,大部分PDF都有效果,包括Word或者PPT转的PDF。少数XeLaTex编译的无效。当然ORC或者VL是防不了的。