Frequently Asked Question
Print of encrypted documents
Last Updated 11 months 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(); }