The need for a printer driver is an exotic task for web servers – a phyiscal printer is just out of the picture, and many PaaS vendors simply removed printer drivers and the printer queue altogether, either for performance or security reasons (just see the recent notorious PrintNightmare CVE for an example). Therefore, you were jsut out of luck when using List & Label in such environments prior to version 27.
For version 27, we finally came up with a solution. This great new feature – pardon my heart-felt excitement – blends in very nicely with the other cloud/web centered features of the upcoming version. But it also provides a hidden gem for desktop developers, so keep on reading, even if you think this doesn’t matter to you.
Azure App Service and Docker
Azure App Service is by far the most popular hosting platform amongst our customers. However, so far you had to book a fully fledged virtual machine including RDP access in order to start the printer queue and install a printer driver. The required steps are documented here. This solution not only meant more work, it also turned out much more expensive. Plus, you coudln’t use all features of the deployment pipeline in VS.
While for security reasons, you’re still not able to directly deploy apps to App Service (GDI is locked out, details see here), Microsoft allows to circumvent this restriction by containerizing your app and hosting it in a Windows Docker container. You would just need a Pv3 Azure instance to work with Windows containers.
In these environments, List & Label will now automatically switch to the new mode. You won’t notice any difference besides “it just works”. Note that there might be minor layout changes, compared to a printout, and you might have to ship your fonts to the container, if you’re using a Windows Core base image, as Microsoft basically doesn’t ship any fonts at all with this image.
You can also switch the desktop version to the printerless mode. All you have to do is to set the new global option LL_OPTION_PRINTERLESS to 1 (i.e. set it before opening any jobs and use -1 as job handle) or – if using a component – just set LL.Printerless to true. This will result in a couple of changes in the UI:
The Layout Regions dialog will sport a new printer, called “Virtual device”:
This device basically has all the features a “normal” printer has. This is important in case you create a preview file that is – later in the process – then printed to a physical printer. That way, you’ll conveniently set the defaults for the following print out. Plus, it offers another great feature: you can set the printer format to user defined at any time and simply type in the required dimensions for your layout:
This enables arbitrary project sizes, without having to rely on a printer driver supporting those sizes. No more quirky workarounds. Just a clean, easy solution. Brilliant – still enthusiastic, I’m really happy to finally get rid of one of the largest restrictions we were facing in the past.