Я пытаюсь использовать Google Cloud Print используя C #. В Интернете есть только один пример , который написал Джош Гебель. Я не буду публиковать полный пример, вот единственный метод, который отправляет файл на печать:
public CloudPrintJob PrintDocument(string printerId, string title, byte[] document)
{
try
{
string authCode;
if (!Authorize(out authCode))
return new CloudPrintJob() { success = false };
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com/cloudprint/submit?output=json");
request.Method = "POST";
string queryString =
"printerid=" + HttpUtility.UrlEncode(printerId) +
"&capabilities=" + HttpUtility.UrlEncode("") +
"&contentType=" + HttpUtility.UrlEncode("application/pdf") +
"&title=" + HttpUtility.UrlEncode(title) +
"&content=" + HttpUtility.UrlEncode(Convert.ToBase64String(document));
byte[] data = new ASCIIEncoding().GetBytes(queryString);
request.Headers.Add("X-CloudPrint-Proxy", Source);
request.Headers.Add("Authorization", "GoogleLogin auth=" + authCode);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Stream stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
// Get response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
string responseContent = new StreamReader(response.GetResponseStream()).ReadToEnd();
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(CloudPrintJob));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(responseContent));
CloudPrintJob printJob = serializer.ReadObject(ms) as CloudPrintJob;
return printJob;
}
catch (Exception ex)
{
return new CloudPrintJob() { success = false, message = ex.Message };
}
}
Я запускаю этот код, то есть интерфейс моего принтера, но печать не происходит. Интерфейс моего принтера говорит, что страниц для печати 0, а размер файла не совпадает с размером, который я отправил на принтер.
Виртуальный принтер Google сообщает, что задача (задание) успешно добавлена, но в интерфейсе Виртуального принтера Google рядом с названием документа отображается «Ошибка».
Я подумал, что это может быть проблема с HttpUtility.UrlEncode или Convert.ToBase64String , но я попробовал обратное преобразование - все работает.
Есть ли у кого-нибудь идеи?