PDF转为图片

news2024/11/17 7:40:31

PDF转为图片

  • 背景
    • pdf展示
    • 目标效果
  • 发展过程
  • 最终解决方案:python PDF转图片
    • pdf2image
    • 注意:poppler 安装

背景

最近接了一项目,主要的需求就是本地的文联单位,需要做一个电子刊物阅览的网站,将民族的刊物发布到网站上供大众阅览。用户提供了pdf版本刊物。起初是用分布式文件系统,将pdf以流的形式直接传递给前端,前端使用canvas将dpf转为图片,再用jQuery、turn.js进行3D拟真翻书动画的阅览。前端在将pdf转为图片的过程太慢,严重影响了客户体验。想把pdf转图片的过程在后端进行处理。

pdf展示

在这里插入图片描述

目标效果

在这里插入图片描述

发展过程

开始参考了华为开发者联盟的一篇博客,尝试了上面所有方式。虽然不能达到效果,还是收藏一下。
java 实现pdf转换成图片

各种方式出现的问题基本都是:
在这里插入图片描述
下面就看一下,我保留下来的两个效果截图吧。

方式一:apache pdfbox
在这里插入图片描述
方式二:icepdf
在这里插入图片描述
最后后面我想了一下选择python试试,不行就再转js试试。
python也找了两个库,第一个尝试的是pymupdf,这个库需要安装Ghostscript ,代码我也照着cp了,依赖也安装了,中间调试也报了很多错,我没进行记录,最终的到了一个output.xps的文件,控制台也没有报错,也没有生成图片,以我对python的掌握是时候该换另一种方式了。又尝试了pdf2image库,依赖需要安装poppler,最终实现了目标。再冲java中调用python的批处理实现了java将pdf转为图片!!!
使用java调用python批处理将pdf转为图片

最终解决方案:python PDF转图片

pdf2image

版本:python3.8
使用Python的pdf2image库来将PDF文件转换为图片。首先,确保你已经安装了pdf2image库和相应的依赖库(比如poppler)。

你可以使用以下步骤在Python中进行PDF到图片的转换:

  1. 安装pdf2image库:

    pip install pdf2image
    
  2. 安装poppler,这是一个用于处理PDF的工具:

    • 在Linux上,你可以使用包管理器安装,例如:

      sudo apt-get install poppler-utils
      
    • 在Windows上,你可以从 poppler-utils 下载并安装。

  3. 编写Python脚本进行PDF到图片的转换:

from pdf2image import convert_from_path

def pdf_to_images(pdf_path, output_folder):
    images = convert_from_path(pdf_path, output_folder=output_folder+"\\temp", poppler_path=r'E:\poppler-23.11.0\Library\bin')  # 替换成你的Poppler路径
    
    for i, image in enumerate(images):
        image_path = f"{output_folder}\page_{i + 1}.png"
        image.save(image_path, 'PNG')
        print(f"Page {i + 1} saved as {image_path}")

# 调用函数并传入PDF文件路径和输出文件夹路径
pdf_path = r"D:\Users\********\勇罕 2022年 第 4 期\勇罕 2022年 第 4 期.pdf"
output_folder = r"D:\Users\*******\勇罕 2022年 第 4 期"
pdf_to_images(pdf_path, output_folder)

运行这个脚本后,PDF文件的每一页都会被转换为一张图片,并保存在指定的输出文件夹中。
在这里插入图片描述
生成的类似 21456f17-e88d-4382-ad48-70f3a1005c1d-081.ppm 的文件是由pdf2image库中的convert_from_path函数生成的临时文件。这些文件通常是以 .ppm 格式保存的,它是一种常见的图像文件格式,特别适用于存储以像素为基础的图像。

在使用convert_from_path函数时,库首先将PDF文件转换为一系列PPM格式的图像文件,然后再将它们转换为目标格式(例如PNG)。生成的PPM文件通常被存储在临时目录中,以便后续处理。在处理完成后,这些临时文件将被清理掉。

如果你想要控制生成的临时文件的位置,你可以在调用convert_from_path函数时指定output_folder参数,将其设置为你想要的目录。这样,生成的临时文件就会保存在指定的目录中。例如:

images = convert_from_path(pdf_path, output_folder="/path/to/your/temporary/folder")

请确保指定的目录存在,且有写入权限。如果你不想保留这些临时文件,可以在处理完成后手动删除它们,或者在使用convert_from_path函数时设置clean参数为True,以在处理完成后自动删除。例如:

images = convert_from_path(pdf_path, output_folder="/path/to/your/temporary/folder", clean=True)

这样,生成的临时文件将在处理完成后被自动删除。
在这里插入图片描述

注意:poppler 安装

如果你在Windows上无法安装poppler-utils,你可以尝试以下替代方法:

  1. 使用自包含的poppler工具:

    • 在 poppler-for-windows 下载最新的Windows版本的zip文件。

    • 解压缩zip文件,将其中的bin目录添加到系统的环境变量中。这可以通过编辑系统环境变量中的Path来完成。

  2. 使用Chocolatey进行安装(如果你已经安装了Chocolatey):

    choco install poppler
    

    这将自动安装poppler并将其添加到系统的环境变量中。

  3. 使用conda进行安装(如果你已经安装了conda):

    conda install -c conda-forge poppler
    

请注意,你只需选择其中一种方法。安装完poppler之后,你应该能够在命令行中运行pdftoppm(poppler的一部分)来验证安装是否成功。如果成功,你应该能够使用上面提供的Python脚本将PDF转换为图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1314295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频参数介绍

