DevBytes: Android 4.4 Printing API

안녕하세요, 저는 개발자 옹호자 인 Nazmul Idris입니다 Android 팀에서 DevBytes 에피소드를 환영합니다

오늘의 에피소드에서는 새로운 인쇄물을 다루겠습니다 KitKat, 일명 Android 44와 함께 출시 된 API Android 44는 인쇄, 인쇄 및 추가 관리를위한 API와 함께 새로운 유형의 프린터 지원 플랫폼은 인쇄 관리자를 제공합니다

요청하는 응용 프로그램간에 중재합니다 인쇄 및 설치된 인쇄 서비스 실제로 인쇄를하십시오 인쇄 관리자는 공유 서비스를 제공합니다 인쇄를위한 시스템 사용자 인터페이스 모든 응용 프로그램에서 인쇄를 일관성있게 제어 할 수 있습니다 인쇄 관리자는 또한 내용의 보안을 보장합니다

애플리케이션에서 프로세스를 통과 할 때 인쇄 서비스 Android 44를 실행하는 대부분의 기기는 사전 설치된 Google 클라우드 프린트 포함 상자 밖의 인쇄 서비스로서, 뿐만 아니라 여러 Google Apps Chrome, 드라이브, 갤러리, 및 Quickoffice 그렇다면이 인쇄 API는 무엇입니까? 인쇄 API를 사용하면 앱 개발자가 인쇄 할 수있는 응용 프로그램을 작성하는 방법 연결될 수있는 모든 유형의 콘텐츠 Wi-Fi 또는 블루투스를 통한 인쇄 서비스, 또는 다른 종류의 인쇄 서비스, 예 : Google 클라우드 프린트 또한 프린터 OEM이 인쇄 서비스를 생성 할 수 있습니다

Play 스토어에서 APK로 배포 할 수 있습니다 따라서 프린터가 프레임 워크에 완벽하게 연결되므로, 사용자가 문서를 인쇄 할 수 있도록 연결된 모든 프린터에 연결하십시오 시스템은 응용 프로그램 간의 트랜잭션을 처리합니다 문서 및 서비스를 인쇄하려고합니다 실제 프린터로 인쇄 작업을 전달합니다

인쇄 프레임 워크는 모든 API를 제공합니다 인쇄 문서를 지정하는 데 필요한 인쇄를 위해 시스템에 전달하십시오 앱 개발자로서 실제로 어떤 API를 사용하고 있습니까? 주어진 인쇄 작업의 필요성은 콘텐츠 유형에 따라 다릅니다 실제로 인쇄하고 싶습니다 예를 들어 이미지, HTML 또는 PDF 캔버스입니까? 인쇄 가능 응용 프로그램에서 사용자 사용 가능한 프린터 검색, 용지 크기 변경, 인쇄 할 특정 페이지를 선택하고 인쇄하십시오

거의 모든 종류의 문서, 이미지 또는 파일 인쇄 서비스는 플러그 가능한 구성 요소입니다 공급 업체별 로직, 서비스 등을 포함합니다 이들은 시스템에 의해 관리되며 프린터 발견, 상호 작용 그들과 함께, 그리고 그들의 상태에 대해 인쇄 작업을 계속합니다 프린터 OEM으로서 인쇄 서비스 프레임 워크를 사용할 수 있습니다 프린터와의 상호 운용성 제공 Android 기기에서

그리고 이것은 정말로 중요합니다 이러한 서비스를 구축하고 배포 할 수 있습니다 사용자가 기기에 설치할 수있는 APKS로 또한 Play 스토어를 통해 무선으로 업데이트 할 수 있습니다 꽤 굉장합니다 인쇄 서비스 응용 프로그램은 주로 인쇄 서비스의 서브 클래스 화에 의한 헤드리스 서비스 시스템으로부터 인쇄 작업을받는 클래스 그것을 사용하여 프린터와 통신합니다

적절한 프로토콜 인쇄 서비스는 인쇄 된 콘텐츠를 PDF 파일로 가져옵니다 어떤 변환을 적용 할 수 있습니다 인쇄에 최적이되도록 데이터를 작성해야합니다 그리고 인쇄 서비스는 API를 구현해야합니다

그들이 관리하는 프린터에 의해 쿼리됩니다 이제는 애플리케이션 개발자 관점에서 볼 때, 프린트 사용법을 알려 드리겠습니다 API를 사용하여 신속하게 콘텐츠를 인쇄 할 수 있습니다 그래서 가장 넓은 호환성을 위해, Android는 PDF를 인쇄용 기본 파일 형식으로 사용합니다 인쇄하기 전에 응용 프로그램 제대로 페이지가 매겨진 PDF를 생성해야합니다

콘텐츠의 버전입니다 귀하의 편의를 위해 매우 빠르게 인쇄 할 수있는 도우미 클래스가 있어야합니다 WebViews와 마찬가지로 PDF 문서를 매우 빠르게 만들 수 있습니다 실제로, PDF 출력 따라서 응용 프로그램에서 콘텐트를 그리는 방법을 알고 있다면, 인쇄용 PDF를 신속하게 생성 할 수 있습니다

