PDF转为图片

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_pathdef 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.hqwc.cn/news/286281.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zero date value prohibited 异常处理

项目场景: 在项目中,我们会时常遇到数据查询,今天在对数据进行查询的时候,遇到一个之前闻所未闻的异常,所以记录下来,分享给大家。 问题描述 查询数据为datetime类型的数据时,发现该字段的值为…

Windows 安装RocketMQ

1.rocketmq下载 https://archive.apache.org/dist/rocketmq/5.1.4/ 2.环境准备 64位JDK 1.8; Maven 3.2.x; 64位操作系统系统,本文档在Windows上安装 3.解压到一个无中文无空格的目录下,解压后目录如下: 配置环境变量 4.更改配置 java的…

系列八、约束

一、约束 1.1、概述 约束是作用于表中字段上的规则,用于限制存储在表中的数据,通过这种规则,可以保证数据库中数据的正确性、有效性和完整性。 1.2、分类 1.3、注意事项 约束是作用于表中字段上的,可以在创建表/修改表的时候添加…

5. Prism系列之区域管理器

Prism系列之区域管理器 文章目录 Prism系列之区域管理器一、区域管理器二、区域创建与视图的注入1. ViewDiscovery2. ViewInjection 三、激活与失效视图1. Activate和Deactivate2. 监控视图激活状态3. Add和Remove 四、自定义区域适配器1. 创建自定义适配器2. 注册映射3. 创建区…

showdoc使用

使用 通过上篇文章安装得到的访问地址,可以登陆到h5页面中 点击客户端,进入到页面 下载完成之后,注册账号,选择自己的私域地址(http://服务器IP:4999)之后,就可以开始团队协作了

Android13音频录制适配

Android13音频录制适配 前言: 之前写过一篇音频录制的文章,当时是在Android10以下的手机可以成功录制和播放,但是Android10及以上手机提示创建文件失败,最近做过Android13的适配,索性一起把之前的录音也适配了&#…

【JetBrains】将Gateway中的GoLand回滚到无bug旧版本

问题背景 2023-12-15 我把 Gateway 中使用的 GoLand 从 2023.2.x 升级到了 2023.3 ,然后编辑文件过程中输入时时不时会显示错误信息,然后就会进入无法输入(键入也不会看到增加字符)但能粘贴的奇怪状态。 问题解决 升级到 2023.…

基于ssm楚师师生健康管理系统设计与实现论文

楚师师生健康管理系统设计实现 摘要 随着信息互联网购物的飞速发展,一般企业都去创建属于自己的管理系统。本文介绍了楚师师生健康管理系统的开发全过程。通过分析企业对于楚师师生健康管理系统的需求,创建了一个计算机管理楚师师生健康管理系统的方案…

playwright进阶问题,with sync_playwright() as p中的p是什么类型您知道吗?

playwritght中with as的用法 最近在看playwritght 的源码,大家都知道运行playwright的基础代码如下: with sync_playwright() as p:browser p.chromium.launch(channel"chrome", headlessFalse)page browser.new_page()page.goto("ht…

Zotero 7 安装并彻底解决“无法安装插件。它可能无法与该版本的 Zotero 兼容“。以及解决“此翻译引擎不可用,可能是密钥错误“的问题

Zotero 7 安装并彻底解决"无法安装插件。它可能无法与该版本的 Zotero 兼容"。以及解决"此翻译引擎不可用,可能是密钥错误"的问题 !!!不要直接在Zotero 6上安装翻译插件,将会版本不兼容&#xff0…

【01】GeoScene生产海图或者电子航道图

1.1 什么是电子海图制图模块 GeoScene海事模块是一个用于管理和制作符合国际水文组织(IHO)S-100系列标准和S-57标准的海事数据的系统。提供了S-100和S-57工具,用于加载基于S-100的要素目录、创建基于S-57传输结构的数据、输入数据、符号化数…

【数据结构和算法】 K 和数对的最大数目

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:双指针排序 三、代码 3.1 方法一:双指针排序 3.2 方法二&#xff1…