最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python利用字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔

 更新時(shí)間:2024年09月08日 10:55:12   作者:Eiceblue  
處理PDF文件的可以直接讀取和寫入文件系統(tǒng)中的PDF文件,然而,通過字節(jié)串(byte string)或字節(jié)數(shù)組(byte array)來加載和保存PDF文檔在某些情況下更高效,本文將介紹如何使用Python通過字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔,需要的朋友可以參考下

引言

處理PDF文件的可以直接讀取和寫入文件系統(tǒng)中的PDF文件,然而,通過字節(jié)串(byte string)或字節(jié)數(shù)組(byte array)來加載和保存PDF文檔在某些情況下更高效。這種方法不僅可以提高數(shù)據(jù)處理的靈活性,允許開發(fā)者在內(nèi)存中直接操作PDF,而且還能增強(qiáng)安全性,同時(shí)方便跨應(yīng)用傳輸和網(wǎng)絡(luò)傳輸。

本文將介紹如何使用Python通過字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔。

本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install Spire.PDF

創(chuàng)建PDF文檔并保存為字節(jié)串或字節(jié)數(shù)組

我們可以使用庫中的類和方法直接創(chuàng)建PDF文檔,并將其保存到Stream對(duì)象。此對(duì)象可通過Stream.ToArray()方法轉(zhuǎn)換為不可變的bytes對(duì)象進(jìn)行操作。而bytes對(duì)象也可以直接轉(zhuǎn)換為可變的bytearray對(duì)象,從而對(duì)文件進(jìn)行字節(jié)層面的編輯或其他操作。以下是操作步驟:

  1. 導(dǎo)入所需模塊。
  2. 創(chuàng)建PdfDocument對(duì)象。
  3. 設(shè)置PDF頁面,添加頁面并繪制內(nèi)容。
  4. 使用PdfDocument.SaveToStream()方法將PDF文檔保存到Stream對(duì)象。
  5. 使用Stream.ToArray()方法將Stream對(duì)象轉(zhuǎn)換為bytes對(duì)象。
  6. 可使用bytes對(duì)象直接構(gòu)建bytearray對(duì)象。
  7. 接下來可以字節(jié)串或字節(jié)數(shù)組進(jìn)行更多操作,如寫入文件、傳輸?shù)取?/li>

代碼示例

from spire.pdf import *

# 創(chuàng)建PdfDocument類的一個(gè)實(shí)例
pdf = PdfDocument()

# 設(shè)置文檔的頁面大小和邊距
pageSettings = pdf.PageSettings
pageSettings.Size = PdfPageSize.A4()
pageSettings.Margins.Top = 50
pageSettings.Margins.Bottom = 50
pageSettings.Margins.Left = 40
pageSettings.Margins.Right = 40

# 向文檔添加一個(gè)新的頁面
page = pdf.Pages.Add()

# 為文檔內(nèi)容創(chuàng)建字體和畫筆
titleFont = PdfTrueTypeFont("HarmonyOS Sans SC", 16.0, PdfFontStyle.Bold, True)
titleBrush = PdfBrushes.get_Brown()
contentFont = PdfTrueTypeFont("HarmonyOS Sans SC", 13.0, PdfFontStyle.Regular, True)
contentBrush = PdfBrushes.get_Black()

# 在頁面上繪制標(biāo)題
titleText = "人工智能簡(jiǎn)介"
titleSize = titleFont.MeasureString(titleText)
page.Canvas.DrawString(titleText, titleFont, titleBrush, PointF(0.0, 30.0))

