标签: google-cloud-print

在Android上使用Google Cloud Print API

我正在开发一个需要打印到打印机的Android应用程序.我决定使用Google云打印,因为它似乎很容易设置.最初,我按照此处找到的步骤集成到Android中.这有效,因为它将打印到我想要​​的打印机.但是,这个过程对用户来说有点牵扯.就我而言,过程如下:

  1. 用户选择我在某些信息旁边显示的打印按钮.
  2. 将显示一个对话框,其中包含将要打印的内容的预览.ActionBar中有一个按钮,上面写着"打印".这开始了这个过程.
  3. 将显示一个新活动,其中显示连接到该用户Google帐户的打印机列表.用户必须选择一个.
  4. 将显示一个新页面,其中提供了打印作业的说明.
  5. 用户必须在右上角选择"打印".
  6. 打印作业启动,打印机打印出图片.

不幸的是,我的客户不想要这个过程.他们希望用户在步骤2中单击"打印",然后打印图片(步骤1,2和6).因此,我不能使用Google提供的Intent,我必须使用实际的API.这需要我获得Google Auth令牌,获取所需的打印机,然后以这种方式提交打印作业.我做以下事情:

  1. 使用Google Play服务检索用户Gmail帐户的OAuth令牌.
  2. 使用/ search API调用获取打印机列表.
  3. 使用/ submit API调用提交打印作业.

我有前两个完成.我只是在实际打印图片时遇到了麻烦.而不是打印图片,正在打印图片的字节数据(Base64编码).以下是关于我如何发送请求的一些代码:

ContentResolver contentResolver = context.getContentResolver();
try {
    InputStream is = contentResolver.openInputStream(uri);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    byte[] buffer = new byte[4096];
    int n = is.read(buffer);
    while (n >= 0) {
            baos.write(buffer, 0, n);
            n = is.read(buffer);
    }
    is.close();
    baos.flush();

    content = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
} catch (FileNotFoundException e) {
    Log.d(TAG, "File not found: " + uri.toString(), e);
} catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud)

printing android google-cloud-print

19
推荐指数
1
解决办法
7886
查看次数

如何删除Android WebView打印添加的保证金?

我们尝试通过谷歌云打印打印webview内容,但无论我们做什么,结果打印输出都会增加一些余量.

有没有办法删除这个保证金?我们尝试了:

<body style="margin: 0; padding: 0">
Run Code Online (Sandbox Code Playgroud)

然后

<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
Run Code Online (Sandbox Code Playgroud)

然后

mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
Run Code Online (Sandbox Code Playgroud)

没人工作......

html android webview android-webview google-cloud-print

19
推荐指数
3
解决办法
1852
查看次数

与Google API服务帐户共享打印机

