Frequently Asked Question
Print of encrypted documents
最后更新 11 个月前
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(); }