精华内容
下载资源
问答
  • Python实现PDF文件压缩

    2021-06-10 10:21:26
    PDF文件压缩非常常用,python的PyMuPDF包可以对PDF文件进行灵活的自定义压缩。 1. 原理 PDF切分为图片,根据压缩率zoom压缩图片后保存本地;图片合成PDF 2. 依赖 PyMuPDF包 pip install PyMuPDF 3. 代码 import ...

    PDF文件的压缩非常常用,python的PyMuPDF包可以对PDF文件进行灵活的自定义压缩。

    1. 原理
    PDF切分为图片,根据压缩率zoom压缩图片后保存本地;图片合成PDF
    2. 依赖
    PyMuPDF包

    pip install PyMuPDF
    

    3. 代码

    import fitz
    import os
    
    
    def covert2pic(zoom):
        if os.path.exists('.pdf'):       # 临时文件,需为空
             os.removedirs('.pdf')
        os.mkdir('.pdf')
        for pg in range(totaling):
            page = doc[pg]
            zoom = int(zoom)            #值越大,分辨率越高,文件越清晰
            rotate = int(0)
            print(page)
            trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).preRotate(rotate)
            pm = page.getPixmap(matrix=trans, alpha=False)
          
            lurl='.pdf/%s.jpg' % str(pg+1)
            pm.writePNG(lurl)
        doc.close()
    
    def pic2pdf(obj):
        doc = fitz.open()
        for pg in range(totaling):
            img = '.pdf/%s.jpg' % str(pg+1)
            imgdoc = fitz.open(img)                 # 打开图片
            pdfbytes = imgdoc.convertToPDF()        # 使用图片创建单页的 PDF
            os.remove(img)  
            imgpdf = fitz.open("pdf", pdfbytes)
            doc.insertPDF(imgpdf)                   # 将当前页插入文档
        if os.path.exists(obj):         # 若文件存在先删除
            os.remove(obj)
        doc.save(obj)                   # 保存pdf文件
        doc.close()
    
    
    def pdfz(sor, obj, zoom):    
        covert2pic(zoom)
        pic2pdf(obj)
        
    if __name__  == "__main__":
    
        sor = "source.pdf"              # 需要压缩的PDF文件
        obj = "new" + sor
        doc = fitz.open(sor) 
        totaling = doc.pageCount
        
        zoom = 200                     # 清晰度调节,缩放比率
        pdfz(sor, obj, zoom)
        os.removedirs('.pdf')
    

    4. 使用

    • 脚本和要压缩的PDF需在同一路径下
    • sor变量为需要压缩的文件
    • zoom用于调整压缩率
    • 压缩后使用PDF打印功能导出能够进一步压缩
    展开全文
  • PDF压缩工具,目前只针对纯PDF图片文件,可批量压缩文件压缩后的文件默认生成在D:/smallPDF
  • 功能需求: 将PDF文件压缩成ZIP文件/流下载。 1.Python python工具包 zipfile 官方文档:https://docs.python.org/zh-cn/3/library/zipfile.html 代码 import os import zipfile import io # 获取运行路径 ...

    Python & Java 将 PDF 文件压缩 ZIP 包

    功能需求: 将PDF文件压缩成ZIP文件/流下载。

    1.Python

    • python工具包 zipfile

    官方文档:https://docs.python.org/zh-cn/3/library/zipfile.html

    • 代码
    import os
    import zipfile
    import io
    
    # 获取运行路径
    BASE_PATH = os.path.dirname(__file__) 
    
    class zipFileHelper:
        '''
        @ 学习用的代码
        '''
        def addFileToZip(self):
            '''
            @ 学习用的方法
            '''
            zipBytes = io.BytesIO() # 文件流对象bytes 网页下载不生成文件
            t_path = BASE_PATH + '/4.zip' # 生成文件,定义文件路径
    
            with zipfile.ZipFile(t_path,'w') as f:
                for s_file in os.listdir(BASE_PATH):
                    if s_file.endswith('pdf'):
                        realpath = BASE_PATH + '/' + s_file
                        f.write(realpath,s_file,zipfile.ZIP_DEFLATED)
               
            # 文件流 写 文件
            # t_path = BASE_PATH + '/4.zip' 
            # with open(t_path,'wb') as fp:
            #     fp.write(zipBytes.getvalue())
            # zipBytes.close()
    
    if __name__ == '__main__':
        a = zipFileHelper()
        a.addFileToZip()
    

    2.Java

    • 工具类

    import java.io.* ;
    import java.util.zip.*;

    • 代码
    import java.io.*;
    import java.util.zip.*;
    
    public class Test{
    
        public static void main(String[] args) throws IOException {
    
            // 需要打包的文件
            File fileI = new File("F:\\学习\\java\\1.pdf");
            File fileII = new File("F:\\学习\\java\\2.pdf");
            // zip的生成地址
            File fileIII = new File("F:\\学习\\java\\3.zip");
            File[] filePackage = {fileI,fileII};
            
            try (ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(fileIII))) {
                for (File file : filePackage) {
                    DataOutputStream os = null;
                    zip.putNextEntry(new ZipEntry(file.getName()));
                    setFileInZip(zip,file, os);
                    zip.closeEntry();
                }      
            }
        }
        public static void setFileInZip (ZipOutputStream zip,File fName,DataOutputStream os) throws IOException{
            os = new DataOutputStream(zip);
            FileInputStream fis = new FileInputStream(fName);
            byte[] bt = new byte[1024];
            int n;
            while((n = fis.read(bt)) != -1){
                os.write(bt,0,n);
            }
            fis.close();
        }
    }
    
    展开全文
  • 如题,通过代码可以将现有的PDF,比如100m大小的文件缩小到80m,不是压缩成zip或者rar. 求大神指点
  • 基基于于Pyinstaller打打包包Python程程序序并并压压缩缩文文件件大大小小 这篇文章主要介绍了基于Pyinstaller打包Python程序并压缩文件大小,文中通过示例代码介绍的非常详细对大家 的学习或者工 具有一定的参考学习...
  • 2017/3/12 13.1 zlib 压缩兼容gzip Python 3.6.1rc1文档 13.1zlib压缩兼容的gzip 对于需要数据压缩的应用程序 此模块中的函数允许使用zlib库进行压缩和解压缩zlib库 在有自己的主页Python模块和早于1.1.3版本的zlib...
  • 老大最近一直需要将一个好几兆的pdf文件压缩到2mb甚至1mb以内。通常的做法可能会是打印pdf文件,然后用打印机设置生产很小的pdf文件,或者就是截图保存等等。但都有点太傻瓜了,这时候还是python大法好,网上摘取了...

    功能描述

    老大最近一直需要将一个好几兆的pdf文件压缩到2mb甚至1mb以内。通常的做法可能会是打印pdf文件,然后用打印机设置生产很小的pdf文件,或者就是截图保存等等。但都有点太傻瓜了,这时候还是python大法好,网上摘取了一部分别人的代码,稍作修改,就变成了一个能用的小工具。在此感谢各位大佬的资源。目前差不多能用,功能如下:

    1. 从PDF中提取图片
    2. 将图片进行质量和尺寸大小的压缩
    3. 生成新的PDF文件

    源代码

    1.1 安装必要的库

    先安装库 fitz,再安装库pymupdf,地址:https://github.com/pymupdf/PyMuPDF/

    pip install fitz
    
    pip install pymupdf
    

    1.2 源代码

    第一个pdf2pic从pdf中提取jpg文件的部分引用了别人的代码
    以下两行doc.引用的注意了,不然会报错

    lenXREF = doc.xref_length()
    text = doc.xref_object(i)  # 定义对象字符串
    

    另外加入了重新调整过大的照片尺寸,和保存照片的质量,这里有个变量comp_ratio

    im = im.resize((1376, y_s), Image.ANTIALIAS)
    im.save(pic_path_d, quality=comp_ratio)
    
    import fitz
    import re
    import os
    from PIL import Image
    from tkinter import filedialog
    
    
    def pdf2pic(path, pic_path, comp_ratio):
        checkXO = r"/Type(?= */XObject)"  # 使用正则表达式来查找图片
        checkIM = r"/Subtype(?= */Image)"
        doc = fitz.open(path)  # 打开pdf文件
        imgcount = 0  # 图片计数
        lenXREF = doc.xref_length()    # 获取对象数量长度
    
        # 打印PDF的信息
        print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))
    
        # 遍历每一个对象
        for i in range(1, lenXREF):
            text = doc.xref_object(i)  # 定义对象字符串
            isXObject = re.search(checkXO, text)  # 使用正则表达式查看是否是对象
            isImage = re.search(checkIM, text)  # 使用正则表达式查看是否是图片
            if not isXObject or not isImage:  # 如果不是对象也不是图片,则continue
                continue
            imgcount += 1
            pix = fitz.Pixmap(doc, i)  # 生成图像对象
            new_name = "pic{}.jpg".format(imgcount)  # 生成图片的名称
            print(new_name)
            if pix.n < 5:  # 如果pix.n<5,可以直接存为PNG
                pic_path_d = os.path.join(pic_path, new_name)
                pix.writeImage(os.path.join(pic_path, new_name))
                im = Image.open(pic_path_d)
                x, y = im.size
                if x > 1376:
                    y_s = int(y * 1376 / x)
                    im = im.resize((1376, y_s), Image.ANTIALIAS)
    
                im.save(pic_path_d, quality=comp_ratio)
            else:  # 否则先转换CMYK
                pix0 = fitz.Pixmap(fitz.csRGB, pix)
                pix0.writeImage(os.path.join(pic_path, new_name))
                pix0 = None
    
            pix = None  # 释放资源
            print("提取了{}张图片".format(imgcount))
    
        os.startfile(pic_path)
    

    下面这个rea是用来将文件夹内的照片重新组合为pdf文件

    def rea(path, pdf_name):
        file_list = os.listdir(path)
        pic_name = []
        im_list = []
        for x in file_list:
            if "jpg" in x or 'png' in x or 'jpeg' in x:
                pic_name.append(x)
    
        pic_name.sort()
        new_pic = []
    
        for x in pic_name:
            if "jpg" in x:
                new_pic.append(x)
    
        for x in pic_name:
            if "png" in x:
                new_pic.append(x)
    
        print("hec", new_pic)
    
        im1 = Image.open(os.path.join(path, new_pic[0]))
        new_pic.pop(0)
        for i in new_pic:
            img = Image.open(os.path.join(path, i))
            # im_list.append(Image.open(i))
            if img.mode == "RGBA":
                img = img.convert('RGB')
                im_list.append(img)
            else:
                im_list.append(img)
        im1.save(pdf_name, "PDF", resolution=100.0, save_all=True, append_images=im_list)
        print("输出文件名称:", pdf_name)
    
    
    def pdf_out():
        print('功能完善中')
    

    主程序中随意加了一些判断,如压缩等级1、2、3等。

    if __name__ == '__main__':
        print("Hello world!请先输入压缩等级1~3,然后在弹出的对话框中选择需要压缩的文件")
        comp_level = input("压缩等级(1=高画质,2=中画质,3=低画质):(输入数字并按回车键)")
        ratio = 10
        if comp_level == "1":
            ratio = 20
        elif comp_level == "2":
            ratio = 10
        elif comp_level == "3":
            ratio = 5
        '''打开选择文件夹对话框'''
        filepath = filedialog.askopenfilename()  # 获得选择好的文件
        print('选择的PDF地址:', filepath)
        if os.path.exists("./pdf_output"):
            pass
        else:
            os.mkdir("./pdf_output")
        pic_path = str(os.getcwd()) + "\pdf_output"
        print('提取图片的输出地址:', pic_path )
        pdf2pic(filepath, pic_path, comp_ratio=ratio)
    
        pdf_name = 'Compressed.pdf'
        if ".pdf" in pdf_name:
            rea(pic_path, pdf_name=pdf_name)
        else:
            rea(pic_path, pdf_name="{}.pdf".format(pdf_name))
    
        print("压缩完成,请关闭窗口。若压缩等级不合适,请先删除图片和文件并重新打开程序。")
    
    
    展开全文
  • Python编写的GTK + GUI应用程序,使用为OS X编写的Ghostscript简化了PDF文件压缩 基于 变更记录 2018年5月25日-v0.1.0发布 iDensify的诞生 屏幕截图 引擎盖下 从本质上讲,它需要您的GUI输入并将其转换为以下...
  • 简化了gs压缩pdf文件Python脚本。 变更记录 2020年5月10日-v1.2发布-蜻蜓 增强功能: 改用Python3 进度条: ./cpdf ebook ~/Test/AppUserFlow_20180315.pdf ~/Test/compressed.pdf WARNING: "/home/hkdb/Test/...
  • 简单的python脚本来压缩PDF。 安装 安装依赖项Ghostscript。 在MacOSX上: brew install ghostscript在Windows上:通过[官方网站]安装二进制文件( ) 如果要在bash ln -s pdf_creator.py pdfc任何地方运行它,请...
  • 同时,也会介绍特殊文件:音频、压缩PDF 、Excel 、图片、plist 等对应的模块。 基本用法 文件 是用于存储数据的连续字节集,这些数据会以特定格式组织,最后这些字节文件被翻译成二进制文件,以 1 和 0 的方式被...

    Python 开发程序中,读写文件是最常见的功能,基本的调用方法也很简单,但细节方面却不见得大家都能了解。所以,本文除了介绍基本用法外,还会介绍那些大家容易忽视的细节。同时,也会介绍特殊文件:音频压缩PDFExcel图片plist 等对应的模块。

    基本用法

    文件 是用于存储数据的连续字节集,这些数据会以特定格式组织,最后这些字节文件被翻译成二进制文件,以 10 的方式被计算机处理。

    Python 对普通的文件的处理,已经内置到内部模块里了,所以,可以直接使用,这也说明了对文件读写是多么基础的功能了。

    代码示例:

    # 打开文件的读描述符
    file = open('./test.txt', 'r') 
    
    pass
    
    # 关闭打开的文件
    file.close()
    

    但需要特别注意的是,文件在使用完成后一定要关闭,避免导致各种权限异常错误,即使是在过程中出现异常导致程序崩溃。

    常见的处理方式是使用 with ,会在完成后自动关闭文件。

    代码示例:

    with open('./test.txt', 'r') as file:
    	pass
    

    其效果就如同下面的代码示例:

    file = open('./test.txt', 'r')
    try:
    	pass
    finally:
    	file.close()
    

    代码示例:

    with open('./test.txt', 'r') as f:
        # 一次性全部读出来,在读取文章类文件时,比较方便
        # 如果文件过大时,可以使用 read(size),由 size 控制读取的大小,再迭代读取全部内容
    	print(f.read()) 
    		
    	# 一次读取所有内容并按行返回 list ,在读取配置文件、日志时,比较方便
    	for line in f.readlines():
    		print(line)
    
    	# 每次读取一行内容,在文件很大时,可以有效节省内存占用
    	for line in f.readline():
    		print(line)
    

    注意阅读代码里的注释,说明了使用的方式。

    代码示例:

    with open('./test.txt', 'w') as f:
    	f.write('Hello World!')
    	f.write('\n')
    

    相比读,写的使用方式就很简单了,就是 write 函数。

    文件打开方式

    Python 的文件读取默认都是 ASCII 编码的文本文件,但并不是所有的文件的都是 ASCII 编码的(比如:图片、视频等),所以我们需要能够二进制文件的功能。

    所以,这里整理了一份文件打开方式的说明表格:

    模式符号 打开方式 起始位置
    r 只读(默认模式) 在文件开头,文件不存在则报错
    rb 二进制格式只读) 在文件开头,文件不存在则报错
    r+ 可读可写 在文件开头,文件不存在则报错
    rb+ 二进制格式可读可写 在文件开头,文件不存在则报错
    w 只写 文件存在,则覆盖;不存在,则创建
    wb 二进制格式只写 文件存在,则覆盖;不存在,则创建
    w+ 可读可写 文件存在,则覆盖;不存在,则创建
    wb+ 二进制格式可读可写 文件存在,则覆盖;不存在,则创建
    a 追加 文件存在,在文件尾追加;不存在,则创建
    ab 二进制格式追加 文件存在,在文件尾追加;不存在,则创建
    a+ 可读可写 文件存在,在文件尾追加;不存在,则创建
    ab+ 二进制格式可读可写 文件存在,在文件尾追加;不存在,则创建

    如果读取的是非 ASCII 编码的文本文件,就必须使用二进制方式打开,再进行解码。

    代码示例:

    with open('./test.txt', 'rb') as f
    	print(f.read().decode('gbk')
    

    特殊文件

    在日常处理中会遇到各种特殊的文件,其实就是不同的编码格式,我们没有必要重新发明轮子,使用对应的库,就可以正常处理这类文件。

    我在这里整理了一份特殊文件对应的库:

    • csv:读写CSV文件
    • wave:读写WAV文件(音频)
    • aifc:读写AIFF和AIFC文件(音频)
    • sunau:读取和写入Sun AU文件
    • tarfile:读取和写入tar归档文件
    • zipfile:使用ZIP存档
    • configparser:轻松创建和解析配置文件
    • xml.etree.ElementTree:创建或读取基于XML的文件
    • msilib:读取和写入Microsoft Installer文件
    • plistlib:生成并解析Mac OS X .plist文件
    • PyPDF2:PDF工具包
    • xlwings:读取和写入Excel文件
    • Pillow:图像阅读和操作

    最后,安利大家一本我写的掘金小册《深入理解NLP的中文分词:从原理到实践》,让你从零开始掌握中文分词技术,踏入NLP的大门。

    如果因为以上内容对你有所帮助,希望你能够点赞、转发、评论,多谢多谢!

    此公众号每周分享一篇干货文章,实实在在把一个课题说明白,讲清楚,望关注!
    惠惠周刊

    展开全文
  • 2017/3/12 28.4 zipapp 管理可执行文件python zip档案 Python 3.6.1rc1文档 28.4zipapp管理Python可执行ZIP压缩文件 新版本3.5 源代码 Lib / zipapp.py 此模块提供了管理包含Python代码的zip文件的创建工具 可以 由...
  • 2017/3/12 13.5 zip文件 使用ZIP存档 Python 3.6.1rc1文档 13.5zipfile 使用ZIP档案 源代码 Lib / zipfile.py ZIP文件格式是常见的归档和压缩标准此模块提供了创建 读取 写入 附加和列出ZIP文件 的工具此模块的任何...
  • PDF隐藏 这是Python中的隐写工具,用于隐藏文件中的数据 该工具是一项持续不断的工作,旨在将一种新颖的隐写术开源方法带给公众。 它能够以隐蔽的方式在包含足够... 它需要QPDF才能修改压缩PDF文件。 此外,它需要
  • python实现pdf转word、txt

    千次阅读 2020-02-28 10:54:13
    对如下两个文件进行解压,当前我解压的路径设置在D:\python_app\下 3、安装对应模块 ctrl+r 输入cmd,进入命令行,然后进入本地虚拟环境,详情可参考建立并使用本地虚拟环境 使用命令行pip install -r D:\python_...
  • 了解如何读/写、记录、清洁、加密、回放、转码、转录、压缩、发布、饱和化、建模和可视化语音文件 2.从零开始创建自己的语音计算机和语音助手 3.在Docker和Kubernetes上设计前沿的微服务服务器架构
  • 2017/3/12 13.3 bz2 支持bzip2压缩 Python 3.6.1rc1文档 13.3bz2支持的bzip2压缩 源代码 Lib / bz2.py 此模块提供了一个全面的接口 用于使用bzip2压缩算法压缩和解压缩数据 该bz2模块包含 读取和写入压缩文件的open ...
  • 数据文件处理 起源,需求是发明之母,数据处理的出现就是遵循这个原则的一个好例子 ....pdf Adobe便携式文档文件 .py python源代码文件 .txt 文本文件 .xls 微软电子表格文件 .zip zip压缩文件 .tar
  • 2017/3/12 13.2 gzip 支持gzip文件 Python 3.6.1rc1文档 13.2gzip支持gzip的文件 源代码 Lib / gzip.py 这个模块提供了一个简单的接口来压缩和解压缩文件 就像GNU程序gzip和gunzip一样 数据压缩由zlib模块提供 该...
  • 这又是一篇用Python写小软件系列,最近有点写上瘾了,文件压缩和解压我们在日常工作学习中会经常用到,比如winrar、快压、好压等压缩软件,猿人学用Python做个简易图形界面的压缩软件。打开之后的界面长这个样子:...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

python压缩pdf文件

python 订阅