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
對象。此對象可通過Stream.ToArray()
方法轉(zhuǎn)換為不可變的bytes
對象進(jìn)行操作。而bytes
對象也可以直接轉(zhuǎn)換為可變的bytearray
對象,從而對文件進(jìn)行字節(jié)層面的編輯或其他操作。以下是操作步驟:
- 導(dǎo)入所需模塊。
- 創(chuàng)建
PdfDocument
對象。 - 設(shè)置PDF頁面,添加頁面并繪制內(nèi)容。
- 使用
PdfDocument.SaveToStream()
方法將PDF文檔保存到Stream
對象。 - 使用
Stream.ToArray()
方法將Stream對象轉(zhuǎn)換為bytes對象。 - 可使用bytes對象直接構(gòu)建bytearray對象。
- 接下來可以字節(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 = "人工智能簡介" 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)用范圍廣泛,從簡單的任務(wù)自動化到復(fù)雜的決策支持系統(tǒng)均有涉及。") # 設(shè)置正文文本的格式 contentFormat = PdfStringFormat() contentFormat.Alignment = PdfTextAlignment.Justify contentFormat.LineSpacing = 20.0 # 使用正文文本創(chuàng)建一個(gè)TextWidget對象并應(yīng)用字符串格式 textWidget = PdfTextWidget(contentText, contentFont, contentBrush) textWidget.StringFormat = contentFormat # 創(chuàng)建一個(gè)TextLayout對象并設(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對象 pdfStream = Stream() pdf.SaveToStream(pdfStream) # 將Stream對象轉(zhuǎn)換為bytes對象 pdfBytes = pdfStream.ToArray() # 將Stream對象轉(zhuǎn)換為bytearray對象 pdfBytearray = bytearray(pdfStream.ToArray()) # 將字節(jié)流寫入文件 with open("output/AI簡介.pdf", "wb") as f: f.write(pdfBytearray)
結(jié)果
從字節(jié)串或字節(jié)數(shù)組加載PDF文檔進(jìn)行操作
Stream
類支持用bytes
對象(或bytearray
直接轉(zhuǎn)換為bytes
)直接構(gòu)建實(shí)例。然后,我們可以使用PdfDocument.LoadFromStream()
方法將Stream
對象載入為PDF文檔進(jìn)行文檔操作,如編輯、轉(zhuǎn)換等。以下是操作步驟:
- 導(dǎo)入所需模塊。
- 創(chuàng)建
bytes
對象或使用現(xiàn)有bytes
對象,來構(gòu)建Stream
對象。 - 創(chuàng)建
PdfDocument
對象。 - 使用
PdfDocument.LoadFromStream()
方法將Stream
對象載入為PDF文檔。 - 對文檔進(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對象 stream = Stream(byteData) # 將Stream對象加載為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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python實(shí)現(xiàn)抓取中國銀行外匯牌價(jià)首頁數(shù)據(jù)實(shí)現(xiàn)
這篇文章主要為大家介紹了如何使用python實(shí)現(xiàn)抓取中國銀行外匯牌價(jià)首頁數(shù)據(jù)的實(shí)現(xiàn)示例,有需要的同學(xué)可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10python安裝并使用virtualenv管理包的詳細(xì)過程
本文主要介紹了Python的安裝過程和如何使用virtualenv管理包,首先,用戶需要訪問Python官網(wǎng)下載安裝包,并運(yùn)行安裝程序,安裝完成后,在命令行輸入Python,顯示安裝的Python版本號,即表示安裝成功,感興趣的朋友一起看看吧2024-10-10Python實(shí)現(xiàn)截圖生成符合markdown的鏈接
之前是用的是typora來寫的文章,最近typora最近開始收費(fèi)了,所以就不想用了,于是找到了一個(gè)替代品MarkText。本文將介紹如何通過Python實(shí)現(xiàn)截圖自動生成符合markdown的鏈接,感興趣的可以了解一下2022-01-01Python機(jī)器學(xué)習(xí)算法之決策樹算法的實(shí)現(xiàn)與優(yōu)缺點(diǎn)
決策樹(Decision Tree)是一種基本的分類與回歸方法,這篇文章主要給大家介紹了關(guān)于Python機(jī)器學(xué)習(xí)算法之決策樹算法實(shí)現(xiàn)與優(yōu)缺點(diǎn)的相關(guān)資料,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05python 通過郵件控制實(shí)現(xiàn)遠(yuǎn)程控制電腦操作
這篇文章主要介紹了python 通過郵件控制電腦實(shí)現(xiàn)遠(yuǎn)程控制操作,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03詳解Python OpenCV圖像分割算法的實(shí)現(xiàn)
圖像分割是指根據(jù)灰度、色彩、空間紋理、幾何形狀等特征把圖像劃分成若干個(gè)互不相交的區(qū)域。本文就來和大家聊聊OpenCV的圖像分割算法及基于輪廓的字符分離,感興趣的可以了解一下2022-08-08pycharm與jupyter?lab/notebook結(jié)合使用方式
這篇文章主要介紹了pycharm與jupyter?lab/notebook結(jié)合使用方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06