IronOCR 開始使用 C# PDF OCR How to OCR documents on AWS Lambda Curtis Chau 更新日期:7月 22, 2025 Download IronOCR NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article This article was translated from English: Does it need improvement? Translated View the article in English class="container-fluid"> class="row"> class="col-md-2"> 這篇操作指南提供了使用 IronOCR 設置 AWS Lambda 函數的分步指南。 通過遵循本指南,您將學習如何配置 IronOCR 並高效讀取存儲在 S3 存儲桶中的文件。 class="hsg-featured-snippet"> 如何在 AWS Lambda 上進行文件 OCR 下載 C# 庫以對文件進行 OCR 創建並選擇項目模板 修改 FunctionHandler 代碼 配置並部署項目 調用函數並在 S3 中檢查結果 安裝 本文將使用 S3 存儲桶,因此需要 AWSSDK.S3 包。 如果您使用 IronOCR ZIP,設置臨時文件夾是必須的。 // Set temporary folder path and log file path for IronOCR. var awsTmpPath = @"/tmp/"; IronOcr.Installation.InstallationPath = awsTmpPath; IronOcr.Installation.LogFilePath = awsTmpPath; // Set temporary folder path and log file path for IronOCR. var awsTmpPath = @"/tmp/"; IronOcr.Installation.InstallationPath = awsTmpPath; IronOcr.Installation.LogFilePath = awsTmpPath; ' Set temporary folder path and log file path for IronOCR. Dim awsTmpPath = "/tmp/" IronOcr.Installation.InstallationPath = awsTmpPath IronOcr.Installation.LogFilePath = awsTmpPath $vbLabelText $csharpLabel 立即開始在您的項目中使用 IronOCR 並免費試用。 第一步: 免費啟動 創建 AWS Lambda 項目 使用 Visual Studio,創建一個容器化的 AWS Lambda 是一個簡單的過程: 安裝 AWS Toolkit for Visual Studio。 選擇 'AWS Lambda 項目 (.NET Core - C#)'。 選擇 '.NET 8 (Container Image)' 藍圖,然後選擇 'Finish'。 添加包依賴項 在 .NET 8 中使用 IronOCR 庫在 AWS Lambda 上不需要安裝額外的依賴項。 使用以下內容修改項目的 Dockerfile: FROM public.ecr.aws/lambda/dotnet:8 # Update all installed packages RUN dnf update -y WORKDIR /var/task # Copy build artifacts from the host machine into the Docker image COPY "bin/Release/lambda-publish" . 修改 FunctionHandler 代碼 此範例從 S3 存儲桶中檢索圖像,處理後,將可搜索的 PDF 保存回相同的存儲桶。 在使用 IronOCR ZIP 時設置臨時文件夾是必需的,因為該庫需要寫入許可權以從 DLLs 複製運行時目錄。 using Amazon.Lambda.Core; using Amazon.S3; using Amazon.S3.Model; using IronOcr; using System; using System.IO; using System.Threading.Tasks; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace IronOcrZipAwsLambda { public class Function { // Initialize the S3 client with a specific region endpoint private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1); /// <summary> /// Function handler to process OCR on the PDF stored in S3. /// </summary> /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param> public async Task FunctionHandler(ILambdaContext context) { // Set up necessary paths for IronOCR var awsTmpPath = @"/tmp/"; IronOcr.Installation.InstallationPath = awsTmpPath; IronOcr.Installation.LogFilePath = awsTmpPath; // Set license key for IronOCR IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"; string bucketName = "deploymenttestbucket"; // Your bucket name string pdfName = "sample"; string objectKey = $"IronPdfZip/{pdfName}.pdf"; string objectKeyForSearchablePdf = $"IronPdfZip/{pdfName}-SearchablePdf.pdf"; try { // Retrieve the PDF file from S3 var pdfData = await GetPdfFromS3Async(bucketName, objectKey); // Initialize IronTesseract for OCR processing IronTesseract ironTesseract = new IronTesseract(); OcrInput ocrInput = new OcrInput(); ocrInput.LoadPdf(pdfData); OcrResult result = ironTesseract.Read(ocrInput); // Log the OCR result context.Logger.LogLine($"OCR result: {result.Text}"); // Upload the searchable PDF to S3 await UploadPdfToS3Async(bucketName, objectKeyForSearchablePdf, result.SaveAsSearchablePdfBytes()); context.Logger.LogLine($"PDF uploaded successfully to {bucketName}/{objectKeyForSearchablePdf}"); } catch (Exception e) { context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}"); } } /// <summary> /// Retrieves a PDF from S3 and returns it as a byte array. /// </summary> private async Task<byte[]> GetPdfFromS3Async(string bucketName, string objectKey) { var request = new GetObjectRequest { BucketName = bucketName, Key = objectKey }; using (var response = await _s3Client.GetObjectAsync(request)) using (var memoryStream = new MemoryStream()) { await response.ResponseStream.CopyToAsync(memoryStream); return memoryStream.ToArray(); } } /// <summary> /// Uploads the generated searchable PDF back to S3. /// </summary> private async Task UploadPdfToS3Async(string bucketName, string objectKey, byte[] pdfBytes) { using (var memoryStream = new MemoryStream(pdfBytes)) { var request = new PutObjectRequest { BucketName = bucketName, Key = objectKey, InputStream = memoryStream, ContentType = "application/pdf" }; await _s3Client.PutObjectAsync(request); } } } } using Amazon.Lambda.Core; using Amazon.S3; using Amazon.S3.Model; using IronOcr; using System; using System.IO; using System.Threading.Tasks; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace IronOcrZipAwsLambda { public class Function { // Initialize the S3 client with a specific region endpoint private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1); /// <summary> /// Function handler to process OCR on the PDF stored in S3. /// </summary> /// <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param> public async Task FunctionHandler(ILambdaContext context) { // Set up necessary paths for IronOCR var awsTmpPath = @"/tmp/"; IronOcr.Installation.InstallationPath = awsTmpPath; IronOcr.Installation.LogFilePath = awsTmpPath; // Set license key for IronOCR IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"; string bucketName = "deploymenttestbucket"; // Your bucket name string pdfName = "sample"; string objectKey = $"IronPdfZip/{pdfName}.pdf"; string objectKeyForSearchablePdf = $"IronPdfZip/{pdfName}-SearchablePdf.pdf"; try { // Retrieve the PDF file from S3 var pdfData = await GetPdfFromS3Async(bucketName, objectKey); // Initialize IronTesseract for OCR processing IronTesseract ironTesseract = new IronTesseract(); OcrInput ocrInput = new OcrInput(); ocrInput.LoadPdf(pdfData); OcrResult result = ironTesseract.Read(ocrInput); // Log the OCR result context.Logger.LogLine($"OCR result: {result.Text}"); // Upload the searchable PDF to S3 await UploadPdfToS3Async(bucketName, objectKeyForSearchablePdf, result.SaveAsSearchablePdfBytes()); context.Logger.LogLine($"PDF uploaded successfully to {bucketName}/{objectKeyForSearchablePdf}"); } catch (Exception e) { context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}"); } } /// <summary> /// Retrieves a PDF from S3 and returns it as a byte array. /// </summary> private async Task<byte[]> GetPdfFromS3Async(string bucketName, string objectKey) { var request = new GetObjectRequest { BucketName = bucketName, Key = objectKey }; using (var response = await _s3Client.GetObjectAsync(request)) using (var memoryStream = new MemoryStream()) { await response.ResponseStream.CopyToAsync(memoryStream); return memoryStream.ToArray(); } } /// <summary> /// Uploads the generated searchable PDF back to S3. /// </summary> private async Task UploadPdfToS3Async(string bucketName, string objectKey, byte[] pdfBytes) { using (var memoryStream = new MemoryStream(pdfBytes)) { var request = new PutObjectRequest { BucketName = bucketName, Key = objectKey, InputStream = memoryStream, ContentType = "application/pdf" }; await _s3Client.PutObjectAsync(request); } } } } Imports Amazon.Lambda.Core Imports Amazon.S3 Imports Amazon.S3.Model Imports IronOcr Imports System Imports System.IO Imports System.Threading.Tasks ' Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. <Assembly: LambdaSerializer(GetType(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))> Namespace IronOcrZipAwsLambda Public Class [Function] ' Initialize the S3 client with a specific region endpoint Private Shared ReadOnly _s3Client As IAmazonS3 = New AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1) ''' <summary> ''' Function handler to process OCR on the PDF stored in S3. ''' </summary> ''' <param name="context">The ILambdaContext that provides methods for logging and describing the Lambda environment.</param> Public Async Function FunctionHandler(ByVal context As ILambdaContext) As Task ' Set up necessary paths for IronOCR Dim awsTmpPath = "/tmp/" IronOcr.Installation.InstallationPath = awsTmpPath IronOcr.Installation.LogFilePath = awsTmpPath ' Set license key for IronOCR IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01" Dim bucketName As String = "deploymenttestbucket" ' Your bucket name Dim pdfName As String = "sample" Dim objectKey As String = $"IronPdfZip/{pdfName}.pdf" Dim objectKeyForSearchablePdf As String = $"IronPdfZip/{pdfName}-SearchablePdf.pdf" Try ' Retrieve the PDF file from S3 Dim pdfData = Await GetPdfFromS3Async(bucketName, objectKey) ' Initialize IronTesseract for OCR processing Dim ironTesseract As New IronTesseract() Dim ocrInput As New OcrInput() ocrInput.LoadPdf(pdfData) Dim result As OcrResult = ironTesseract.Read(ocrInput) ' Log the OCR result context.Logger.LogLine($"OCR result: {result.Text}") ' Upload the searchable PDF to S3 Await UploadPdfToS3Async(bucketName, objectKeyForSearchablePdf, result.SaveAsSearchablePdfBytes()) context.Logger.LogLine($"PDF uploaded successfully to {bucketName}/{objectKeyForSearchablePdf}") Catch e As Exception context.Logger.LogLine($"[ERROR] FunctionHandler: {e.Message}") End Try End Function ''' <summary> ''' Retrieves a PDF from S3 and returns it as a byte array. ''' </summary> Private Async Function GetPdfFromS3Async(ByVal bucketName As String, ByVal objectKey As String) As Task(Of Byte()) Dim request = New GetObjectRequest With { .BucketName = bucketName, .Key = objectKey } Using response = Await _s3Client.GetObjectAsync(request) Using memoryStream As New MemoryStream() Await response.ResponseStream.CopyToAsync(memoryStream) Return memoryStream.ToArray() End Using End Using End Function ''' <summary> ''' Uploads the generated searchable PDF back to S3. ''' </summary> Private Async Function UploadPdfToS3Async(ByVal bucketName As String, ByVal objectKey As String, ByVal pdfBytes() As Byte) As Task Using memoryStream As New MemoryStream(pdfBytes) Dim request = New PutObjectRequest With { .BucketName = bucketName, .Key = objectKey, .InputStream = memoryStream, .ContentType = "application/pdf" } Await _s3Client.PutObjectAsync(request) End Using End Function End Class End Namespace $vbLabelText $csharpLabel 在 try 塊之前,指定從 IronPdfZip 目錄讀取文件 'sample.pdf'。 然後使用 GetPdfFromS3Async 方法檢索 PDF 字節,並將其傳遞給 LoadPdf 方法。 增加內存和超時 Lambda 函數中分配的內存量將根據處理的文檔大小和同時處理的文檔數量而有所不同。 作為基線,將內存設置為 512 MB,將超時設置為 300 秒,位於 aws-lambda-tools-defaults.json。 { "function-memory-size": 512, "function-timeout": 300 } 當內存不足時,程序將拋出錯誤:'Runtime exited with error: signal: killed.' 增加內存大小可以解決此問題。 有關更多詳情,請參考故障排除文章:AWS Lambda - Runtime Exited Signal: Killed。 發布 要在 Visual Studio 中發布,右鍵單擊項目,選擇 'Publish to AWS Lambda...',然後配置必要的設置。 您可以在 AWS 網站 上閱讀有關發布 Lambda 的更多信息。 試試看! 您可以通過 Lambda 控制台或通過 Visual Studio 啟動 Lambda 函數。 常見問題解答 如何使用 C# 在 AWS 中對文件進行 OCR 識別? 您可以將 IronOCR 與 AWS Lambda 集成,從而對儲存在 Amazon S3 儲存桶中的文件執行 OCR 識別。這需要用 C# 建立一個 Lambda 函數,該函數從 S3 中檢索文檔,使用 IronOCR 處理文檔,然後將結果上傳回 S3。 使用 C# 在 AWS Lambda 上設定 OCR 需要哪些步驟? 若要使用 C# 在 AWS Lambda 上設定 OCR,您需要下載 IronOCR 庫,在 Visual Studio 中建立 AWS Lambda 項目,配置函數處理程序以使用 IronOCR 進行處理,然後部署函數。此設定可讓您將影像轉換為可搜尋的 PDF。 在 AWS Lambda 中執行 OCR 的建議配置是什麼? 為了在 AWS Lambda 中使用 IronOCR 運行 OCR 時獲得最佳效能,建議設定至少 512 MB 的記憶體分配和 300 秒的逾時時間。這些設定有助於管理大型文件或多個文件的處理。 如何在 AWS Lambda 中處理「運行時錯誤退出:訊號:已終止」? 此錯誤通常表示您的 Lambda 函數已耗盡其分配的記憶體。增加 Lambda 函數配置中的記憶體分配可以解決此問題,尤其是在使用 IronOCR 處理大型文件時。 我可以在部署前在本地測試我的 AWS Lambda OCR 函數嗎? 是的,您可以使用適用於 Visual Studio 的 AWS 工具包在本機上測試您的 AWS Lambda OCR 函數。該工具包提供了一個用於模擬 Lambda 執行的本地環境,使您能夠在部署之前調試和優化您的函數。 在 AWS Lambda 專案中,Dockerfile 的用途是什麼? AWS Lambda 專案中的 Dockerfile 用於建立容器映像,該映像定義了 Lambda 函數的執行環境和相依性。這確保您的函數擁有在 AWS 中經常運行所需的所有元件。 在 AWS Lambda 上使用 .NET 8 中的 IronOCR 是否需要任何額外的依賴項? 在 AWS Lambda 上使用 .NET 8 時,除了 IronOCR 庫和必要的 AWS SDK 套件之外,無需其他相依性。這簡化了執行 OCR 任務的整合過程。 將 C# OCR 與 AWS Lambda 整合有哪些先決條件? 在將 C# OCR 與 AWS Lambda 整合之前,您需要安裝適用於 S3 的 AWS 開發工具包、IronOCR 程式庫和適用於 Visual Studio 的 AWS 工具包。您還需要一個已配置好的 S3 儲存桶,用於儲存和檢索文件。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 準備好開始了嗎? Nuget 下載 5,044,537 | 版本: 2025.11 剛剛發布 免費 NuGet 下載 總下載量:5,044,537 查看許可證