2015-08-07 16 views
8

Zrobiłem cichą aplikację internetową do drukowania, która drukuje plik PDF. Kluczem było dodanie JavaScript do pliku PDF, który cicho się drukuje.Rozszerzenia Chrome do cichego drukowania?

Aby to zrobić, otwieram plik PDF za pomocą programu Acrobat Reader w chrome, który pozwala mi na wykonanie skryptu (z odpowiednimi uprawnieniami).

Jednak zgodnie z zapowiedziami to rozwiązanie nie będzie działać po chrome 45, ponieważ problem z NPAPI.

Domyślam się, że możliwym rozwiązaniem może być użycie niedawno wydanego printProvider z rozszerzeniami chrome.

Mimo to nie mogę sobie wyobrazić, jak wystrzelić którekolwiek z zdarzeń printProvider. Pytanie brzmi: czy dobrze jest myśleć w rozszerzeniach chrome, aby utworzyć aplikację internetową z cichym drukowaniem i jak mogę uruchomić zadanie drukowania dla osadzonego pliku PDF strony HTML.

+0

Mój komentarz będzie ... jeśli uważasz, że jest OK, aby automatycznie wydrukować plik PDF, który otwieram bez mojej zgody ... trzeba być żartuję. Jestem zaskoczony, że mówisz, że to zadziałało. Nie ma mowy (miejmy nadzieję), że w przyszłości ktoś może stworzyć dokument, który automatycznie po otwarciu wypluje strony z mojej drukarki. –

+1

Jak już powiedziałem, tak długo, jak użytkownik daje odpowiednie pozwolenie na cichy druk na swoim komputerze, to nie jest tak szalone. Sprawdź ten link, w jaki sposób udzielić odpowiedniego pozwolenia https://www.adobe.com/devnet-docs/acrobatetk/tools/PrefRef/Windows/TrustManager.html#idkeyname_1_19573 – Diego

Odpowiedz

6

Wreszcie dotarłem do przyjęcia rozwiązania tego problemu, ponieważ nie mogłem znaleźć go tam, ale czytać wiele post z tym samym problemem Zostawię moje rozwiązanie tutaj.

Więc najpierw trzeba dodać drukarkę do Google Cloud Print, a następnie trzeba będzie dodać Proyect do Google Developers Console

Następnie dodać ten skrypt i wszelkie razem trzeba wydrukować coś wykonać print() funkcjonować. Ta metoda spowoduje wydrukowanie dokumentu wskazanego w treści. Aplikacja poprosi o pozwolenie, aby zarządzać drukarkami.

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);
<script src="https://apis.google.com/js/client.js"></script>

Zresztą ten skrypt rzucać '-Control-allow-access pochodzenia' błąd, chociaż pojawia się w dokumentacji ... nie mogłem pracować :(

Google APIs obsługuje żądania i odpowiedzi z wykorzystaniem współdzielenia zasobów pochodzących z różnych źródeł (CORS) .Nie musisz ładować pełnej biblioteki klienta JavaScript do korzystania z CORS. Jeśli chcesz, aby aplikacja uzyskała dostęp do osobistych informacji użytkownika, musi nadal współpracować z OAuth Google Mechanizm 2.0. Aby było to możliwe, Google udostępnia autonomiczny klient uwierzytelniania - podzbiór klienta JavaScript.

Tak więc, aby rzucić to musiałem zainstalować to rozszerzenie chrome CORS. Jestem pewien, że ktoś ulepszy ten skrypt, aby uniknąć tego rozszerzenia chrome.

+0

co, jeśli nie ma dostępu do Internetu? – hakan

+0

@piedpiper Obawiam się, że to rozwiązanie działa tylko z dostępem do Internetu. To rozwiązanie wykorzystuje serwer Google Cloud Print do drukowania kolejki wydruku, która odbiera Twoje zadanie, a następnie wysyła je do Google Chrome, aby w końcu wysłać je do drukarki. Oryginalne rozwiązanie, o którym wspomniałem, które działało przed wydaniem npapi, nie korzysta z dostępu do Internetu i nadal działa z np. Ale to może tylko drukować pliki PDF (ponieważ jest to osadzony czytnik Acrobat, który wysyła do drukarki) i zakłada, że ​​możesz dodać javascript do pliku pdf, aby wydrukować go samodzielnie. – Diego

+0

Witaj @Diego, próbuję zrobić to samo, czytam o Google Cloud Print i jest to moja ostatnia opcja, czy znalazłeś inną opcję? lub jak korzystać z printProvider? Dzięki. –

1

Po usunięciu npapi, nie wierzę, że jest to możliwe wyłącznie programowo. Jedynym obecnym sposobem, w jaki można uzyskać chromowane drukowanie w trybie cichym, jest użycie trybu kiosku Chrome, który jest flagą (tryb), którą należy ustawić przy uruchamianiu chrome.

Spójrz na te tak stanowiskach:

Silent printing (direct) using KIOSK mode in Google Chrome

Running Chrome with extension in kiosk mode

+0

Jeśli chcesz uruchomić [aplikację na komputery stacjonarne lub zdalny serwer] (http://stackoverflow.com/a/28783269/3196753) jest kilka alternatyw. – tresf

1

Możesz zarejestrować aplikację na schemacie URI, aby aplikacja lokalna drukowała w trybie cichym. Ustawienie jest dość łatwe i proste. To niezrównane doświadczenie.Pisałem tu rozwiązanie z pełną przykład:

https://stackoverflow.com/a/37601807/409319

Powiązane problemy