本教程展示了如何设置为使用AWSλLEADTOOLS SDK和。net核心转换文档。
| 概述 | |
|---|---|
| 总结 | 本教程介绍了如何设置使用AWSλLEADTOOLS SDK文档转换和。net核心。 |
| 完成时间 | 60分钟 |
| Visual Studio项目 | 下载教程项目(774 KB) |
| 平台 | AWSλ。net核心应用程序 |
| IDE | Visual Studio 2019中,2022年,AWSλVisual Studio扩展 |
| 开发许可 | 下载LEADTOOLS |
熟悉基本的步骤创建一个项目的审查添加引用和设置一个许可证教程,在工作之前使用AWSλ- c#转换文档。net核心教程。
建立开发环境在Visual studio中使用AWS,完成以下2从亚马逊教程:
这些教程完成后,Visual Studio应该安装AWS工具包和一个基本的了解如何创建一个新的AWSλ为。net项目核心和发布AWS应该获得的。
在Visual Studio中,创建一个新的项目(AWSλ。网络核心- C #)项目。为项目指定一个名称和位置并单击创建。
选择一个空函数并点击好吧。
的引用需要取决于项目的目的。对于这个项目,以下需要NuGet包:
Leadtools.Document.Sdk右键单击的c#项目解决方案资源管理器并选择管理NuGet包……。
浏览LEADTOOLS,然后选择Leadtools.Document.SdkNuGet包和安装它。接受领导的最终用户许可协议。
对于一个完整的列表的编解码器dll需要特定的格式,请参考文件格式的支持。
右键单击并选择c#项目添加,然后类。它的名字LEADRequest.cs并点击添加。
添加以下的使用布洛克:
使用Leadtools.Document.Writer;
将下面的代码复制到添加所需的功能类:
公共类LEADRequest{公共字符串InputUrl {得到;集;}公共DocumentFormat DocumentFormat {得到;集;}公共LEADRequest (){}}
右键单击并选择c#项目添加,然后类。它的名字LEADLambdaHandler.cs并点击添加。
在新类中,添加以下的使用布洛克:
使用系统;使用System.Diagnostics;使用先;使用System.Net.Http;使用Amazon.Lambda.Core;使用Leadtools;使用Leadtools.Document;使用Leadtools.Document.Converter;使用Leadtools.Document.Writer;使用Leadtools.Ocr;
将下面的代码复制到添加所需的功能类:
公共类LEADLambdaHandler{/ /全局变量IOcrEngine ocrEngine;DocumentConverter DocumentConverter;静态HttpClient HttpClient =新HttpClient ();/ /构造函数处理所有初始化以确保功能尽可能快的一次热身公共LEADLambdaHandler (){InitEnvironment ();平台。LibraryPath =“/ opt / native-runtimes /”;InitLEADTOOLS ();}/ /方法初始化的λ环境使用的LEADTOOLS SDK无效InitEnvironment (){/ /设置LD_LIBRARY_PATH控制台的功能包括:/ / /var/lang/lib: / lib64: / usr / lib64: / var /运行时:/ var /运行/ lib: / var /任务:/ var / lib /任务:/ opt / lib / tmpExecuteBashCommand (“ln - s / lib64 / libdl.so。2 / tmp / libdl.so”);}/ /初始化LEADTOOLS SDK类无效InitLEADTOOLS (){SetLicense ();RasterDefaults。TemporaryDirectory =“/ tmp”;RasterDefaults.SetResourceDirectory (LEADResourceDirectory.Fonts“/ opt / ShadowFonts”);ocrEngine = OcrEngineManager.CreateEngine (OcrEngineType.LEAD);ocrEngine.Startup (零,零,“/ tmp”,“/ opt / OcrLEADRuntime”);documentConverter =新DocumentConverter ();documentConverter.SetOcrEngineInstance (ocrEngine真正的);}/ /执行shell脚本的助手方法λ环境字符串ExecuteBashCommand (字符串命令){命令= command.Replace (“\”“,“\ \”);varproc =新过程{StartInfo =新ProcessStartInfo{文件名=“/ bin / bash”,参数=“- c \”“+命令+“\”“,UseShellExecute =假,RedirectStandardOutput =真正的,CreateNoWindow =真正的}};proc.Start ();proc.WaitForExit ();返回proc.StandardOutput.ReadToEnd ();}/ /设置许可码TODO: licString和developerKey替换为一个有效的许可证和关键无效SetLicense (){字符串licString =“(许可证)\ n”+“许可= <文件> <版本> < /版本> 2.0添加许可证这里< / doc >”;字符串developerKey =“添加开发关键”;字节[]licBytes = System.Text.Encoding.UTF8.GetBytes (licString);RasterSupport。SetLicense (licBytes developerKey);}/ /主要转换函数公共字符串ConvertDocument (LEADRequest请求,StringWriter sw){varisUrl = Uri.IsWellFormedUriString(请求。InputUrl UriKind.RelativeOrAbsolute);如果(isUrl){var响应= httpClient.GetAsync (request.InputUrl) .Result;如果(response.IsSuccessStatusCode){var流= response.Content.ReadAsStreamAsync () .Result;使用(var文档= DocumentFactory.LoadFromStream(流,新LoadDocumentOptions ())){字符串ext = DocumentWriter.GetFormatFileExtension (request.DocumentFormat);字符串文件名= Path.Combine (“/ tmp”,Path.ChangeExtension (Path.GetFileName (request.InputUrl), ext));DocumentConverterJobData jobData = DocumentConverterJobs。创建JobData(document, fileName, request.DocumentFormat);DocumentConverterJob工作= documentConverter.Jobs.CreateJob (jobData);documentConverter.Jobs.RunJob(工作);如果(job.Errors。数> 0)foreach(var错误在job.Errors)sw.WriteLine ($在转换”的错误:{error.Error。消息}{error.Error.StackTrace}”);其他的返回文件名;}}其他的sw.WriteLine (“下载的URL不成功”);}其他的sw.WriteLine (“网址是无效的。”);返回零;}}
许可解锁项目需要的特性。它必须设置工具箱函数被调用之前。详情,包括教程为不同的平台,请参考设置一个运行时许可。
有两种类型的运行时许可证:
请注意
添加LEADTOOLS NuGet和本地引用设置许可中会详细介绍添加引用和设置一个许可证教程。
当一个AWS Lambda函数触发的FunctionHandler方法被调用。中的一切函数将调用类全球之前,当函数是第一次启动。在容器温暖的,它只会叫FunctionHandler方法之前执行上下文的变化。
为了利用这个功能,大部分的初始化代码LEADLambdaHandler在每个函数调用构造函数保持尽可能快而容器是什么温暖的。
打开Function.cs文件作为项目的一部分,并添加以下使用使用语句块的休息下。
使用先;
添加下面的全局变量函数类:
公共LEADLambdaHandler LEADHandler =新LEADLambdaHandler ();
取代FunctionHandler与接受下面的一个方法LEADRequest作为输入,而不是一个字符串输入,然后调用LEADHandler.ConvertDocument方法:
公共字符串FunctionHandler (LEADRequest请求,ILambdaContext上下文){StringWriter sw =新StringWriter ();试一试{字符串outputFile = LEADHandler。转换文档(request, sw);如果(outputFile ! =零)sw.WriteLine ($“成功保存到{outputFile}”。);其他的sw.WriteLine (“错误发生。输出文件未得救。”);}抓(异常交货){sw.WriteLine (ex.Message);sw.WriteLine (ex.StackTrace);如果(ex.InnerException ! =零){sw.WriteLine (ex.InnerException.Message);sw.WriteLine (ex.InnerException.StackTrace);}}返回sw.ToString ();}
一旦添加的所有代码,构建项目,以确保一切都按预期工作。
请注意
如果需要的话可以跳过这一步。ZIP包含在这个项目包含所需的λ依赖了。
LEADTOOLS SDK要求某些依赖上安装Linux机器才能正常运转。一个完整的列表,请参阅开始使用Linux LEADTOOLS库和演示项目。
AWSλ提供了一个码头工人形象,包含相同的Linux发行版之前测试功能部署到λ。这也可以用来安装所需的依赖项并创建一个部署包。这需要码头工人的桌面要安装。
码头工人拉amazonlinuxC: \ temp \码头工人码头工人运行- - v C: \ temp \码头工人:/ var /任务amazonlinux:最新rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpmyum - y安装dotnet - sdk 3.1百胜是安装uuid-devel uuidd gcc gcc-c + + glibc-devel kernel-devel kernel-headers libX11 libXt libX11-devel libXt-devel sqlite sqlite-devel freetype fontconfigcsprojdotnet发布< PROJECT-DIR > \ bin \调试\ netcoreapp3.1 \ \ runtimes \ linux-x64 \ nativeassets \ netcoreapp发布到C: \ temp \码头工人C: \ temp \码头工人目录中,创建一个新的文本文件,复制并粘贴以下shell脚本并将其保存CopyDeps.sh:indir=“/ var /任务/”outdir=“/ var /任务/ lib /”ldcache=$ (ldconfig- - - - - -p)mkdir- - - - - -poutdir美元为我在$ (ls$ {indir}/*所以);做deps=$ (ldd我美元| grep“= >”| grep- - - - - -v“liblt”)而IFS=读- - - - - -r线;做结果=”“列表=(行美元)部=$(回声ldcache美元| grep" ${列表[0]}")如果(!- z " $ dep”];然后cp- - - - - -六世" ${列表[2]}"outdir美元2 >/dev/零fi完成了< < <“deps美元”完成
sh /var/task/CopyDeps.shC: \ temp \码头工人\ lib这将包含所有的依赖关系liddl.so.2libexpat.so.1libz.so.1
LEADTOOLS SDK需要安装在环境依赖性Lambda函数。为了保持包小,灵活,λ层使用。关于什么是层的更多信息,请参见AWSλ层。
LEADTOOLS SDK OCR引擎需要附带任何依赖OCR部署。更多信息可以找到所需要的LEADTOOLS OCR模块-铅引擎运行时文件。
因为AWSλ环境是必要的,阴影字体还需要。在阴影字体可以找到更多的信息LEADTOOLS绘图引擎和多平台的考虑。
lead-deps-layer自由文件夹的C: \ temp \码头工人\ lib到lead-deps-layerlead-deps-layer命名native-runtimescsprojdotnet发布< PROJECT-DIR > \ bin \调试\ netcoreapp3.1 \发布\ runtimes \ linux-x64 \ nativeassets \ netcoreapp \所以文件lead-deps-layer \ native-runtimes文件夹C: \ temp \码头工人\ lib文件夹的lead-deps-layerShadowFonts文件夹的< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ \ ShadowFonts到lead-deps-layerOcrLEADRuntime文件夹的< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ \ OcrLEADRuntime到lead-deps-layer
lead-deps-layer:自由,native-runtimes,ShadowFonts,OcrLEADRuntime邮政的内容lead-deps-layer文件夹中。确保邮政lead-deps-layer.zip不包含一个子文件夹同名的,相反,邮政结构看起来像下面的截图:
一旦创建层邮政,它需要上传到AWSλ。
lead-deps-layer
lead-deps-layerlead-deps-layer.zip
层完成后,现在可以发布到AWS的函数。
这将运行dotnet发布的项目,然后zip文件和依赖关系,上传到λ。
前一步骤中创建的包将会很大,因为它包含了很多依赖项添加到层。为了减少规模,压缩包将需要修改和手动上传λ。
< PROJECT-DIR > \ bin \ \ netcoreapp3.1 \发布发布目录LEADTOOLS文件夹包含OCRRuntimes添加到lead-deps-layer<函数名> . zip覆盖的是自动创建的<函数名>打开功能发布< PROJECT-DIR > \ bin \ \ netcoreapp3.1 \发布\ <函数名> . zip,点击好吧,然后单击保存在右上角这将更新函数包,这样就尽可能小。
一旦包上传LD_LIBRARY_PATH环境变量的函数需要更新为了正确加载依赖关系。
LD_LIBRARY_PATH和价值输入/var/lang/lib: / lib64: / usr / lib64 / var /运行时:/ var /运行/ lib: / var /任务:/ var / lib /任务:/ opt / lib / tmp点击保存保存这些更改
一旦设置环境变量,层需要被添加到函数。
lead-deps-layer点击添加这一层添加到函数
确保功能设置为2048 MB的内存:
2048 MB点击保存要保存更改
一旦前面步骤完成,准备进行测试的功能。
hello world活动模板{“InputUrl”:“https://demo.leadtools.com/images/tiff/ocr1.tif”,“DocumentFormat”:1}
点击创建创建测试事件
如果一切都设置正确,执行结果应该返回成功和看起来像:
本教程展示了如何创建一个新的AWS Lambda函数,收集所需的依赖项,并发布到AWS。