欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中圖片轉(zhuǎn)換為pdf實(shí)現(xiàn)方法

 更新時(shí)間:2025年03月20日 10:41:22   作者:一位代碼  
本文主要介紹了使用Python的Pillow分支和reportlab庫將圖片轉(zhuǎn)換為PDF文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、PIL 庫簡介及安裝使用方法

本文將圖片轉(zhuǎn)換為 pdf 的實(shí)現(xiàn)方法,主要是基于 python 的第三方圖像處理庫 PIL。

PIL(Python Imaging Library),免費(fèi)開源,提供了非常強(qiáng)大的圖像處理功能。

PIL,只支持 python 2.x 版本;隨著發(fā)展, Python 社區(qū)開發(fā)了一個(gè)名為 Pillow 的分支,一個(gè)兼容 PIL 的圖像處理庫,用以支持 python 3.x 版本。

Pillow,不僅繼承了 PIL 的功能,還在其基礎(chǔ)上增加了許多新的特性,使其成為比原始 PIL 更加活躍的圖像處理庫。

(一)python 不同版本下 PIL 的使用方法

(1)python 2.x:通常不需要單獨(dú)安裝,PIL 已包含在標(biāo)準(zhǔn)庫中,可直接使用。

(2)python 3.x:需要單獨(dú)安裝 Pillow 庫來代替 PIL。

作者使用的是 python 3.x,并直接通過 pip 安裝了 Pillow 庫。

安裝命令如下:

pip install Pillow

查看是否安裝成功及當(dāng)前版本:

pip show pillow

圖片

二、圖片轉(zhuǎn)換為 pdf 的兩種實(shí)現(xiàn)方法

(一)簡易版——pdf 頁面尺寸跟隨圖片大小

該段代碼適用于:

1、將單張或多張圖片轉(zhuǎn)換為 pdf。

2、目標(biāo)文件夾中有幾張圖片,轉(zhuǎn)換后的 pdf 就有多少頁。

3、轉(zhuǎn)換后的 pdf 頁面默認(rèn)尺寸設(shè)置:視具體情況而定。簡單來說,就是轉(zhuǎn)換后的 pdf 頁面尺寸會跟隨圖片大小,這樣也就導(dǎo)致 pdf 頁面大小不一。

完整代碼如下:

from PIL import Image as pilImage
import os


# 簡易版——圖片轉(zhuǎn)換為pdf,pdf頁面隨圖片大小浮動
def convert_images_to_pdf(image_file):
    os.chdir(image_file)
    images = []
    file_lis = os.listdir(image_file)
    output_path = 'output.pdf'
    con = 0
    for image_path in file_lis:
        if image_path.endswith(('.jpg', '.png')):
            image = pilImage.open(image_path)
            images.append(image.convert("RGB"))
            con += 1
            print(image_path + ':第%d張' % con)
    images[0].save(output_path, save_all=True, append_images=images[1:])
    print('轉(zhuǎn)換完成,共計(jì)%d張圖片' % len(images))


if __name__ == "__main__":
    image_file = input(r'輸入目標(biāo)圖片所在文件夾路徑(如E:\test):')
    convert_images_to_pdf(image_file)

測試結(jié)果—頁面隨圖片大小

圖片

圖片

注:本段代碼只涵蓋了常見的 jpg、png 兩種圖片格式,其他格式可以直接在代碼中追加。

圖片

(二)常用版——pdf 每頁尺寸統(tǒng)一為 A4

基于(一)中的代碼,引入了第三方模塊 reportlab,對轉(zhuǎn)換后的 pdf 頁面尺寸進(jìn)行設(shè)置。

1、第一步,先通過命令:pip show reportlab ,查看是否已經(jīng)安裝有 reportlab 模塊,已安裝的情況下會提示版本號等信息,并且在使用時(shí)不會報(bào)錯(cuò)。

如果沒有安裝 reportlab 模塊,則需要進(jìn)行安裝:pip install reportlab。

注:經(jīng)作者實(shí)測,直接使用 pip 命令安裝可能會失敗,因每臺電腦所裝的 python 版本、環(huán)境依賴等,失敗情況可能也有所不同。解決辦法:先去下載對應(yīng)自身 python 版本的 reportlab 包或 whl 文件,再進(jìn)行安裝。常用下載鏈接可參考: https://pypi.org/search/?q=reportlab。

2、第二步,安裝好所需要的庫后,直接復(fù)制并運(yùn)行下面的代碼,輸入需要轉(zhuǎn)換的圖片文件夾路徑即可。

該段代碼適用于:

1、將單張或多張圖片轉(zhuǎn)換為 pdf。

2、目標(biāo)文件夾中有幾張圖片,轉(zhuǎn)換后的 pdf 就有多少頁。

3、轉(zhuǎn)換后的 pdf 每頁大小均為 A4 。

完整代碼如下:

from PIL import Image as pilImage
from reportlab.platypus import SimpleDocTemplate, Image, PageBreak
from reportlab.lib.pagesizes import A4, landscape
import os


# 獲取目標(biāo)文件下圖片文件
def get_Images(image_file):
    images = []
    file_lis = os.listdir(image_file)
    for image_path in file_lis:
        if image_path.endswith(('jpg', 'png')):
            images.append(image_path)
    return images, image_file


