[{"data":1,"prerenderedAt":58},["ShallowReactive",2],{"article-105":3},{"code":4,"msg":5,"data":6,"count":14},200,"查询成功",{"id":7,"title":8,"keywords":9,"description":10,"category_id":11,"content":12,"body_html":13,"thumb_up":14,"clicks":15,"sort":14,"remark":13,"status":16,"is_open":16,"is_deleted":14,"is_top":16,"is_recommend":16,"create_time":17,"update_time":18,"image_id":19,"url":13,"member_id":14,"cate_name":20,"prev":21,"next":24,"tags":27,"words":30,"read_time":11,"comments":14,"cover":31,"relevant":32},105,"php项目中调用python脚本使用pdf和image之间相互转换","python,image,转换","今天分享两个小案例，用Python将一堆图片转成Pdf文档，以及将Pdf文档转成一堆图片",5,"今天分享两个小案例，用Python将一堆图片转成Pdf文档，以及将Pdf文档转成一堆图片\n\n##### 1、安装相关库\n```python\npip install PyMuPDF\n```\n##### 2、pdf文档转图片\n目前Python将PDF文档转图片有三个常见模块：pdf2image、wind、PyMuPDF。不过pdf2image需要安装Poppler软件（Windows），wand还需要安装imagemagick和ghostscript软件，相对比较麻烦，所以现在只剩下最后一个PyMuPDF模块可以用了\n```python\n# -*- coding:utf-8 -*-\n\n# 所有的图片与PDF转换的操作都在这里进行定义\n \nfrom multiprocessing import Pool\n# 安装fitz需要安装PyMuPDF才能使用\nimport fitz\nimport os\nimport argparse\n\ndef pdf_to_jpg(dir, filename):\n    #拼接pdf的文件路径\n    pwd_name = os.path.join(dir, filename)\n    print(pwd_name)\n    doc = fitz.open(pwd_name)\n    # 将文件名同我们的保存路径拼接起来（保存图片的文件夹）\n    dir_name = os.path.splitext(filename)[0]\n    pdf_name = os.path.join(dir,  dir_name)\n    print(pdf_name)\n    temp = 0\n    #（保存图片的文件夹）不存咋则生成\n    # exsitsdir.judge(pdf_name)\n    print(doc.page_count)\n    os.makedirs(pdf_name,exist_ok=True)\n    for pg in range(doc.page_count):\n        page = doc[pg]\n        temp += 1\n        rotate = int(0)\n        # 每个尺寸的缩放系数为2，这将为我们生成分辨率提高四倍的图像。\n        zoom_x = 2.0\n        zoom_y = 2.0\n        trans = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)\n        pm = page.get_pixmap(matrix=trans, alpha=False)\n        pic_name = '{}.jpg'.format(temp)\n        #拼接生成pdf的文件路径\n        pic_pwd = os.path.join(pdf_name, pic_name)\n        print(pic_pwd)\n        pm.save(pic_pwd)\n\n\nparser = argparse.ArgumentParser(description='manual to this script')\nparser.add_argument('--d', type=str, default=None) #文件夹路径\nparser.add_argument('--f', type=str, default=None) #文件名\nargs = parser.parse_args()\n\nif __name__ == '__main__':\n\n    pdf_to_jpg(\n        dir = args.d,\n        filename = args.f\n    )       #需要pdf切图就开启\n```\n在php中调用如下\n```php\n$command = 'python pdftoimg.py --d \"d:\u002F1\" --f \"d:\u002F1.pdf\"';\nexec( $command, $output, $return);\n```\n##### 3、一推图片转成pdf文档\n如何将图片转PDF文档？换言之也就是将图片插入到PDF文档中。Python操作PDF的库有很多，比如PyPDF2、pdfplumber、PyMuPDF等等。\n我们可以继续沿用上次使用过的PyMuPDF模块\n```python\n#coding=utf-8\n\nimport glob\nimport fitz\nimport os\nimport argparse\nimport shutil\n\ndef pic2pdf(img_dir, pdf_path):\n    doc = fitz.open()\n    for img in sorted(glob.glob(\"{}\u002F*\".format(img_dir))): # 读取图片，确保按文件名排序\n        print(img)\n        imgdoc = fitz.open(img)         # 打开图片\n        pdfbytes = imgdoc.convert_to_pdf()    # 使用图片创建单页的 PDF\n        imgpdf = fitz.open(\"pdf\", pdfbytes)\n        doc.insert_pdf(imgpdf)          # 将当前页插入文档\n        imgdoc.close()\n        \n    if os.path.exists(pdf_path):\n        os.remove(pdf_path)\n    doc.save(pdf_path)          # 保存pdf文件\n    doc.close()\n\n    remove_dir(img_dir)\n\ndef remove_dir(dir):\n    shutil.rmtree(dir)\n\ndef singlePic2pdf(img_path, pdf_path):\n    doc = fitz.open()\n    imgdoc = fitz.open(img_path)         # 打开图片\n    pdfbytes = imgdoc.convert_to_pdf()    # 使用图片创建单页的 PDF\n    imgpdf = fitz.open(\"pdf\", pdfbytes)\n    doc.insert_pdf(imgpdf)          # 将当前页插入文档\n\n    if os.path.exists(pdf_path):\n        os.remove(pdf_path)\n    doc.save(pdf_path)          # 保存pdf文件\n    doc.close()\n    imgdoc.close()\n\nparser = argparse.ArgumentParser(description='manual to this script')\nparser.add_argument('--d', type=str, default=None) #图片文件夹路径\nparser.add_argument('--p', type=str, default=None) #pdf文件路径\nparser.add_argument('--t', type=int, default=0) #执行类型 0文件夹图片合并成pdf 1单张图片合成pdf\nargs = parser.parse_args()\nif __name__ == '__main__':\n    \n    if args.t == 0:\n        pic2pdf(\n            img_dir = args.d, \n            pdf_path = args.p, \n        )\n    elif args.t == 1:\n        singlePic2pdf(\n            img_path = args.d, \n            pdf_path = args.p, \n        )\n```\n在php中调用如下\n```php\n$command = 'python imgtopdf.py --d \"d:\u002F1\" --p \"d:\u002F1.pdf\" --t 0';\nexec( $command, $output, $return);\n```\n\n##### 4、小结\n\n实际上，很多我们操作Python操作PDF的场景，都可以用一些在线网站实现。那这种情况的话，没必要非要使用Python（学习为目的除外）。不过要批量操作大量的PDF文档，这时候Python代码的优越性就会体现出来了，写几行代码后面for循环慢慢执行就好了。\n人生苦短，快学Python",null,0,511,1,"2023-06-07 14:30:54","2023-06-08 00:09:26",65,"Python",{"id":22,"title":23},104,"利用Python将PDF转html并提取文字和图片",{"id":25,"title":26},106,"阿里开源数据同步组件Canal",[28],{"id":29,"name":20},27,2375,"https:\u002F\u002Ftp.myong.top\u002Fstorage\u002Farticle\u002F20230407\u002Fda5dcd2a5c3f5ab09b50c7626eddd200.jpeg",[33,38,43,48,53],{"id":34,"title":35,"create_time":36,"description":37},95,"Django启用memcache缓存","2020-10-23 11:17:27","在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面.当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力.",{"id":39,"title":40,"create_time":41,"description":42},91,"用Python实现编程语言 20 年的动态排行榜","2020-06-24 16:06:54","爬取一下，自2001年5月至今，TIOBE 编程语言排行榜上编程语言的变化情况，看一下在接近20年的时间里，编程语言的热度是如何变化的。\r\n",{"id":44,"title":45,"create_time":46,"description":47},100,"re正则表达式","2021-07-10 18:09:52","正则表达式是一个特殊的字符序列，它能帮助你方便的检查一个字符串是否与某种模式匹配，本文罗列re正则表达式中，常用的匹配符号。",{"id":49,"title":50,"create_time":51,"description":52},34,"Python基础整理之列表常见操作","2019-02-10 16:53:55","列表是最常用的Python数据类型，它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型",{"id":54,"title":55,"create_time":56,"description":57},63,"Python与mysqldump的数据库备份","2019-10-14 15:35:33","mysqldump是备份MySQL数据库的一种好工具。它相对于用phpmyadmin等备份工具更加快速，又避免受php.ini等的限制，在windows系统下还可以结合计划任务实现定时远程备份数据库",1783431655020]