Automatically open the printer dialog after providing PDF download

前端 未结 3 1918
灰色年华
灰色年华 2020-11-28 11:38

I am currently opening a pdf file in a new tab in my browser but I need to know how to open a printer dialog to print the pdf jasper report after pressing a commandButton

3条回答
  •  清歌不尽
    2020-11-28 12:21

    You can't print a URL directly from JavaScript, you can only open the print dialog for the existing page - article and print API.

    PDF is generated on the server and sent to the web-browser (as a separate "page") which has to decide how to process it - the user is usually asked if it wants to display or save the PDF.

    To "automatically print" (i.e. open a print dialog) an HTML page you would just have something like this:

    window.onload = function() {
      window.print();
    };
    

    But that can't be done for a PDF since it's not an HTML page.

    To "automatically print" something other than an HTML page you would need to have a web-browser plug-in to handle PDFs from your server.

    Another posibility is to write a GreaseMonkey user-script that would react on *.myserver.com/**.pdf and have it printed. Note: GreaseMonkey is a Mozilla Firefox plug-in.

    Heavy weight option

    You could accomplish your task by adding print support to your server application. Application requirements:

    • It would have to be an Intranet application (self-hosted inside the user's network),
    • Admin user would need to register network printers accessible from the server via a JSP page,
    • A "print dialog" page where you would select a registered printer and on clicking the "Print" button send a "print" request, for example:

      /print?printer=printer1&doc=/reports/report1

    I have seen a Java web application that supported this, but as you can see, it's not an easy task.

    @Sujan Sivagurunathan

    I tried combining the p:printer and p:media by replacing the image on the p:printer demo page with the PDF file from the p:media demo page:

    // Replace this line:
    
    
    // With this one:
    Undefined
    

    When you click the Print button you get an empty page. If you omit the style="display:none;" and leave the PDF's height="300px" width="100%" you will get a small rectangle on the page print preview.

    Eidt

    Thank you, BalusC and Sujan. I agree, there is an option of embedding JavaScript inside the PDF, but that's usually disabled for security reasons.

    I suppose the most browser-compatible and user-friendly way is to have a dedicated Print Preview pop-up window with an iframe showing the given PDF via GET request and a Print button to invoke the IFRAME's contentWindow.print().

    It is generally a bad idea to just print a document without letting the user select the printer and configure it.

提交回复
热议问题