Chrome extensions for silent print?

后端 未结 4 810
遥遥无期
遥遥无期 2020-12-13 01:31

I have made a silent print web application that prints a PDF file. The key was to add JavaScript to the PDF file that silently print itself.

To do this I open the PD

4条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-12-13 01:54

    Finally I reached an acceptable solution for this problem, as I couldn't find it out there, but read to many post with the same issue I will leave my solution here.

    So first you need to add your printer to the Google Cloud Print and then you will need to add a proyect to the Google Developers Console

    Then add this script and any time you need to print something execute the print() function. This method will print the document indicated in the content

    The application will ask for your permission once to manage your printers.

    function auth() {
      gapi.auth.authorize({
        'client_id': 'YOUR_GOOGLE_API_CLIENT_ID',
        'scope': 'https://www.googleapis.com/auth/cloudprint',
        'immediate': true
      });
    
    }
    
    function print() {
      var xhr = new XMLHttpRequest();
      var q = new FormData()
      q.append('xsrf', gapi.auth.getToken().access_token);
      q.append('printerid', 'YOUR_GOOGLE_CLOUD_PRINTER_ID');
      q.append('jobid', '');
      q.append('title', 'silentPrintTest');
      q.append('contentType', 'url');
      q.append('content',"http://www.pdf995.com/samples/pdf.pdf");
      q.append('ticket', '{ "version": "1.0", "print": {}}');
    
    
      xhr.open('POST', 'https://www.google.com/cloudprint/submit');
      xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
      xhr.onload = function () {
        try {
          var r = JSON.parse(xhr.responseText);
          console.log(r.message)
        } catch (e) {
          console.log(xhr.responseText)
        }
      }
    
      xhr.send(q)
    
    }
    
    window.addEventListener('load', auth);

    Anyway this script throw a 'Access-Control-Allow-Origin' error, even though this appears in the documentation... I couldn't make it work :(

    Google APIs support requests and responses using Cross-origin Resource Sharing (CORS). You do not need to load the complete JavaScript client library to use CORS. If you want your application to access a user's personal information, however, it must still work with Google's OAuth 2.0 mechanism. To make this possible, Google provides the standalone auth client — a subset of the JavaScript client.

    So to go throw this I had to install this chrome extension CORS. I'm sure that some one will improve this script to avoid this chrome extension.

提交回复
热议问题