/** Entry point to encrypt a PDF document. The encryption parameters are the same as in
* <code>PdfWriter</code>. The userPassword and the
* ownerPassword can be null or have zero length. In this case the ownerPassword
* is replaced by a random string. The open permissions for the document can be
* AllowPrinting, AllowModifyContents, AllowCopy, AllowModifyAnnotations,
* AllowFillIn, AllowScreenReaders, AllowAssembly and AllowDegradedPrinting.
* The permissions can be combined by ORing them.
* @param reader the read PDF
* @param os the output destination
* @param userPassword the user password. Can be null or empty
* @param ownerPassword the owner password. Can be null or empty
* @param permissions the user permissions
* @param strength128Bits <code>true</code> for 128 bit key length, <code>false</code> for 40 bit key length
* @param newInfo an optional <CODE>String</CODE> map to add or change
* the info dictionary. Entries with <CODE>null</CODE>
* values delete the key in the original info dictionary
* @throws DocumentException on error
* @throws IOException on error
*/
public static void Encrypt(PdfReader reader, Stream os, byte[] userPassword, byte[] ownerPassword, int permissions, bool strength128Bits, Hashtable newInfo)
{
PdfStamper stamper = new PdfStamper(reader, os);
stamper.SetEncryption(userPassword, ownerPassword, permissions, strength128Bits);
stamper.MoreInfo = newInfo;
stamper.Close();
}