PrintDocumentAapter ক্লাসের একটি বাস্তবায়নের মধ্যে, আপনার অ্যাপলিকেশন অবশ্যই ডকুমেন্টের ধরন নির্দিষ্ট করতে সমর্থ হবে যা এটা তৈরী করছে এবং প্রিন্ট জবের জন্য সর্বমোট পেজের সংখ্যা গণনা করে, প্রিন্ট করা পেজের সাইজের তথ্য প্রদান করে। অ্যাডাপটরের onLayout()মেথডের বাস্তবায়ন একটি PrintDocumentInfo ক্লাস এর মধ্যে প্রিন্ট জবের কাঙ্খিত আউটপুট সম্পর্কিত এই গণনাগুলো তৈরী এবং তথ্য প্রদান করে, পেজের সংখ্যা এবং কনটেন্ট টাইপ সহ। নিম্নোক্ত কোড উদাহরণ একটি PrintDocumentAdapter এর জন্য onLayout()মেথডের মৌালিক বাস্তবায়ন দেখায়:
@Override
public void onLayout(PrintAttributes oldAttributes,
PrintAttributes newAttributes,
CancellationSignal cancellationSignal,
LayoutResultCallback callback,
Bundle metadata) {
// Create a new PdfDocument with the requested page attributes
mPdfDocument = new PrintedPdfDocument(getActivity(), newAttributes);
// Respond to cancellation request
if (cancellationSignal.isCancelled() ) {
callback.onLayoutCancelled();
return;
}
// Compute the expected number of printed pages
int pages = computePageCount(newAttributes);
if (pages > 0) {
// Return print information to print framework
PrintDocumentInfo info = new PrintDocumentInfo
.Builder("print_output.pdf")
.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
.setPageCount(pages);
.build();
// Content layout reflow is complete
callback.onLayoutFinished(info, true);
} else {
// Otherwise report an error to the print framework
callback.onLayoutFailed("Page count calculation failed.");
}
}
onLayout() মেথড সম্পাদনের তিনটা ফলাফল থাকে: কমপ্লিশন (শেষ করা), ক্যানসেলেশন (বাতিল করা) বা ফেইলিওর ( অসফল) এর ঘটনা যেখানে লেআউটের ক্যালকুলেশন (গণনা) সমাপ্ত হয় না। PrintDocumentAdapter.LayoutResultCallback অবজেক্টের যথাযথ মেথডটি কল করার মাধ্যমে আপনাকে অবশ্যই এই ফলাফলগুলোর কোন একটি নির্দেশ করতে হবে।
নোট: onLayoutFinished()মেথডের বুলিয়ান প্যারামিটার লেআউট কনটেন্ট আসলেই পরিবর্তিত হয়েছে কিনা তা নির্দেশ করে শেষ রিকোয়েস্ট থেকে। এই প্যারামিটার যথাযথভাবে সেট করতে প্রিন্ট ফ্রেমওয়ার্ককেonWrite()মেথড অপ্রয়োজনীয়ভাবে কল করা, পূর্বে লেখা প্রিন্ট ডকুমেন্ট অপরিহার্যভাবে জমিয়ে রাখা এবং পারফরমেন্স উন্নয়ন করা থেকে বিরত রাখতে দিন।
onLayout()এর প্রধান কাজ হচ্ছে পেজের সংখ্যার ক্যালকুলেশন করা যা আউটপুট হিসাবে আকাঙ্খা করা হয় প্রিন্টের এট্রিবিউট দেয়। কীভাবে আপনি এই নাম্বার ক্যালকুলেট করবেন তা কীভাবে আপনার অ্যাপলিকেশন প্রিন্টিং এর জন্য পেজ বিন্যাস করা হয় তার উপর সম্পূর্ণভাবে নির্ভরশীল। নীচের কোড উদাহরন একটি বাস্তবায়ন দেখায় যেখানে পেজের সংখ্যা প্রিন্ট ওরিয়েন্টেশন কর্তৃক নির্ধারিত হয়ে থাকে:
private int computePageCount(PrintAttributes printAttributes) {
int itemsPerPage = 4; // default item count for portrait mode
MediaSize pageSize = printAttributes.getMediaSize();
if (!pageSize.isPortrait()) {
// Six items per page in landscape orientation
itemsPerPage = 6;
}
// Determine number of print items
int printItemCount = getPrintItemCount();
return (int) Math.ceil(printItemCount / itemsPerPage);
}