天天看點

python parse函數_Python使用Reportlab處理PDF資料 - 建立pdf庫檔案

細節知識

  • Python
  • Reportlab

文本,我們将建立一個可重用的PDF庫。 我們将對其進行精心設計,使其保持子產品化并易于擴充。 以下是我們将在本文中學到的内容的清單:

  • 如何采用不同的資料格式
  • 建立和使用自定義樣式表
  • 展開配置檔案可以做什麼
  • 建立一個簡單的跨平台使用者界面

建立用于建立PDF的子產品的想法是,它允許您強制執行有關PDF生成方式的标準。 例如,您可以在子產品中定義是否添加了頁眉和頁腳以及它們占用了多少空間。 您還可以定義字型,頁邊距,頁面大小,頁面編号和許多其他變量來控制PDF的外觀。

為了使事情井井有條,我們将所有檔案放入标有version_1,version_2等的檔案夾中。當我們在出現的部分中切換到新版本時,一定會提及。

不同的資料格式

更新清單上的第一項是使我們的PDF庫接受不同的資料格式。 我們将在這裡采用最簡單的方法。 在本文中,我們将更新代碼,以便我們可以接受XML或JSON格式的資料檔案。 為此,我們将僅檢視傳遞到應用程式中的檔案的擴充名。 如果您希望Python嘗試找出檔案本身的類型,則可能對第3方軟體包python-magic感興趣,您可以在此處找到。

無論如何,讓我們稍微更新一下代碼,以便它檢查檔案擴充名是什麼,并相應地解析檔案。 我們将從Python使用Reportlab處理PDF資料 - 自定義頁眉和頁腳中擷取main6.py并将其另存為main.py。 我們會将所有更改儲存到名為version_1的檔案夾中。

現在,讓我們看一下我們需要進行的更改:

代碼略

我們需要做的第一件事是導入os子產品。 我們将使用它來幫助我們很快找出檔案擴充名。 我們還從解析器子產品parse_json導入了一些新内容。 我們将使用它來解析JSON資料檔案。 除此之外,我們現在确實不需要對get_args或parse_xml函數進行任何更新。 是以,讓我們繼續我們的main函數:

代碼略

在這裡,我們建立了一個支援擴充類型的清單,在本例中為JSON和XML檔案類型。 然後,我們使用os.path.splitext提取檔案擴充名,這将傳回檔案路徑和擴充名本身的元組。 由于我們不在乎檔案路徑,是以我們将其配置設定給下劃線字元,這是丢棄資料的正常方法。 接下來,我們檢查提取的擴充名是否在我們建立的受支援擴充名清單中。 如果沒有,我們将引發帶有自定義錯誤消息的RuntimeError,以告訴使用者出了什麼問題。

最後的更改是檢查擴充名是什麼,然後調用适當的函數。 是以,如果傳入XML檔案,則要調用parse_xml,如果傳入JSON檔案,則要調用parse_json。

我們在這裡缺少的一件事是我們從解析器導入的parse_json函數,讓我們接下來寫它! 打開一個新檔案,并将其另存為parsers.py。 然後添加以下代碼:

代碼略

在這裡,我們導入Python的json庫,然後建立一個名為JSON的類。 建立類的原因是,我們希望将JSON編碼的資料轉換為具有與lxml.objectify相同的API的對象。 這樣就消除了為不同資料類型編寫代碼的一些複雜性。 主應用程式不需要自己進行轉換。 它依靠解析器子產品來做到這一點。 實際上,我們可以(可能應該)将XML解析代碼添加到此解析器子產品中。 無論如何,這裡的最後一段代碼是parse_json函數,該函數隻是打開JSON檔案并将其轉換為JSON對象,然後傳回該對象。

我們需要更新的最後一段代碼是header.py腳本:

代碼略

多頁資料檔案

您可能沒有注意到這一點,但是我們在上一節中看到的代碼并未讀取XML中的所有内容。 是以,我們需要更新代碼,以便它可以讀取所有内容。 我們還需要在EOB資料檔案中為聲明資料添加一個表。 這樣,如果我們有很多聲明,我們的PDF庫将自動建立一個多頁文檔。 将其更改為具有多頁功能的腳本集的工作量很大,因為将會進行大量的重構。 是以,我們将複制版本_1中的所有檔案,并将它們粘貼到名為版本_2的新檔案夾中。

我們将在此步驟中使代碼更加子產品化,是以,我們要做的第一件事是減少main.py所做的所有事情。 讓我們來看看:

代碼略

如您所見,我們将parse_xml函數移出并移入了解析器子產品。 我們還從main中删除了所有與ReportLab相關的代碼,并将其放入另一個名為pdf_creator的子產品中。 這大大減少了主要所需的導入數量。 現在,主要要做的就是調用解析邏輯,然後通過pdf_creator子產品建立PDF文檔。 通過将對解析器的調用放入pdf_creator子產品中,并将參數解析移入其自己的子產品中,我們可以進一步簡化此過程。 如果您想嘗試這樣做,請随時這樣做。

自定義樣式

配置應用

參閱

Python使用Reportlab處理PDF資料 - 建立pdf庫檔案​viadean.com

python parse函數_Python使用Reportlab處理PDF資料 - 建立pdf庫檔案