C# 如何将PDF保存为只读/展平格式?
我正在使用PDFSharp生成一个包含填充字段的PDF文档。保存文档时,我希望它是只读的。我已经尝试了下面的方法,但是当在Adobe中打开PDF时,这些字段仍然是可编辑的C# 如何将PDF保存为只读/展平格式?,c#,asp.net-mvc,pdfsharp,C#,Asp.net Mvc,Pdfsharp,我正在使用PDFSharp生成一个包含填充字段的PDF文档。保存文档时,我希望它是只读的。我已经尝试了下面的方法,但是当在Adobe中打开PDF时,这些字段仍然是可编辑的 using (PdfDocument form = PdfReader.Open(outputFormLocation , PdfDocumentOpenMode.Modify)) { //do stuff... //Save Pdf
using (PdfDocument form = PdfReader.Open(outputFormLocation , PdfDocumentOpenMode.Modify))
{
//do stuff...
//Save
PdfSecuritySettings securitySettings = form.SecuritySettings;
securitySettings.PermitFormsFill = false;
securitySettings.PermitModifyDocument = false;
securitySettings.PermitPrint = true;
form.Save(outputFormLocation);
很久以前,我使用this属性(见下文)将文档设置为只读
securitySettings.PermitAccessibilityExtractContent = false;
securitySettings.PermitAnnotations = false;
securitySettings.PermitAssembleDocument = false;
securitySettings.PermitExtractContent = false;
securitySettings.PermitFormsFill = true;
securitySettings.PermitFullQualityPrint = false;
securitySettings.PermitModifyDocument = true;
securitySettings.PermitPrint = false;
您必须设置所有者密码才能使设置生效
securitySettings.OwnerPassword = "owner";
使用PdfSharp 1.32和PdfSharp.Pdf.AcroForms设置所有字段的只读属性对我有效(在发布问题时,这可能不可用)。例如:
PdfDocument document = PdfReader.Open("file.pdf", PdfDocumentOpenMode.Modify);
PdfAcroForm form = document.AcroForm;
PdfAcroField.PdfAcroFieldCollection fields = form.Fields;
string[] names = fields.Names;
for (int idx = 0; idx < names.Length; idx++)
{
string fqName = names[idx];
PdfAcroField field = fields[fqName];
PdfTextField txtField;
if ((txtField = field as PdfTextField) != null)
{
txtField.ReadOnly = true;
}
}
document.Save("file.pdf");
pdfdocumentdocument=PdfReader.Open(“file.pdf”,PdfDocumentOpenMode.Modify);
PdfAcroForm form=document.AcroForm;
PdfAcroField.PdfAcroFieldCollection字段=form.fields;
字符串[]名称=字段。名称;
for(intidx=0;idx
我对uozuAho对PDFsharp 1.32的回答进行了调整,并将其更改为锁定所有字段,而不仅仅是文本字段
pdfdocumentdocument=PdfReader.Open(“file.pdf”,PdfDocumentOpenMode.Modify);
PdfAcroForm form=document.AcroForm;
字符串[]名称=form.Fields.names;
for(intidx=0;idx
谢谢,但我刚试过,结果也一样。在Adobe中,我可以编辑字段。您是否设置了所有者密码?不要设置用户密码以获取可以在不指定密码的情况下打开的PDF。这不起作用。它唯一改变的是在Adobe的标题栏中,在名称后面有一个(安全的)标签。我仍然能够在其中一个字段中键入一个新值,并将更改保存回同一文档,而无需输入密码。我需要能够完全展平/禁用编辑。