/// <summary> /// Gets core and extended properties from the specified document. /// </summary> /// <param name="fileName">The file name to get the properties from.</param> /// <returns>The properties</returns> public static PropertiesAdapter GetProperties(string fileName) { if (string.IsNullOrEmpty(fileName)) { throw new ArgumentException(nameof(fileName)); } if (!File.Exists(fileName)) { throw new InvalidOperationException($"{Strings.InvalidOperationFileDoesNotExist} {fileName}"); } try { PropertiesAdapter result = null; Package wordPackage = Package.Open(fileName, FileMode.Open, FileAccess.Read); using (WordprocessingDocument wordDocument = WordprocessingDocument.Open(wordPackage)) { result = new PropertiesAdapter(fileName, wordDocument); } wordPackage.Close(); return(result); } catch (IOException) { throw; } catch (Exception) { throw new InvalidOperationException(Strings.InvalidOperationOpenXmlReader); } }
/// <summary> /// Sets core and extended properties for the specified document. /// </summary> /// <param name="fileName">The file name to set the properties for.</param> /// <param name="props">The properties object.</param> /// <remarks> /// This method does not preserve the original created and modification dates. /// To do so, call the <see cref="PropertiesAdapter.Save"/> method on the object /// returned from the <see cref="Reader.GetProperties"/> method instead. For example: /// <code> /// var props = OpenXmlDocument.Reader.GetProperties(@"D:\MyDocument.docx"); /// props.Core.Title = "The New Title"; /// props.Core.Description= "This title has a new description"; /// props.Save(); /// </code> /// <para> /// If you don't want to preserve the dates, or want to handle it yourself, use the <see cref="SetProperties"/> method: /// </para> /// <code> /// var props = OpenXmlDocument.Reader.GetProperties(@"D:\MyDocument.docx"); /// props.Core.Title = "The New Title"; /// props.Core.Description= "This title has a new description"; /// OpenXmlDocument.Writer.SetProperties(@"D:\MyDocument.docx", props); /// </code> /// </remarks> public static void SetProperties(string fileName, PropertiesAdapter props) { if (string.IsNullOrEmpty(fileName)) { throw new ArgumentException(nameof(fileName)); } if (!File.Exists(fileName)) { throw new InvalidOperationException($"{Strings.InvalidOperationFileDoesNotExist} {fileName}"); } if (props == null) { throw new ArgumentNullException(nameof(props)); } try { Package wordPackage = Package.Open(fileName, FileMode.Open, FileAccess.ReadWrite); using (WordprocessingDocument doc = WordprocessingDocument.Open(wordPackage)) { // core properties doc.PackageProperties.Category = props.Core.Category; doc.PackageProperties.ContentStatus = props.Core.ContentStatus; doc.PackageProperties.ContentType = props.Core.ContentType; doc.PackageProperties.Created = props.Core.Created; doc.PackageProperties.Creator = props.Core.Creator; doc.PackageProperties.Description = props.Core.Description; doc.PackageProperties.Identifier = props.Core.Identifier; doc.PackageProperties.Keywords = props.Core.Keywords; doc.PackageProperties.Language = props.Core.Language; doc.PackageProperties.LastModifiedBy = props.Core.LastModifiedBy; doc.PackageProperties.LastPrinted = props.Core.LastPrinted; doc.PackageProperties.Modified = props.Core.Modified; doc.PackageProperties.Revision = props.Core.Revision; doc.PackageProperties.Subject = props.Core.Subject; doc.PackageProperties.Title = props.Core.Title; doc.PackageProperties.Version = props.Core.Version; // extended properties OpenXmlDocumentCreator.AddExtendedFilePropertiesPartIfNeeded(doc); doc.ExtendedFilePropertiesPart.Properties.Company.Text = props.Extended.Company; } wordPackage.Close(); } catch (IOException) { throw; } catch (Exception) { throw new InvalidOperationException(Strings.InvalidOperationOpenXmlReader); } }