Jun 152010
 

Introduction

Developing web/browser-based applications might be a hard task. One of the difficulties is that an application is a client-server application. The application consists of the two parts, one runs on the server side inside a web server, another runs on the client side inside a web browser. If a part of the application does not communicate with the external world, e.g. it performs some computation, it might be irrelevant or not very important to understand where it’s running, the server side or the client side. But if the part is communicating with the external world, e.g. it performs printing, it is extremely important to understand the rules and requirements of such communications. To complicate life, modern IDEs and frameworks provide high-level tools and these often hide/abstract core interaction logic between the browser and the server.

The goal for this post is to analyze possible use cases/scenarios related to label printing in web applications. For each scenario the necessary software, installation location, usefulness, etc will be discussed. After reading the post, the readers should be able to answer questions like «Why does my application work great on a development machine, but stop working/crashes/does nothing after deployment?» if awaken in the middle of the night; or even better if such questions will never arise :)

Different Scenarios

In context of label printing the important questions are:

  • Where is the printer connected? On the server or on the client/user machines?
  • Where does the printing happen? On the web server or on the browser?

So, we have four different scenarios.

Printer Connection

User PC

Server

Print From

Browser

Scenario #1

Scenario #4

Web Server

Scenario #3

Scenario #2

Lets look at each scenario in detail.

Scenario #1

In this scenario the printer is connected to the client, and printing itself is done on the client/browser. It is a «typical» scenario because is it a classic web-application scenario. The server might be thousand kilometers away; the server cannot access and does not know anything about local label printers installed on users machines. Note: the printer might be not connected directly to the user machine, it might be a «shared» printer on a local network. It is still can be considered as a «local» printer, because it is available from client machine. The point here is that the printer is available from client machine but NOT available from the web server machine.

Server Requirements

There are no special requirements for the server. It might run on any operating system, use any web-server software (like Apache or IIS), etc. Very likely that it will host one or more label files (.label) to be available on the clients.

Client Requirements

Because the printer is connected to the client/user machine, the printer drivers must be installed on the client. Anything else is optional but the most convenient way to do printing is to use the DYMO Label Framework JavaScript Library. In this case DYMO Label software should be installed on the client as well.

Hints for Developers

There should not be code in any language but JavaScript that accesses printing functionality, e.g. there should not be any ASP.NET event handlers those try to create DYMO.Label.Framework or DYMO.DymoAddIn objects.

Load a label file from the server using any AJAX library.

Scenario #2

In this scenario a printer is connected to the server. Printing itself is initiated on the server side as well. Possible types of labeling applications using this scenario are:

  • Some sort of “hard copy” logging. E.g. each operation/transaction is printed on a continuous label roll, like a receipt.
  • In intranet the label printer might be the only one available on the local network, so it might be suitable to connect it on the server.

Server Requirements

Because the printer is connected to the server, printer drivers must be installed on the server. Anything else is optional. If the server is running on Windows the most convenient way to do printing is to use DYMO Label Framework. In this case DYMO Label software should be installed as well. If the server is running on Linux, then you would probably use some PDF library to generate label content then print it using the CUPS API.

Client Requirements

In this case no special/additional software is needed on the client.

Hints for Developers

Check you have no JavaScript code accessing any print related functionality.

Scenario #3

In this scenario the printer is connected locally on the user’s machine but the printing itself is initiated on the web server side. It is really usable only for intranet, because server has to have a connection to a user (all users) printer(s).

Server Requirements

The printer is not physically connected to the server, but printer drivers must be installed on the server because the server has to have a “queue” for the remote client printer. Anything else is optional. If the server is running on Windows the most convenient way to do printing is to use DYMO Label Framework. In this case DYMO Label software should be installed as well. If the server is running on Linux, then you would probably use some PDF library to generate label content then print it using CUPS API.

Client Requirements

Because printer is connected to the client, printer drivers should be installed on the client. Also, the printer itself should be “shared”, so the server can make connect to it and can send print jobs.

Hints for Developers

Check you have no JavaScript code accessing any print related functionality.

Scenario #4

In this scenario the printer is connected to the server, but the printing is initiated from the client. Again it is only usable in intranet/local network setups. Even though, it is hard to think about any good use cases here, because scenario #1 or #2 would be more applicable here. Try to avoid this setup.

Hybrid Scenarios

