Create Word (DOCX) or PDF file on Azure

GemBox.Document is a standalone .NET component that's ideal for web applications because of its fast performance and thread safety when working with multiple DocumentModel objects.

GemBox.Document can be used on various platforms including Azure Functions and Azure App Services.

Azure Functions

To create an Azure function, search for "Azure Functions" in a new project dialog.

Screenshot of Visual Studio project type selection
Screenshot of Visual Studio project type selection

To avoid any potential issues with GemBox.Document, we recommend using the newer versions of Azure Functions (v3 or above). The following is an Azure function project file:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="GemBox.Document" Version="*" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.20.1" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.1.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.16.4" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

The following example shows how you can create a Word document using GemBox.Document in an Azure Function.

Generated Word document (DOCX format) from Azure Functions
Screenshot of Word file created with Azure function
using GemBox.Document;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.IO;
using System.Net;
using System.Threading.Tasks;

public class GemBoxFunction
{
    [Function("GemBoxFunction")]
    public async Task<HttpResponseData> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequestData req)
    {
        // If using the Professional version, put your serial key below.
        ComponentInfo.SetLicense("FREE-LIMITED-KEY");

        var document = new DocumentModel();

        var section = new Section(document);
        document.Sections.Add(section);

        var paragraph = new Paragraph(document);
        section.Blocks.Add(paragraph);

        var run = new Run(document, "Hello World!");
        paragraph.Inlines.Add(run);

        string fileName = "Output.docx";
        var options = SaveOptions.DocxDefault;

        using var stream = new MemoryStream();
        document.Save(stream, options);
        var bytes = stream.ToArray();

        var response = req.CreateResponse(HttpStatusCode.OK);
        response.Headers.Add("Content-Type", options.ContentType);
        response.Headers.Add("Content-Disposition", "attachment; filename=" + fileName);
        await response.Body.WriteAsync(bytes, 0, bytes.Length);
        return response;
    }
}
Imports GemBox.Document
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports System.IO
Imports System.Net
Imports System.Threading.Tasks

Public Class GemBoxFunction
    <[Function]("GemBoxFunction")>
    Public Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get")> req As HttpRequestData) As Task(Of HttpResponseData)

        ' If using the Professional version, put your serial key below.
        ComponentInfo.SetLicense("FREE-LIMITED-KEY")

        Dim document As New DocumentModel()

        Dim section As New Section(document)
        document.Sections.Add(section)

        Dim paragraph As New Paragraph(document)
        section.Blocks.Add(paragraph)

        Dim inline As New Run(document, "Hello World!")
        paragraph.Inlines.Add(inline)

        Dim fileName = "Output.docx"
        Dim options = SaveOptions.DocxDefault

        Using stream As New MemoryStream()
            document.Save(stream, options)
            Dim bytes = stream.ToArray()

            Dim response = req.CreateResponse(HttpStatusCode.OK)
            response.Headers.Add("Content-Type", options.ContentType)
            response.Headers.Add("Content-Disposition", "attachment; filename=" & fileName)
            Await response.Body.WriteAsync(bytes, 0, bytes.Length)
            Return response
        End Using

    End Function
End Class

Note that saving to an XPS currently works only on Azure Functions that target .NET Framework 4.8.

Azure App Services

App Service is a fully managed platform for building, deploying and scaling web apps. GemBox.Document can be used from applications that run on an App Service.

To build an ASP.NET Core application, check out our ASP.NET Core example.

To publish an application to Azure App service you need to:

1. Pick Azure as publish target.

Screenshot of Visual Studio target selection
Screenshot of Visual Studio target selection

2. Pick Azure App Service as a specific target.

Screenshot of Visual Studio specific target selection
Screenshot of Visual Studio specific target selection

3. Specify existing App Service or create a new one.

Screenshot of Visual Studio specific App Service selection
Screenshot of Visual Studio specific App Service selection

Using full functionality of GemBox.Document in an App Service application requires adjustments explained in detail on Supported Platforms help page.

See also


Next steps

GemBox.Document is a .NET component that enables you to read, write, edit, convert, and print document files from your .NET applications using one simple API. How about testing it today?

Download Buy