Convert HTML to PDF file in AWS Lambda with NET 6 container image

15 Mar 20249 minutes to read

The Syncfusion HTML to PDF converter is a .NET library for converting webpages, SVG, MHTML, and HTML to PDF using C#. Using this library, convert HTML to PDF document in AWS Lambda with NET 6 container image.

Steps to convert HTML to PDF in AWS Lambda with NET 6 container image

Step 1: Create a new AWS Lambda project with Tests as follows.
Convert HTMLToPDF AWS Lambda Step1

Step 2: In configuration window, name the project and select Create.
Convert HTMLToPDF AWS Lambda Step2

Step 3: Select Blueprint as .NET 6 (Container Image) Function and click Finish.
Convert HTMLToPDF AWS Lambda Step3

Step 4: Install the Syncfusion.HtmlToPdfConverter.Net.Aws and AWSSDK.Lambda NuGet package as a reference to your AWS lambda project from NuGet.org.
NuGet package installation

NOTE

Starting with v16.2.0.x, if you reference Syncfusion assemblies from trial setup or from the NuGet feed, you also have to add “Syncfusion.Licensing” assembly reference and include a license key in your projects. Please refer to this link to know about registering Syncfusion license key in your application to use our components.

Step 5: Using the following namespaces in the Function.cs file.

  • C#
  • using Syncfusion.HtmlConverter;
    using Syncfusion.Pdf;
    using System.IO;

    Step 6: Add the following code sample in the Function.cs to convert HTML to PDF document using Convert method in HtmlToPdfConverter class. The Blink command line arguments based on the given CommandLineArguments property of BlinkConverterSettings class.

  • C#
  • public string FunctionHandler(string input, ILambdaContext context)
    {
       //Initialize HTML to a PDF converter with the Blink rendering engine.
       HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter(HtmlRenderingEngine.Blink);
           
       BlinkConverterSettings blinkConverterSettings = new BlinkConverterSettings();
       blinkConverterSettings.BlinkPath = Path.GetFullPath("BlinkBinariesAws");
       blinkConverterSettings.CommandLineArguments.Add("--no-sandbox");
       blinkConverterSettings.CommandLineArguments.Add("--disable-setuid-sandbox");
       blinkConverterSettings.AdditionalDelay = 3000;
       htmlConverter.ConverterSettings = blinkConverterSettings;
     
       //Convert the HTML string to PDF.
       PdfDocument document = htmlConverter.Convert(input, PathToFile());        
     
       //Save the document into a stream.
       MemoryStream memoryStream = new MemoryStream();
       //Save and close the PDFDocument.
       document.Save(memoryStream);
       document.Close(true);
       string base64 = Convert.ToBase64String(memoryStream.ToArray());
       memoryStream.Close();
       memoryStream.Dispose();
     
       return base64;
    }
    
    public static string PathToFile()
    {
       string? path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
       if (string.IsNullOrEmpty(path))
       {
          path = Environment.OSVersion.Platform == PlatformID.Unix ? @"/" : @"\";
       }
       return Environment.OSVersion.Platform == PlatformID.Unix ? string.Concat(path.Substring(5), @"/") : string.Concat(path.Substring(6), @"\");
    }

    Step 7: Create a new folder as Helper and add a class file as AWSHelper.cs. Add the following namespaces and code samples in the AWSHelper class to invoke the published AWS Lambda function using the function name and access keys.

  • C#
  • Using Amazon.Lambda;
    using Amazon.Lambda.Model;
    using Newtonsoft.Json;
    
    public class AWSHelper
    {
       public static async Task<byte[]> RunLambdaFunction(string html)
       {
            try
            {
                var AwsAccessKeyId = "awsaccessKeyID";
                var AwsSecretAccessKey = "awsSecretAccessKey";
     
                AmazonLambdaClient client = new AmazonLambdaClient(AwsAccessKeyId, AwsSecretAccessKey, Amazon.RegionEndpoint.USEast1);
                InvokeRequest invoke = new InvokeRequest
                {
                    FunctionName = "AWSLambdaDockerContainer",
                    InvocationType = InvocationType.RequestResponse,
                    Payload = Newtonsoft.Json.JsonConvert.SerializeObject(html)
                };
                //Get the InvokeResponse from the client InvokeRequest.
                InvokeResponse response = await client.InvokeAsync(invoke);
     
                //Read the response stream.
                Console.WriteLine($"Response: {response.LogResult}");
                Console.WriteLine($"Response: {response.StatusCode}");
                Console.WriteLine($"Response: {response.FunctionError}");
                var stream = new StreamReader(response.Payload);
                JsonReader reader = new JsonTextReader(stream);
                var serilizer = new JsonSerializer();
                var responseText = serilizer.Deserialize(reader);
     
                //Convert Base64String into a PDF document.
                return Convert.FromBase64String(responseText.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception Occured HTMLToPDFHelper: {ex}");
            }
        return Convert.FromBase64String("");
        }
    }

    Step 8: Right-click the project and select Publish to AWS Lambda.

    Convert HTMLToPDF AWS Lambda Step5

    Step 9: Create a new AWS profile in the Upload Lambda Function Window. After creating the profile, add a name for the Lambda function to publish. Then, click Next.

    Convert HTMLToPDF AWS Lambda Step6

    Step 10: In the Advanced Function Details window, specify the Role Name as based on AWS Managed policy. After selecting the role, click the Upload button to deploy your application.

    Convert HTMLToPDF AWS Lambda Step7
    Convert HTMLToPDF AWS Lambda Step8

    Step 11: After deploying the application, Sign in to your AWS account, and you can see the published Lambda function in the AWS console.

    Convert HTMLToPDF AWS Lambda Step9

    Steps to invoke the AWS Lambda function from the Test application

    Step 12: Add the following code to invoke the AWS lambda function with the HTML string from the Function Test.

  • C#
  • public class FunctionTest
    {
        [Fact]
        public void HtmlToPDFFunction()
        {
            string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            string filePath = Environment.OSVersion.Platform == PlatformID.Unix ? string.Concat(path.Substring(5), @"/") : string.Concat(path.Substring(6), @"\");
     
            var html = File.ReadAllText($"{filePath}/HtmlSample.html");
            byte[] base64 = null;
            base64 = AWSHelper.RunLambdaFunction(html).Result;
     
            FileStream file = new FileStream($"{filePath}/file{DateTime.Now.Ticks}.pdf", FileMode.Create, FileAccess.Write);
            var ms = new MemoryStream(base64);
            ms.WriteTo(file);
            file.Close();
            ms.Close();
        }
    }

    Step 13: Right click the test application and select Run Tests.

    Convert HTMLToPDF AWS Lambda Step10

    Step 14: By executing the program, you will get the PDF document as follows.

    Convert HTMLToPDF AWS Lambda Step11

    A complete working sample can be downloaded from Github.