336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
구글 클라우드 프린터를 이용하여 프린팅하는 소스를 짜보았다.
구글 디벨로퍼 가서 검색을 한 결과 프린트 할 화면을 pdf파일로 만들어서 해당 웹사이트로 그 파일을 보내면 된다는 것이였다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | public class PrintDialogAct 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; private static final String CLOSE_POST_MESSAGE_NAME = "cp-dialog-on-close"; private WebView dialogWebView; private Intent cloudPrintIntent; @Override protected void onCreate(Bundle saved){ super.onCreate(saved); setContentView(R.layout.print_dialog); dialogWebView = (WebView)findViewById(R.id.webview); cloudPrintIntent = this.getIntent(); WebSettings setting = dialogWebView.getSettings(); setting.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 boas = new ByteArrayOutputStream(); byte[] buffer = new byte[4096]; int n = is.read(buffer); while(n >= 0){ boas.write(buffer, 0, n); n = is.read(buffer); } is.close(); boas.flush(); return Base64.encodeToString(boas.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)){ view.loadUrl("javascript:printDialog.setPrintDocument(printDialog.createPrintDocument(" + "window." + JS_INTERFACE + ".getType(),window." + JS_INTERFACE + ".getTitle()," + "window." + JS_INTERFACE + ".getContent(),window." + JS_INTERFACE + ".getEncoding()))"); view.loadUrl("javascript:window.addEventListener('message'," + "function(evt){window." + JS_INTERFACE + ".onPostMessage(evt.data)}, false)"); } } } } | cs |
위의 코드는 구글사이트에서 그대로 퍼온것이다. pdf파일을 웹뷰로 보내주는 기능을 하는거 같다.
이 소스는 화면을 캡쳐하여 PNG파일로 저장하는 기능을 하는 매서드이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | private void screenShot(View view, long Time) throws Exception{ pd.show(); view.setDrawingCacheEnabled(true); view.getDrawingCache(true); Bitmap screen = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); Log.e("monkey", "Width > "+screen.getWidth()+" / Height > "+screen.getHeight()); Canvas canvas = new Canvas(screen); view.draw(canvas); String fileName = Time+".png"; String path = Environment.getExternalStorageDirectory()+"/MonkeysPhone/"; try{ File dir = new File(path); dir.mkdirs(); File f = new File(path, fileName); f.createNewFile(); OutputStream outStream = new FileOutputStream(f); screen.compress(Bitmap.CompressFormat.PNG, 100, outStream); outStream.close(); new MediaScanning(act, f); }catch(IOException e){ e.printStackTrace(); } imgToPdf(path+fileName, screen.getWidth(), screen.getHeight()); view.setDrawingCacheEnabled(false); } imgToPdf(path+fileName, screen.getWidth(), screen.getHeight()); view.setDrawingCacheEnabled(false); } | cs |
이 소스는 PNG파일을 pdf파일로 변환하는 메서드 이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | private void imgToPdf(String filepath, int wid, int hei){ try{ String path = filepath; File file = new File(path); Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(path+"파일.pdf")); document.open(); Image image = Image.getInstance(path); //크기 조정 // float scaler = ((document.getPageSize().width()-document.leftMargin()-document.rightMargin()-indentation)/image.width())*100; float width = (wid/document.getPageSize().width()); float height = (hei/document.getPageSize().height()); Log.e("LOSA", "Pdf wid > "+width+" / Pdf height > "+height); image.scalePercent(40,18); // image.scalePercent(width, height); image.setAbsolutePosition((document.getPageSize().width()-image.scaledWidth())/2, (document.getPageSize().height()-image.scaledHeight())/2); document.add(image); Log.e("LOSA", "GOGOGOGO"); document.newPage(); document.close(); }catch(Exception e){ e.printStackTrace(); } pd.dismiss(); Uri uri = Uri.parse("file://"+filepath+"파일.pdf"); Intent printIntent = new Intent(act, PrintDialogAct.class); printIntent.setDataAndType(uri, "application/pdf"); printIntent.putExtra("title", "testPrint"); act.startActivity(printIntent); } | cs |
마지막에 인텐트로 파일을 보내주면 웹뷰가 실행이 되면서 구글계정에 등록이 된 프린터로 연결이 된다.
구글계정에 프린터를 지정하는 방법은 인터넷 검색하면 많이 나와있다.
계정에 등록된 프린터만 사용 가능하니 코드구현 하기 전에 프린터를 꼭 등록하고 하면 될것이다.
'android' 카테고리의 다른 글
[Android] AsycTask사용하기 (0) | 2016.02.26 |
---|---|
[Android] HttpUrlConnection 사용하기 (0) | 2016.02.24 |
[Android]Bitmap 파일을 비율에 맞게 늘리거나 줄이기 (0) | 2015.09.03 |
[Android] Timer / TimerTask 사용하기 (0) | 2015.07.06 |
[Android] 현재시간에서 특정날까지의 차이 구하기 (0) | 2015.07.06 |