Виртуальный принтер Google с использованием C #

Я пытаюсь использовать 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 , но я попробовал обратное преобразование - все работает.

Есть ли у кого-нибудь идеи?

7
задан John Conde 28 November 2011 в 21:20
поделиться