您的位置:

将PDF转成图片的工具,简单易用的解决方案

PDF(Portable Document Format)文件格式的出现为人们的生活带来了极大的方便,其便携性、易保存也成为各行业普遍使用的标准文档格式。但是,对于某些需要对PDF进行编辑或处理的人士来说,将PDF转换为图片格式却成为了一件头疼的事情。因此,本文将详细介绍将PDF转成图片的工具及解决方案。

一、选用PDFTK工具进行PDF拆分

对于不使用PDFTK工具的开发者们来说,PDF内的信息无法单独提取出来,比如转化为图片等。因而,我们要使用PDFTK工具来解决这个问题,具体步骤如下:

第一步:安装PDFTK工具。

sudo apt-get install pdftk

第二步:将PDF文件拆分成单个的PDF文件。此处使用Shell脚本来实现拆分。

#!/bin/bash
filename=$1
pdftk $filename burst output ${filename%.*}_%d.pdf

第三步:编写将PDF文件转换成图片的Python脚本。具体实现如下:

# 引入Python Image Library模块
from PIL import Image
# 引入Python os模块
import os

# 指定PDF被转换后的图片格式
FORMAT = 'jpeg'

def pdf2img(f):
    fname = f.split('/')[-1]
    # 打开PDF
    with open(f, 'rb') as pdf_file:
        # 使用Python Image Library读取PDF文件
        im = Image.open(pdf_file)
        # 获取PDF的页码
        pages = im.n_frames
        # 输出PDF的页码数
        print(fname + ' has ' + str(pages) + ' page(s).')
        # 按照页码个数,将PDF文件拆分成一张张单独的图片
        for i in range(pages):
            im.seek(i)
            im.save(fname[:-4] + '_' + str(i) + '.' + FORMAT)

if __name__ == '__main__':
    # 获取当前工作目录
    path = os.getcwd()
    # 获取指定目录下所有的PDF文件
    files = os.listdir(path)
    pdfs = [f for f in files if f.endswith('.pdf')]
    # 遍历所有的PDF文件,将其拆分成单个的PDF文件,并调用pdf2img函数将其转换成图片
    for pdf in pdfs:
        print('Processing ' + pdf + '.')
        os.system('pdftk ' + pdf + ' burst')
        pages = [f for f in os.listdir(path) if f.endswith('.pdf')]
        for page in pages:
            pdf2img(page)
            os.remove(page)
    print('Job done.')

上述代码中的pdftk工具用来将PDF文件拆分成单个的PDF文件,并使用PIL模块将其转换成对应的图片格式(此处为jpeg)。

二、选用Ghostscript工具进行PDF转换

对于需要将PDF文件转换为特定格式图片的开发者们来说,Ghostscript工具是一个非常好的选择,因其可以灵活地将PDF文件转换成可供开发者们方便处理的图片格式。

第一步:安装Ghostscript工具。

sudo apt-get install ghostscript

第二步:编写Python脚本,调用Ghostscript工具将PDF文件转换成指定的图片格式。具体实现如下:

# 引入Python os模块
import os

# 指定需要被转换的PDF文件名和PDF文件所在的目录
filename = 'file.pdf'
path = '/home/user/pdf/'

# 指定生成图片的格式
FORMAT = 'jpeg'

# 调用Ghostscript工具将PDF文件转换为图片
os.system('gs -dNOPAUSE -dBATCH -sDEVICE=jpeg -r300 -dJPEGQ=100 -sOutputFile=' + path + '%d.' + FORMAT + ' ' + path + filename)

上述代码中的gs工具是Ghostscript的核心命令,其中的参数dDEVICE指定了输出格式,dJPEGQ指定了生成图片的质量,r300指定了生成图片的分辨率为300dpi。

三、选用PDFBox工具进行PDF转换

PDFBox是一个开源的Java工具库,可以用于创建和处理PDF文档。它提供了一系列的Java API来解析、文本提取以及PDF转图像等多种功能。

第一步:下载PDFBox工具并解压缩。

wget https://www-eu.apache.org/dist/pdfbox/2.0.22/pdfbox-app-2.0.22.jar -P /usr/local/bin/
cd /usr/local/bin/
mkdir pdfbox-app
unzip pdfbox-app-2.0.22.jar -d pdfbox-app

第二步:编写Java程序,调用PDFBox工具实现PDF转换为图片。具体实现如下:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class PDFToImage {

    public static void main(String[] args) {
        try {
            // 获取PDF文件路径
            String pdfFilePath = "pdf_file.pdf";
            // 获取PDF文件所在目录
            String pdfDirPath = "/path/to/pdf/dir/";
            File pdfFile = new File(pdfDirPath + pdfFilePath);
            PDDocument pdDocument = PDDocument.load(pdfFile);
            PDFRenderer pdfRenderer = new PDFRenderer(pdDocument);

            int pages = pdDocument.getNumberOfPages();
            System.out.println(pdfFilePath + " has " + pages + " page(s).");

            for (int i = 0; i < pages; i++) {
                BufferedImage image = pdfRenderer.renderImageWithDPI(i, 300);
                ImageIO.write(image, "jpg", new File(pdfDirPath + pdfFilePath.split("\\.")[0] + "_" + i + ".jpg"));
            }

            pdDocument.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述Java代码中的PDFRenderer类用来渲染PDF文件并生成对应格式的图片,PDDocument类则是PDFBox库中用来读取和处理PDF文档的基础类。

四、选用在线转换工具

对于非开发者或是对PDF转换成图片的内容不太在意的用户们来说,使用在线转换工具则更加的方便、快速。下面针对几个在线转换工具进行简单介绍。

1. Smallpdf:用户可以上传PDF文件,并选择转换成PNG、JPG、GIF、BMP等格式的图片。不过,该工具只允许每天转换两次,需要注册为开发商付费后才能使用全部功能。

2. Zamzar:支持多种文件格式转换,包括PDF转图片。该工具无需注册即可使用。

3. Online Convert:支持多种文件格式转换,包括PDF转图片。该工具也允许用户设置所需转换的图片相关信息,例如分辨率、颜色模式、压缩等。

总结

本文从多个方面详细介绍了将PDF转成图片的工具及解决方案,涵盖了开发环境、工具使用、代码实现等多个维度,对于需要将PDF转换成图片的开发者们和普通用户们来说都是非常实用的。