使用 AWS Lambda 將 PDF 轉換成圖片檔

閱讀時間約 8 分鐘
raw-image


PyMuPDF 是一個高效能 Python 函式庫,用於 PDF(和其他)文件的資料擷取、分析、轉換和操作。

還有其他套件可使用 PyPDF2、 pdf2image,有嘗試過 pdf2image 對部分中文會消失。


執行過程為,將 PDF 檔案上傳至 S3 Bucket > 觸發 AWS Lambda 轉換檔案 >把結果圖片放置到 S3 Bucket


這裡的 Lambda 採用 docker image 來建置,將程式碼和相依性打包到 Docker 映像中。 Dockerfile 應包含程式碼正確運作所需的依賴項和環境設定。

因此,我決定嘗試使用 Docker 建立自己的環境,由於它可以從一開始就安裝在執行環境中,因此不再需要使用 Lambda Layer。


設定部署環境

步驟1:建立 S3 Bucket

創建兩個資料夾,來放PDF與輸出的圖片檔

raw-image


步驟2:編寫 Python 程式碼

app.py

import boto3
import fitz # PyMuPDF
import concurrent.futures

# 創建 S3 存儲桶中的資料夾
def create_folder(s3_client, bucket_name, folder_name):
s3_client.put_object(Bucket=bucket_name, Key='IMG/' + folder_name + '/')

# 將 PDF 頁面轉換為 JPG 圖像
def convert_page_to_jpg(s3_client, page, folder_name, bucket_name, object_key):
pixmap = page.get_pixmap(dpi=400) #DPI影響轉換速度
img = pixmap.tobytes()
# 將 JPG 圖像上傳至 S3,檔案名稱包含物件名稱和頁碼
s3_client.put_object(Bucket=bucket_name, Key=f'IMG/{folder_name}/{object_key.split("/")[-1].split(".")[0]}-page-{page.number}.jpg', Body=img)

# 將整個 PDF 轉換為 JPG 圖像
def convert_pdf_to_jpg(s3_client, pdf_doc, folder_name, bucket_name, object_key):
with concurrent.futures.ThreadPoolExecutor() as executor:
# 使用多執行緒處理 PDF 的每一頁
executor.map(lambda page: convert_page_to_jpg(s3_client, page, folder_name, bucket_name, object_key), pdf_doc)

# 處理 S3 事件
def handle_s3_event(event, context):
# 創建 S3 客戶端
s3_client = boto3.client('s3')
# 獲取 S3 事件相關資訊
bucket_name = event['Records'][0]['s3']['bucket']['name']
object_key = event['Records'][0]['s3']['object']['key']
# 從 S3 中獲取 PDF 文件
obj = s3_client.get_object(Bucket=bucket_name, Key=object_key)
pdf_content = obj['Body'].read()

# 使用物件名稱作為資料夾名稱
folder_name = object_key.split('/')[-1].split('.')[0]
# 創建資料夾,存轉換後的圖像
create_folder(s3_client, bucket_name, folder_name)

# 使用 PyMuPDF 開啟 PDF 文件
pdf_doc = fitz.open(stream=pdf_content)
# 將 PDF 轉換為 JPG 並上傳至 S3
convert_pdf_to_jpg(s3_client, pdf_doc, folder_name, bucket_name, object_key)

def handler(event, context):
try:
# 處理 S3 事件
handle_s3_event(event, context)
print("Successfully converted PDF to JPG and uploaded to S3")
except Exception as e:
# 處理錯誤,並拋出異常
error_msg = "An error occurred: {}".format(e)
print(error_msg)
raise Exception(error_msg)


步驟3:編寫 Dockerfile

FROM public.ecr.aws/lambda/python:3.12

RUN pip3 install PyMuPDF boto3

# Copy function code

COPY app.py ./

CMD [ "app.handler" ]


步驟4:建立AWS ECR

步驟5:將 Docker Image推送到 AWS ECR,這裡採用Cloud 9

步驟6:建立 Lambda 函數

raw-image

必須新增權限角色以允許 Lambda 存取 S3,這裡為了方便使用 AmazonS3FullAccess

raw-image


步驟7 : 設置Memory 與 Timeout,根據檔案實際情況調整,

檔案大小、頁面複雜度都會影響。

raw-image


步驟8 : 設置觸發來源

raw-image


步驟9 : 觸發 Lambda 測試

為了檢查轉換過程是否正常,我們將 PDF 檔案上傳到 S3 儲存桶並讓 Lambda 函數對其進行轉換。該過程完成後,我們將檢查輸出以確保其符合我們的期望。

這裡以台積電年報為例,請注意 pdf 檔名不能中文

raw-image

Billed Duration: 281148 ms Max Memory Used: 995 MB

raw-image

可以看到結果還是可以

raw-image


結論

將PDF轉換為圖像對於各行各業和企業都是一項極具價值的工具。透過AWS Lambda和Docker的部署,能夠高效地實現這一轉換,無論是用於在網站上展示PDF或進一步處理,都無需煩惱基礎設施管理的問題。儘管有許多其他在線工具可供選擇,但利用AWS Lambda和Docker提供了一個強大且可擴展的解決方案。


參考

https://pymupdf.readthedocs.io/en/latest/

https://note.leoxyz.com/post/convert-pdf-to-image-with-aws-python-lambda-function-and-docker-deployment



