我正在努力将谷歌云打印集成到 Web 应用程序中,以允许客户在生成 pdf 文件后将其发送到打印机。
我查看了谷歌开发者网站上的所有可用文档,但到目前为止,我还没有让我的测试应用程序连接到谷歌打印网络服务。
这是当前的过程:
- 应用程序从用户和谷歌获得使用/管理用户打印机的许可(使用谷歌 API)。
- 这会导致从 google 返回 0Auth 身份验证令牌。
- 该令牌用于创建一个新的 http 请求,以便尝试在服务器上创建一个新的打印作业(不使用 api,因为我看不到任何可用的该服务)。
- 发布请求后,应用程序每次都尝试读取响应流和.... 403 错误。即使我确定我已经遵循了谷歌的标题格式。
所以我要简单地问的是:
- 在与我可能正在做的这样的谷歌网络服务交互时,是否有任何常见的绊脚石?
- 是否有任何可用的 API 可以简化与谷歌打印网络服务的通信过程。
- 有没有我可能想考虑的谷歌打印的好替代品。
谢谢。
private void SendPrintJob()
{
string googlePrintURL = @"https://www.google.com/cloudprint/submit";
Classes.pos_CloudPrintObject print = new Classes.pos_CloudPrintObject();
print.printerid = "28a52678-43ef-6592-e32c-255e7220cb8a";
print.title = "Test Print";
print.populateTicket();
print.content = "Hello World";
//googlePrintURL += "?printerid=" + print.printerid;
//googlePrintURL += "&title=" + print.title;
//googlePrintURL += "&ticket={}&content=" + print.content;
string queryString =
"printerid=" + print.printerid +
"&capabilities=" +
"&contentType=" + "txt" +
"&title=" + print.title +
"&content=" + print.content;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.google.com/cloudprint/submit");
request.Method = "POST";
string code = Request["code"];
request.Headers.Add("Authorization", "OAuth " + code);
request.Headers.Add("Accept-Encoding", "ASCII");
//request.Headers.Add("Accept-Charset", "ISO-8859-1");
request.Headers.Add("X-CloudPrint-Proxy", "TestProj");
request.ContentType = ("application/x-www-form-urlencoded");
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] bytePost = encoder.GetBytes(JsonConvert.SerializeObject(print));
request.ContentLength = bytePost.Length;
using (Stream writeStream = request.GetRequestStream())
{
writeStream.Write(bytePost, 0, bytePost.Length);
}
HttpWebResponse response;
try
{
response = (HttpWebResponse)request.GetResponse();
//Prints out status of upload into debugger (But can be altered to return string instead)
using (response)
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
String result = reader.ReadToEnd();
System.Diagnostics.Debug.WriteLine(result);
}
}
}
}
catch (Exception ex)
{
throw (ex);
}
}