Przede wszystkim dokumentacja GCP nieprawidłowo stwierdza, że można odzyskać funkcje drukarki za pomocą interfejsu usługi/list. To nie działa. Musisz zadzwonić do usługi/printer, która zwraca funkcje drukarki. Możliwości są po prostu listą JSON-ów, z których każdy opisuje parametr drukarki i możliwe wartości, które może przyjąć parametr. Czasami może zawierać również dodatkowe informacje. Oto na przykład mały wyciąg z rozmiarów stron poparte moim HP:
"name": "psk:PageMediaSize",
"psf:SelectionType": "psk:PickOne",
"psk:DisplayName": "Paper Size",
"type": "Feature",
"options": [
{
"psk:MediaSizeWidth": "215900",
"name": "psk:NorthAmericaLetter",
"psk:MediaSizeHeight": "279400",
"psk:DisplayName": "Letter"
},
{
"psk:MediaSizeWidth": "215900",
"name": "psk:NorthAmericaLegal",
"psk:MediaSizeHeight": "355600",
"psk:DisplayName": "Legal"
}
]
Patrząc na żądanie POST, że Chrome wysyła z okna GCP I odkryli, że usługa/złożyć nie korzysta z możliwości parametr w ogóle. W rzeczywistości używa parametru o nazwie bilet, aby określić ustawienia zleceń drukowania. Format parametru jest dość proste, to jest JSON, który wygląda tak:
{
"version":"1.0",
"print":{
"color":{"vendor_id":"psk:Color","type":0},
"duplex":{"type":0},
"page_orientation":{"type":1},
"copies":{"copies":1},
"dpi":{"horizontal_dpi":600,"vertical_dpi":600},
"media_size":{"width_microns":148000,"height_microns":210000,"is_continuous_feed":false},
"collate":{"collate":true},
"vendor_ticket_item":[
//Printer specific settings here, from the capabilities:
{"id":"psk:JobInputBin","value":"ns0000:Tray3"},
{"id":"psk:PageICMRenderingIntent","value":"psk:Photographs"},
{"id":"psk:PageMediaType","value":"ns0000:Auto"},
{"id":"psk:JobOutputBin","value":"ns0000:Auto"},
//etc.
]
}
}
Pierwsza część parametrów odpowiada podstawowe ustawienia w oknie dialogowym Drukuj i są one dość oczywiste, a wartości są łatwe do zmiany. Macierz vendor_ticket_item jest nieco bardziej skomplikowana. Zawiera pary id/value opisane przez możliwości drukarki, które pobraliśmy wcześniej. id będzie zawierać nazwę parametru z możliwościami i wartościbędzie zawierać nazwę jednego z zapisów w opcjach parametrów lub wartości liczbowej etc, jak to opisano w możliwościach.
To powinno działać dobrze dla większości parametrów, ale jeśli utkniesz i nie będziesz w stanie określić prawidłowych wartości, zawsze możesz otworzyć przykładowy dokument w Chrome i wydrukować go. Wybierz drukarkę GCP, a następnie kliknij "Drukuj przy użyciu okna dialogowego Google Cloud Print ...", a następnie w sekcji "Opcje zaawansowane" określ dokładnie potrzebne ustawienia. Używając czegoś takiego jak Fiddler, wyodrębnij wartość parametru biletu z żądania POST, a Chrome wykona usługę/cloudprint/submit.
W jaki sposób przechwycono POST przesłany z okna dialogowego GCP? Nie mogę tego zrobić. Użyłem Proxy, a nie Fiddlera, ale nie było żadnego żądania POST, które zostało przesłane, gdy kliknąłem "Drukuj". –
Czy można wybrać tacę wejściową? Jeśli tak, jakiego rodzaju drukarki używasz? Nie wiem, w jaki sposób GCP wybiera tacę na mojej drukarce i mam problem ze znalezieniem informacji o drukarkach, które MOGĄ być dostępne. – TimSum