# 在頁面上繪制正文文本
contentText = ("人工智能(AI)是計(jì)算機(jī)科學(xué)的一個(gè)分支,它旨在創(chuàng)造能夠模擬人類智能行為的機(jī)器。這包括學(xué)習(xí)(通過經(jīng)驗(yàn)改進(jìn)自身)、推理(使用規(guī)則來達(dá)到近似或確定性的結(jié)論)、自我修正等特性。AI的應(yīng)用范圍廣泛,從簡(jiǎn)單的任務(wù)自動(dòng)化到復(fù)雜的決策支持系統(tǒng)均有涉及。")
# 設(shè)置正文文本的格式
contentFormat = PdfStringFormat()
contentFormat.Alignment = PdfTextAlignment.Justify
contentFormat.LineSpacing = 20.0
# 使用正文文本創(chuàng)建一個(gè)TextWidget對(duì)象并應(yīng)用字符串格式
textWidget = PdfTextWidget(contentText, contentFont, contentBrush)
textWidget.StringFormat = contentFormat
# 創(chuàng)建一個(gè)TextLayout對(duì)象并設(shè)置布局選項(xiàng)
textLayout = PdfTextLayout()
textLayout.Layout = PdfLayoutType.Paginate
textLayout.Break = PdfLayoutBreakType.FitPage
# 在頁面上繪制TextWidget
rect = RectangleF(PointF(0.0, titleSize.Height + 50.0), page.Canvas.ClientSize)
textWidget.Draw(page, rect, textLayout)

# 將PDF文檔保存到一個(gè)Stream對(duì)象
pdfStream = Stream()
pdf.SaveToStream(pdfStream)

# 將Stream對(duì)象轉(zhuǎn)換為bytes對(duì)象
pdfBytes = pdfStream.ToArray()

# 將Stream對(duì)象轉(zhuǎn)換為bytearray對(duì)象
pdfBytearray = bytearray(pdfStream.ToArray())

# 將字節(jié)流寫入文件
with open("output/AI簡(jiǎn)介.pdf", "wb") as f:
    f.write(pdfBytearray)

結(jié)果

從字節(jié)串或字節(jié)數(shù)組加載PDF文檔進(jìn)行操作

Stream類支持用bytes對(duì)象(或bytearray直接轉(zhuǎn)換為bytes)直接構(gòu)建實(shí)例。然后,我們可以使用PdfDocument.LoadFromStream()方法將Stream對(duì)象載入為PDF文檔進(jìn)行文檔操作,如編輯、轉(zhuǎn)換等。以下是操作步驟:

  1. 導(dǎo)入所需模塊。
  2. 創(chuàng)建bytes對(duì)象或使用現(xiàn)有bytes對(duì)象,來構(gòu)建Stream對(duì)象。
  3. 創(chuàng)建PdfDocument對(duì)象。
  4. 使用PdfDocument.LoadFromStream()方法將Stream對(duì)象載入為PDF文檔。
  5. 對(duì)文檔進(jìn)行操作,如提取頁面文字。

代碼示例

from spire.pdf import *

# 從PDF文件創(chuàng)建一個(gè)字節(jié)數(shù)組
with open("示例.pdf", "rb") as f:
    byteData = f.read()

# 從字節(jié)數(shù)組創(chuàng)建一個(gè)Stream對(duì)象
stream = Stream(byteData)

# 將Stream對(duì)象加載為PDF文檔
pdf = PdfDocument(stream)

# 獲取第一頁的文字
page = pdf.Pages.get_Item(0)
textExtractor = PdfTextExtractor(page)
extractOptions = PdfTextExtractOptions()
extractOptions.IsExtractAllText = True
text = textExtractor.ExtractText(extractOptions)

# 打印文字
print(text)

結(jié)果

本文演示了如何使用Python通過字節(jié)串或字節(jié)數(shù)組加載或保存PDF文檔。

