在 Azure 函数中使用 Aspose.Words 转换包含图像的文档
Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。
Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像/多媒体格式。
在部署到 Azure 时,使用 Azure Functions 中的 Aspose.Words 将包含图像的文档转换为固定页面格式在部署到 Azure 时无法正常工作,因为图像未保留。但是,这种转换在本地计算机上正常工作。此问题背后的原因是 SkiaSharp 原生资产未正确发布。此问题在 Github 中报告给 Azure。
为了解决此问题,您可以在 .csproj 文件中添加以下部分,以便正确复制本机资产:
<Target Name="CopyRequiredNativeAssets" AfterTargets="_FunctionsPostPublish"> <ItemGroup> <NativeAssetToCopy Include="$(PublishDir)runtimes\win-x86\native\libSkiaSharp.dll" /> </ItemGroup> <Copy SourceFiles="@(NativeAssetToCopy)" DestinationFolder="$(PublishDir)bin" /> </Target>
以下示例演示如何在 Azure 函数中使用 Aspose.Words,并详细介绍如何添加上述代码。
先决条件
- Active Azure 订阅。如果您没有免费帐户,请在开始之前创建一个免费帐户。
- Visual Studio 2019 或 Visual Studio 2017 使用最新安装的 Azure Functions 工具来创建项目。
创建 Azure 函数应用程序
您需要使用 Visual Studio 创建 Azure Functions 应用程序。创建的应用程序已经有一个简单的“Hello World”函数代码。
在此示例中,您将创建一个简单的“Hello World”文档,并将其作为 PDF 文件返回到用户的浏览器。要实现此目的,请执行以下操作
1、开始使用 Aspose.Words 创建函数,方法是添加对最新版本的 Aspose.Words 的 NuGet 引用。然后修改代码,如下所示:
using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Aspose.Words; namespace AsposeWordsAzureTestApp { public static class CreateTestDocument { [FunctionName("CreateTestDocument")] public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log) { log.LogInformation("C# HTTP trigger function processed a request."); // Create a simple document using DocumentBuilder. Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); // Write some text in the document. builder.Writeln("Hello Aspose.Words!"); // Write OS we are running on. builder.Writeln("You are running on " + System.Environment.OSVersion.VersionString); // Insert some image into the document. builder.InsertImage(@"//cms.admin.containerize.com/templates/aspose/App_Themes/V3/images/aspose-logo.png"); // Now save the created document to PDF and return as a FileContentResult. using (MemoryStream ms = new MemoryStream()) { doc.Save(ms, SaveFormat.Pdf); return new FileContentResult(ms.ToArray(), "application/pdf") { FileDownloadName = "out.pdf" }; } } } }
2、在Visual Studio中运行代码以对其进行测试。结果将显示在控制台输出中。
3、将 URL 从控制台输出复制到您喜欢的浏览器以获取输出文档,该文档应如下所示:
4、现在,如果将创建的函数部署到 Azure,则由于本文开头所述的问题,将不会呈现映像。输出如下所示:
5、在记事本中打开 .csproj 文件,并向其添加以下部分:
<Target Name="CopyRequiredNativeAssets" AfterTargets="_FunctionsPostPublish"> <br> <ItemGroup> <br> <NativeAssetToCopy<br> Include="$(PublishDir)runtimes\win-x86\native\libSkiaSharp.dll" /> <br> </ItemGroup> <br> <Copy SourceFiles="@(NativeAssetToCopy)" <br> DestinationFolder="$(PublishDir)bin" /> <br> </Target>
6、再次发布项目,并验证图像现在是否存在于生成的输出中。