首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将只读权限添加到Open XML或Word文档

将只读权限添加到Open XML或Word文档
EN

Stack Overflow用户
提问于 2014-02-21 13:37:29
回答 1查看 2.1K关注 0票数 2

我正在尝试使用开放的xml操作来使word文档成为只读的。我不确定我是在正确的轨道上还是完全错误的轨道上。我已经在下面包含了我所有的相关代码。它似乎没有预期的(或任何)效果。

我已经打开了xml并验证了xml中正在发生的一些权限问题,尽管我不确定这是否是正确的事情。

这是docprop/app.xml文件中的xml文件发生的事情之一

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<ap:Properties xmlns:ap="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties">
   <ap:DocSecurity>4</ap:DocSecurity>
</ap:Properties>

这是word/settings.xml文件中发生的事情之一

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:documentProtection w:enforcement="true" w:edit="readOnly"/>
</w:settings>

我的代码用于向文档添加只读权限,如下所示

代码语言:javascript
复制
public static class OpenXMLManipulations
{

    public static void AddReadonlyPermissions(string filePath)
    {
        using (var myDocument = WordprocessingDocument.Open(filePath, true))
        {


            if (Equals(myDocument.ExtendedFilePropertiesPart, null))
                myDocument.AddExtendedFilePropertiesPart();

            if (Equals(myDocument.ExtendedFilePropertiesPart.Properties, null))
                myDocument.ExtendedFilePropertiesPart.Properties = new Properties();

            myDocument.ExtendedFilePropertiesPart.Properties.DocumentSecurity
                = new DocumentSecurity("4");

            myDocument.ExtendedFilePropertiesPart.Properties.Save();

            /*
             * Code 4 enforces read only 
             * http://msdn.microsoft.com/en-us/library/documentformat.openxml.extendedproperties.documentsecurity(v=office.14).aspx
            */


            if (Equals(myDocument.MainDocumentPart.DocumentSettingsPart, null))
                myDocument.MainDocumentPart.AddNewPart<DocumentSettingsPart>();

            if (!Equals(myDocument.MainDocumentPart.DocumentSettingsPart.Settings, null) &&
                (myDocument.MainDocumentPart.DocumentSettingsPart.Settings.ChildElements.Count > 0))
            {

                var dps = myDocument.MainDocumentPart.DocumentSettingsPart
                     .Settings.ChildElements.OfType<DocumentProtection>();

                foreach(var _dp in dps)
                    _dp.Remove();

            }

            var dp = new DocumentProtection();
            dp.Edit = DocumentProtectionValues.ReadOnly;
            dp.Enforcement = OnOffValue.FromBoolean(true);

            if (Equals(myDocument.MainDocumentPart.DocumentSettingsPart.Settings, null))
                myDocument.MainDocumentPart.DocumentSettingsPart.Settings = new Settings();


            myDocument.MainDocumentPart.DocumentSettingsPart.Settings.AppendChild(dp);


            myDocument.MainDocumentPart.DocumentSettingsPart.Settings.Save();

            //myDocument.Close();
        }

    }
}

我对这个过程有点恼火。有什么建议指出我做错了什么吗?

当我打开示例word文档时,没有任何迹象表明我添加了任何权限修饰符,即。一切正常打开。

谢谢,山姆

EN

回答 1

Stack Overflow用户

发布于 2014-03-18 18:57:09

您是否尝试过将输出文件扩展名更改为.zip并查看包中的输出XML?

对于OpenXML标准来说,对app.xml的更改并不是必须的;w:documentProtection元素的编辑和强制属性将使文档成为只读的。但是,用户可以在不提供密码的情况下重新启用编辑。

如果要将文档设置为只读并强制提供密码以使其可编辑,则可以强制文档设置部件的文档保护元素启用此功能(17.15.1.29)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21926134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档