How to directly Print JPG & PNG images without Preview or Printer Dialog from ASP.NET (2023)

Creating/Editing Controllers

Create a new Controller and name it WebClientPrintAPIController and then copy/paste the following code:

using Neodynamic.SDK.Web;using Microsoft.Extensions.Caching.Memory;using Microsoft.AspNetCore.Authorization;[Authorize]public class WebClientPrintAPIController : Controller{//IMPORTANT NOTE >>>>>>>>>>// We're going to use MemoryCache to store users related staff like// the list of printers and they have the WCPP client utility installed// BUT you can change it based on your dev needs!!!// For instance, you could use a Distributed Cache instead!//>>>>>>>>>>>>>>>>>>>>>>>>>private readonly IMemoryCache _MemoryCache;public WebClientPrintAPIController(IMemoryCache memCache){_MemoryCache = memCache;}[AllowAnonymous]public IActionResult ProcessRequest(){//get session IDstring sessionID = HttpContext.Request.Query["sid"].ToString();//get Query Stringstring queryString = HttpContext.Request.QueryString.Value;try{//Determine and get the Type of Request RequestType prType = WebClientPrint.GetProcessRequestType(queryString);if (prType == RequestType.GenPrintScript ||prType == RequestType.GenWcppDetectScript){//Let WebClientPrint to generate the requested scriptbyte[] script = WebClientPrint.GenerateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, HttpContext.Request.Scheme), queryString);return File(script, "application/x-javascript", "WebClientPrintScript");}else if (prType == RequestType.ClientSetWcppVersion){//This request is a ping from the WCPP utility//so store the session ID indicating it has the WCPP installed//also store the WCPP Version if availablestring wcppVersion = HttpContext.Request.Query["wcppVer"];if (string.IsNullOrEmpty(wcppVersion))wcppVersion = "1.0.0.0";_MemoryCache.Set(sessionID + "wcppInstalled", wcppVersion);}else if (prType == RequestType.ClientSetInstalledPrinters){//WCPP Utility is sending the installed printers at client side//so store this info with the specified session IDstring printers = HttpContext.Request.Query["printers"].ToString();if (!string.IsNullOrEmpty(printers) && printers.Length > 0)printers = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printers));_MemoryCache.Set(sessionID + "printers", printers);}else if (prType == RequestType.ClientSetInstalledPrintersInfo){//WCPP Utility is sending the client installed printers with detailed info//so store this info with the specified session ID//Printers Info is in JSON formatstring printersInfo = HttpContext.Request.Form["printersInfoContent"];if (string.IsNullOrEmpty(printersInfo) == false)printersInfo = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printersInfo));_MemoryCache.Set(sessionID + "printersInfo", printersInfo);}else if (prType == RequestType.ClientGetWcppVersion){//return the WCPP version for the specified sid if anybool sidWcppVersion = (_MemoryCache.Get<string>(sessionID + "wcppInstalled") != null);return Ok(sidWcppVersion ? _MemoryCache.Get<string>(sessionID + "wcppInstalled") : "");}else if (prType == RequestType.ClientGetInstalledPrinters){//return the installed printers for the specified sid if anybool sidHasPrinters = (_MemoryCache.Get<string>(sessionID + "printers") != null);return Ok(sidHasPrinters ? _MemoryCache.Get<string>(sessionID + "printers") : "");}else if (prType == RequestType.ClientGetInstalledPrintersInfo){//return the installed printers with detailed info for the specified Session ID (sid) if anybool sidHasPrinters = (_MemoryCache.Get<string>(sessionID + "printersInfo") != null);return Ok(sidHasPrinters ? _MemoryCache.Get<string>(sessionID + "printersInfo") : "");}}catch{return BadRequest();}return Ok();}}

Edit the HomeController to the following code:

public class HomeController : Controller{ public IActionResult Index() { ViewData["WCPPDetectionScript"] = Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, Url.ActionContext.HttpContext.Request.Scheme), Url.ActionContext.HttpContext.Session.Id); return View(); } public IActionResult PrintImage() { return View(); }}

Add a new Controller and name it PrintImageController and paste the following code:

using Neodynamic.SDK.Web;public class PrintImageController : Controller{ private readonly IHostingEnvironment _hostEnvironment; public PrintImageController(IHostingEnvironment hostEnvironment) { _hostEnvironment = hostEnvironment; } public IActionResult Index() { ViewData["WCPScript"] = Neodynamic.SDK.Web.WebClientPrint.CreateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, Url.ActionContext.HttpContext.Request.Scheme), Url.Action("PrintFile", "PrintImage", null, Url.ActionContext.HttpContext.Request.Scheme), Url.ActionContext.HttpContext.Session.Id); return View(); }[Microsoft.AspNetCore.Authorization.AllowAnonymous] public IActionResult PrintFile(string useDefaultPrinter, string printerName){//full path of the image file to be printed string imgFilePath = @"c:\myImage.jpg"; //create a temp file name for our image file... string fileName = "MyFile-" + Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(imgFilePath); //Create a PrintFile object with the image file PrintFile file = new PrintFile(imgFilePath, fileName); //Create a ClientPrintJob and send it back to the client! ClientPrintJob cpj = new ClientPrintJob(); //set file to print... cpj.PrintFile = file;//set client printer...if (useDefaultPrinter == "checked" || printerName == "null")cpj.ClientPrinter = new DefaultPrinter();elsecpj.ClientPrinter = new InstalledPrinter(printerName); return File(cpj.GetContent(), "application/octet-stream"); }}

Creating/Editing Views

The default View is for detecting whether the client machine has the WebClientPrint Processor (WCPP) Utility installed. Edit the Views / Shared / _Layout.cshtml file and add the folowing section to the BODY:

Be sure this View links to jQuery 1.4.1+ file!

<body> ... @RenderSection("scripts", required: false)...</body>

Edit the Views / Home / Index.cshtml file and copy/paste the folowing code:

@{ ViewBag.Title = "Home Page";}<div id="msgInProgress"> <div id="mySpinner" style="width:32px;height:32px"></div> <br /> <h3>Detecting WCPP utility at client side...</h3> <h3>Please wait a few seconds...</h3> <br /></div><div id="msgInstallWCPP" style="display:none;"> <h3>#1 Install WebClientPrint Processor (WCPP)!</h3> <p> <strong>WCPP is a native app (without any dependencies!)</strong> that handles all print jobs generated by the <strong>WebClientPrint for ASP.NET component</strong> at the server side. The WCPP is in charge of the whole printing process and can be installed on <strong>Windows, Linux, Mac & Raspberry Pi!</strong> </p> <p> <a href="//www.neodynamic.com/downloads/wcpp/" target="_blank" >Download and Install WCPP from Neodynamic website</a><br /> </p> <h3>#2 After installing WCPP...</h3> <p> <a asp-controller="PrintImage" asp-action="Index" >You can go and test the printing page...</a> </p></div>@section scripts{ <script type="text/javascript"> var wcppPingTimeout_ms = 60000; //60 sec var wcppPingTimeoutStep_ms = 500; //0.5 sec function wcppDetectOnSuccess(){ // WCPP utility is installed at the client side // redirect to WebClientPrint sample page // get WCPP version var wcppVer = arguments[0]; if(wcppVer.substring(0, 1) == "6") window.location.href = '@Url.Action("Index", "PrintImage")'; else //force to install WCPP v6.0 wcppDetectOnFailure(); } function wcppDetectOnFailure() { // It seems WCPP is not installed at the client side // ask the user to install it $('#msgInProgress').hide(); $('#msgInstallWCPP').show(); }</script>@* WCPP detection script generated by HomeController *@@Html.Raw(ViewData["WCPPDetectionScript"]) }

Add a new View with the following name and under such folders: Views / PrintImage / Index.cshtml Then, copy/paste the folowing code:

<h3>Print image file</h3><div><label class="checkbox"><input type="checkbox" id="useDefaultPrinter" /> <strong>Print to Default printer</strong> or...</label></div><div id="loadPrinters">Click to load and select one of the installed printers!<br /> <input type="button" onclick="javascript:jsWebClientPrint.getPrinters();" value="Load installed printers..." /><br /><br /></div><div id="installedPrinters" style="visibility:hidden"><label for="installedPrinterName">Select an installed Printer:</label><select name="installedPrinterName" id="installedPrinterName"></select></div><script type="text/javascript">var wcppGetPrintersTimeout_ms = 60000; //60 sec var wcppGetPrintersTimeoutStep_ms = 500; //0.5 secfunction wcpGetPrintersOnSuccess() {// Display client installed printersif (arguments[0].length > 0) {var p = arguments[0].split("|");var options = '';for (var i = 0; i < p.length; i++) {options += '<option>' + p[i] + '</option>';}$('#installedPrinters').css('visibility', 'visible');$('#installedPrinterName').html(options);$('#installedPrinterName').focus();$('#loadPrinters').hide();} else {alert("No printers are installed in your system.");}}function wcpGetPrintersOnFailure() {// Do something if printers cannot be got from the clientalert("No printers are installed in your system.");}</script><br /><input type="button" style="font-size:18px" onclick="javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val());" value="Print Image..." />@section scripts{ @* Register the WebClientPrint script code generated by PrintImageController. *@@Html.Raw(ViewData["WCPScript"]); }

Creating/Editing Controllers

Create a new Controller and name it WebClientPrintAPIController and then copy/paste the following code:

public class WebClientPrintAPIController : Controller{ //********************************* // IMPORTANT NOTE // In this sample we store users related stuff (like // the list of printers and whether they have the WCPP // client utility installed) in the Application cache // object part of ASP.NET BUT you can change it to // another different storage (like a DB or file server)! // which will be required in Load Balacing scenarios //********************************* [AllowAnonymous] public void ProcessRequest() { //get session ID string sessionID = (HttpContext.Request["sid"] != null ? HttpContext.Request["sid"] : null); //get Query String string queryString = HttpContext.Request.Url.Query; try { //Determine and get the Type of Request RequestType prType = WebClientPrint.GetProcessRequestType(queryString); if (prType == RequestType.GenPrintScript || prType == RequestType.GenWcppDetectScript) { //Let WebClientPrint to generate the requested script byte[] script = WebClientPrint.GenerateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, HttpContext.Request.Url.Scheme), queryString); HttpContext.Response.ContentType = "text/javascript"; HttpContext.Response.BinaryWrite(script); HttpContext.Response.End(); } else if (prType == RequestType.ClientSetWcppVersion) { //This request is a ping from the WCPP utility //so store the session ID indicating it has the WCPP installed //also store the WCPP Version if available string wcppVersion = HttpContext.Request["wcppVer"]; if (string.IsNullOrEmpty(wcppVersion)) wcppVersion = "1.0.0.0"; HttpContext.Application.Set(sessionID + "wcppInstalled", wcppVersion); } else if (prType == RequestType.ClientSetInstalledPrinters) { //WCPP Utility is sending the installed printers at client side //so store this info with the specified session ID string printers = HttpContext.Request["printers"]; if (string.IsNullOrEmpty(printers) == false) printers = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printers)); HttpContext.Application.Set(sessionID + "printers", printers); } else if (prType == RequestType.ClientSetInstalledPrintersInfo) { //WCPP Utility is sending the client installed printers with detailed info //so store this info with the specified session ID //Printers Info is in JSON format string printersInfo = HttpContext.Request.Form["printersInfoContent"]; if (string.IsNullOrEmpty(printersInfo) == false) printersInfo = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printersInfo)); HttpContext.Application.Set(sessionID + "printersInfo", printersInfo); } else if (prType == RequestType.ClientGetWcppVersion) { //return the WCPP version for the specified sid if any bool sidWcppVersion = (HttpContext.Application.Get(sessionID + "wcppInstalled") != null); HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write((sidWcppVersion ? HttpContext.Application.Get(sessionID + "wcppInstalled") : "")); HttpContext.Response.End(); } else if (prType == RequestType.ClientGetInstalledPrinters) { //return the installed printers for the specified sid if any bool sidHasPrinters = (HttpContext.Application.Get(sessionID + "printers") != null); HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write((sidHasPrinters ? HttpContext.Application.Get(sessionID + "printers") : "")); HttpContext.Response.End(); } else if (prType == RequestType.ClientGetInstalledPrintersInfo) { //return the installed printers with detailed info for the specified Session ID (sid) if any bool sidHasPrinters = (HttpContext.Application[sessionID + "printersInfo"] != null); HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write(sidHasPrinters ? HttpContext.Application[sessionID + "printersInfo"] : ""); } } catch (Exception ex) { HttpContext.Response.StatusCode = 500; HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write(ex.Message + " - StackTrace: " + ex.StackTrace); HttpContext.Response.End(); } }}

Edit the HomeController to the following code:

public class HomeController : Controller{ public ActionResult Index() { ViewBag.WCPPDetectionScript = Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, HttpContext.Request.Url.Scheme), HttpContext.Session.SessionID); return View(); } public ActionResult PrintImage() { return View(); }}

