您的位置:首页 > 编程语言 > C#

CSharp自定义文件的属性

2017-09-30 15:27 751 查看


How to set custom attributes / file properties on a file in C# .Net

In the office here we have developed a document management system, which uses Custom Properties on PDF and DWG files to keep a track of what revision etc they are. In my Revit API development, we required an easy way of settings these from inside of Revit,
so I set about creating a plotting external command using the new Print methods in the 2009 API and PDF995's ini file.

Once I'd printed the documents, I wanted to rename them and set the custom properties such as Revision, drawer, designer etc. After much searching, I discovered what you need to get is "DSOFile"
from Microsoft, it is intended for editing Microsoft Word document properties, but works on anything. There is an easy to understand VB.Net example included in the download.

DSO File works by adding a reference to the DLL and creating a new DSOFile.OleDocumentPropertiesClass, and then performing actions on that. So, I created a new: private DSOFile.OleDocumentPropertiesClass m_file; Then
in my constructor for my ParamaterSetter class I created an instance of OleDocumentPropertiesClass and then called the Open() Method with my filename:

//create new isntance of OleDocumentPropertiesClass

m_file = new DSOFile.OleDocumentPropertiesClass();

// select the file you would like to open

m_file.Open(path, false, DSOFile.dsoFileOpenOptions.dsoOptionDefault);

From there you can perform actions such as : m_file.CustomProperties.Add(key, ref valueForKey); where key is the name of your property, and valueForKey is the value. For more standard properties, such as the "Summary"
properties (in summary tab when you go properties on the file), you can access them directly, such as: m_file.SummaryProperties.Comments = value;

For reference, here is the utility class I use:

class FileParameterSetter {

//DSOFile document
private DSOFile.OleDocumentPropertiesClass m_file;

public FileParameterSetter(string path) {
//create new isntance of OleDocumentPropertiesClass
m_file = new DSOFile.OleDocumentPropertiesClass();

// select the file you would like to open
m_file.Open(path, false, DSOFile.dsoFileOpenOptions.dsoOptionDefault);

}

/// <summary>
/// Sets a custom property in the file.
/// </summary>
/// <param name="key">key to set</param>
/// <param name="value">value to set to key</param>
public void SetCustomproperty(string key, string value) {
try {
object valueForKey;

//check for valid inputs
if ((key == null) || (value == null) || (key.Length == 0) || (value.Length == 0)) {
//Error, no key or value.
return;
}

valueForKey = value;

//write to file
m_file.CustomProperties.Add(key, ref valueForKey);

//save change
m_file.Save();
} catch(Exception ex) {

System.Windows.Forms.MessageBox.Show("There was an error adding properties to PDF file: " +
ex);

}
}

/// <summary>
/// Saves and closes document
/// </summary>
public void Close() {
m_file.Close(true);
}

/// <summary>
/// Sets a standard property, such as Comments, Subject, Title etc
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public void SetStandardProperty(string key, string value) {

if (key.Equals("Comments")) {
m_file.SummaryProperties.Comments = value;
}
if (key.Equals("Subject")) {
m_file.SummaryProperties.Subject = value;
}
if (key.Equals("Title")) {
m_file.SummaryProperties.Title = value;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件属性 CSharp