2013-10-29 36 views
0

我有一个简单的应用程序在Android中。其中有两个activity.One是Document.Activity与布局xml是butt.xml。另一个是printDialogActivity和print_dialog.xml。我共享我的打印机,一切正常。但是,当我选择我的共享打印机并单击谷歌云打印中的打印按钮时,会出现一个带有“缺少文档”的黑色标题栏。现在我能做什么?请帮我..文档丢失的Android谷歌云打印

这里是我的文档活动:

public class Document extends Activity{ 

Button btnprt; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.butt); 

    btnprt = (Button) findViewById(R.id.button1); 
    btnprt.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
       Intent printIntent = new Intent(Document.this, PrintDialogActivity.class); 
       //File file = new File("/sdcard/StudentLatePass.txt"); 
       //printIntent.setDataAndType(Uri.fromFile(file), "text/*"); 
       Uri docUri = Uri.parse("http://www.google.com"); 
       //String ur = docUri.toString(); 
       printIntent.setDataAndType(docUri, "application/pdf"); 
       printIntent.putExtra("title", "StudentLatePass"); 
       startActivity(printIntent); 
     } 
    }); 
} 

}

这里是我的butt.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="114dp" 
    android:text="Print" /> 

    </RelativeLayout> 

这里是我的PrintDialogActivity:

public class PrintDialogActivity extends Activity { 
    private static final String PRINT_DIALOG_URL = "https://www.google.com/cloudprint  /dialog.html"; 
    private static final String JS_INTERFACE = "AndroidPrintDialog"; 
    private static final String CONTENT_TRANSFER_ENCODING = "base64"; 

    private static final String ZXING_URL = "http://zxing.appspot.com"; 
    private static final int ZXING_SCAN_REQUEST = 65743; 

    /** 
    * Post message that is sent by Print Dialog web page when the printing dialog 
    * needs to be closed. 
    */ 
    private static final String CLOSE_POST_MESSAGE_NAME = "cp-dialog-on-close"; 

    /** 
    * Web view element to show the printing dialog in. 
    */ 
    private WebView dialogWebView; 

    /** 
    * Intent that started the action. 
    */ 
    Intent cloudPrintIntent; 

    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 

    setContentView(R.layout.print_dialog); 
    dialogWebView = (WebView) findViewById(R.id.webview); 
    cloudPrintIntent = this.getIntent(); 

    WebSettings settings = dialogWebView.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    dialogWebView.setWebViewClient(new PrintDialogWebClient()); 
    dialogWebView.addJavascriptInterface(
     new PrintDialogJavaScriptInterface(), JS_INTERFACE); 

    dialogWebView.loadUrl(PRINT_DIALOG_URL); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == ZXING_SCAN_REQUEST && resultCode == RESULT_OK) { 
     dialogWebView.loadUrl(intent.getStringExtra("SCAN_RESULT")); 
    } 
    } 

    final class PrintDialogJavaScriptInterface { 
    public String getType() { 
     return cloudPrintIntent.getType(); 
    } 

    public String getTitle() { 
     return cloudPrintIntent.getExtras().getString("title"); 
    } 

    public String getContent() { 
     try { 
     ContentResolver contentResolver = getContentResolver(); 
     InputStream is = contentResolver.openInputStream(cloudPrintIntent.getData()); 
     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(); 

     return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); 
     } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
     return ""; 
    } 

    public String getEncoding() { 
     return CONTENT_TRANSFER_ENCODING; 
    } 

    public void onPostMessage(String message) { 
     if (message.startsWith(CLOSE_POST_MESSAGE_NAME)) { 
     finish(); 
     } 
    } 
    } 

    private final class PrintDialogWebClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith(ZXING_URL)) { 
     Intent intentScan = new Intent("com.google.zxing.client.android.SCAN"); 
     intentScan.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
     try { 
      startActivityForResult(intentScan, ZXING_SCAN_REQUEST); 
     } catch (ActivityNotFoundException error) { 
      view.loadUrl(url); 
     } 
     } else { 
     view.loadUrl(url); 
     } 
     return false; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     if (PRINT_DIALOG_URL.equals(url)) { 
     // Submit print document. 
     view.loadUrl("javascript:printDialog.setPrintDocument(printDialog.createPrintDocument(" 
      + "window." + JS_INTERFACE + ".getType(),window." + JS_INTERFACE + ".getTitle()," 
      + "window." + JS_INTERFACE + ".getContent(),window." + JS_INTERFACE + ".getEncoding()))"); 

     // Add post messages listener. 
     view.loadUrl("javascript:window.addEventListener('message'," 
      + "function(evt){window." + JS_INTERFACE + ".onPostMessage(evt.data)}, false)"); 
     } 
    } 
    } 
} 

这是我的打印_dialog.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
<WebView android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 

+0

有没有人可以帮我???????????? –

+0

Plz plz帮我......... –

+0

我正在反对同一个问题。如果我弄清楚,我会让你知道的。 –

回答

0

如果您想要打印的网站内容,在图像形式复制的位图流成PDF格式。您可以使用开源库在android中创建pdf。有很多库可用来创建pdf。现在,您可以打印此PDF -

乌里docUri = Uri.parse(yourPDFFilePath); //给出你的路径pdf文件 printIntent.setDataAndType(docUri,“application/pdf”);

其良好的使用PDF格式打印文档作为谷歌云打印服务提供商推荐使用它 - “我们目前提供对PDF文档的支持最好,所以我们鼓励你比别人使用这种格式。”

我试过这样&已成功打印的网页内容。希望能帮助到你 !!!

+0

谢谢。我能够解决这个问题。 –

+0

嗨, 你用同样的方式或任何其他方式?我很好奇,因为我遵循的方法使用addJavascriptInterface()&我正在寻找其他方法来避免使用此方法。 (其实,我想使原生的Android方法调用此打印功能,但避免使用addJavascriptInterface()的) –

+0

其实我第一次采取的WebView的截图并将其保存到外部存储,然后我把它加入到一个PDF文档(itext库),并最后用谷歌云打印该文档。但是我有一个问题,截图不能给出完整的webview,所以我使用了webview.capturePicture()。你来自哪里? –