Add a new Controller and name it PrintImageController and paste the following code:

using Neodynamic.SDK.Web;public class PrintImageController : Controller{public ActionResult Index(){ViewBag.WCPScript = WebClientPrint.CreateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, HttpContext.Request.Url.Scheme), Url.Action("PrintFile", "PrintImage", null, HttpContext.Request.Url.Scheme), HttpContext.Session.SessionID);return View();}[AllowAnonymous]public void PrintFile(string useDefaultPrinter, string printerName){//full path of the image file to be printed string imgFilePath = @"c:\myImage.jpg"; //create a temp file name for our image file... string fileName = "MyFile-" + Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(imgFilePath); //Create a PrintFile object with the image file PrintFile file = new PrintFile(imgFilePath, fileName); //Create a ClientPrintJob and send it back to the client! ClientPrintJob cpj = new ClientPrintJob(); //set file to print... cpj.PrintFile = file;//set client printer...if (useDefaultPrinter == "checked" || printerName == "null")cpj.ClientPrinter = new DefaultPrinter();elsecpj.ClientPrinter = new InstalledPrinter(printerName);//send it...System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";System.Web.HttpContext.Current.Response.BinaryWrite(cpj.GetContent());System.Web.HttpContext.Current.Response.End();}}

Creating/Editing Views

The default View is for detecting whether the client machine has the WebClientPrint Processor (WCPP) Utility installed. Edit the Views / Shared / _Layout.cshtml file and add the folowing section to the BODY:

Be sure this View links to jQuery 1.4.1+ file!

<body> ... @RenderSection("scripts", required: false)...</body>

Edit the Views / Home / Index.cshtml file and copy/paste the folowing code:

@{ ViewBag.Title = "Home Page";}<div id="msgInProgress"> <div id="mySpinner" style="width:32px;height:32px"></div> <br /> <h3>Detecting WCPP utility at client side...</h3> <h3>Please wait a few seconds...</h3> <br /></div><div id="msgInstallWCPP" style="display:none;"> <h3>#1 Install WebClientPrint Processor (WCPP)!</h3> <p> <strong>WCPP is a native app (without any dependencies!)</strong> that handles all print jobs generated by the <strong>WebClientPrint for ASP.NET component</strong> at the server side. The WCPP is in charge of the whole printing process and can be installed on <strong>Windows, Linux, Mac & Raspberry Pi!</strong> </p> <p> <a href="//www.neodynamic.com/downloads/wcpp/" target="_blank" >Download and Install WCPP from Neodynamic website</a><br /> </p> <h3>#2 After installing WCPP...</h3> <p> <a href="@Url.Action("Index", "PrintImage")" >You can go and test the printing page...</a> </p></div>@section scripts{ <script type="text/javascript"> var wcppPingTimeout_ms = 60000; //60 sec var wcppPingTimeoutStep_ms = 500; //0.5 sec function wcppDetectOnSuccess(){ // WCPP utility is installed at the client side // redirect to WebClientPrint sample page // get WCPP version var wcppVer = arguments[0]; if(wcppVer.substring(0, 1) == "6") window.location.href = '@Url.Action("Index", "PrintImage")'; else //force to install WCPP v6.0 wcppDetectOnFailure(); } function wcppDetectOnFailure() { // It seems WCPP is not installed at the client side // ask the user to install it $('#msgInProgress').hide(); $('#msgInstallWCPP').show(); }</script>@* WCPP detection script generated by HomeController *@@Html.Raw(ViewBag.WCPPDetectionScript) }

Add a new View with the following name and under such folders: Views / PrintImage / Index.cshtml Then, copy/paste the folowing code:

<h3>Print image file</h3><div><label class="checkbox"><input type="checkbox" id="useDefaultPrinter" /> <strong>Print to Default printer</strong> or...</label></div><div id="loadPrinters">Click to load and select one of the installed printers!<br /> <input type="button" onclick="javascript:jsWebClientPrint.getPrinters();" value="Load installed printers..." /><br /><br /></div><div id="installedPrinters" style="visibility:hidden"><label for="installedPrinterName">Select an installed Printer:</label><select name="installedPrinterName" id="installedPrinterName"></select></div><script type="text/javascript">var wcppGetPrintersTimeout_ms = 60000; //60 sec var wcppGetPrintersTimeoutStep_ms = 500; //0.5 secfunction wcpGetPrintersOnSuccess() {// Display client installed printersif (arguments[0].length > 0) {var p = arguments[0].split("|");var options = '';for (var i = 0; i < p.length; i++) {options += '<option>' + p[i] + '</option>';}$('#installedPrinters').css('visibility', 'visible');$('#installedPrinterName').html(options);$('#installedPrinterName').focus();$('#loadPrinters').hide();} else {alert("No printers are installed in your system.");}}function wcpGetPrintersOnFailure() {// Do something if printers cannot be got from the clientalert("No printers are installed in your system.");}</script><br /><input type="button" style="font-size:18px" onclick="javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val());" value="Print Image..." />@section scripts{ @* Register the WebClientPrint script code generated by PrintImageController. *@@Html.Raw(ViewBag.WCPScript); }
(Video) Programming in VB.NET Print picture with printdocument

Creating/Editing Controllers

Create a new Controller and name it WebClientPrintAPIController and then copy/paste the following code:

Imports Neodynamic.SDK.Web Namespace Controllers Public Class WebClientPrintAPIController Inherits Controller ' GET: WebClientPrintAPI Function Index() As ActionResult Return View() End Function '********************************* ' IMPORTANT NOTE ' In this sample we store users related stuff (like ' the list of printers and whether they have the WCPP ' client utility installed) in the Application cache ' object part of ASP.NET BUT you can change it to ' another different storage (like a DB or file server)! ' which will be required in Load Balacing scenarios '********************************* <AllowAnonymous> Public Sub ProcessRequest() 'get session ID Dim sessionID As String = (If(HttpContext.Request("sid") IsNot Nothing, HttpContext.Request("sid"), Nothing)) 'get Query String Dim queryString As String = HttpContext.Request.Url.Query Try 'Determine and get the Type of Request Dim prType As RequestType = WebClientPrint.GetProcessRequestType(queryString) If prType = RequestType.GenPrintScript OrElse prType = RequestType.GenWcppDetectScript Then 'Let WebClientPrint to generate the requested script Dim script As Byte() = WebClientPrint.GenerateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", Nothing, HttpContext.Request.Url.Scheme), queryString) HttpContext.Response.ContentType = "text/javascript" HttpContext.Response.BinaryWrite(script) HttpContext.Response.End() ElseIf prType = RequestType.ClientSetWcppVersion Then 'This request is a ping from the WCPP utility 'so store the session ID indicating it has the WCPP installed 'also store the WCPP Version if available Dim wcppVersion As String = HttpContext.Request("wcppVer") If String.IsNullOrEmpty(wcppVersion) Then wcppVersion = "1.0.0.0" End If HttpContext.Application.Set(sessionID & "wcppInstalled", wcppVersion) ElseIf prType = RequestType.ClientSetInstalledPrinters Then 'WCPP Utility is sending the installed printers at client side 'so store this info with the specified session ID Dim printers As String = HttpContext.Request("printers") If String.IsNullOrEmpty(printers) = False Then printers = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printers)) End If HttpContext.Application.Set(sessionID & "printers", printers) ElseIf prType = RequestType.ClientSetInstalledPrintersInfo Then 'WCPP Utility is sending the installed printers at client side 'so store this info with the specified session ID 'Printers Info is in JSON format Dim printersInfo As String = HttpContext.Request.Form("printersInfoContent") If Not String.IsNullOrEmpty(printersInfo) Then printersInfo = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printersInfo)) End If HttpContext.Application.Set(sessionID & "printersInfo", printersInfo) ElseIf prType = RequestType.ClientGetWcppVersion Then 'return the WCPP version for the specified sid if any Dim sidWcppVersion As Boolean = (HttpContext.Application(sessionID & "wcppInstalled") IsNot Nothing) HttpContext.Response.ContentType = "text/plain" If (sidWcppVersion) Then HttpContext.Response.Write(HttpContext.Application(sessionID & "wcppInstalled").ToString()) End If HttpContext.Response.End() ElseIf prType = RequestType.ClientGetInstalledPrinters Then 'return the installed printers for the specified sid if any Dim sidHasPrinters As Boolean = (HttpContext.Application(sessionID & "printers") IsNot Nothing) HttpContext.Response.ContentType = "text/plain" If (sidHasPrinters) Then HttpContext.Response.Write(HttpContext.Application(sessionID & "printers").ToString()) End If HttpContext.Response.End() ElseIf prType = RequestType.ClientGetInstalledPrintersInfo Then 'return the installed printers with detailed info for the specified Session ID (sid) if any Dim sidHasPrinters As Boolean = (HttpContext.Application(sessionID & "printersInfo") IsNot Nothing) HttpContext.Response.ContentType = "text/plain" If (sidHasPrinters) Then HttpContext.Response.Write(HttpContext.Application(sessionID & "printersInfo").ToString()) End If HttpContext.Response.End() End If Catch ex As Exception HttpContext.Response.StatusCode = 500 HttpContext.Response.ContentType = "text/plain" HttpContext.Response.Write(ex.Message + " - StackTrace: " + ex.StackTrace) HttpContext.Response.End() End Try End Sub End ClassEnd Namespace

Edit the HomeController to the following code:

Public Class HomeController Inherits System.Web.Mvc.Controller Function Index() As ActionResult ViewData("WCPPDetectionScript") = Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript(Url.Action("ProcessRequest", "WebClientPrintAPI", Nothing, HttpContext.Request.Url.Scheme), HttpContext.Session.SessionID) Return View() End Function Function PrintImage() As ActionResult Return View() End FunctionEnd Class

Add a new Controller and name it PrintImageController and paste the following code:

Imports Neodynamic.SDK.WebNamespace Controllers Public Class PrintImageController Inherits Controller Function Index() As ActionResult ViewData("WCPScript") = Neodynamic.SDK.Web.WebClientPrint.CreateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", Nothing, HttpContext.Request.Url.Scheme), Url.Action("PrintFile", "PrintImage", Nothing, HttpContext.Request.Url.Scheme), HttpContext.Session.SessionID) Return View() End Function <AllowAnonymous> Public Sub PrintFile(useDefaultPrinter As String, printerName As String) 'full path of the image file to be printed Dim imgFilePath As String = "c:\myImage.jpg" 'create a temp file name for our image file... Dim fileName As String = "MyFile-" + Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(imgFilePath) 'Create a PrintFile object with the image file Dim file As New PrintFile(imgFilePath, fileName) 'Create a ClientPrintJob and send it back to the client! Dim cpj As New ClientPrintJob() 'set file to print... cpj.PrintFile = file If (useDefaultPrinter = "checked" OrElse printerName = "null") Then cpj.ClientPrinter = New DefaultPrinter() Else cpj.ClientPrinter = New InstalledPrinter(System.Web.HttpUtility.UrlDecode(printerName)) End If System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream" System.Web.HttpContext.Current.Response.BinaryWrite(cpj.GetContent()) System.Web.HttpContext.Current.Response.End() End Sub End ClassEnd Namespace

Creating/Editing Views

The default View is for detecting whether the client machine has the WebClientPrint Processor (WCPP) Utility installed. Edit the Views / Shared / _Layout.vbhtml file and add the folowing section to the BODY:

Be sure this View links to jQuery 1.4.1+ file!

<body> ... @RenderSection("scripts", required: False)...</body>

Edit the Views / Home / Index.vbhtml file and copy/paste the folowing code:

@Code ViewData("Title") = "Home Page"End Code<div id="msgInProgress"> <div id="mySpinner" style="width:32px;height:32px"></div> <br /> <h3>Detecting WCPP utility at client side...</h3> <h3>Please wait a few seconds...</h3> <br /></div><div id="msgInstallWCPP" style="display:none;"> <h3>#1 Install WebClientPrint Processor (WCPP)!</h3> <p> <strong>WCPP is a native app (without any dependencies!)</strong> that handles all print jobs generated by the <strong>WebClientPrint for ASP.NET component</strong> at the server side. The WCPP is in charge of the whole printing process and can be installed on <strong>Windows, Linux, Mac & Raspberry Pi!</strong> </p> <p> <a href="//www.neodynamic.com/downloads/wcpp/" target="_blank" >Download and Install WCPP from Neodynamic website</a><br /> </p> <h3>#2 After installing WCPP...</h3> <p> <a href="@Url.Action("Index", "PrintImage")" >You can go and test the printing page...</a> </p></div>@section scripts <script type="text/javascript"> var wcppPingTimeout_ms = 60000; //60 sec var wcppPingTimeoutStep_ms = 500; //0.5 sec function wcppDetectOnSuccess(){ // WCPP utility is installed at the client side // redirect to WebClientPrint sample page // get WCPP version var wcppVer = arguments[0]; if(wcppVer.substring(0, 1) == "6") window.location.href = '@Url.Action("Index", "PrintImage")'; else //force to install WCPP v6.0 wcppDetectOnFailure(); } function wcppDetectOnFailure() { // It seems WCPP is not installed at the client side // ask the user to install it $('#msgInProgress').hide(); $('#msgInstallWCPP').show(); }</script>@* WCPP detection script generated by HomeController *@@Html.Raw(ViewData("WCPPDetectionScript")) }End Section

Add a new View with the following name and under such folders: Views / PrintImage / Index.vbhtml Then, copy/paste the folowing code:

<h3>Print image file</h3><div><label class="checkbox"><input type="checkbox" id="useDefaultPrinter" /> <strong>Print to Default printer</strong> or...</label></div><div id="loadPrinters">Click to load and select one of the installed printers!<br /> <input type="button" onclick="javascript:jsWebClientPrint.getPrinters();" value="Load installed printers..." /><br /><br /></div><div id="installedPrinters" style="visibility:hidden"><label for="installedPrinterName">Select an installed Printer:</label><select name="installedPrinterName" id="installedPrinterName"></select></div><script type="text/javascript">var wcppGetPrintersTimeout_ms = 60000; //60 sec var wcppGetPrintersTimeoutStep_ms = 500; //0.5 secfunction wcpGetPrintersOnSuccess() {// Display client installed printersif (arguments[0].length > 0) {var p = arguments[0].split("|");var options = '';for (var i = 0; i < p.length; i++) {options += '<option>' + p[i] + '</option>';}$('#installedPrinters').css('visibility', 'visible');$('#installedPrinterName').html(options);$('#installedPrinterName').focus();$('#loadPrinters').hide();} else {alert("No printers are installed in your system.");}}function wcpGetPrintersOnFailure() {// Do something if printers cannot be got from the clientalert("No printers are installed in your system.");}</script><br /><input type="button" style="font-size:18px" onclick="javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val());" value="Print Image..." />@section scripts @* Register the WebClientPrint script code generated by PrintImageController. *@ @Html.Raw(ViewData("WCPScript"))@end section
(Video) how to print more than one picture on a page | print more photos one page

Creating/Editing Controllers

Create a new Controller and name it WebClientPrintAPIController and then copy/paste the following code:

public class WebClientPrintAPIController : Controller{ //********************************* // IMPORTANT NOTE // In this sample we store users related stuff (like // the list of printers and whether they have the WCPP // client utility installed) in the Application cache // object part of ASP.NET BUT you can change it to // another different storage (like a DB or file server)! // which will be required in Load Balacing scenarios //********************************* [AllowAnonymous] public void ProcessRequest() { //get session ID string sessionID = (HttpContext.Request["sid"] != null ? HttpContext.Request["sid"] : null); //get Query String string queryString = HttpContext.Request.Url.Query; try { //Determine and get the Type of Request RequestType prType = WebClientPrint.GetProcessRequestType(queryString); if (prType == RequestType.GenPrintScript || prType == RequestType.GenWcppDetectScript) { //Let WebClientPrint to generate the requested script byte[] script = WebClientPrint.GenerateScript(Url.Action("ProcessRequest", "WebClientPrintAPI", null, HttpContext.Request.Url.Scheme), queryString); HttpContext.Response.ContentType = "text/javascript"; HttpContext.Response.BinaryWrite(script); HttpContext.Response.End(); } else if (prType == RequestType.ClientSetWcppVersion) { //This request is a ping from the WCPP utility //so store the session ID indicating it has the WCPP installed //also store the WCPP Version if available string wcppVersion = HttpContext.Request["wcppVer"]; if (string.IsNullOrEmpty(wcppVersion)) wcppVersion = "1.0.0.0"; HttpContext.Application.Set(sessionID + "wcppInstalled", wcppVersion); } else if (prType == RequestType.ClientSetInstalledPrinters) { //WCPP Utility is sending the installed printers at client side //so store this info with the specified session ID string printers = HttpContext.Request["printers"]; if (string.IsNullOrEmpty(printers) == false) printers = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printers)); HttpContext.Application.Set(sessionID + "printers", printers); } else if (prType == RequestType.ClientSetInstalledPrintersInfo) { //WCPP Utility is sending the client installed printers with detailed info //so store this info with the specified session ID //Printers Info is in JSON format string printersInfo = HttpContext.Request.Form["printersInfoContent"]; if (string.IsNullOrEmpty(printersInfo) == false) printersInfo = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printersInfo)); HttpContext.Application.Set(sessionID + "printersInfo", printersInfo); } else if (prType == RequestType.ClientGetWcppVersion) { //return the WCPP version for the specified sid if any bool sidWcppVersion = (HttpContext.Application.Get(sessionID + "wcppInstalled") != null); HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write((sidWcppVersion ? HttpContext.Application.Get(sessionID + "wcppInstalled") : "")); HttpContext.Response.End(); } else if (prType == RequestType.ClientGetInstalledPrinters) { //return the installed printers for the specified sid if any bool sidHasPrinters = (HttpContext.Application.Get(sessionID + "printers") != null); HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write((sidHasPrinters ? HttpContext.Application.Get(sessionID + "printers") : "")); HttpContext.Response.End(); } else if (prType == RequestType.ClientGetInstalledPrintersInfo) { //return the installed printers with detailed info for the specified Session ID (sid) if any bool sidHasPrinters = (HttpContext.Application[sessionID + "printersInfo"] != null); HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write(sidHasPrinters ? HttpContext.Application[sessionID + "printersInfo"] : ""); } } catch (Exception ex) { HttpContext.Response.StatusCode = 500; HttpContext.Response.ContentType = "text/plain"; HttpContext.Response.Write(ex.Message + " - StackTrace: " + ex.StackTrace); HttpContext.Response.End(); } } }

Add a new Controller and name it PrintImageController and paste the following code:

using Neodynamic.SDK.Web;public class PrintImageController : Controller{public ActionResult Index(){return View();}[AllowAnonymous]public void PrintFile(string useDefaultPrinter, string printerName){ //full path of the image file to be printed string imgFilePath = @"c:\myImage.jpg"; //create a temp file name for our image file... string fileName = "MyFile-" + Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(imgFilePath); //Create a PrintFile object with the image file PrintFile file = new PrintFile(imgFilePath, fileName); //Create a ClientPrintJob and send it back to the client! ClientPrintJob cpj = new ClientPrintJob(); //set file to print... cpj.PrintFile = file;//set client printer...if (useDefaultPrinter == "checked" || printerName == "null")cpj.ClientPrinter = new DefaultPrinter();elsecpj.ClientPrinter = new InstalledPrinter(printerName);//send it...System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";System.Web.HttpContext.Current.Response.BinaryWrite(cpj.GetContent());System.Web.HttpContext.Current.Response.End();}}

Creating SPA by using AngularJS

Create a new index.html file that will act as our view for detecting whether the client machine has the WebClientPrint Processor (WCPP) Utility installed as well as for listing client printers and to finally perform client side printing. This SPA features two parts or sections, one for "Detecting WCPP" and the other one for "Client side printing". The ClientPrintJob is generated by the controller created above from the Web API server side code. Copy/Paste the following markup:

Be sure this html file links to jQuery 1.4.1+ and to AngularJS 1.6.4+ files!

<!DOCTYPE html><html><head> <title></title><meta charset="utf-8" /> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script></head><body> <div ng-app="myApp" ng-controller="myCtrl"> <div id="wcppDetection"> <div id="msgInProgress"> <div id="mySpinner" style="width:32px;height:32px"></div> <br /> <h3>Detecting WCPP utility at client side...</h3> <h3>Please wait a few seconds...</h3> <br /> </div> <div id="msgInstallWCPP" style="display:none;"> <h3>#1 Install WebClientPrint Processor (WCPP)!</h3> <p> <strong>WCPP is a native app (without any dependencies!)</strong> that handles all print jobs generated by the <strong>WebClientPrint for ASP.NET component</strong> at the server side. The WCPP is in charge of the whole printing process and can be installed on <strong>Windows, Linux, Mac & Raspberry Pi!</strong> </p> <p> <a href="//www.neodynamic.com/downloads/wcpp/" target="_blank">Download and Install WCPP from Neodynamic website</a><br /> </p> <h3>#2 After installing WCPP...</h3> <p> <a href="#" onclick="javascript:$('#wcppDetection').hide();$('#printSection').show();">You can go and test the printing page...</a> </p> <script type="text/javascript"> var wcppPingTimeout_ms = 60000; //60 sec var wcppPingTimeoutStep_ms = 500; //0.5 sec function wcppDetectOnSuccess() { // WCPP utility is installed at the client side // redirect to WebClientPrint sample page // get WCPP version var wcppVer = arguments[0]; if (wcppVer.substring(0, 1) == "6"){ $('#wcppDetection').hide(); $('#printSection').show(); } else //force to install WCPP v6.0 wcppDetectOnFailure(); } function wcppDetectOnFailure() { // It seems WCPP is not installed at the client side // ask the user to install it $('#msgInProgress').hide(); $('#msgInstallWCPP').show(); } </script> </div> <input type="hidden" id="sid" name="sid" ng-value="sid" /> <script> $(function () { //Gen script for WCPP detection $.getScript('/WebClientPrintAPI/ProcessRequest?d=' + $('#sid').val()); }); </script> </div> <div id="printSection" style="display:none;"> <h3>Print Image</h3> <div> <label class="checkbox"> <input type="checkbox" id="useDefaultPrinter" /> <strong>Print to Default printer</strong> or... </label> </div> <div id="loadPrinters"> Click to load and select one of the installed printers! <br /> <input type="button" onclick="javascript:jsWebClientPrint.getPrinters();" value="Load installed printers..." /> <br /><br /> </div> <div id="installedPrinters" style="visibility:hidden"> <label for="installedPrinterName">Select an installed Printer:</label> <select name="installedPrinterName" id="installedPrinterName"></select> </div> <script type="text/javascript"> var wcppGetPrintersTimeout_ms = 60000; //60 sec var wcppGetPrintersTimeoutStep_ms = 500; //0.5 sec function wcpGetPrintersOnSuccess() { // Display client installed printers if (arguments[0].length > 0) { var p = arguments[0].split("|"); var options = ''; for (var i = 0; i < p.length; i++) { options += '<option>' + p[i] + '</option>'; } $('#installedPrinters').css('visibility', 'visible'); $('#installedPrinterName').html(options); $('#installedPrinterName').focus(); $('#loadPrinters').hide(); } else { alert("No printers are installed in your system."); } } function wcpGetPrintersOnFailure() { // Do something if printers cannot be got from the client alert("No printers are installed in your system."); } </script> <br /> <input type="button" style="font-size:18px" onclick="javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val());" value="Print Image..." /> <script> $(function () { // Create Base64 Object var Base64 = { _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function (e) { var t = ""; var n, r, i, s, o, u, a; var f = 0; e = Base64._utf8_encode(e); while (f < e.length) { n = e.charCodeAt(f++); r = e.charCodeAt(f++); i = e.charCodeAt(f++); s = n >> 2; o = (n & 3) << 4 | r >> 4; u = (r & 15) << 2 | i >> 6; a = i & 63; if (isNaN(r)) { u = a = 64 } else if (isNaN(i)) { a = 64 } t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a) } return t }, _utf8_encode: function (e) { e = e.replace(/\r\n/g, "\n"); var t = ""; for (var n = 0; n < e.length; n++) { var r = e.charCodeAt(n); if (r < 128) { t += String.fromCharCode(r) } else if (r > 127 && r < 2048) { t += String.fromCharCode(r >> 6 | 192); t += String.fromCharCode(r & 63 | 128) } else { t += String.fromCharCode(r >> 12 | 224); t += String.fromCharCode(r >> 6 & 63 | 128); t += String.fromCharCode(r & 63 | 128) } } return t } } // Creat script for client side printing var rootUrl = $(location).attr('protocol') + "//" + $(location).attr('host'); var ABSOLUTE_URL_TO_PRINT_JOB_CONTROLLER = rootUrl + '/PrintImage/PrintFile'; $.getScript('/WebClientPrintAPI/ProcessRequest?v6.0.0.0&' + new Date().getTime() + '&sid=' + $('#sid').val() + '&u=' + Base64.encode(ABSOLUTE_URL_TO_PRINT_JOB_CONTROLLER)); }); </script> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.sid = new Date().getTime(); }); </script></body></html>
(Video) You can turn images into 3d prints using only cura. Find out how.

Creating HTTP Handlers

Create a new Generic Handler and name it WebClientPrintAPI and then copy/paste the following code:

(Video) Print Then Cut with Cricut Design Space for Beginners

public class WebClientPrintAPI : IHttpHandler { //********************************* // IMPORTANT NOTE // In this sample we store users related stuff (like // the list of printers and whether they have the WCPP // client utility installed) in the Application cache // object part of ASP.NET BUT you can change it to // another different storage (like a DB or file server)! // which will be required in Load Balacing scenarios //********************************* public void ProcessRequest (HttpContext context) { //get session ID string sessionID = (context.Request["sid"] != null) ? context.Request["sid"].ToString() : null; //get Query String string queryString = context.Request.Url.Query; try { //Determine and get the Type of Request RequestType prType = WebClientPrint.GetProcessRequestType(queryString); if (prType == RequestType.GenPrintScript || prType == RequestType.GenWcppDetectScript) { //Let WebClientPrint to generate the requested script byte[] script = WebClientPrint.GenerateScript(context.Request.Url.AbsoluteUri.Replace(queryString, ""), queryString); context.Response.ContentType = "text/javascript"; context.Response.BinaryWrite(script); } else if (prType == RequestType.ClientSetWcppVersion) { //This request is a ping from the WCPP utility //so store the session ID indicating this user has the WCPP installed //also store the WCPP Version if available string wcppVersion = context.Request["wcppVer"]; if (string.IsNullOrEmpty(wcppVersion)) wcppVersion = "1.0.0.0"; context.Application.Set(sessionID + "wcppInstalled", wcppVersion); } else if (prType == RequestType.ClientSetInstalledPrinters) { //WCPP Utility is sending the installed printers at client side //so store this info with the specified session ID string printers = context.Request["printers"]; if (string.IsNullOrEmpty(printers) == false) printers = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printers)); context.Application.Set(sessionID + "printers", printers); } else if (prType == RequestType.ClientSetInstalledPrintersInfo) { //WCPP Utility is sending the client installed printers with detailed info //so store this info with the specified session ID //Printers Info is in JSON format string printersInfo = context.Request.Form["printersInfoContent"]; if (string.IsNullOrEmpty(printersInfo) == false) printersInfo = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printersInfo)); context.Application.Set(sessionID + "printersInfo", printersInfo); } else if (prType == RequestType.ClientGetWcppVersion) { //return the WCPP version for the specified Session ID (sid) if any bool sidWcppVersion = (context.Application[sessionID + "wcppInstalled"] != null); context.Response.ContentType = "text/plain"; context.Response.Write(sidWcppVersion ? context.Application[sessionID + "wcppInstalled"] : ""); } else if (prType == RequestType.ClientGetInstalledPrinters) { //return the installed printers for the specified Session ID (sid) if any bool sidHasPrinters = (context.Application[sessionID + "printers"] != null); context.Response.ContentType = "text/plain"; context.Response.Write(sidHasPrinters ? context.Application[sessionID + "printers"] : ""); } else if (prType == RequestType.ClientGetInstalledPrintersInfo) { //return the installed printers with detailed info for the specified Session ID (sid) if any bool sidHasPrinters = (context.Application[sessionID + "printersInfo"] != null); context.Response.ContentType = "text/plain"; context.Response.Write(sidHasPrinters ? context.Application[sessionID + "printersInfo"] : ""); } } catch (Exception ex) { context.Response.StatusCode = 500; context.Response.ContentType = "text/plain"; context.Response.Write(ex.Message + " - " + ex.StackTrace); } } public bool IsReusable { get { return false; } } }

Create a new Generic Handler and name it PrintImageHandler and then copy/paste the following code:

<%@ WebHandler Language="C#" Class="PrintImageHandler" %>using System;using System.Web;using Neodynamic.SDK.Web;public class PrintImageHandler : IHttpHandler { /*############### IMPORTANT!!! ############ If your website requires AUTHENTICATION, then you MUST configure THIS Handler file to be ANONYMOUS access allowed!!! ######################################### */ public void ProcessRequest (HttpContext context) { if (WebClientPrint.ProcessPrintJob(context.Request.Url.Query)) { bool useDefaultPrinter = (Request["useDefaultPrinter"] == "checked"); string printerName = Server.UrlDecode(Request["printerName"]); //full path of the image file to be printed string imgFilePath = @"c:\myImage.jpg"; //create a temp file name for our image file... string fileName = "MyFile-" + Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(imgFilePath); //Create a PrintFile object with the image file PrintFile file = new PrintFile(imgFilePath, fileName); //Create a ClientPrintJob and send it back to the client! ClientPrintJob cpj = new ClientPrintJob(); //set file to print... cpj.PrintFile = file; //set client printer... if (useDefaultPrinter || printerName == "null") cpj.ClientPrinter = new DefaultPrinter(); else cpj.ClientPrinter = new InstalledPrinter(printerName); //send it... context.Response.ContentType = "application/octet-stream"; context.Response.BinaryWrite(cpj.GetContent()); context.Response.End(); } } public bool IsReusable { get { return false; } }}

Creating/Editing WebForm Pages

Be sure ALL *.aspx link to jQuery 1.4.1+ file!

The default page is for detecting whether the client machine has the WebClientPrint Processor (WCPP) Utility installed. Edit the Default.aspx file and copy/paste the following code inside the BODY:

<div id="msgInProgress"> <div id="mySpinner" style="width:32px;height:32px"></div> <br /> <h3>Detecting WCPP utility at client side...</h3> <h3>Please wait a few seconds...</h3> <br /></div><div id="msgInstallWCPP" style="display:none;"> <h3>#1 Install WebClientPrint Processor (WCPP)!</h3> <p> <strong>WCPP is a native app (without any dependencies!)</strong> that handles all print jobs generated by the <strong>WebClientPrint for ASP.NET component</strong> at the server side. The WCPP is in charge of the whole printing process and can be installed on <strong>Windows, Linux, Mac & Raspberry Pi!</strong> </p> <p> <a href="//www.neodynamic.com/downloads/wcpp/" target="_blank" >Download and Install WCPP from Neodynamic website</a><br /> </p> <h3>#2 After installing WCPP...</h3> <p> <a href="PrintImage.aspx" >You can go and test the printing page...</a> </p></div> <script type="text/javascript"> var wcppPingTimeout_ms = 60000; //60 sec var wcppPingTimeoutStep_ms = 500; //0.5 sec function wcppDetectOnSuccess(){ // WCPP utility is installed at the client side // redirect to WebClientPrint sample page // get WCPP version var wcppVer = arguments[0]; if(wcppVer.substring(0, 1) == "6") window.location.href = 'PrintImage.aspx'; else //force to install WCPP v6.0 wcppDetectOnFailure(); } function wcppDetectOnFailure() { // It seems WCPP is not installed at the client side // ask the user to install it $('#msgInProgress').hide(); $('#msgInstallWCPP').show(); }</script><%-- WCPP detection script code --%><%=Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/WebClientPrintAPI.ashx", HttpContext.Current.Session.SessionID)%>

Add a new page and name it PrintImage.aspx. Copy/paste the following code inside the BODY:

<h3>Print image file</h3><div><label class="checkbox"><input type="checkbox" id="useDefaultPrinter" /> <strong>Print to Default printer</strong> or...</label></div><div id="loadPrinters">Click to load and select one of the installed printers!<br /> <input type="button" onclick="javascript:jsWebClientPrint.getPrinters();" value="Load installed printers..." /><br /><br /></div><div id="installedPrinters" style="visibility:hidden"><label for="installedPrinterName">Select an installed Printer:</label><select name="installedPrinterName" id="installedPrinterName"></select></div><script type="text/javascript">var wcppGetPrintersTimeout_ms = 60000; //60 sec var wcppGetPrintersTimeoutStep_ms = 500; //0.5 secfunction wcpGetPrintersOnSuccess() {// Display client installed printersif (arguments[0].length > 0) {var p = arguments[0].split("|");var options = '';for (var i = 0; i < p.length; i++) {options += '<option>' + p[i] + '</option>';}$('#installedPrinters').css('visibility', 'visible');$('#installedPrinterName').html(options);$('#installedPrinterName').focus();$('#loadPrinters').hide();} else {alert("No printers are installed in your system.");}}function wcpGetPrintersOnFailure() {// Do something if printers cannot be got from the clientalert("No printers are installed in your system.");}</script><br /><input type="button" style="font-size:18px" onclick="javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val());" value="Print Image..." /><%-- Register the WebClientPrint script code --%><%=Neodynamic.SDK.Web.WebClientPrint.CreateScript(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/WebClientPrintAPI.ashx", HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/PrintImageHandler.ashx", HttpContext.Current.Session.SessionID)%>

Creating HTTP Handlers

Create a new Generic Handler and name it WebClientPrintAPI and then copy/paste the following code:

<%@ WebHandler Language="VB" Class="WebClientPrintAPI" %>Imports SystemImports System.Web Imports Neodynamic.SDK.Web Public Class WebClientPrintAPI : Implements IHttpHandler '********************************* ' IMPORTANT NOTE ' In this sample we store users related stuff (like ' the list of printers and whether they have the WCPP ' client utility installed) in the Application cache ' object part of ASP.NET BUT you can change it to ' another different storage (like a DB or file server)! ' which will be required in Load Balacing scenarios '********************************* Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 'get session ID Dim sessionID As String = "" If (context.Request("sid") IsNot Nothing) Then sessionID = context.Request("sid") End If 'get Query String Dim queryString As String = context.Request.Url.Query Try 'Determine and get the Type of Request Dim prType As RequestType = WebClientPrint.GetProcessRequestType(queryString) If prType = RequestType.GenPrintScript OrElse prType = RequestType.GenWcppDetectScript Then 'Let WebClientPrint to generate the requested script Dim script As Byte() = WebClientPrint.GenerateScript(context.Request.Url.AbsoluteUri.Replace(queryString, ""), queryString) context.Response.ContentType = "text/javascript" context.Response.BinaryWrite(script) ElseIf prType = RequestType.ClientSetWcppVersion Then 'This request is a ping from the WCPP utility 'so store the session ID indicating this user has the WCPP installed 'also store the WCPP Version if available Dim wcppVersion As String = context.Request("wcppVer") If String.IsNullOrEmpty(wcppVersion) Then wcppVersion = "1.0.0.0" End If context.Application.Set(sessionID & "wcppInstalled", wcppVersion) ElseIf prType = RequestType.ClientSetInstalledPrinters Then 'WCPP Utility is sending the installed printers at client side 'so store this info with the specified session ID Dim printers As String = context.Request("printers") If Not String.IsNullOrEmpty(printers) Then printers = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printers)) End If context.Application.Set(sessionID & "printers", printers) ElseIf prType = RequestType.ClientSetInstalledPrintersInfo Then 'WCPP Utility is sending the installed printers at client side 'so store this info with the specified session ID 'Printers Info is in JSON format Dim printersInfo As String = context.Request.Form("printersInfoContent") If Not String.IsNullOrEmpty(printersInfo) Then printersInfo = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(printersInfo)) End If context.Application.Set(sessionID & "printersInfo", printersInfo) ElseIf prType = RequestType.ClientGetWcppVersion Then 'return the WCPP version for the specified Session ID (sid) if any Dim sidWcppVersion As Boolean = (context.Application(sessionID & "wcppInstalled") IsNot Nothing) context.Response.ContentType = "text/plain" If (sidWcppVersion) Then context.Response.Write(context.Application(sessionID & "wcppInstalled").ToString()) End If ElseIf prType = RequestType.ClientGetInstalledPrinters Then 'return the installed printers for the specified Session ID (sid) if any Dim sidHasPrinters As Boolean = (context.Application(sessionID & "printers") IsNot Nothing) context.Response.ContentType = "text/plain" If (sidHasPrinters) Then context.Response.Write(context.Application(sessionID & "printers").ToString()) End If ElseIf prType = RequestType.ClientGetInstalledPrintersInfo Then 'return the installed printers with detailed info for the specified Session ID (sid) if any Dim sidHasPrinters As Boolean = (context.Application(sessionID & "printersInfo") IsNot Nothing) context.Response.ContentType = "text/plain" If (sidHasPrinters) Then context.Response.Write(context.Application(sessionID & "printersInfo").ToString()) End If End If Catch ex As Exception context.Response.StatusCode = 500 context.Response.ContentType = "text/plain" context.Response.Write(ex.Message + " - " + ex.StackTrace) End Try End Sub Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End Property End Class

Create a new Generic Handler and name it PrintImageHandler and then copy/paste the following code:

<%@ WebHandler Language="VB" Class="PrintImageHandler" %>Imports SystemImports System.WebImports Neodynamic.SDK.WebPublic Class PrintImageHandler : Implements IHttpHandler '############### IMPORTANT!!! ############ ' If your website requires AUTHENTICATION, then you MUST configure THIS Handler file ' to be ANONYMOUS access allowed!!! '######################################### Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest If WebClientPrint.ProcessPrintJob(context.Request.Url.Query) Then Dim useDefaultPrinter As Boolean = (Request("useDefaultPrinter") = "checked") Dim printerName As String = Server.UrlDecode(Request("printerName")) 'full path of the image file to be printed Dim imgFilePath As String = "c:\myImage.jpg" 'create a temp file name for our image file... Dim fileName As String = "MyFile-" + Guid.NewGuid().ToString("N") + System.IO.Path.GetExtension(imgFilePath) 'Create a PrintFile object with the image file Dim file As New PrintFile(imgFilePath, fileName) 'Create a ClientPrintJob and send it back to the client! Dim cpj As New ClientPrintJob() 'set file to print... cpj.PrintFile = file Dim cpj As New ClientPrintJob() cpj.PrintFile = file If useDefaultPrinter OrElse printerName = "null" Then cpj.ClientPrinter = New DefaultPrinter() Else cpj.ClientPrinter = New InstalledPrinter(printerName) End If context.Response.ContentType = "application/octet-stream" context.Response.BinaryWrite(cpj.GetContent()) context.Response.End() End If End Sub Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable Get Return False End Get End PropertyEnd Class

Creating/Editing WebForm Pages

Be sure ALL *.aspx link to jQuery 1.4.1+ file!

The default page is for detecting whether the client machine has the WebClientPrint Processor (WCPP) Utility installed. Edit the Default.aspx file and copy/paste the following code inside the BODY:

(Video) Canva for Sublimation Printing | How to Print Sublimation Designs with FREE Graphic Design Program.

<div id="msgInProgress"> <div id="mySpinner" style="width:32px;height:32px"></div> <br /> <h3>Detecting WCPP utility at client side...</h3> <h3>Please wait a few seconds...</h3> <br /></div><div id="msgInstallWCPP" style="display:none;"> <h3>#1 Install WebClientPrint Processor (WCPP)!</h3> <p> <strong>WCPP is a native app (without any dependencies!)</strong> that handles all print jobs generated by the <strong>WebClientPrint for ASP.NET component</strong> at the server side. The WCPP is in charge of the whole printing process and can be installed on <strong>Windows, Linux, Mac & Raspberry Pi!</strong> </p> <p> <a href="//www.neodynamic.com/downloads/wcpp/" target="_blank" >Download and Install WCPP from Neodynamic website</a><br /> </p> <h3>#2 After installing WCPP...</h3> <p> <a href="PrintImage.aspx" >You can go and test the printing page...</a> </p></div> <script type="text/javascript"> var wcppPingTimeout_ms = 60000; //60 sec var wcppPingTimeoutStep_ms = 500; //0.5 sec function wcppDetectOnSuccess(){ // WCPP utility is installed at the client side // redirect to WebClientPrint sample page // get WCPP version var wcppVer = arguments[0]; if(wcppVer.substring(0, 1) == "6") window.location.href = 'PrintImage.aspx'; else //force to install WCPP v6.0 wcppDetectOnFailure(); } function wcppDetectOnFailure() { // It seems WCPP is not installed at the client side // ask the user to install it $('#msgInProgress').hide(); $('#msgInstallWCPP').show(); }</script><%-- WCPP detection script code --%><%=Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/WebClientPrintAPI.ashx", HttpContext.Current.Session.SessionID)%>

Add a new page and name it PrintImage.aspx. Copy/paste the following code inside the BODY:

<h3>Print image file</h3><div><label class="checkbox"><input type="checkbox" id="useDefaultPrinter" /> <strong>Print to Default printer</strong> or...</label></div><div id="loadPrinters">Click to load and select one of the installed printers!<br /> <input type="button" onclick="javascript:jsWebClientPrint.getPrinters();" value="Load installed printers..." /><br /><br /></div><div id="installedPrinters" style="visibility:hidden"><label for="installedPrinterName">Select an installed Printer:</label><select name="installedPrinterName" id="installedPrinterName"></select></div><script type="text/javascript">var wcppGetPrintersTimeout_ms = 60000; //60 sec var wcppGetPrintersTimeoutStep_ms = 500; //0.5 secfunction wcpGetPrintersOnSuccess() {// Display client installed printersif (arguments[0].length > 0) {var p = arguments[0].split("|");var options = '';for (var i = 0; i < p.length; i++) {options += '<option>' + p[i] + '</option>';}$('#installedPrinters').css('visibility', 'visible');$('#installedPrinterName').html(options);$('#installedPrinterName').focus();$('#loadPrinters').hide();} else {alert("No printers are installed in your system.");}}function wcpGetPrintersOnFailure() {// Do something if printers cannot be got from the clientalert("No printers are installed in your system.");}</script><br /><input type="button" style="font-size:18px" onclick="javascript:jsWebClientPrint.print('useDefaultPrinter=' + $('#useDefaultPrinter').attr('checked') + '&printerName=' + $('#installedPrinterName').val());" value="Print Image..." /><%-- Register the WebClientPrint script code --%><%=Neodynamic.SDK.Web.WebClientPrint.CreateScript(HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/WebClientPrintAPI.ashx", HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/PrintImageHandler.ashx", HttpContext.Current.Session.SessionID)%>

FAQs

How do I make a PNG file printable? ›

Select the PNG file and right-click to choose Print from the context menu. Select Microsoft Print to PDF as the printer and click Print. Another dialog box will appear where you can enter the File name and select the file location. Once done, click Save.

How to print on client side in asp net? ›

Print Crystal Report at Client Side Printer in ASP.NET
  1. Create a new Dataset in your existing project. ...
  2. In Dataset Add, then click Table Adapter.
  3. In this Table Adapter, Add Columns depending on the Database Tables fields.
  4. Add New Item, then select Crystal Reports.
Apr 12, 2016

How to create a print option in asp net? ›

Click event of 'print' button is
  1. protected void btnPrint_Click(object sender, EventArgs e)
  2. {
  3. Session["ctrl"] = pnl1;
  4. ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script language=javascript>window.open('Print.aspx','PrintMe','height=300px,width=300px,scrollbars=1');</script>");
  5. }
May 10, 2019

Why not use PNG for print? ›

One of the main reasons most professionals don't recommend PNG for printing is based on the fact that it doesn't support CMYK color. This is because the commercial printing industry that produces T-shirts, Mugs, Posters, etc. works with equipment that supports, and it's calibrated for CMYK color.

What format is best for printing PNG? ›

PNG graphics are optimized for the screen. You can definitely print a PNG, but you'd be better off with a JPEG (lossy) or TIFF file.

Can PNG files be printed? ›

Several file formats, including JPG, PNG, TIFF, and PDF, can work for printing.

What is client-side printing? ›

The client-side rendering feature makes it possible for a user to spool and render a print job locally. When the client computer can establish a connection to the print spooler, the rendered print job is automatically sent to the print server for printing.

How to print directly to printer in JavaScript? ›

Using Window print() Method

The print() is a method on the window object. Users can invoke this method to print their documents on the window. The print method prints the data of the current window. The user gets a print dialog box where they can select the required print options.

How do I create a client-side image? ›

Client−side image maps are enabled by the usemap attribute for the <img/> tag and defined by special <map> and <area> extension tags. The image that is going to form the map is inserted into the page using the <img/> element as normal, except that it carries an extra attribute called usemap.

What are the two options to set a print? ›

Select either the Portrait or Landscape orientation. If you want to see how the report appears, instead of setting the orientation here set it from the Page Preview tab. On the Print Preview tab, in the Page Layout group, click Portrait or Landscape.

How do I add a print button to my website? ›

You can easily add a print button to your web page by adding the following code to your HTML document where you want the button to appear:
  1. onclick="window.print();return false;" />
  2. print.
  3. type="text/css" media="print" />
  4. body {visibility:hidden;} .print {visibility:visible;}
Apr 8, 2018

Which is better for printing PNG or JPG? ›

So, when it comes to printing, know that PNG files are an excellent option for delivering good quality printouts using office or home printers. This is because these files contain high-resolution images and better color depth. Images from JPEG files become blurry in printouts.

Which image format is best for printing? ›

The ideal file format choice for print is TIFF, followed closely by PNG.

What is the difference between JPEG and PNG for printing? ›

PNG files are high-resolution images with better color depth, so they deliver good quality printouts using home or office printers. Contrary, JPEG photos may get blurry or show loss of color in printing output.

What is the best format for the web PNG? ›

Wix considers PNG as the best format to upload high-quality images or images with a transparent background. Webflow partners with PNG - the world-leading solution for image optimization to reduce the data size of your images by up to 80% and without quality loss.

Which is better for printing JPEG TIFF or PNG? ›

What is the difference between TIFF and PNG files? Both PNGs and TIFFs are excellent choices for displaying complex images. But PNGs tend to be smaller in size, so are potentially better suited for websites. TIFFs, on the other hand, are often the best choice for professional use, scanning, and print options.

Is PNG or JPEG better for websites? ›

If you want a fast loading compressed image, choose a JPG format. If you are looking for a high quality, clear image, choose a PNG. What kind of file type should I use for my website logo? PNGs support transparency, and it is the best option for website logos that need to appear on various color backgrounds.

What is the highest quality photo format? ›

RAW format

RAW files are the highest quality image format. They are loved by photographers as RAW format records all data from the sensor of the camera. Since RAW is an uncompressed format, it gives immense creative liberty to the photographers during post-processing.

Can I use a transparent PNG for print? ›

If you want to use a transparent background, you can. But files with transparencies must be saved in PNG format. Just be sure to preview your work in CMYK and understand that the printed products will not look as bright or contrasted as you see on your monitor.

Can every computer open a PNG file? ›

There shouldn't be any problem opening or using the PNG file format on any operating system. It is a standard file type. You can open it with native computer image software, such as Windows photo viewer.

What does it mean to print using system dialog? ›

The Print dialog box lets the user select options for a particular print job. For example, the user can specify the printer to use, the range of pages to print, and the number of copies.

What is it called when you print on both sides of paper? ›

Printing on both sides of paper is called duplex printing. Most printers offer the option of automatically printing on both sides of a sheet of paper (automatic duplex printing). Other printers provide instructions so that you can manually reinsert pages to print the second side (manual duplex printing).

How to print without print dialog? ›

Chrome Print Without Dialog
  1. Right-click on the Google Chrome icon from your machine Desktop.
  2. Click on Properties.
  3. From the Target box, after \chrome.exe”, add “(space)–kiosk-printing”
  4. click Apply.
  5. click Ok.
May 25, 2022

How to print directly without preview in JavaScript? ›

always_print_silent . To disable print preview change the boolean value to true and to enable change to true. It worked for me.

How do I print directly from my browser? ›

Print from a standard printer
  1. On your computer, open Chrome.
  2. Open the page, image, or file you want to print.
  3. Click File. Print. Or, use a keyboard shortcut: Windows & Linux: Ctrl + p. Mac: ⌘ + p.
  4. In the window that appears, select the destination and change your preferred print settings.
  5. Click Print.

What is the difference between client-side and server-side image mapping? ›

The imagemap is called "server-side" because the web browser must contact the remote host to find which site to contact. Client-side imagemaps, by contrast, do not require a cgi-bin program to function. The imagemap is actually an HTML construct that can be contained on the same page as the clickable image.

How do I add a PNG image to HTML? ›

Chapter Summary
  1. Use the HTML <img> element to define an image.
  2. Use the HTML src attribute to define the URL of the image.
  3. Use the HTML alt attribute to define an alternate text for an image, if it cannot be displayed.

What is client-side image mapping? ›

Client-side imagemaps are clickable images that don't require a CGI program to make them work. Instead, the browser interprets the imagemap based on HTML tags. Because they are faster and more reliable, client-side imagemaps have largely supplanted server-side imagemaps.

What are 3 different printing options? ›

Common types of printing are:
  • Surface Printing.
  • Flexographic Printing.
  • Screen Printing.
  • Rotary Screen.
  • Gravure Printing.
  • Digital Printing.

What are the 3 styles of printing? ›

Fabrics can be printed in three different styles namely direct, discharge and resist styles.
  • Direct Style of Printing.
  • Discharge Style of Printing.
  • The Resist Style.
Dec 28, 2018

What are the three different options for printing a document? ›

You can print a document in three ways: Setup and print (File/Setup and print), which enables you to set some parameters and options before printing. Print (File/Print), which prints a document using the current print configuration (defined using the Setup and Print command).

What are the best printer settings for photos? ›

As a rule of thumb, to achieve photo quality print, you will need to use an image resolution of 300 pixels per inch. We write this as 300 DPI and means that in each inch of your print there will be 300 pixels.

How do I print without showing changes? ›

Hide tracked changes and comments when printing
  1. Go to File > Print > Settings > Print All Pages.
  2. Under Document Info, select Print Markup to clear the check mark.

What is the key for print option? ›

Shortcut key for printing is "Alt + F and Press W and then V" or Ctrl + P.

What is the print command in HTML? ›

The print() method prints the contents of the current window.

How do I print a custom page? ›

Print specific pages

To print only certain pages, do one of the following: To print the page shown in preview, select Print Current Page. To print consecutive pages like 1 -3, select Custom Print and enter the first and last page numbers in the Pages box.

What is the command for print page? ›

All computer browsers today support the keyboard shortcut Ctrl + P (for Windows) or Command + P (for macOS) to start the print process.

What is the difference between JPG and JPEG and PNG? ›

JPEG uses lossy compression algorithm. PNG uses lossless compression algorithm. JPEG image may lose some image data causing quality loss. PNG image is of high quality.

What is the best JPEG size for printing? ›

A good quality print will require a resolution of 900 x 1260 pixels. For a better-quality print, use 1200 x 1680 pixels. Finally, for the best quality, you should go with 1500 x 2100 pixels. Also, keep in mind the viewing distance.

What is the best image format for website? ›

Webp is the best format for web.

JPG and PNG are also good choices for the web. If your choice is between JPG or PNG, use JPG for photos and PNG for logos. That's because a JPG is better compressed and loads faster, whereas a PNG will retain more detail and allows for a transparent background.

What color format is best for printing? ›

CMYK is a four-color process and stands for cyan, magenta, yellow and key (black), and is preferred for use on printed materials because it helps achieve a true color.

Why would you use a PNG over a JPG? ›

The biggest advantage of PNG over JPEG is that the compression is lossless, meaning there is no loss in quality each time it is opened and saved again. PNG also handles detailed, high-contrast images well.

Why would you use JPEG over PNG? ›

Because of their different compression processes, JPEGs contain less data than PNGs — and therefore, are usually smaller in size. Unlike JPEGs, PNGs support transparent backgrounds, making them preferred for graphic design.

What is the highest quality JPEG or PNG? ›

PNG is a high-quality graphics format – generally higher in quality than JPEGs, which are compressed to save space. The PNG format uses lossless compression and is generally considered a replacement to the Graphics Interchange Format (GIF format).

Can I convert a PNG to a PDF? ›

The Acrobat online PNG image converter makes it easy to convert an image file into a high-quality PDF document. Just select the PNG image you want to convert, or drag and drop your image file into the PDF conversion tool. You can then save the new PDF file on your device.

How do I print a PNG file as a PDF? ›

How to Convert PNG to PDF for free in 3 easy steps
  1. Step 1: Upload PNG file. Drag your PNG file onto the safe PNG to PDF Converter dropzone above, or click Upload to choose a file from your computer. ...
  2. Step 2: Convert PNG file to PDF. ...
  3. Step 3: Download your file. Get 3 free downloads of your PDF file.

How do I print a transparent PNG? ›

Usually, you'll find it under the printing preferences. Look for something like "paper quality" or "paper type." Select "transparencies" under the type of paper. If your printer doesn't have a transparency setting, use the glossy paper setting.

What is the best way to convert PDF to PNG? ›

Navigate to the Convert PDF page on Adobe Acrobat online. Click the blue button labeled “Select a file” or drag and drop the file into the drop zone to upload your PDF. Choose PNG from the file format drop-down menu. Or choose JPG or TIFF instead, if you wish.

Can Windows convert PNG to PDF? ›

Windows 10 has a built-in PDF printer you can use to convert a PNG into a PDF. Open the folder where the PNG image is stored in a File Explorer window. Right-click the file and choose Print. In the Print Pictures window that opens, choose Microsoft Print to PDF.

Is PNG or JPG better for printing? ›

So, when it comes to printing, know that PNG files are an excellent option for delivering good quality printouts using office or home printers. This is because these files contain high-resolution images and better color depth. Images from JPEG files become blurry in printouts.

Is PNG or PDF better for printing? ›

Is PDF or PNG better for printing? For printing, PDF images are recommended. PDF files are also an excellent choice for flyers, posters, magazines, and storing images online. If you are planning to edit and save your file multiple times, PNG is the proper file type for this.

Can you Print a JPG? ›

JPEG images can be printed using the mass storage mode. The Object Push Profile (OPP) or Basic Imaging Profile (BIP) is used for printing via a Bluetooth® connection. This printer will convert a color JPEG image to a 'Black & White' image using a dithering process.

Is PNG automatically transparent? ›

They also support opacity and transparency. Because PNGs can have transparent backgrounds, designers can layer them on different backgrounds and the backgrounds will show through. This makes the PNG format an excellent choice for utility assets.

What is the code for transparent PNG? ›

#0000ffff - that is the code that you need for transparent.

What website can I use to make a transparent PNG? ›

Fotor allows you to use its online transparent PNG maker to remove PNG background and create transparent PNG in a few clicks. Just upload your images, and Fotor's PNG maker will automatically process your images into PNG pictures with transparent background within seconds.

How do I make a JPEG print-ready? ›

8 Crucial Steps to Prepare Images for Printing
  1. #1 Calibrate the monitor. When did you last calibrate your monitor? ...
  2. #2 Save your print file in sRGB or Adobe RGB. ...
  3. #3 Save images as 8-bit. ...
  4. #4 Choose the correct dpi. ...
  5. #5 Resize your images. ...
  6. #6 Crop the images. ...
  7. #7 Sharpen the image. ...
  8. #8 Soft proofing.

How do I convert a photo to printable format? ›

How to convert image to PDF and other documents?
  1. Upload your image or photo file.
  2. Choose a document format from the drop-down menu.
  3. With "Use OCR" in the optional settings, you can extract text from an image. ...
  4. Several images can be combined into one PDF with "Merge" (optional).

What is the best file type for Printables? ›

Print File Formats
  • .PDF (Preferred for most files)
  • .EPS (Preferred for large signs and banners)
  • .JPG (Preferred for images)
  • .TIFF (Preferred for high resolution images)

Videos

1. Finger print biometric system example Comapre Image in c#
(winforms)
2. Convert Any Image Into A 3D Design | Two Minutes With MatterControl
(MatterHackers)
3. Windows Forms: Picture Box Print in C# | CoreProgram
(Jayant Tripathy)
4. 😉 How to Use Cricut Design Space for Sublimation
(Design Bundles)
5. Enabling High-Quality Printing in Web Applications
(Esri Events)
6. Print Then Cut Basics Tutorial with Cricut Maker or Cricut Explore Air 2
(DIY Alex)

References

Top Articles
Latest Posts
Article information

Author: Msgr. Refugio Daniel

Last Updated: 31/07/2023

Views: 6195

Rating: 4.3 / 5 (74 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Msgr. Refugio Daniel

Birthday: 1999-09-15

Address: 8416 Beatty Center, Derekfort, VA 72092-0500

Phone: +6838967160603

Job: Mining Executive

Hobby: Woodworking, Knitting, Fishing, Coffee roasting, Kayaking, Horseback riding, Kite flying

Introduction: My name is Msgr. Refugio Daniel, I am a fine, precious, encouraging, calm, glamorous, vivacious, friendly person who loves writing and wants to share my knowledge and understanding with you.