avatar-img
16會員
80內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
西尼亞ming的沙龍 的其他內容
實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源
如何計算 CloudFront 在使用中,回到Origins的數量,以及命中總數量
客戶提出以下需求: 當用戶在日本,會導到離用戶最近的CloudFront節點(亞洲),當CF要回原站時,需要導到新加坡的S3 當用戶為美國,會導到離用戶最近的CloudFront節點(美國東岸),當CF要回原站時,需要導到美國的S3
依據 CloudFront 預設的配額限制 [1],有以下項目會影響流量:
AWS Nitro Enclaves 是一項新的 EC2 功能,使客戶能夠創建隔離的計算環境 (Enclaves) 來進一步保護和安全地處理高度敏感的數據,例如其 Amazon EC2 實例中的個人身份信息 (PII)、醫療保健
實驗目的:Lambda@Edge (L@E) 讓 CLoudFront (CF) 回源時,自動選擇較近的 S3 region 回源
如何計算 CloudFront 在使用中,回到Origins的數量,以及命中總數量
客戶提出以下需求: 當用戶在日本,會導到離用戶最近的CloudFront節點(亞洲),當CF要回原站時,需要導到新加坡的S3 當用戶為美國,會導到離用戶最近的CloudFront節點(美國東岸),當CF要回原站時,需要導到美國的S3
依據 CloudFront 預設的配額限制 [1],有以下項目會影響流量:
AWS Nitro Enclaves 是一項新的 EC2 功能,使客戶能夠創建隔離的計算環境 (Enclaves) 來進一步保護和安全地處理高度敏感的數據,例如其 Amazon EC2 實例中的個人身份信息 (PII)、醫療保健
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇文章闡述瞭如何將MDX(多維表達式)文件轉換為PDF,包括執行MDX查詢,導出結果,格式化數據以及最後的轉換過程。同時介紹了專業工具PDFtoPDF.ai的使用方法和好處。這篇指南將幫助您有效地完成MDX文件到PDF的轉換,為報告、分析或展示做好準備。
Thumbnail
將圖片添加到PDF文件中可以提升內容質量,使其更具吸引力。無論您是在製作專業文件、報告或演示文稿,插入圖片都是非常重要的。以下是使用各種工具進行操作的方法
Thumbnail
這篇文章介紹了三種將 PDF 轉換為 Word 的方法,包括使用 Microsoft Word、在線轉換工具和 Adobe Acrobat DC。此外,文章提供了保存檔案、常見問題解答等相關提示。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在信息化時代,PDF文件無處不在。無論是學術研究、商業文件還是個人檔案,PDF都已成為最常見的文檔格式。然而,許多PDF文件是通過掃描紙質文檔生成的,這些文件中的文字無法直接編輯或複製。借助先進的OCR技術,使用者可以將掃描的PDF轉換為可搜索的文本,提升工作和學習效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
🚀 正在為翻譯掃描書籍PDF而苦惱嗎?🧐 使用 PDFtoPDF.ai,輕鬆將圖片轉換為文字並翻譯!對於需要快速參考和理解外文文本的學生來說,非常完美。透過高精度OCR和簡便的翻譯工具,提升你的學術工作效率。📚✨
Thumbnail
在當今數字化時代,需求日益增長。本文詳細介紹了幾種常用的PDF轉Word方法,並討論了它們的侷限性。接下來,我們將向您介紹pdftopdf.ai,一款具有先進的OCR和LLM技術,提供高效且保持原始文件格式和質量的解決方案。
Thumbnail
全新軟體PDFtoPDF.ai使用先進的PDF壓縮技術,將笨重的PDF圖像轉換為易於管理的可編輯文字,同時保持文件質量。使用PDFtoPDF.ai,專業人士和個人用戶能輕鬆管理大量文件,提高工作效率。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇文章闡述瞭如何將MDX(多維表達式)文件轉換為PDF,包括執行MDX查詢,導出結果,格式化數據以及最後的轉換過程。同時介紹了專業工具PDFtoPDF.ai的使用方法和好處。這篇指南將幫助您有效地完成MDX文件到PDF的轉換,為報告、分析或展示做好準備。
Thumbnail
將圖片添加到PDF文件中可以提升內容質量,使其更具吸引力。無論您是在製作專業文件、報告或演示文稿,插入圖片都是非常重要的。以下是使用各種工具進行操作的方法
Thumbnail
這篇文章介紹了三種將 PDF 轉換為 Word 的方法,包括使用 Microsoft Word、在線轉換工具和 Adobe Acrobat DC。此外,文章提供了保存檔案、常見問題解答等相關提示。
Thumbnail
學習如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
在信息化時代,PDF文件無處不在。無論是學術研究、商業文件還是個人檔案,PDF都已成為最常見的文檔格式。然而,許多PDF文件是通過掃描紙質文檔生成的,這些文件中的文字無法直接編輯或複製。借助先進的OCR技術,使用者可以將掃描的PDF轉換為可搜索的文本,提升工作和學習效率。
Thumbnail
在本文中,我們將瞭解如何將掃描的PDF轉換為可搜索文本,並高效管理和查找文件。探索先進的OCR技術如何提升文檔處理效率。
Thumbnail
🚀 正在為翻譯掃描書籍PDF而苦惱嗎?🧐 使用 PDFtoPDF.ai,輕鬆將圖片轉換為文字並翻譯!對於需要快速參考和理解外文文本的學生來說,非常完美。透過高精度OCR和簡便的翻譯工具,提升你的學術工作效率。📚✨
Thumbnail
在當今數字化時代,需求日益增長。本文詳細介紹了幾種常用的PDF轉Word方法,並討論了它們的侷限性。接下來,我們將向您介紹pdftopdf.ai,一款具有先進的OCR和LLM技術,提供高效且保持原始文件格式和質量的解決方案。
Thumbnail
全新軟體PDFtoPDF.ai使用先進的PDF壓縮技術,將笨重的PDF圖像轉換為易於管理的可編輯文字,同時保持文件質量。使用PDFtoPDF.ai,專業人士和個人用戶能輕鬆管理大量文件,提高工作效率。