Frequently Asked Question
Print of encrypted documents
Last Updated a year ago
To support the print of encrypted documents, you have to decrypt it first.
To do so, you need to change PDFViewController.printPDF as follows:
public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback) { InputStream input; OutputStream output; try { String mDocPath = m_view.PDFGetDoc().getDocPath(); if(!TextUtils.isEmpty(mDocPath)) { if(m_view.PDFGetDoc().IsEncrypted() && m_view.PDFGetDoc().SaveAs(m_parent.getContext().getFilesDir() + File.separator + "temp.pdf",true)) mDocPath = m_parent.getContext().getFilesDir() + File.separator + "temp.pdf"; 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(m_parent.getContext().getString(R.string.pdf_print_not_available)); } catch (Exception e) { e.printStackTrace(); callback.onWriteFailed(e.toString()); } }
And add the onFinish callback:
@Override public void onFinish() { super.onFinish(); if(m_view.PDFGetDoc().IsEncrypted()) new File(m_parent.getContext().getFilesDir() + File.separator + "temp.pdf").delete(); }