Android'de basit bir fotoğrafın ötesindeki içerikleri bastırmak için metin ve grafiklerin dokümanı yazdır. Android çerçevesi, doküman oluşturmak için HTML'nin kullanılmasını sağlar ve minimum miktarda kodla yazdırabilirsiniz.
Android 4.4 (API düzeyi 19) sürümünde WebView
sınıfı
HTML içeriğinin yazdırılmasını etkinleştirin. Sınıf, yerel HTML kaynağı yüklemenize veya
bir yazdırma işi oluşturup Android'in yazdırma hizmetlerine teslim edebilirsiniz.
Bu derste, metin ve grafik içeren bir HTML dokümanını hızlı bir şekilde nasıl
yazdırmak için WebView
düğmesini kullanın.
HTML belgesi yükleme
Bir HTML dokümanını WebView
ile yazdırmak için HTML yüklenmesi gerekir
bir HTML belgesinin nasıl oluşturulduğunu göstereceğim. Bu bölümde, bir HTML'nin nasıl oluşturulacağı açıklanmaktadır.
dizesine yükleyin ve bunu, yazdırma için bir WebView
içine yükleyin.
Bu görüntüleme nesnesi genellikle bir etkinlik düzeninin parçası olarak kullanılır. Ancak, uygulamanız
WebView
kullanmıyorsa sınıfın bir örneğini oluşturabilirsiniz
için tasarladık. Bu özel yazdırma görünümünün temel adımları şunlardır:
- Yazdırma işi şundan sonra başlatan bir
WebViewClient
oluştur: HTML kaynağı yüklenir. - HTML kaynağını
WebView
nesnesine yükleyin.
Aşağıdaki kod örneğinde, basit bir WebViewClient
işleminin nasıl oluşturulacağı ve anında oluşturulan bir HTML dokümanının nasıl yükleneceği gösterilmektedir:
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 }
Java
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; }
Not: Yazdırma işi oluşturma çağrınızın, önceki bölümde oluşturduğunuz WebViewClient
öğesinin onPageFinished()
yönteminde gerçekleştiğinden emin olun. Herhangi bir değişiklik olmadan
Yükleme işlemi bittiğinde, yazdırma çıktısı eksik veya boş olabilir ya da tamamen başarısız olabilir.
Not: Yukarıdaki örnek kodda, yazdırma işi oluşturulmadan önce çöp toplanmamasını sağlamak için WebView
nesnesinin bir örneği tutulur. Kendi uygulamanızda da aynısını yaptığınızdan emin olun. Aksi takdirde yazdırma işlemi
başarısız olabilir.
Sayfaya grafik eklemek istiyorsanız grafik dosyalarını assets/
içine yerleştirin
bir temel URL belirtin ve projenizin ilk parametresinde bir temel URL belirtin,
loadDataWithBaseURL()
yöntemini kullanarak
aşağıdaki kod örneği:
Kotlin
webView.loadDataWithBaseURL( "file:///android_asset/images/", htmlBody, "text/HTML", "UTF-8", null )
Java
webView.loadDataWithBaseURL("file:///android_asset/images/", htmlBody, "text/HTML", "UTF-8", null);
Ayrıca, yazdırma için bir web sayfasını,
loadDataWithBaseURL()
yöntemi
loadUrl()
olarak gösterilir.
Kotlin
webView.loadUrl("https://developer.android.com/about/index.html")
Java
// Print an existing web page (remember to request INTERNET permission!): webView.loadUrl("https://developer.android.com/about/index.html");
Basılı doküman oluşturmak için WebView
kullanırken şunları göz önünde bulundurmalısınız:
aşağıdaki sınırlamalara tabidir:
- Dokümana, sayfa numaraları da dahil olmak üzere üstbilgi veya altbilgi ekleyemezsiniz.
- HTML dokümanına ilişkin yazdırma seçenekleri, sayfayı yazdırma özelliğini içermiyor aralıkları, örneğin: 10 sayfalık bir HTML dokümanının 2-4. sayfasının yazdırılması desteklenmez.
WebView
örneği, aynı anda yalnızca bir yazdırma işi işleyebilir.- Yatay özellikler gibi CSS yazdırma özellikleri içeren bir HTML dokümanı desteklenir.
- Yazdırmayı tetiklemek için bir HTML dokümanında JavaScript kullanamazsınız.
Not: Dahil edilen bir WebView
nesnesinin içeriği
Düzen, bir doküman yüklendikten sonra da yazdırılabilir.
Daha özelleştirilmiş bir yazdırma çıktısı oluşturmak ve içerik üzerinde tam denetime sahip olmak isterseniz yazdırılan sayfaya çizim yapmak için, sonraki derse geçin: Özel doküman yazdırma dersi.
Baskı işi oluşturma
Bir WebView
oluşturduktan ve HTML içeriğinizi yükledikten sonra,
uygulamasının yazdırma işleminin bir parçası olarak neredeyse tamamlandı. Sonraki adımlar
PrintManager
, bir baskı adaptörü oluşturma ve son olarak da
iş ilanlarına yazar. Aşağıdaki örnekte bu adımların nasıl uygulanacağı gösterilmektedir:
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 } } }
Java
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); }
Bu örnek,PrintJob
veya zorunlu olmayan işlemlerdir. Uygulamanız,
devam ettirilir. Bu yaklaşım, bir riskin durumunu izlemek istediğinizde
tamamlanması, hata veya kullanıcı iptali için başvurunuzdaki yazdırma işinin durumunu kontrol edebilmelisiniz. Oluşturuluyor
Yazdırma çerçevesi otomatik olarak bir sistem oluşturduğundan uygulama içi bildirim gerekli değil
bildirimi görürsünüz.