Link Search Menu Expand Document

CCDA record to PDF - C#

PDF from HTML Template sample in C# demonstrating ‘CCDA record to PDF’

Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Xml;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ByteScoutWebApiExample
{
    class Program
    {
        // The authentication key (API Key).
        // Get your own by registering at https://app.pdf.co
        const String API_KEY = "********************************";

        static void Main(string[] args)
        {
            // --TemplateID--
            /* 
				Please follow below steps to create your own HTML Template and get "templateId". 
				1. Add new html template in app.pdf.co/templates/html
				2. Copy paste your html template code into this new template. Sample HTML templates can be found at "https://github.com/bytescout/pdf-co-api-samples/tree/master/PDF%20from%20HTML%20template/TEMPLATES-SAMPLES"
				3. Save this new template
				4. Copy it’s ID to clipboard
				5. Now set ID of the template into “templateId” parameter
			*/

            // HTML template using built-in template
            // see https://app.pdf.co/templates/html/2/edit
            var templateId = 425; //Replace with your template Id

            // Data to fill the template
            var reportData = _ExtractDataFromCCDA("./result_covid.xml");
            string templateData = JsonConvert.SerializeObject(reportData, Newtonsoft.Json.Formatting.Indented);

            // Destination PDF file name
            string destinationFile = @".\result.pdf";

            // Create standard .NET web client instance
            WebClient webClient = new WebClient();

            // Set API Key
            webClient.Headers.Add("x-api-key", API_KEY);

            webClient.Headers.Add("Content-Type", "application/json");

            try
            {
                // URL for `HTML to PDF` API call
                string url = Uri.EscapeUriString(string.Format(
                    "https://api.pdf.co/v1/pdf/convert/from/html?name={0}",
                    Path.GetFileName(destinationFile)));

                // Prepare requests params as JSON
                Dictionary<string, object> parameters = new Dictionary<string, object>();
                parameters.Add("name", Path.GetFileName(destinationFile));
                parameters.Add("templateId", templateId);
                parameters.Add("templateData", templateData);

                // Convert dictionary of params to JSON
                string jsonPayload = JsonConvert.SerializeObject(parameters);

                // Execute request
                string response = webClient.UploadString(url, jsonPayload);

                // Parse JSON response
                JObject json = JObject.Parse(response);

                if (json["error"].ToObject<bool>() == false)
                {
                    // Get URL of generated PDF file
                    string resultFileUrl = json["url"].ToString();

                    webClient.Headers.Remove("Content-Type"); // remove the header required for only the previous request

                    // Download the PDF file
                    webClient.DownloadFile(resultFileUrl, destinationFile);

                    Console.WriteLine("Generated PDF document saved as \"{0}\" file.", destinationFile);
                }
                else
                {
                    Console.WriteLine(json["message"].ToString());
                }
            }
            catch (WebException e)
            {
                Console.WriteLine(e.ToString());
            }

            webClient.Dispose();


            Console.WriteLine();
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }

        /// <summary>
        /// Extract Data From C-CDA
        /// </summary>
        private static ResultVM _ExtractDataFromCCDA(string path)
        {
            var oRet = new ResultVM();

            var doc = new XmlDocument();
            doc.Load(path);

            XmlElement root = doc.DocumentElement;
            XmlNode observationNode = root.SelectSingleNode("entry").SelectSingleNode("organizer").SelectSingleNode("component").SelectSingleNode("observation");

            // Get Title
            oRet.Title = root.SelectSingleNode("code").Attributes["displayName"].Value;

            oRet.Description = observationNode.SelectSingleNode("code").Attributes["displayName"].Value;
            oRet.ValuePerUnit = observationNode.SelectSingleNode("value").Attributes["displayName"].Value;
            oRet.Interpretation = observationNode.SelectSingleNode("interpretationCode").Attributes["code"].Value == "A" ? "Abnornal" : "Normal";
            oRet.ReferenceRange = observationNode.SelectSingleNode("referenceRange").SelectSingleNode("observationRange").SelectSingleNode("text").InnerText;

            return oRet;
        }
    }
}

ResultVM.cs
namespace ByteScoutWebApiExample
{
    public class ResultVM
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public string ValuePerUnit { get; set; }
        public string Interpretation { get; set; }
        public string ReferenceRange { get; set; }
    }
}

result_template.html
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>Results</title>
</head>
<body>
    <h3>Covid Result</h3>
    <hr />
    <table border="1" cellspacing="0" cellpadding="10">
        <thead>
            <tr>
                <th>Description</th>
                <th>Value / Unit</th>
                <th>Interpretation</th>
                <th>Reference Range</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th colspan="4">{{Title}}</th>
            </tr>
            <tr ID="LabResult3">
                <td>{{Description}}</td>
                <td>{{ValuePerUnit}}</td>
                <td>{{Interpretation}}</td>
                <td>{{ReferenceRange}}</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

PDF.co Web API: the Web API with a set of tools for documents manipulation, data conversion, data extraction, splitting and merging of documents. Includes image recognition, built-in OCR, barcode generation and barcode decoders to decode bar codes from scans, pictures and pdf.

Get your PDF.co API key here!

Download Source Code (.zip)

return to the previous page explore PDF from HTML Template endpoint