到此這篇關(guān)于Python利用字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔的文章就介紹到這了,更多相關(guān)Python加載和保存PDF文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一個(gè)基于flask的web應(yīng)用誕生 記錄用戶賬戶登錄狀態(tài)(6)

    一個(gè)基于flask的web應(yīng)用誕生 記錄用戶賬戶登錄狀態(tài)(6)

    一個(gè)基于flask的web應(yīng)用誕生第六篇,這篇文章主要介紹了記錄用戶賬戶登錄狀態(tài)功能開發(fā),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Python實(shí)現(xiàn)WGS84火星百度及web墨卡托四種坐標(biāo)系相互轉(zhuǎn)換

    Python實(shí)現(xiàn)WGS84火星百度及web墨卡托四種坐標(biāo)系相互轉(zhuǎn)換

    主流被使用的地理坐標(biāo)系并不統(tǒng)一,常用的有WGS84、GCJ02(火星坐標(biāo)系)、BD09(百度坐標(biāo)系)以及百度地圖中保存矢量信息的web墨卡托,本文利用Python編寫相關(guān)類以實(shí)現(xiàn)4種坐標(biāo)系統(tǒng)之間的互相轉(zhuǎn)換
    2023-08-08
  • NumPy argmax()函數(shù)詳解

    NumPy argmax()函數(shù)詳解

    在日常數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中,經(jīng)常需要找到數(shù)組或矩陣中最大值的位置,這時(shí)NumPy 提供的 argmax() 函數(shù)就派上了用場(chǎng),本文將系統(tǒng)地了解 argmax() 的用法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2026-01-01
  • Python實(shí)現(xiàn)自動(dòng)化設(shè)置Excel工作表行高和列寬

    Python實(shí)現(xiàn)自動(dòng)化設(shè)置Excel工作表行高和列寬

    在數(shù)據(jù)處理和報(bào)表生成的日常工作中,我們常常需要與Excel文件打交道,本文將深入探討如何利用Python實(shí)現(xiàn)Excel工作表行高和列寬的自動(dòng)化設(shè)置,希望對(duì)大家有所幫助
    2025-09-09
  • Python中內(nèi)置的日志模塊logging用法詳解

    Python中內(nèi)置的日志模塊logging用法詳解

    Python的logging模塊提供了記錄程序運(yùn)行情況的日志功能,類似于Apache的log4j,很好很強(qiáng)大,這里我們就來看一下Python中內(nèi)置的日志模塊logging用法詳解
    2016-07-07
  • python實(shí)現(xiàn)高斯投影正反算方式

    python實(shí)現(xiàn)高斯投影正反算方式

    今天小編就為大家分享一篇python實(shí)現(xiàn)高斯投影正反算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 地圖經(jīng)緯度轉(zhuǎn)換、糾偏的實(shí)例代碼

    python 地圖經(jīng)緯度轉(zhuǎn)換、糾偏的實(shí)例代碼

    這篇文章主要介紹了python 地圖經(jīng)緯度轉(zhuǎn)換、糾偏的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Pycharm安裝第三方庫并更換鏡像的詳細(xì)教程

    Pycharm安裝第三方庫并更換鏡像的詳細(xì)教程

    在使用pycharm學(xué)習(xí)python的時(shí)候,經(jīng)常需要第三方庫,沒有第三方庫程序就會(huì)報(bào)錯(cuò),pycharm也會(huì)提醒你要安裝所需要的庫,下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝第三方庫并更換鏡像的詳細(xì)教程,需要的朋友可以參考下
    2023-05-05
  • 只需7行Python代碼玩轉(zhuǎn)微信自動(dòng)聊天

    只需7行Python代碼玩轉(zhuǎn)微信自動(dòng)聊天

    今天小編就為大家分享一篇關(guān)于只需7行Python代碼玩轉(zhuǎn)微信自動(dòng)聊天,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 機(jī)器深度學(xué)習(xí)二分類電影的情感問題

    機(jī)器深度學(xué)習(xí)二分類電影的情感問題

    這篇文章主要介紹了機(jī)器深度學(xué)習(xí)關(guān)于電影二次類的情感問題,代碼詳細(xì),對(duì)理解深度學(xué)習(xí)中的二次類問題有很大的幫助,有需要學(xué)習(xí)的朋友可以看一下這篇文章
    2021-04-04

最新評(píng)論

易门县| 屯门区| 金寨县| 浪卡子县| 唐海县| 博白县| 齐齐哈尔市| 鄂托克前旗| 津市市| 称多县| 望城县| 金堂县| 白玉县| 龙井市| 比如县| 茂名市| 大连市| 阿城市| 桓台县| 工布江达县| 苏尼特左旗| 天镇县| 郑州市| 义马市| 宁明县| 南川市| 肥东县| 来凤县| 广灵县| 栾城县| 原阳县| 神池县| 土默特左旗| 东阳市| 邮箱| 南川市| 城口县| 石台县| 红河县| 松阳县| 昭通市|