一招搞定:pdf转word、pdf转图片、图片转pdf

公众号:爬虫与地理信息

在这里插入图片描述

一、PyMuPDF库介绍

PyMuPDF库官方文档点这里,主页如下图所示,里面详细介绍了怎么提取照片、文本、表格等主要功能。
在这里插入图片描述
在这里插入图片描述

二、核心代码
1.PDF逐页保存图片

将PDF依次按页保存为照片

def pdf2img(pdfPath, imgPath):
    pdfDoc = fitz.open(pdfPath)
    print("pdf文件共 {} 页".format(pdfDoc.pageCount))
    for i in range(pdfDoc.pageCount):
        page = pdfDoc[i]
        rotate = int(0)
        #应用每个维度2的缩放系数,这将为我们生成分辨率提高四倍的图像(尺寸也大约是尺寸的4倍):
        zoom_x = 2   # horizontal zoom
        zoom_y = 2   # vertical zoom
        mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
        pix = page.getPixmap(matrix = mat, alpha = False)
        if not os.path.exists(imgPath):
            os.makedirs(imgPath)
        pix.writePNG(imgPath + '/' + 'img_%s.png' % i)
        #pix.writeImage(imgPath + '/' + 'page-%i.png' % i)
2.照片转PDF

将许多张照片转换成一个PDF文件。

def img2pdf(imgdir, pdfname):
    doc = fitz.open()  # PDF with the pictures
    imglist = os.listdir(imgdir)  # list of them
    for i, f in enumerate(imglist):
        img = fitz.open(os.path.join(imgdir, f))  # open pic as document
        print(img)
        rect = img[0].rect  # pic dimension
        pdfbytes = img.convert_to_pdf()  # make a PDF stream
        img.close()  # no longer needed
        imgPDF = fitz.open("pdf", pdfbytes)  # open stream as PDF
        page = doc.new_page(width=rect.width,  # new page with ...
                            height=rect.height)  # pic dimension
        page.show_pdf_page(rect, imgPDF, 0)  # image fills the page
    doc.save(pdfname)
3.PDF转Txt与Word文件

将pdf文件中的汉字提取出来,并保存成txt文件或word文件。

def pdf2text(fname):
    #创建word文档对象
    worddoc = docx.Document()

    doc = fitz.open(fname)  # open document
    name = fname.split('.')[0]
    out = open(name + ".txt", "wb")  # open text output
    for page in doc:  # iterate the document pages
        text = page.get_text("text").encode("utf-8", errors='ignore')  # get plain text (is in UTF-8)
        out.write(text)  # write text of page
        out.write(bytes((12,)))  # write page delimiter (form feed 0x0C)
        #print(text)
        texts= text.decode('utf-8').split('\t\n')
        for line in texts:
            worddoc.add_paragraph(line.replace("\n", ""))
    #保存word文档对象
    fname = name + '.docx'
    worddoc.save(fname)
    out.close()
4.PDF提取图片
def getImginPDF(fname):
    doc = fitz.open(fname)  # open document
    for page in range(len(doc)):  # iterate the document pages
        #for image in doc.getPageImageList(page):
        for image in doc.get_page_images(page, full=True):
            #print(type(image)) #image为元组类型
            xref = image[0]
            pix = fitz.Pixmap(doc, xref)
            if pix.n < 5:  # this is GRAY or RGB
                pix.writePNG("page%s.png" % (page))
            else:  # CMYK: convert to RGB first
                pix1 = fitz.Pixmap(fitz.csRGB, pix)
                pix1.writePNG("page%s.png" % (page))
                pix1 = None
            pix = None
三、结果展示
1.原始pdf文件

在这里插入图片描述

2.pdf逐页生成图片

在这里插入图片描述

3.转换的txt文件

在这里插入图片描述

4.转换的word文件

在这里插入图片描述

5.图片转pdf

在这里插入图片描述

6.提取pdf中的照片

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

遥感与地理信息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值