WebVieew দিয়ে একটি HTML ডকুমেন্ট প্রিন্টিং HTML রিসোর্স লোড করা বা একটি স্ট্রিং হিসাবে একটি HTML ডকুমেন্ট তৈরী করার বিষয়গুলোকে অন্তর্ভূক্ত করে । এই অধ্যায় আলোচনা করে কীভাবে একটি HTML স্ট্রিং তৈরী করতে হয় এবং প্রিন্টিং এর জন্য WebView এর মধ্যে এটাকে লোড করে।
এই ভিউ অবজেক্ট একটি একটিভিটি লেআউটের অংশ হিসাবে সাধারনভাবে ব্যবহার হয়ে থাকে। যদি আপনার অ্যাপলিকেশন WebView ব্যবহার করে না থাকে, আপনি ক্লাসের একটি ইনসটেন্স তৈরী করতে পারেন সুনির্দিষ্টভাবে প্রিন্টিং এর উদ্দেশ্যে। এই কাস্টম প্রিন্ট ভিউ তৈরী করার প্রধান ধাপগুলো হচ্ছে:
নিম্নোক্ত কোড নমুনা দেখায় কীভাবে একটি সহজ WebViewClient তৈরী করা যায় এবং অতি দ্রুত চলমান অবস্থায় তৈরী HTML ডকুমেন্ট লোড করা হয়:
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/ ডিরেক্টরীর মধ্যে গ্রাফিক ফাইল প্লেস করুন এবং loadDataWithBaseURL()মেথডের প্রথম প্যারামিটারের মধ্যে একটি বেজ URL সুনির্দিষ্ট করুন, যেভাবে নীচের কোড উদাহরণে দেখানো হয়েছে:
webView.loadDataWithBaseURL("file:///android_asset/images/"
htmlBody
"text/HTML"
"UTF-8"
null);
আপনি loadDataWithBaseURL()এর মেথডের সাথে loadUrl()বদল করার মাধ্যমে প্রিন্টিং এর জন্য একটি ওয়েব পেজ লোডও করতে পরেন, যেভাবে নীচে দেখানো হলো.
// Print an existing web page (remember to request INTERNET permission!):
webView.loadUrl("http://developer.android.com/about/index.html");
যখন আপনি প্রিন্ট ডকুমেন্ট তৈরী করার জন্য WebView ব্যবহার করে থাকেন, আপনাকে নীচের সীমাবদ্ধতা বিষয়ে সতর্ক থাকতে হবে:
আপনি পেজে হেডার, ফুটার যুক্ত করা বা পেজ নাম্বার যুক্ত করতে পারবেন না
HTML ডকুমেন্টের জন্য প্রিন্টিং অপশনগুলো প্রিন্ট পেজ রেঞ্জকে অন্তর্ভূক্ত করে না, যেমন: ১০ পেজের HTML ডকুমেন্টের ২ থেকে ৪ পর্যন্ত প্রিন্ট করা হবে, এই বিষয়গুলো সাপোর্ট করা হয় না।
WebView একটি ইনসটেন্স এক সাথে শুধুমাত্র একটি প্রিন্ট জব প্রক্রিয়া করতে পারে
HTML ডকুমেন্ট CSS প্রিন্ট এট্রিবিউট ধারন করে, যেমন ল্যান্ডস্কেপ প্রপারটি সাপোর্ট করা হয় না
প্রিন্টিং শুরু করতে একটি HTML ডকুমেন্ট এর মধ্যে JavaScript ব্যবহার করতে পারবেন না
নোট: একটি ডবনঠরবি এর কনটেন্ট যা একটি লেআউটে অন্তর্ভূক্ত, এটা প্রিন্টেডও হতে পারে যখনই এটা একটি ডকুমেন্ট লোড করে।
আপনি যদি আরও পরিমিত প্রিন্ট আউটপুট তৈরী করতে চান এবং প্রিন্ট হওয়া পেজের উপরে ড্র করা কনটেন্টের উপর সম্পূর্ণ নিয়ন্ত্রণ রাখতে চান: পরবর্তী অনুশীলনীতে (Printing a Custom Document) চলে যান।