是否可以与Google API服务帐户共享GCP打印机(https://developers.google.com/accounts/docs/OAuth2ServiceAccount)?

我尝试使用客户端电子邮件地址(id@developer.gserviceaccount.com)共享打印机,但打印机未显示在API调用的响应中/search.调用/submit导致错误(用户无法访问)

google-cloud-print

14
推荐指数
2
解决办法
3255
查看次数

使用Google Cloud Print进行打印机设置

任何想要从浏览器进行无人值守打印的人都知道这不是一项简单的任务,另一方面它对任何后台应用程序都非常有用.然后谷歌用GCP来救我们.

所以我得到了它设置,几分钟后我打印了一份文件.但后来我想对打印机应用一些设置.而这是你意识到文档完全没有这一点的那一刻.它甚至没有解释如何做一些简单的事情,如将页面设置为横向.

文档仅表示您必须以XPS或PPD格式发送功能参数.即使您能够检索打印机的功能,您也会意识到它的名称表明它描述了所有打印机功能,而不是特定打印作业的设置.

那么如何实际指定打印作业设置?

printing google-cloud-print

9
推荐指数
1
解决办法
5368
查看次数

未找到Google云打印OAuth范围

我正在创建一个应用程序,它在生成后从服务器打印出pdf.

使用谷歌云打印时,我不断得到:

User credentials required
Error 403
Run Code Online (Sandbox Code Playgroud)

注意:模拟页面中进行此打印请求工作正常,但那是因为我已经登录到我的Google帐户.

在做了一些研究之后,我发现我需要使用OAuth来获取访问令牌以发送打印作业的请求.

我可以找到的每一页都告诉我将我重定向到:https://www.googleapis.com/auth/cloudprint,它给我一个404错误,我也无法在google游乐场找到它,并使用任何旧版本身份验证的最终结果是请求登录被标记为来自黑客的攻击.

有没有办法解决?

google-app-engine oauth oauth-2.0 google-cloud-print

9
推荐指数
1
解决办法
1828
查看次数

云打印和热敏打印机

我正在使用Google Cloud Print在网络应用中生成打印生成的PDF文档.

一切都在我使用的所有打印机类型(HP,Zebra等)中正常工作,但大约2周前所有Zebra打印机(热敏打印机)都以纵向模式打印PDF文档(忽略打印机设置).

我需要什么?:Google Clout打印保留了我的打印机设置.

我的测试:我更改了打印机设置(文档方向:纵向/横向).我在发送到Google Cloud Print之前旋转了PDF文档.我发送了票务打印机/功能,但Google Cloud Print忽略了它.

我确定这是Google Update.

存在使用热敏打印机的Google云打印的其他人?

它有什么解决方案吗?

UPDATE1:

Google更新了一些文档https://developers.google.com/cloud-print/?hl=es-419&csw=1

这并没有解决我的问题,但我在java中发布了一个库,希望对其他人有用,也许会鼓励有人参与.

此库与Google Cloud Print API的版本1和版本2兼容

Github存储库https://github.com/fsistemas/GoogleCloudPrintApiClientJava

printing thermal-printer zebra-printers google-cloud-print

8
推荐指数
1
解决办法
7645
查看次数

Google云打印获取访问令牌

我想从我的webServer调用/搜索Google云打印方法.

我正在使用OAuth Web服务器指南获取一个与范围一起使用的refresh_token/access_token:

https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile
Run Code Online (Sandbox Code Playgroud)

然后我打电话给搜索Api,但我获得了403禁止.

    Request DefaultHttpRequest(chunked: false)
    POST /cloudprint/search HTTP/1.1
    Host: www.google.com
    Content-Type: text/plain; charset=utf-8
    Authorization: OAuth yb29.1.AADtN_U9PYyVhGpcS-8MpFhfGVbT4KsZKEoIX2HGePwoNXypjrSwVsS0pGzmaqhktfGBAQ
    Connection: keep-alive
    Accept: */*
    User-Agent: NING/1.0
    Content-Length: 0

    Response DefaultHttpResponse(chunked: true)
    HTTP/1.1 403 Forbidden
    Content-Type: text/html; charset=utf-8
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate
    Pragma: no-cache
    Expires: Fri, 01 Jan 1990 00:00:00 GMT
    Date: Tue, 03 Dec 2013 17:05:09 GMT
    Set-Cookie: NID=67=MQJFdl-YkMdz875n1J2yVNmeUeAvsjVtDGlNvGkNLZdNTHX3YbnStNx9Vg_MiRsmht6hj3XrwJcPJEQeFLlnYKqt2Of1xHJ5HDwNJgOB3svOdnN-JRFcPxYt4AU10eSM;Domain=.google.com;Path=/;Expires=Wed, 04-Jun-2014 17:05:09 GMT;HttpOnly
    P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
    X-Content-Type-Options: nosniff
    X-Frame-Options: SAMEORIGIN
    X-XSS-Protection: …
Run Code Online (Sandbox Code Playgroud)

oauth-2.0 google-cloud-print google-oauth

8
推荐指数
2
解决办法
3851
查看次数

使用C#的Google云打印

我尝试使用C#使用Google云打印.互联网只是一个例子,他写了Josh Goebel.我不会发布完整的示例,这是发送要打印的文件的唯一方法:


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, …
Run Code Online (Sandbox Code Playgroud)

c# google-cloud-print

7
推荐指数
3
解决办法
9784
查看次数

如何使用Google脚本打印驱动器文档

我想做的一个例子是使用脚本打印10份保存在Google云端硬盘中的PDF副本。今天,我了解了网站的小工具,这也许就是我们实现此脚本的方式,而昨天,我们为打印机启用了云打印。

我发现类似的问题已于2012年发布:google app脚本打印按钮

显然,当问到此问题时,GAS和Cloud Printing无法正常工作?或不支持或不可用...我不确定。

这可能吗?

我很抱歉,因为这是我的新手,我对Google术语还不太了解。

谢谢!

安迪

google-apps-script google-cloud-print

6
推荐指数
1
解决办法
4649
查看次数

从javascript调用Google云打印/搜索API

有没有人使用JavaScript的Google Cloud Print(特别是/ search)API取得了成功?

我尝试了很多方法,但不断收到以下错误.

XMLHttpRequest无法加载https://www.google.com/cloudprint/search.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http:// localhost:8080 "访问.

代码段:

    var search = new XMLHttpRequest();

    search.open('POST', 'https://www.google.com/cloudprint/search', true);
    search.withCredentials = true;          
    search.setRequestHeader("X-Cloud-Print", "Google-JS");

    search.onreadystatechange = function(response){
            console.log(response);
    };

    search.send();
Run Code Online (Sandbox Code Playgroud)

我可以使用演示表格帖子:

    <form action="https://www.google.com/cloudprint/search" method="post" enctype="multipart/form-data" id="submitForm">
      <input type="submit" value="Search"/>
    </form>     
Run Code Online (Sandbox Code Playgroud)

从完全相同的网页,它是成功的; 我花了很长时间确保这两个请求在提交的数据和标题方面看起来完全相同但无济于事.我不愿意用Java写这个(试图避免服务器后端参与)并欢迎任何帮助.

javascript cors google-cloud-print

6
推荐指数
1
解决办法
882
查看次数