# 常用版——圖片轉(zhuǎn)換為pdf,限制pdf頁面大小為A4
def convert_images_to_pdfp(images, image_file):
    os.chdir(image_file)

    # 獲取A4尺寸
    a4_w, a4_h = landscape(A4)

    # 創(chuàng)建一個(gè)PDF文檔
    pdf_doc = SimpleDocTemplate(r'tmp.pdf')

    if len(images) == 0:
        print('該文件夾路徑下無圖片,請檢查圖片格式!')
    elif len(images) == 1:
        # 獲取圖片尺寸
        img = pilImage.open(images[0])
        img_w, img_h = img.size
        # 設(shè)置合適的縮放比率
        ratio = min(a4_w / img_w, a4_h / img_h)
        # 創(chuàng)建文檔
        page = Image(images[0], img_w * ratio, img_h * ratio)
        pdf_doc.build([ page ])
        print(images[0] + '——轉(zhuǎn)換完成')
    else:
        frames = []  # 用于存儲多張圖片框架
        con = 0
        for image in images:
            # 獲取圖片尺寸
            img = pilImage.open(image)
            img_w, img_h = img.size
            # 設(shè)置合適的縮放比率
            ratio = min(a4_w / img_w, a4_h / img_h)
            # 儲存文檔內(nèi)容
            page = Image(image, img_w * ratio, img_h * ratio)
            frames.append(page)  # 將文檔內(nèi)容添加到列表中
            frames.append(PageBreak())  # 在每張圖片后添加PageBreak
            con += 1
            print(image + '——第%d張' % con)

        pdf_doc.build(frames)
        print('轉(zhuǎn)換完成,共計(jì)%d張' % len(images))


if __name__ == "__main__":
    image_file = input(r'輸入目標(biāo)圖片所在文件夾路徑(如E:\test):')
    images = get_Images(image_file)
    convert_images_to_pdfp(images[0], images[1])

測試結(jié)果——每頁均為 A4 大小

圖片

圖片

注:本段代碼只涵蓋了常見的 jpg、png 兩種圖片格式,其他格式可以直接在代碼中追加即可。

總結(jié):圖片的大小是轉(zhuǎn)換后的 pdf 是否清晰、符合要求的重要因素。代碼(二)中對圖片進(jìn)行了簡單縮放,可以根據(jù)自身需求在代碼中對圖片大小進(jìn)行調(diào)整。(如果對代碼不是很熟悉,有一招簡單方法,就是轉(zhuǎn)換之前,可以先P圖)。

以上就是基于 python 第三方庫 PIL、reportlab ,將圖片轉(zhuǎn)換為pdf的方法,可供參考。更多相關(guān)python 圖片轉(zhuǎn)換為pdf 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python logging日志庫空間不足問題解決

    Python logging日志庫空間不足問題解決

    這篇文章主要介紹了Python logging日志庫空間不足問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 教你如何使用Python開發(fā)一個(gè)釘釘群應(yīng)答機(jī)器人

    教你如何使用Python開發(fā)一個(gè)釘釘群應(yīng)答機(jī)器人

    在聊天工具大肆侵入我們生活各個(gè)方面的今天,各種消息無時(shí)無刻不在侵?jǐn)_我們的每一寸時(shí)間,這種情況下,一個(gè)聊天的機(jī)器人就很有必要了.今天,我們來學(xué)習(xí)一下使用 Python 開發(fā)一個(gè)釘釘?shù)膽?yīng)答機(jī)器人,助你「人生苦短,少回消息」,需要的朋友可以參考下
    2021-06-06
  • pyqt5 textEdit、lineEdit操作的示例代碼

    pyqt5 textEdit、lineEdit操作的示例代碼

    這篇文章主要介紹了pyqt5 textEdit、lineEdit操作的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 基于Python實(shí)現(xiàn)配置熱加載的方法詳解

    基于Python實(shí)現(xiàn)配置熱加載的方法詳解

    所謂的配置熱加載,也就是說當(dāng)服務(wù)收到配置更新消息之后,我們不用重啟服務(wù)就可以使用最新的配置去執(zhí)行任務(wù)。本文將介紹如何用Python實(shí)現(xiàn)配置熱加載,需要的可以參考一下
    2022-07-07
  • python中的參數(shù)類型匹配提醒

    python中的參數(shù)類型匹配提醒

    這篇文章主要介紹了python中的參數(shù)類型匹配提醒,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Jinja2實(shí)現(xiàn)模板渲染與訪問對象屬性流程詳解

    Jinja2實(shí)現(xiàn)模板渲染與訪問對象屬性流程詳解

    要了解jinja2,那么需要先理解模板的概念。模板在Python的web開發(fā)中廣泛使用,它能夠有效的將業(yè)務(wù)邏輯和頁面邏輯分開,使代碼可讀性增強(qiáng),并且更加容易理解和維護(hù)。模板簡單來說就是一個(gè)其中包含占位變量表示動態(tài)部分的文,模板文件在經(jīng)過動態(tài)賦值后,返回給用戶
    2023-03-03
  • 檢測tensorflow是否使用gpu進(jìn)行計(jì)算的方式

    檢測tensorflow是否使用gpu進(jìn)行計(jì)算的方式

    今天小編就為大家分享一篇檢測tensorflow是否使用gpu進(jìn)行計(jì)算的方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 如何使用 Python 中的功能和庫創(chuàng)建 n-gram

    如何使用 Python 中的功能和庫創(chuàng)建 n-gram

    在計(jì)算語言學(xué)中,n-gram 對于語言處理、上下文和語義分析非常重要,它們是從令牌字符串中相鄰的連續(xù)單詞序列,本文將討論如何使用 Python 中的功能和庫創(chuàng)建 n-gram,感興趣的朋友一起看看吧
    2023-09-09
  • python抓取搜狗微信公眾號文章

    python抓取搜狗微信公眾號文章

    這篇文章主要為大家詳細(xì)介紹了python抓取搜狗微信公眾號文章,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • Python eval函數(shù)介紹及用法

    Python eval函數(shù)介紹及用法

    在本篇文章里小編給大家整理的是一篇關(guān)于Python eval函數(shù)介紹及用法,有興趣的朋友們可以參考下。
    2020-11-11

最新評論