This example shows how to generate a PDF from a DOCX 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.
Note: This code sample is written to specifically work with DWS4.
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 2019 /// class CSRenderExample { // Set your region here. // End-point in the USA private static string DWS_RENDER_URL = "https://us1.dws4.docmosis.com/api/render"; // End-point in the EU // private static string DWS_RENDER_URL = "https://eu1.dws4.docmosis.com/api/render" // End-point in AUS // private static string DWS_RENDER_URL = "https://au1.dws4.docmosis.com/api/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); } } } }