パスワードで保護されているPDFを編集することはできません。あなたはそれを編集するためにパスワードでそれを開かなければならないことをしているようになります。これで、そのドキュメントのコピーを作成してユーザーに提示しているように見えます。編集パスワードを使用してPDFを暗号化できます。これは、私がitextsharpで使用していることがわかったメソッドのコピーです。editPassword
nullのままに時間を設定するとopenPassword
、ユーザーはPDFを表示して操作できるようになりますが、設定した権限に基づいて編集することはできません。お役に立てれば。
/// <summary>
/// Adds the given Open (User) and Edit (Owner) password to the PDF and optionally sets
/// the various Allow/Not Allowed restrictions
/// </summary>
/// <param name="openPassword">Open/User password</param>
/// <param name="editPassword">Edit/Owner password</param>
/// <param name="allowAssemply">Assembly means merging, extracting, etc the PDF pages</param>
/// <param name="allowCopy">Copy means right-click copying the content of the PDF to the system</param>
/// <param name="allowDegradedPrinting">Can print low quality version of the PDF</param>
/// <param name="allowFillIn">Can insert data into any AcroForms in the PDF</param>
/// <param name="allowModifyAnnotations">Modification of any annotations</param>
/// <param name="allowModifyContents">Modification of any content in the PDF</param>
/// <param name="allowPrinting">Allows printing at any quality level</param>
/// <param name="allowScreenReaders">Allows the content to be parsed/repurposed for screen readers</param>
public byte[] GetEncryptedPDF(byte[] pdf,
string openPassword, string editPassword,
bool allowAssemply, bool allowCopy,
bool allowDegradedPrinting, bool allowFillIn,
bool allowModifyAnnotations, bool allowModifyContents,
bool allowPrinting, bool allowScreenReaders)
{
int permissions = 0;
if (allowAssemply)
permissions = permissions | PdfWriter.ALLOW_ASSEMBLY;
if (allowCopy)
permissions = permissions | PdfWriter.ALLOW_COPY;
if (allowDegradedPrinting)
permissions = permissions | PdfWriter.ALLOW_DEGRADED_PRINTING;
if (allowFillIn)
permissions = permissions | PdfWriter.ALLOW_FILL_IN;
if (allowModifyAnnotations)
permissions = permissions | PdfWriter.ALLOW_MODIFY_ANNOTATIONS;
if (allowModifyContents)
permissions = permissions | PdfWriter.ALLOW_MODIFY_CONTENTS;
if (allowPrinting)
permissions = permissions | PdfWriter.ALLOW_PRINTING;
if (allowScreenReaders)
permissions = permissions | PdfWriter.ALLOW_SCREENREADERS;
PdfReader reader = new PdfReader(pdf);
using (MemoryStream memoryStream = new MemoryStream())
{
PdfEncryptor.Encrypt(reader, memoryStream, true, openPassword, editPassword, permissions);
reader.Close();
return memoryStream.ToArray();
}
}