Android에서 단순한 사진 이외의 콘텐츠를 인쇄하려면 문서를 인쇄합니다. Android 프레임워크는 HTML을 사용하여 문서를 작성하고 최소한의 코드로 출력하세요.
Android 4.4(API 수준 19)에서는 HTML 콘텐츠를 인쇄할 수 있도록 WebView
클래스가 업데이트되었습니다. 이 클래스를 사용하면 로컬 HTML 리소스를 로드하거나
인쇄 작업을 만들어 Android 인쇄 서비스에 전달할 수 있습니다.
이 과정에서는 텍스트와 그래픽이 포함된 HTML 문서를 빠르게 빌드하고 WebView
를 사용하여 인쇄하는 방법을 보여줍니다.
HTML 문서 로드
WebView
를 사용하여 HTML 문서를 인쇄하려면 HTML을 로드해야 합니다.
HTML 문서를 문자열로 빌드할 수 있습니다. 이 섹션에서는 HTML 문자열을 빌드하고 WebView
에 로드하여 인쇄하는 방법을 설명합니다.
일반적으로 이 뷰 객체는 활동 레이아웃의 일부로 사용됩니다. 하지만 애플리케이션이
WebView
를 사용하지 않는다면 클래스의 인스턴스를 만들 수 있습니다.
사용할 수 있습니다. 이러한 사용자설정 인쇄 뷰를 만드는 기본 단계는 다음과 같습니다.
- 다음 날짜 이후에 인쇄 작업을 시작하는
WebViewClient
만들기 HTML 리소스가 로드됩니다. - HTML 리소스를
WebView
객체로 로드합니다.
다음 코드 샘플에서는 간단한 WebViewClient
를 만들고 만들어진 HTML 문서를 즉시 로드하는 방법을 보여줍니다.
Kotlin
private var mWebView: WebView? = null private fun doWebViewPrint() { // Create a WebView object specifically for printing val webView = WebView(activity) webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest) = false override fun onPageFinished(view: WebView, url: String) { Log.i(TAG, "page finished loading $url") createWebPrintJob(view) mWebView = null } } // Generate an HTML document on the fly: val htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, testing, testing...</p></body></html>" webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null) // Keep a reference to WebView object until you pass the PrintDocumentAdapter // to the PrintManager mWebView = webView }
자바
private WebView mWebView; private void doWebViewPrint() { // Create a WebView object specifically for printing WebView webView = new WebView(getActivity()); webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onPageFinished(WebView view, String url) { Log.i(TAG, "page finished loading " + url); createWebPrintJob(view); mWebView = null; } }); // Generate an HTML document on the fly: String htmlDocument = "<html><body><h1>Test Content</h1><p>Testing, " + "testing, testing...</p></body></html>"; webView.loadDataWithBaseURL(null, htmlDocument, "text/HTML", "UTF-8", null); // Keep a reference to WebView object until you pass the PrintDocumentAdapter // to the PrintManager mWebView = webView; }
참고: 이전 섹션에서 만든 WebViewClient
의 onPageFinished()
메서드에서 인쇄 작업 생성 호출이 이루어지는지 확인하세요. 다음 페이지가 될 때까지 기다리지 않으면
출력이 완료되면 인쇄 출력이 불완전하거나 비어 있거나 완전히 실패할 수 있습니다.
참고: 위의 코드 예에는 WebView
객체의 인스턴스가 있으므로 인쇄 작업을 만들기 전에 가비지가 수집된 것이 아닙니다. 자체 구현에서도 동일한 작업을 실행해야 합니다. 그렇지 않으면 인쇄 프로세스를 실행합니다.
실패할 수 있습니다
페이지에 그래픽을 포함하려면 assets/
에 그래픽 파일을 배치합니다.
디렉터리의 첫 번째 매개변수에 기본 URL을 지정합니다.
loadDataWithBaseURL()
메서드(
다음 코드 예를 참고하세요.
Kotlin
webView.loadDataWithBaseURL( "file:///android_asset/images/", htmlBody, "text/HTML", "UTF-8", null )
자바
webView.loadDataWithBaseURL("file:///android_asset/images/", htmlBody, "text/HTML", "UTF-8", null);
또한
loadDataWithBaseURL()
메서드를 다음과 같이 바꿉니다.
loadUrl()
로 설정합니다.
Kotlin
webView.loadUrl("https://developer.android.com/about/index.html")
자바
// Print an existing web page (remember to request INTERNET permission!): webView.loadUrl("https://developer.android.com/about/index.html");
인쇄 문서를 만드는 데 WebView
를 사용할 때는 다음 사항에 유의하세요.
다음과 같은 제한사항이 있습니다.
- 페이지 번호를 포함하여 머리글이나 바닥글을 문서에 추가할 수 없습니다.
- HTML 문서의 인쇄 옵션에 페이지 인쇄 기능이 포함되어 있지 않습니다. 예: 10페이지 HTML 문서의 2~4페이지 인쇄는 지원되지 않습니다.
WebView
인스턴스는 한 번에 하나의 인쇄 작업만 처리할 수 있습니다.- 가로 속성 등 CSS 인쇄 속성을 포함하는 HTML 문서는 지원됩니다.
- HTML 문서에서 JavaScript를 사용하여 인쇄를 트리거할 수 없습니다.
참고: 레이아웃에 포함된 WebView
객체의 콘텐츠도 문서를 로드한 후에는 인쇄할 수 있습니다.
보다 맞춤설정된 인쇄 출력을 만들고 콘텐츠를 완전히 제어하려는 경우 다음 과정으로 이동: 맞춤 문서 인쇄 강의에서 확인하세요.
인쇄 작업 만들기
WebView
를 만들고 HTML 콘텐츠를 로드한 후에는
거의 완료되었습니다. 다음 단계는 PrintManager
에 액세스하여 인쇄 어댑터를 만들고 마지막으로 인쇄 작업을 만드는 것입니다. 다음 예는 이러한 단계를 실행하는 방법을 보여줍니다.
Kotlin
private fun createWebPrintJob(webView: WebView) { // Get a PrintManager instance (activity?.getSystemService(Context.PRINT_SERVICE) as? PrintManager)?.let { printManager -> val jobName = "${getString(R.string.app_name)} Document" // Get a print adapter instance val printAdapter = webView.createPrintDocumentAdapter(jobName) // Create a print job with name and adapter instance printManager.print( jobName, printAdapter, PrintAttributes.Builder().build() ).also { printJob -> // Save the job object for later status checking printJobs += printJob } } }
자바
private void createWebPrintJob(WebView webView) { // Get a PrintManager instance PrintManager printManager = (PrintManager) getActivity() .getSystemService(Context.PRINT_SERVICE); String jobName = getString(R.string.app_name) + " Document"; // Get a print adapter instance PrintDocumentAdapter printAdapter = webView.createPrintDocumentAdapter(jobName); // Create a print job with name and adapter instance PrintJob printJob = printManager.print(jobName, printAdapter, new PrintAttributes.Builder().build()); // Save the job object for later status checking printJobs.add(printJob); }
이 예에서는 다음에서 사용할 PrintJob
객체의 인스턴스를 저장합니다.
애플리케이션을 실행할 수 있습니다 애플리케이션은 이 객체를 사용하여 처리 중인 인쇄 작업의 진행 상황을 추적할 수 있습니다. 이 방법은
현재 상태를 모니터링하고
인쇄 작업의 완료, 실패 또는 사용자 취소에 대해 인쇄 작업 을 처리할 수 있습니다.
인앱 알림은 인쇄 프레임워크에서 자동으로 시스템을 생성하므로 필요하지 않음
알림이 표시됩니다.