Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将PDF保存为只读/展平格式?_C#_Asp.net Mvc_Pdfsharp - Fatal编程技术网

C# 如何将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

我正在使用PDFSharp生成一个包含填充字段的PDF文档。保存文档时,我希望它是只读的。我已经尝试了下面的方法,但是当在Adobe中打开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的标题栏中,在名称后面有一个(安全的)标签。我仍然能够在其中一个字段中键入一个新值,并将更改保存回同一文档,而无需输入密码。我需要能够完全展平/禁用编辑。