吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3321|回复: 23
上一主题 下一主题
收起左侧

[讨论] PDF文件转曲

  [复制链接]
跳转到指定楼层
楼主
生有涯知无涯 发表于 2020-2-26 13:41 回帖奖励
本帖最后由 生有涯知无涯 于 2020-3-1 12:42 编辑

PDF转曲:把可复制文字PDF文件转为不可复制的图片PDF文件,多用于印刷、出版、设计等行业,目的有增加文件安全性(版权保护)、保持文件不变性(移动到其他电脑后视觉效果不变)等。
由于工作原因,本人经常需要把word文档转为PDF,但是用office自带的“另存为pdf文件”功能得到的pdf文件文字可以复制。百度一番后发现有挺多软件有PDF转曲功能(如adobe acrobat等),但是由于需要转换的文件较多,每次用软件转比较麻烦,并且网上没搜到一键转曲的脚本,所以查资料后写了个一键转曲的python脚本,希望能帮到有类似需求的坛友。注意事项:测试前建议备份一下pdf,此脚本运行后会覆盖源pdf文件!
转换的原理比较简单,即把PDF文件转为一张张图片,然后合并为PDF文件,代码里面注释的很清楚。
看一下效果:


这个脚本效率不高,有可以优化的地方,比如把PDF转为内存中的图片后再直接转回PDF,不用把图片写入本地,这样会快很多。之前尝试过,但没成功,如果哪位做到了麻烦发一下代码,谢谢!
代码如下(此为待优化版):
[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 -*-
#PDF转曲:把可复制文字PDF文件转为不可复制的图片PDF文件 by吾爱破解论坛 生有涯知无涯
import os
import fitz  # 需要pip install PyMuPDF
import shutil

def copiableTocrank(zoom_x = 2.5,zoom_y = 2.5):#zoom_x和zoom_y越大,程序运行时间越长,转换后的PDF文件越清晰
    full_path = os.path.join(base_path, filename)  # 拼接,得到完全限定文件名
    srcPDFfilelist = fitz.open(full_path)  # 打开一个PDF文件,srcPDFfilelist为Document类型,是一个包含每一页PDF文件的列表
    trans = fitz.Matrix(zoom_x, zoom_y)#zoom_x设置图片相对于PDF文件在X轴上的缩放比例,zoom_y设置图片相对于PDF文件在Y轴上的缩放比例
    destPDFfile = fitz.open()
    
    if not os.path.exists(temp_path):
        os.mkdir(temp_path)
    os.chdir(temp_path)

    for pg in range(srcPDFfilelist.pageCount):
        page = srcPDFfilelist[pg]  # 获得第pg页
        pm = page.getPixmap(matrix=trans, alpha=False)  # 将其转化为光栅文件
        new_name = filename[0:-4]  # 获取文件名(不包括.pdf后缀)
        pngfilename = new_name+str(pg)+".png"
        pm.writeImage(pngfilename)  # 把图片存入本地临时目录
        imgdoc = fitz.open(pngfilename)
        pdfbytes = imgdoc.convertToPDF()
        singlePDF = fitz.open("pdf", pdfbytes)
        destPDFfile.insertPDF(singlePDF)

    srcPDFfilelist.close()
    os.remove(full_path)  #删除原PDF文件  
    os.chdir(base_path)  #切换到其他目录,不占用待删除目录
    shutil.rmtree(temp_path)    #删除临时目录
    destPDFfile.save(full_path) #保存PDF文件到本地
    destPDFfile.close()
    os.system(full_path) #打开转换后的PDF文件

base_path = "C:\\Users\\office51\\Desktop\\"  # 输入要转换的PDF所在的文件夹  
temp_path = "E:\\temppng\\"#存放图片的临时目录
filename = "t.pdf" #待转换的PDF文件
copiableTocrank()

2020年3月1日更新=================================
今天上午研究了一下fitz的源码,实现图片不写入本地直接在内存中转换(PDF→Pixmap→barray→Document→PDF),使性能获得巨大提升,大家可以比较一下两个版本的代码。
代码如下(此为优化版):
[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 -*-
#PDF转曲:把可复制文字PDF文件转为不可复制的图片PDF文件 by吾爱破解论坛 生有涯知无涯
import os
import fitz  # 需要pip install PyMuPDF
import shutil
 
def copiableTocrank(zoom_x = 2.5,zoom_y = 2.5):#zoom_x和zoom_y越大,程序运行时间越长,转换后的PDF文件越清晰
    full_path = os.path.join(base_path, filename)  # 拼接,得到完全限定文件名
    srcPDFfilelist = fitz.open(full_path)  # 打开一个PDF文件,srcPDFfilelist为Document类型,是一个包含每一页PDF文件的列表
    trans = fitz.Matrix(zoom_x, zoom_y)#zoom_x设置图片相对于PDF文件在X轴上的缩放比例,zoom_y设置图片相对于PDF文件在Y轴上的缩放比例
    destPDFfile = fitz.open()
     
    # if not os.path.exists(temp_path):
        # os.mkdir(temp_path)
    # os.chdir(temp_path)
 
    for pg in range(srcPDFfilelist.pageCount):
        page = srcPDFfilelist[pg]  # 获得第pg页
        pm = page.getPixmap(matrix=trans, alpha=False)  # 将其转化为光栅文件
        # new_name = filename[0:-4]  # 获取文件名(不包括.pdf后缀)
        # pngfilename = new_name+str(pg)+".png"
        # pm.writeImage(pngfilename)  # 把图片存入本地临时目录
        # imgdoc = fitz.open(pngfilename)
        imgdoc = fitz.open('png',pm.getImageData())
        pdfbytes = imgdoc.convertToPDF()
        singlePDF = fitz.open("pdf", pdfbytes)
        destPDFfile.insertPDF(singlePDF)
 
    srcPDFfilelist.close()
    os.remove(full_path)  #删除原PDF文件  
    # os.chdir(base_path)  #切换到其他目录,不占用待删除目录
    # shutil.rmtree(temp_path)    #删除临时目录
    destPDFfile.save(full_path) #保存PDF文件到本地
    destPDFfile.close()
    os.system(full_path) #打开转换后的PDF文件
 
base_path = "C:\\Users\\office51\\Desktop\\"  # 输入要转换的PDF所在的文件夹  
#temp_path = "E:\\temppng\\"#存放图片的临时目录
filename = "t.pdf" #待转换的PDF文件
copiableTocrank()



免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
86494359 + 1 + 1 能转成exe吗,不会用啊,想试试看

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
gnning 发表于 2020-2-26 13:55
我是小白,这个怎么用的呀?
3#
2623666 发表于 2020-2-26 13:56
4#
jun57663796 发表于 2020-2-26 13:56
5#
superjason 发表于 2020-2-26 13:58
2623666 发表于 2020-2-26 13:56
转曲后无法选中中文  这是不让编辑了

为了加密
6#
superjason 发表于 2020-2-26 13:59
逃不过OCR软件的打击
7#
cherrypi 发表于 2020-2-26 13:59
谢谢楼主分享,厉害
8#
xxjj999 发表于 2020-2-26 13:59
谢谢楼主分享
9#
chishingchan 发表于 2020-2-26 14:00
这个实际上是将PDF转换为图片格式的PDF
10#
nibaaa 发表于 2020-2-26 14:10
现在qq都有功能可以截图识别文字了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表