| File: Serialization\Manager\XpsOMFixedDocumentSerializer.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\ReachFramework\ReachFramework.csproj (ReachFramework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace System.Windows.Xps.Serialization { /// <summary> /// Class defining common functionality required to /// serialize a Fixed Document. /// </summary> internal class XpsOMFixedDocumentSerializer : ReachSerializer { #region Constructor public XpsOMFixedDocumentSerializer( PackageSerializationManager manager ) : base(manager) { /// /// Fail if manager is not XpsOMSerializationManager /// _xpsOMSerializationManager = (XpsOMSerializationManager)manager; } #endregion Constructor #region Public Methods public override void SerializeObject( Object serializedObject ) { Initialize(); base.SerializeObject(serializedObject); } #endregion Public Methods #region Internal Methods internal override void SerializeObject( SerializablePropertyContext serializedProperty ) { Initialize(); base.SerializeObject(serializedProperty); } internal void Initialize( ) { // // Create the ImageTable required by the Type Converters // The Image table at this time is shared / document // _xpsOMSerializationManager.ResourcePolicy.ImageCrcTable = new Dictionary<UInt32, Uri>(); _xpsOMSerializationManager.ResourcePolicy.ImageUriHashTable = new Dictionary<int, Uri>(); // // Create the ColorContextTable required by the Type Converters // The Image table at this time is shared / document // _xpsOMSerializationManager.ResourcePolicy.ColorContextTable = new Dictionary<int, Uri>(); } internal override void PersistObjectData( SerializableObjectContext serializableObjectContext ) { BeginPersistObjectData(serializableObjectContext); if (serializableObjectContext.IsComplexValue) { SerializeObjectCore(serializableObjectContext); } else { throw new XpsSerializationException(SR.ReachSerialization_WrongPropertyTypeForFixedDocument); } EndPersistObjectData(); } internal void BeginPersistObjectData( SerializableObjectContext serializableObjectContext ) { ArgumentNullException.ThrowIfNull(serializableObjectContext); _xpsOMSerializationManager.RegisterDocumentStart(); if (serializableObjectContext.IsComplexValue) { XpsSerializationPrintTicketRequiredEventArgs e = new XpsSerializationPrintTicketRequiredEventArgs(PrintTicketLevel.FixedDocumentPrintTicket, 0); _xpsOMSerializationManager.OnXPSSerializationPrintTicketRequired(e); // // Serialize the data for the PrintTicket // if (e.Modified) { if (e.PrintTicket != null) { PrintTicketSerializer serializer = new PrintTicketSerializer(SerializationManager); serializer.SerializeObject(e.PrintTicket); } } } _xpsOMSerializationManager.StartNewDocument(); } internal void EndPersistObjectData( ) { // // Clear off the table from the packaging policy // _xpsOMSerializationManager.ResourcePolicy.ImageCrcTable = null; _xpsOMSerializationManager.ResourcePolicy.ImageUriHashTable = null; _xpsOMSerializationManager.ReleaseXpsOMWriterForFixedDocument(); // // Signal to any registered callers that the Document has been serialized // XpsSerializationProgressChangedEventArgs progressEvent = new XpsSerializationProgressChangedEventArgs(XpsWritingProgressChangeLevel.FixedDocumentWritingProgress, 0, 0, null); _xpsOMSerializationManager.OnXPSSerializationProgressChanged(progressEvent); _xpsOMSerializationManager.RegisterDocumentEnd(); } #endregion Internal Methods private XpsOMSerializationManager _xpsOMSerializationManager; }; }