이제 비트 맵을 인쇄하려면, 실제로 이것을하는 것은 매우 쉽습니다 매우 적은 코드로 이미지를 인쇄 할 수 있습니다 그리고 생각해야 할 유일한 옵션은 인쇄 출력물의 크기를 원하는지 여부입니다 실제 인쇄 된 페이지를 채우거나 크기를 조정할 수 있습니다 차이점은 무엇입니까? 크기를 맞추면 비트 맵이 인쇄물의 최대 치수 안에 맞는다

출력 페이지 사각형 페이지의 정사각형 비트 맵을 사용하면, 실제로는 상단에 공백이 생깁니다 이 예제에서 볼 수 있듯이 페이지의 맨 아래에 있습니다 반면에, 채우기위한 척도는, 비트 맵을 크기만큼 채우도록 조정합니다 가능하면 인쇄 된 출력 페이지의 그리고 이것은 이미지의 일부분 초과했기 때문에 실제로 인쇄되지 않습니다

인쇄 된 페이지의 범위, 다시, 당신이 예제에서 볼 수 있듯이 여기에 몇 가지 코드가 있습니다 이것이 실제로 얼마나 쉬운가 다시 말하지만, 정말로 유일한 옵션은 어떤 매개 변수인지 염두해야합니다 getScaleMode 메소드를 전달하십시오

printBitmap 메서드가 호출되면, 앱에서 더 이상의 조치가 필요하지 않습니다 인쇄용 Android 모달 대화 상자 표시되며 사용자가 프린터 등을 선택할 수 있습니다 원하는 인쇄 옵션 그러면 사용자가 이미지를 인쇄하거나 작업을 취소 할 수 있습니다 그들이 이미지 인쇄를 선택하면, 인쇄 작업이 생성되고, 인쇄 통지 시스템 표시 줄에 나타납니다

이제 HTML 컨텐트를 인쇄하고 싶다고합시다 여기에 어떻게 할 것인지 보여주는 코드가 있습니다 가장 먼저 HTML을 생성 할 수 있습니다 문자열에 넣은 다음 WebView에로드합니다 마지막으로 WebView 클라이언트를 WebView에 연결합니다

일단 내용이 실제로로드되면, 인쇄 작업을 인쇄 서비스에 제출할 수 있습니다 따라서 HTML 컨텐트에 그래픽을 포함하려면, 프로젝트의 에셋 디렉토리에 배치하십시오 이 폴더에 대한 경로를 매개 변수로 지정하십시오 null을 전달하는 대신 loadDataWithBaseURL 메소드에 전달하고, 우리가이 예제에서했던 것처럼 실제 웹 페이지를로드 할 수도 있습니다 loadDataWithBase 메서드를 대체하여 인쇄하기 로드 URL로 호출 그리고 이것은 HTML 컨텐트가 실제로있는 경우 매우 편리합니다

당신이 서버 측에서 생성 한 것입니다 이제 HTML 인쇄 사용에는 몇 가지 제한 사항이 있습니다 그리고 하나는 머리말이나 꼬리말을 추가 할 수 없다는 것입니다 여기에는 페이지 번호가 포함됩니다 또한 사용자는 인쇄 범위를 지정할 수 없습니다

예를 들어 2 페이지에서 4 페이지를 인쇄 할 수 없습니다 10 페이지 HTML 문서 중 하나입니다 또한 WebView의 인스턴스는 한 번에 하나의 인쇄 작업 만 처리하십시오 마지막으로 JavaScript에서 WebView 인쇄 아직 지원되지 않습니다 예를 들어, window

print JavaScript 호출은 작동하지 않습니다 우리는 향후 릴리스에서 이러한 제한 사항을 해결할 계획입니다 그리고 안드로이드 오픈 소스를 자유롭게 열어주세요 중요한 기능에 대한 버그 누락되거나 보려는 변경 사항 이 피드백은 우리에게 매우 가치 있기 때문에 마지막으로 PdfDocument 클래스가 있습니다 PDF 컨텐트를 매우 빠르게 생성 할 수 있습니다

플랫폼 드로잉 API를 사용합니다 따라서이 새로운 PDF 문서 API는 편리한 방법을 제공합니다 당신이 호출하여 캔버스 객체를 가져옴으로써이 작업을 수행 할 수 있습니다 PdfDocument의 getCanvas 메소드 일단 캔버스가 있으면 인쇄 가능한 내용을 그릴 수 있습니다

안드로이드에서 표준 그래픽 API를 사용합니다 그리고 당신이 당신의 내용을 그릴 완료되면, 문서를 인쇄 서브 시스템에 제출하기 만하면됩니다 그리고 그것은 단지 전속력으로 달릴 것입니다 마지막으로,이 DevByte는 빠른 개요였습니다 사용할 수있는 모든 것 중 더 많은 정보를 원한다면 실제로 "문서 인쇄"라는 교육 안내서가 있습니다

developersandroidcom 오늘 우리와 함께 해줘서 고마워 조심해