Cloud Render using C#

This example shows how to generate a PDF from a DOC template using C#.  It calls the Docmosis REST API to merge the data with the template and stream the result back.

The sample code includes the instructions to get started. You will need a Free Trial and then plug your Docmosis Cloud access key into the code below, then run.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace Docmosis
{
    /// 

    /// This sample code shows a render of the "samples/WelcomeTemplate.docx" template using JSON format
    /// instruction and data.
    ///
    /// There are several constants at the top of this file which you can modify to suit your test. You
    /// need to set:
    ///
    /// ACCESS_KEY - this key is your unique access to the Docmosis services (keep it safe). You can see
    /// your access key in your Account Settings in the Cloud area Docmosis web site.
    ///
    /// If you have troubles connecting, it is likely because you have a proxy server you need to
    /// configure. See the PROXY_* settings below to enable it.
    /// 

    ///
    /// Copyright Docmosis 2012
    ///
    class CSRenderExample
    {
        private static string DWS_RENDER_URL = "https://dws2.docmosis.com/services/rs/render";

        // Set your access key here. This is visible in your cloud account in the Docmosis Web Site.
        // It is your key to accessing your service - keep it private and safe.
        private const string ACCESS_KEY = "XXXXX";

        // The output format we want to produce (pdf, doc, odt and more exist)
        private const string OUTPUT_FORMAT = "pdf";

        // the name of the template (stored in our cloud account) to use
        private const string TEMPLATE = "samples/WelcomeTemplate.docx";

        // the name of the file we are going to write the document to
        private const string OUTPUT_FILE = "myWelcome." + OUTPUT_FORMAT;

        // Proxy settings if needed to reach the internet
        private const string PROXY_HOST = "";
        private const string PROXY_PORT = "";
        private const string PROXY_USER = "";
        private const string PROXY_PASSWD = "";

        static void Main(string[] args)
        {
            if (ACCESS_KEY.Equals("XXXXX", StringComparison.Ordinal))
            {
                Console.Error.WriteLine("Please set your private ACCESS_KEY at the top of this file from your Docmosis cloud account.");
                Console.Out.WriteLine("Press any key");
                Console.ReadKey();
                System.Environment.Exit(1);
            }
            HttpWebResponse response;
            try
            {
                response = sendRequest();
                try
                {
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        saveToFile(response.GetResponseStream());
                    }
                    else
                    {
                        processError(response);
                    }
                }
                finally
                {
                    response.Close();
                }
            }
            catch (WebException e)
            {
                Console.WriteLine("ERROR:" + e.Message);
                using (WebResponse webResponse = e.Response)
                {
                    HttpWebResponse httpResponse = (HttpWebResponse)webResponse;
                    processError(httpResponse);
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("Unable to connect to the docmosis cloud: " + e.Message);
                Console.Error.WriteLine(e.StackTrace);
                Console.Error.WriteLine("If you have a proxy, configure proxy settings at the top of this example.");
                Console.ReadKey();
                System.Environment.Exit(2);
            }
            Console.Out.WriteLine("Press any key");
            Console.ReadKey();
        }

        /// 

        /// Sends the request to the server and returns the response.
        /// 

        /// 
        /// the response returned by the server
        /// 
        static HttpWebResponse sendRequest()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(DWS_RENDER_URL);
            if (PROXY_HOST.Length != 0)
            {
                WebProxy proxy = new WebProxy(PROXY_HOST + ":" + PROXY_PORT, true);
                if (PROXY_USER.Length != 0)
                {
                    proxy.Credentials = new NetworkCredential(PROXY_USER, PROXY_PASSWD);
                }
                Console.WriteLine(proxy.Address);
                request.Proxy = proxy;
            }

            string renderRequest = buildRequest();
            Console.WriteLine("Sending request:" + renderRequest);
            byte[] data = new UTF8Encoding().GetBytes(renderRequest);

            request.Method = "POST";
            request.ContentType = "application/json; charset=utf-8";
            request.ContentLength = data.Length;

            Stream stream = request.GetRequestStream();
            stream.Write(data, 0, data.Length);

            return (HttpWebResponse)request.GetResponse();
        }

        /// 

        /// Build the request in JSON format. You can do it in XML if you prefer (code not shown here).
        /// 

        private static string buildRequest()
        {

            StringBuilder sb = new StringBuilder();

            // Start building the instruction
            sb.Append("{\n");
            sb.Append("\"accessKey\":\"").Append(ACCESS_KEY).Append("\",\n");
            sb.Append("\"templateName\":\"").Append(TEMPLATE).Append("\",\n");
            sb.Append("\"outputName\":\"").Append(OUTPUT_FILE).Append("\",\n");
            sb.Append("\"outputFormat\":\"").Append(OUTPUT_FORMAT).Append("\",\n");

            // now add the data specifically for this template
            string[] messages = { "This cloud thing is better than I thought.",
                                  "The sun is shining",
                                  "Right, now back to work." };

            sb.Append("\"data\":{\n");
            sb.Append("\"title\":\"Welcome to Docmosis in the Cloud\",\n");
            sb.Append("\"messages\":[\n");
            for (int i = 0; i < messages.Length; i++)
            {
                sb.Append("{\"msg\":\"").Append(messages[i]).Append("\"}");
                if (i < messages.Length - 1)
                {
                    sb.Append(',');
                }
                sb.Append("\n");
            }
            sb.Append("]}\n");

            // end the entire instruction
            sb.Append("}\n");

            return sb.ToString();
        }

        /// 

        /// Save the given Input stream to a file
        /// 

        ///the Stream containing the content to save
        private static void saveToFile(Stream content)
        {
            byte[] buff = new byte[1000];
            int bytesRead = 0;

            FileStream file = File.Create(OUTPUT_FILE);
            try
            {
                while ((bytesRead = content.Read(buff, 0, buff.Length)) > 0)
                {
                    file.Write(buff, 0, bytesRead);
                }
            }
            finally
            {
                file.Close();
            }

            Console.Out.WriteLine("Created file:" + file.Name);
        }

        /// 

        ///  Something went wrong in the call to the service, tell the user about it
        /// 

        ///The response causing errors
        private static void processError(HttpWebResponse response)
        {
            Console.Error.WriteLine("Our call failed: status = {0}", response.StatusCode);
            Console.Error.WriteLine("message:" + response.StatusDescription);
            StreamReader errorReader = new StreamReader(response.GetResponseStream());
            String msg;
            while ((msg = errorReader.ReadLine()) != null)
            {
                Console.Error.WriteLine(msg);
            }
        }
    }
}

Feedback

Invalid Input

Sorry, this field will only accept letters and numbers, and not special characters, to limit spam.

Sorry, this field will only accept letters and numbers, and not special characters, to limit spam.

Invalid Input

Applies To

Docmosis-Java Tornado Cloud
Version(s) - - DWS2