一、视频参数概念 单个视频帧:可以简单地理解成为一张图片 单个视频帧主要的参数概念: 分辨率: 分辨率是指图像或显示器上像素的数量,通常用横向像素数乘以纵向像素数表示。例如,1920x1080 表示宽度为1920像素&…

数据结构 | Log-Structured Merge Tree (LSM Tree)

今天介绍LSM Tree这个数据结构,严格意义上来说,他并不像他的名字一样是一棵树型的数据结构,而更多是一种设计思想。 LSM Tree最先在1996年被提出,后来被广泛运用于现代NoSQL(非关系型数据库)系统中&#xf…

【Spark精讲】Spark与MapReduce对比

目录 对比总结 MapReduce流程 ​编辑 MapTask流程 ReduceTask流程 MapReduce原理 阶段划分 Map shuffle Partition Collector Sort Spill Merge Reduce shuffle Copy Merge Sort 对比总结 Map端读取文件:都是需要通过split概念来进行逻辑切片&…

CSS新手入门笔记整理:CSS常用属性表

字体样式 属性 属性值 说明 font-family 微软雅黑/苹方 字体类型 font-size 数值 字体大小 font-weight 数值/关键字 字体粗细(字重) font-style normal(正常(默认值))italic(斜体)oblique&am…

湖南财信:灰盒测试筑牢安全防线,保障差异化金融服务体系建设

湖南财信是国有独资公司,湖南省唯一的省级地方金融控股公司、省属国有大型骨干企业。湖南财信坚持金融科技战略,以数字化建设为驱动,创新融资服务手段,逐步打造出差异化产品与数字化服务体系,全方位、多维度推动金融服…

大语言模型:开启自然语言处理新纪元

导言 大语言模型,如GPT-3(Generative Pre-trained Transformer 3),标志着自然语言处理领域取得的一项重大突破。本文将深入研究大语言模型的基本原理、应用领域以及对未来的影响。 1. 简介 大语言模型是基于深度学习和变压器&…

WPF 基于TableControl的页面切换

文章目录 前言其它项目的UserControl切换TableControl添加按钮,隐去TableItem的Header 结论 前言 我想用WPF简单实现一个按钮视图切换的效果,但是我发现别人的实现效果非常的麻烦。 其它项目的UserControl切换 我网上找了个开源的项目,他是…

网络协议 - HTTP 协议详解

网络协议 - HTTP 协议详解 一 、基础概念URL请求和响应报文1. 请求报文2. 响应报文 二、HTTP 方法GETHEADPOSTPUTPATCHDELETEOPTIONSCONNECTTRACE 三、HTTP 状态码1XX 信息2XX 成功3XX 重定向4XX 客户端错误5XX 服务器错误 四、HTTP 首部通用首部字段请求首部字段响应首部字段实…

如何提升数据结构方面的算法能力?

谈及为什么需要花时间学算法,我至少可以列举出三个很好的理由。 (1)性能:选择正确的算法可以显著提升应用程序的速度。仅就搜索来说,用二分查找替 换线性搜索就能为我们帶来巨大的收益。 (2)安全性:如果你选用了错误的算法&…

软件供应链投毒 — NPM 恶意组件分析

聚焦源代码安全,网罗国内外最新资讯! 专栏供应链安全 数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。 随…

最新Redis7主从复制(保姆级教程)

前提准备:三台云服务器(吐血消费,点赞回血)也可以使用虚拟机创建三台,但是我搞了一天也连接不上,要是又可以连接上的大家可以教我一下,也可以参考一下或者大家可以参考一下这个大佬的配置&#…

【产品经理】产品增效项目落地,项目反哺产品成长

产品和项目是相辅相成的关系,产品的规范、成熟,为项目的快速落地提供支撑,项目的落地反哺产品,促进产品的成长成熟。 软件工程的初期是,我们需要什么,就立项项目,通过项目实现需要。 随着项目的…

hive的分区表和分桶表详解

分区表 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。 静态分区表基本语法 创建分区表 create table dept_p…

k8s中pod监控数据在grafana中展示

实现目标:将kubesphere[K8S]中运行的pod监控数据在grafana平台进行展示。 前提说明:需要在k8s每个集群中内置的prometheus配置中将pod指标数据远程写入到victoriametrics持久化数据库中。 实现效果如下: CPU使用量: round(sum by (namespace, pod) (irate(container_cpu…

ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models TL; DR:ControlNet 使得我们能通过输入额外的条件图(如 Canny 边缘、人体姿态、深度图等),对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分…

网络协议 - UDP 协议详解

网络协议 - UDP 协议详解 UDP概述UDP特点UDP的首部格式UDP校验 參考文章 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。 UDP概述 UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种…

在前端开发中,什么是前端数据缓存(caching)?它有哪些应用场景?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

C# WPF上位机开发(属性页面的设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在软件开发中,属性或者参数设置是很重要的一个部分。这个时候如果不想通过动态添加控件的方法来处理的话,那么可以通过tab控…

解决Chrome同一账号在不同设备无法自动同步书签的问题

文章目录 一、问题与原因?2. 解决办法 一、问题与原因? 1.问题 使用谷歌Chrome浏览器比较头疼的问题就是:使用同一个Google账号,办公电脑与家用电脑的数据无法同步。比如:办公电脑中的书签、浏览记录等数据&#xff0…

Renyi散度:Renyi divergence

有关Renyi散度的基本介绍挺多博客已经写了。本文章主要介绍最基础的概念,以及近些年论文中为啥老喜欢引用这个概念。 一.基础概念 Renyi散度主要是描述两个分布之间的关系。对一个离散的概率分布X,其定义域记作,其实就是概率不为零的点的集…