本教程展示了如何设置为使用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.Sdk
NuGet包和安装它。接受领导的最终用户许可协议。
对于一个完整的列表的编解码器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 / tmp
ExecuteBashCommand (“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发行版之前测试功能部署到λ。这也可以用来安装所需的依赖项并创建一个部署包。这需要码头工人的桌面要安装。
码头工人拉amazonlinux
C: \ temp \码头工人
码头工人运行- - v C: \ temp \码头工人:/ var /任务amazonlinux:最新
rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
yum - 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 fontconfig
csproj
dotnet发布
< 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.sh
C: \ temp \码头工人\ lib
这将包含所有的依赖关系liddl.so.2
libexpat.so.1
libz.so.1
LEADTOOLS SDK需要安装在环境依赖性Lambda函数。为了保持包小,灵活,λ层使用。关于什么是层的更多信息,请参见AWSλ层。
LEADTOOLS SDK OCR引擎需要附带任何依赖OCR部署。更多信息可以找到所需要的LEADTOOLS OCR模块-铅引擎运行时文件。
因为AWSλ环境是必要的,阴影字体还需要。在阴影字体可以找到更多的信息LEADTOOLS绘图引擎和多平台的考虑。
lead-deps-layer
自由
文件夹的C: \ temp \码头工人\ lib
到lead-deps-layer
lead-deps-layer
命名native-runtimes
csproj
dotnet发布
< PROJECT-DIR > \ bin \调试\ netcoreapp3.1 \发布\ runtimes \ linux-x64 \ nativeassets \ netcoreapp \
所以
文件lead-deps-layer \ native-runtimes
文件夹C: \ temp \码头工人\ lib
文件夹的lead-deps-layer
ShadowFonts
文件夹的< INSTALL_DIR > \ LEADTOOLS22 \ Bin \ \ ShadowFonts
到lead-deps-layer
OcrLEADRuntime
文件夹的< 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-layer
lead-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。