Of course, some installation might require hybrid scenarios. E.g. your application developed using scenario #1 and works great. Later you decided to add a label preview feature, so user can look at the label before printing. Unfortunately you have to support IE6. But the label preview feature does not in IE6 (it uses data URLs, not supported by IE6). In this case you could modify your setup and install DYMO Label Framework on the server. In this case a label preview can be easily generated on the server and be passed to the client as a regular image URL, not as a data URL.

Conclusion

Developing a web application might be a hard task but it doesn’t have to be. Try to think about your application deployment requirements in advance. Based on that, determine what scenario is the best fit for the application. After that you can think about what should be installed on the server and  client machines and what tools/libraries to use for development.

If you run into a problem, try to determine what scenario your application is using. Knowing that you will know what should be installed in the server and client machines. You might need to rewrite some code if it is placed in a wrong place, that is why it is better to think about it in advance. Don’t hesitate to contact DYMO – we are always glad to help.

  44 Responses to “Label Printing and Web Deployment”

  1. I have all DYMO (v8.2+) software installed including SDK. I cannot get the activeX component created in my code. Do I have to register the DLL by hand? If so, what DLL is it for IE8. This is the line in your .js file that is failing: var framework = new ActiveXObject(“DYMOLabelFrameworkIEPlugin.Plugin”);

  2. Hi! I’m an s/w dev [unix] working on med records software. One of our test sites is having problems with the dymo software (for the label maker) – it crashes immediately upon launch, and some part of the dymo driver dies repeatedly. The OS is vista, and it appears that kernel32.dll is crashing every 15 minutes, like clockwork and then restarting. It’s a 450 twin turbo.

    I don’t really want to get out a debugger and troubleshoot or reverse engineer the application and drivers.
    Is there a newer more stable version, or can I somehow add the 450’s definitions back to the previous version of the software? All I want is for the OEM label application to run without crashing. Otherwise, I have to write a custom label maker for this model, and I want to avoid the work.

    The error that pops up every 15 minutes is:
    DYMO Label Software has stopped working
    (followed by “windows can check online for a solution”, which is highly unlikely to resolve anything in my experience – but I tried anyway. Yay Microsoft!)

    The problem signature is:

    Problem signature:
    Problem Event Name: APPCRASH
    Application Name: DLS.exe
    Application Version: 8.2.2.996
    Application Timestamp: 4be8d4d5
    Fault Module Name: KERNEL32.dll
    Fault Module Version: 6.0.6001.18000
    Fault Module Timestamp: 4791a76d
    Exception Code: e0434f4d
    Exception Offset: 000442eb
    OS Version: 6.0.6001.2.1.0.256.6
    Locale ID: 1033

    Please spare me from having to reverse engineer the printer application – I have downloaded and installed the beta v8.2+ software on the outside chance it will help, but my plea for help remains…
    :)

    • It looks like a crush of DLSService – an utility process for DYMO Label Software. You can disable it by removing from AutoRun list (HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun), this will not affect DLS itself. But the problem is more likely with the configuration on that machine. What is the OS, is any service pack installed? Can you run DYMO Label software itself without errors? Could you grab log files using LWSupport utility located in the Support folder of the main DLS installation folder and send to vbuzuev at dymo dot com? As a general suggestion for “hard” crushes on Vista – try to install SP2 and update video drivers to latest available. Also, it it not clear from your message are you using our SDK or not. If not, and all you need are drivers, then you could think about installing drivers-only package instead of full DYMO Label software installation. Either uncheck “DYMO Label” option available on Custom installation step of regular installer (DLSSEtup.exe) or download and install drivers-only package from here (32-bit and 64-bit

  3. Well, the new version of the v8 labelmaker didn’t do anything except continue to crash.

    Guess I’ll be grabbing a USB bus analyzer and whipping up some python modules so I can reliably write to the 450 without being forced to do tech support for customers using vista. :(

    Seriously y’all – adding dot net dependencies to your software isn’t really a step forward. It’s a small printer with limited pixel area and some control sequences… I guess I’m just old school.

    Also, for another $3 in components, these printers could be sold with ethernet capability for $50 more – and then speak ethernet or old port 9100 telnet protocols, and you could bypass the whole microsoft stack just like that. Maybe that would cut into Rhino sales. Anyway, I’m just a naive programmer….

  4. I have the latest SDK & DLS 8.3
    Dymo Label Writer 4XL
    Windows XP SP3
    Visual Foxpro

    Why

    obj = CREATEOBJECT( “DYMO.DymoAddIn” )
    obj.Open( “C:DymomyLabel.LWL” )


    works fine for old label format “.LWL” and does not work for new format “.label”


    obj = CREATEOBJECT( “DYMO.DymoAddIn” )
    obj.Open( “C:DymomyLabel.label” )


    the open function returns false, the “Open2” opens dialog box (but the file EXISTS and i can open it using DLS)

    Low level COM does the same

    obj = CREATEOBJECT( “DYMO.LabelEngine” )
    obj.OpenFile( “C:DymomyLabel.label” )


    returns false but works fine for old “.LWL” format

    Where am i wrong ?
    Please help

    Why i can’t open labels in new format “.label”?

    • Coukd you e-mail both .lwl and .label files to vbuzuev at dymo.com? We will investigate… Thanks

    • Another question, do you have DLS 7 installed?

      • It doesn’t work for me neither… Any news? Thanks

        • Could you describe what exactly does not work?

          • Hello Vladimir, sorry for the delay.
            I’m using the DYMO.DymoAddIn in a Javascript, and the function .Open() simply doesn’t load the .label file.
            It doesn’t throw any exception, simply it does nothing. I tried with labels stored both locally and on http site, but it doesn’t work neither.
            Do note that I can design and print a label directly inside the Javascript with PrintObject.AddObject() and it works correctly, so it leads me to think that is actually a problem of the .Open() function.

            I’m currently using Dymo Label v8.3.1.1332 and MS Internet Explorer v 9.0

            Thank you, best regards
            Alessandro

          • There could be problems with DymoAddIn API (DLS SDK API) when using from IE related to security settings and/or Protected mode. Unfortunately, it is because of internal DymoAddIn architecture and not easily fixable.

            I strongly recommend using DYMO Label JavaScript library for interaction with DYMO printers from a web-browser. See the blog for the numerous posts.

  5. It is broken in Snow Leopard 10.6.8 and safari 5.1, firefox 5.0.1 and 3.6
    I also read that it’s also broken in Lion
    please fix this ASAP

    • Could you be more specific about what is broken? What is the error? What code you tried to run?

      • Hi Vladimir,

        It’s broken on https://digitalepostzegel.tntpost.nl/ the Dutch postal site to print post stamps.

        I give you a walkthrough as I supose you don’t speak Dutch

        1) choose the gray “Kies nu” button on the bottom of the page. This is preset for a normal letter stamp
        2) Next choose “Of print een proefzegel” just below the big print button on the right. It generates a test / demo stamp to test your printer.
        3) The popup states: The Dymo software is not installed. You need to instal it before you can use the system.

        The system was working very well before upgrading to the latest snow leopard 10.6.8 and the new safari 5.1.
        Firefox also ceased to work.

        The people from the Dutch postal services just mailed me a work around. The Omniweb browser does function with the system.
        http://www.omnigroup.com/products/omniweb/download/

        It is also reported that the same problem appears in Lion OS X 10.7

        It is apparent that Dymo has to update there webplugin to be compliant with Lion the latest Snow Leopard, (running Safari and Firefox) to get everything going again.

        I you need more information please let em know.

        Best regards, Bart

        • Hi Bart,

          Thank you for extensive information. Yes, WebKit-style plugins were discontinued by Apple and do not work in Safari 5.1 (on both 10.6 and 10.7). DYMO updated DLS, SDK, and javascript library to support Mac OS X 10.7, they are available as DLS 8.3.1. and javascript library 1.2. The Dutch post has to update their site to use latest SDK.

          Thanks,
          Vladimir

          • Vladimir, thank you very much for your detailed answer. I’ll forward your information to the Dutch post so they know how to fix this problem.

            Thanks again and have a nice day, Bart

  6. I am trying to print from the web server in an asp.net application. There is only 1 dymo printer the end users will print to. It is shared across the network to the web server. When I run
    foreach (IPrinter printer in new DYMO.Label.Framework.Printers())
    I don't get any printers returned. Is this because IIS is running under a user account where the Dymo is not installed. Am I missing the point. I want to avoid having to install anything on the end user machines.

    • Which of the above scenarios are you using?

      Are you using version 7.5 or later or IIS? If so, you can change, in IIS settings, the application pool to run as the “Network Service” and see if that fixes your issue?

  7. Can’t get print to work thru Proxy service. Web application is printing labels for event check in process. All components installed on web server and application works fine using PC browser with directly connected printer. I want to switch to using browser on Android tablet to print to printer connected to windows PC via WiFi connection to same network through proxy service. Proxy is running on PC. Firewall turned off. Using tablet browser accessing web site check in process, at point that printing would be initiated, the script returns error message stating printer is not Installed. Install Dymo Printer..
    So this is not normal Android application printing scenario. Not sure if this is environment for which Proxy service is intended. Not sure if a USB connection on Android device to Dymo Printer is in works (Dymo Android printer driver), and I would guess a bluetooth dongle not in works either.
    What might be solution to this environment?
    You won’t have access to this app on web site

    • Usually the SDK is able to discover the service on the network automatically using Bonjour. But sometimes Bonjour does not work. One common case is when the service and the Android device are on different subnets. This isn’t a problem with the DYMO service, it is how Bonjour works in its default configuration. There are solutions for this issue. You’ll find some hints here http://serverfault.com/questions/136133/bonjour-mdns-broadcast-across-subnets

      It could be that the firewall is blocking the incoming traffic. Please make sure that the port 8631 has been configured to allow inbound requests.

      • Looking into issue a bit more, the router I am using does not allow inbound requests when there hasn’t been a corresponding outbound request as part of its security setup. I have email in to manufacturer to see if there is a way around this.

        • I am configuring a port for the proxy on my router understanding that I have to support inbound requests. Although I have tried printing, with the firewall disabled and it didn’t work, I am defining a policy that specifically includes this port. One thing I had not come across, was for that port, what protocols are needed, I am currently going to be testing with UDP/TCP protocols defined.

          But at stated in a separate email to you, I am not sure my configuration is what the Proxy solution is intended. I am using a browser on a tablet to access my website application from which I generate the label printing. The framework, the label (not used), and the printing JS (includes XML definition of label, is all on the server. The laptop to which the printer is connected is on the same subnet as the devices are in the same location. The tablet is failing when it tries to connect to a printer, but because there are no printers / driver defined on the tablet. So it doesn’t get a chance to try to send a print request out that would be picked up on the configuration you define for the printing proxy.

          I think I need to find a solution, or some function, that changes that printing process. I want the same scripts etc to be used for printing, whether I am using the notebook to access the web app, or the android tablet. If I have to have some other executable run on the android before I try to do printing (hopefully, once a session), that will be acceptable. But I’m not an android developer either.

          ron

  8. Hi ,

    I’m using DYMO label writer 450 Turbo. It is printing fine in my local machine. I moved my web application code to windows server 2008 and installed DYMO software on server machine. (no java script written related to DYMO Print)

    Printing functionality not working.. Please let me know.

    Thanks,
    Austin

    • Austin,

      Note that DLS does not officially support Windows Server 2008. That being said, you may still be able to get your application to work. I would check permissions and security settings to ensure when your code runs, it has access to the necessary COM objects.

  9. Hi,

    I have 2008r2 server, I have installed DLS 8.5.1.1816 and installed the activex control for an administrative user. When I go to the check environment page it looks ok:

    isBrowserSupported: true
    isFrameworkInstalled: true
    errorDetails:

    I have a Dymo 320 installed as local by HP (shared using jetdirect) and the same printer is also connected by network share.

    However, when I go to one of the sample pages (http://labelwriter.com/software/dls/sdk/samples/js/PreviewAndPrintBarcodeLabel/PreviewAndPrintLabel.html) I get a no printers installed message. I am using IE11

    If I run the Dymo label software it shows just the locally installed printer and I can print fine. Any ideas what would be stopping the detection of the printer?

    Any help would be appreciated

    • As an addition if I try with Chrome it asks for permission to run and then just gives the “Aw Snap” page

    • DYMO does not support Windows Terminal Services. You’ll find some tips about this topic here https://dymo.custhelp.com/app/answers/detail/a_id/488

      • Thank you, but I can print fine.

        It is the detection of installed printers in the browser that is failing. If this is something that is not going to be resolved then I will move on and use something else

        • Hi Mark,

          Unfortunately, since we do not support windows server, we do not have the environment to test with but I can try to help you. I see in the original comment that you have the label maker local via HP JetDirect and via Network Share. As a test, could you physically attach the printer to the server and try again, simplifying the set up. Also, could there be a permission issue on the server preventing the JavaScript from accessing a COM object?

          • Thanks for coming back

            Unfortunately the TS servers are at a different site from the label printer, I do have an older label printer about I will dig it out and see if it helps.

            Without wanting to appear stupid, where would I check the permissions for a COM object?

          • Our java script library is using Active-X.
            You can check whether the add-ons for DYMO Printer is enabled or not.

          • Thank you for coming back so quickly, unfortunately I missed the reply. Have looked today and under Sanford LP I have a plugin class showing enabled with permission to run on all websites. I am presuming this is the plugin we are looking for. Unfortunately still no printers found.

          • Hi Mark,

            Like an earlier post suggested, I would start simplifying the set up in order to isolate the potential issue. The first attempt would be to connect a label printer directly to the machine in question and remove any sharing of the printer and see if the printer is found. Also, Windows Server is an unsupported platform so we do not test on and do not have much experience in the potential issues that could arise. I’m sorry for any inconvenience this may cause you.

  10. Hi ,

    Everyone works well on my dev machine .. but when i deploy it and try to go to the web application via website i get this error::

    Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

    Basically instead on looking at IIS where i have deployed it ..its still looks into my local dev mavhine documents.. I don’t why this i s. Please help.

    PS. in the scenarios given above , I am more of scenario #3 as this is an intranet project… I have installed the drivers on the server and everything..
    I look forward to your response .

    • It looks like an IIS configuration issue. I don’t know IIS administration, but a customer had a similar issue and he could solve the issue by changing the IIS setting to run the application pool as the “Network Service”.

  11. Has anyone solved this issue?
    ..i still hav’t sorted mine ..this is annoying me now
    Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

    • I think i just about sorted this.. my next issue is i have got a variety dymo printers ..is there a way i can specify to where to print at the moment every print job is being sent to the dymo label connected to my dev machine.

      • The Framework.GetPrinters() method returns a list of printers that can be used to print using the DYMO Label Framework. This list includes both LabelWriter and Tape printers. Use GetLabelWriterPrinters() to get a list of LabelWriter printers only or use GetTapePrinters() to get a list of Tape printers only.

        I assume that you present the list of available printers to the user which has then to select the correct printer.

    • I am getting the same issue, what did you do to fix it?

      Thanks
      Al

  12. i get this error when i try to run my web application on a 64-bit machine. Please help

    Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Runtime.InteropServices.COMException: Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

    Stack Trace:

    [COMException (0x80040154): Creating an instance of the COM component with CLSID {09DAFAE2-8EB0-11D2-8E5D-00A02415E90F} from the IClassFactory failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).]
    FTGLabels.Label..ctor() in C:\Users\saaharjits\Documents\Visual Studio 2015\Projects\FTGLabels\FTGLabels\Label.aspx.cs:16
    ASP.label_aspx..ctor() in C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\e2667942\8f452a67\App_Web_2yo3jcns.1.cs:0
    __ASP.FastObjectFactory_app_web_2yo3jcns.Create_ASP_label_aspx() in C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\e2667942\8f452a67\App_Web_2yo3jcns.5.cs:0
    System.Web.Compilation.BuildResultCompiledType.CreateInstance() +30
    System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +100
    System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +31
    System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) +37
    System.Web.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +346
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

  13. I have a requirement to print labels via a DYMO LabelWriter 450 printer via an existing WCF Service. The user will enter the Shop order number via the Window Forms Client and the label prints on a locally USB attached DYMO printer. I have installed the DYMO LabelWriter 450 software on the application server. I thought that the following code on the Client would return the list of devices on the local user’s PC but it is in fact returning the devices on the application server where the application is hosted.

    var deviceQuery = new ManagementObjectSearcher(“Select * from Win32_Printer”);
    foreach (var device in deviceQuery.Get())
    {
    var devName = device.GetPropertyValue(“DeviceID”);
    if (devName.ToString().ToLower().Contains(“dymo”))
    {
    try
    {
    var label = DYMO.Label.Framework.Label.Open(“c://TiosFolder//TiosDownloadFiles//dymo450label01.label”);
    label.SetObjectText(“prodref”, product#);
    label.SetObjectText(“lotref”, lot#);
    label.SetObjectText(“ddmmref”, ddmm);
    label.SetObjectText(“orderref”, shopOrder#);
    label.SetObjectText(“descrref”, Descr”);
    label.Print(devName.ToString());
    }
    catch (Exception ex)
    {
    MyGlobals.logger2.Information(“Error”, ex);
    }
    }

    I need to be able to determine from the browser if a USB printer containing the word “DYMO” exists on the client PC and if so send the print to this local printer. Is this possible ??? If so how can I achieve this ?

    regards
    Pat

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)