Hello
I pressed the print button to call printPDF function. I saw the print UI in the device a few seconds. It crashed.
I put some log for debug.
It cannot call onLayout and onWrite method.
private void printPDF() {
Log.e("print", "printpdf");
PrintManager mPrintManager = (PrintManager) m_parent.getContext().getSystemService(Context.PRINT_SERVICE);
Log.e("print", "printmanager");
mPrintManager.print(m_parent.getContext().getString(R.string.app_name) + " PDF Document", new PrintDocumentAdapter() {
int mTotalPages = 0;
@Override
public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal,
LayoutResultCallback callback, Bundle extras) {
mTotalPages = m_view.PDFGetDoc().GetPageCount();
Log.e("print", "onLayout");
if (cancellationSignal.isCanceled() ) { // Respond to cancellation request
callback.onLayoutCancelled();
return;
}
if (mTotalPages > 0) { // Return print information to print framework
PrintDocumentInfo info = new PrintDocumentInfo
.Builder("print_output.pdf")
.setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT)
.setPageCount(mTotalPages)
.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.");
}
}
@Override
public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal,
WriteResultCallback callback) {
Log.e("print", "onWrite");
InputStream input;
OutputStream output;
try {
String mDocPath = m_view.PDFGetDoc().getDocPath();
if(!TextUtils.isEmpty(mDocPath)) {
input = new FileInputStream(mDocPath);
output = new FileOutputStream(destination.getFileDescriptor());
byte[] buf = new byte[1024];
int bytesRead;
// check for cancellation
if (cancellationSignal.isCanceled()) {
callback.onWriteCancelled();
input.close();
output.close();
return;
}
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES});
input.close();
output.close();
} else
callback.onWriteFailed("PDF File is not available");
} catch (Exception e) {
e.printStackTrace();
callback.onWriteFailed(e.toString());
}
}
}, null);
}