在 Azure 函數(shù)中使用 Aspose.Words 轉(zhuǎn)換包含圖像的文檔
Aspose.Words是一種高級Word文檔處理API,用于執(zhí)行各種文檔管理和操作任務(wù)。API支持生成,修改,轉(zhuǎn)換,呈現(xiàn)和打印文檔,而無需在跨平臺應(yīng)用程序中直接使用Microsoft Word。
Aspose API支持流行文件格式處理,并允許將各類文檔導(dǎo)出或轉(zhuǎn)換為固定布局文件格式和最常用的圖像/多媒體格式。
在部署到 Azure 時,使用 Azure Functions 中的 Aspose.Words 將包含圖像的文檔轉(zhuǎn)換為固定頁面格式在部署到 Azure 時無法正常工作,因?yàn)閳D像未保留。但是,這種轉(zhuǎn)換在本地計(jì)算機(jī)上正常工作。此問題背后的原因是 SkiaSharp 原生資產(chǎn)未正確發(fā)布。此問題在 Github 中報告給 Azure。
為了解決此問題,您可以在 .csproj 文件中添加以下部分,以便正確復(fù)制本機(jī)資產(chǎn):
<Target Name="CopyRequiredNativeAssets" AfterTargets="_FunctionsPostPublish"> <ItemGroup> <NativeAssetToCopy Include="$(PublishDir)runtimes\win-x86\native\libSkiaSharp.dll" /> </ItemGroup> <Copy SourceFiles="@(NativeAssetToCopy)" DestinationFolder="$(PublishDir)bin" /> </Target>
以下示例演示如何在 Azure 函數(shù)中使用 Aspose.Words,并詳細(xì)介紹如何添加上述代碼。
先決條件
- Active Azure 訂閱。如果您沒有免費(fèi)帳戶,請?jiān)陂_始之前創(chuàng)建一個免費(fèi)帳戶。
- Visual Studio 2019 或 Visual Studio 2017 使用最新安裝的 Azure Functions 工具來創(chuàng)建項(xiàng)目。
創(chuàng)建 Azure 函數(shù)應(yīng)用程序
您需要使用 Visual Studio 創(chuàng)建 Azure Functions 應(yīng)用程序。創(chuàng)建的應(yīng)用程序已經(jīng)有一個簡單的“Hello World”函數(shù)代碼。
在此示例中,您將創(chuàng)建一個簡單的“Hello World”文檔,并將其作為 PDF 文件返回到用戶的瀏覽器。要實(shí)現(xiàn)此目的,請執(zhí)行以下操作
1、開始使用 Aspose.Words 創(chuàng)建函數(shù),方法是添加對最新版本的 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(@"https://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中運(yùn)行代碼以對其進(jìn)行測試。結(jié)果將顯示在控制臺輸出中。
3、將 URL 從控制臺輸出復(fù)制到您喜歡的瀏覽器以獲取輸出文檔,該文檔應(yīng)如下所示:
4、現(xiàn)在,如果將創(chuàng)建的函數(shù)部署到 Azure,則由于本文開頭所述的問題,將不會呈現(xiàn)映像。輸出如下所示:
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、再次發(fā)布項(xiàng)目,并驗(yàn)證圖像現(xiàn)在是否存在于生成的輸出中。