Test
This commit is contained in:
		
							
								
								
									
										919
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/CObjects.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										919
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/CObjects.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,919 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using System.Globalization;
 | 
			
		||||
using System.IO;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
namespace PdfSharp.Pdf.Content.Objects  // TODO: split into single files
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Base class for all PDF content stream objects.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public abstract class CObject : ICloneable
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="CObject"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected CObject()
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        object ICloneable.Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CObject Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism. Must be overridden in derived classes.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected virtual CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            return (CObject)MemberwiseClone();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        internal abstract void WriteObject(ContentWriter writer);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents a comment in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("({Text})")]
 | 
			
		||||
    public class CComment : CObject
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CComment Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CComment)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the comment text.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Text
 | 
			
		||||
        {
 | 
			
		||||
            get { return _text; }
 | 
			
		||||
            set { _text = value; }
 | 
			
		||||
        }
 | 
			
		||||
        string _text;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current comment.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return "% " + _text;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            writer.WriteLineRaw(ToString());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents a sequence of objects in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("(count={Count})")]
 | 
			
		||||
    public class CSequence : CObject, IList<CObject>  // , ICollection<CObject>, IEnumerable<CObject>
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CSequence Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CSequence)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            _items = new List<CObject>(_items);
 | 
			
		||||
            for (int idx = 0; idx < _items.Count; idx++)
 | 
			
		||||
                _items[idx] = _items[idx].Clone();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds the specified sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sequence">The sequence.</param>
 | 
			
		||||
        public void Add(CSequence sequence)
 | 
			
		||||
        {
 | 
			
		||||
            int count = sequence.Count;
 | 
			
		||||
            for (int idx = 0; idx < count; idx++)
 | 
			
		||||
                _items.Add(sequence[idx]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region IList Members
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds the specified value add the end of the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void Add(CObject value)
 | 
			
		||||
        {
 | 
			
		||||
            _items.Add(value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Removes all elements from the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void Clear()
 | 
			
		||||
        {
 | 
			
		||||
            _items.Clear();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //bool IList.Contains(object value)
 | 
			
		||||
        //{
 | 
			
		||||
        //  return items.Contains(value);
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Determines whether the specified value is in the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Contains(CObject value)
 | 
			
		||||
        {
 | 
			
		||||
            return _items.Contains(value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns the index of the specified value in the sequence or -1, if no such value is in the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int IndexOf(CObject value)
 | 
			
		||||
        {
 | 
			
		||||
            return _items.IndexOf(value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Inserts the specified value in the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void Insert(int index, CObject value)
 | 
			
		||||
        {
 | 
			
		||||
            _items.Insert(index, value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /////// <summary>
 | 
			
		||||
        /////// Gets a value indicating whether the sequence has a fixed size.
 | 
			
		||||
        /////// </summary>
 | 
			
		||||
        ////public bool IsFixedSize
 | 
			
		||||
        ////{
 | 
			
		||||
        ////  get { return items.IsFixedSize; }
 | 
			
		||||
        ////}
 | 
			
		||||
 | 
			
		||||
        /////// <summary>
 | 
			
		||||
        /////// Gets a value indicating whether the sequence is read-only.
 | 
			
		||||
        /////// </summary>
 | 
			
		||||
        ////public bool IsReadOnly
 | 
			
		||||
        ////{
 | 
			
		||||
        ////  get { return items.IsReadOnly; }
 | 
			
		||||
        ////}
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Removes the specified value from the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool Remove(CObject value)
 | 
			
		||||
        {
 | 
			
		||||
            return _items.Remove(value);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Removes the value at the specified index from the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void RemoveAt(int index)
 | 
			
		||||
        {
 | 
			
		||||
            _items.RemoveAt(index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets a CObject at the specified index.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value></value>
 | 
			
		||||
        public CObject this[int index]
 | 
			
		||||
        {
 | 
			
		||||
            get { return (CObject)_items[index]; }
 | 
			
		||||
            set { _items[index] = value; }
 | 
			
		||||
        }
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ICollection Members
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Copies the elements of the sequence to the specified array.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void CopyTo(CObject[] array, int index)
 | 
			
		||||
        {
 | 
			
		||||
            _items.CopyTo(array, index);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets the number of elements contained in the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int Count
 | 
			
		||||
        {
 | 
			
		||||
            get { return _items.Count; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// Gets a value indicating whether access to the sequence is synchronized (thread safe).
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //public bool IsSynchronized
 | 
			
		||||
        //{
 | 
			
		||||
        //  get { return items.IsSynchronized; }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        ///// <summary>
 | 
			
		||||
        ///// Gets an object that can be used to synchronize access to the sequence.
 | 
			
		||||
        ///// </summary>
 | 
			
		||||
        //public object SyncRoot
 | 
			
		||||
        //{
 | 
			
		||||
        //  get { return items.SyncRoot; }
 | 
			
		||||
        //}
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region IEnumerable Members
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns an enumerator that iterates through the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public IEnumerator<CObject> GetEnumerator()
 | 
			
		||||
        {
 | 
			
		||||
            return _items.GetEnumerator();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Converts the sequence to a PDF content stream.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public byte[] ToContent()
 | 
			
		||||
        {
 | 
			
		||||
            Stream stream = new MemoryStream();
 | 
			
		||||
            ContentWriter writer = new ContentWriter(stream);
 | 
			
		||||
            WriteObject(writer);
 | 
			
		||||
            writer.Close(false);
 | 
			
		||||
 | 
			
		||||
            stream.Position = 0;
 | 
			
		||||
            int count = (int)stream.Length;
 | 
			
		||||
            byte[] bytes = new byte[count];
 | 
			
		||||
            stream.Read(bytes, 0, count);
 | 
			
		||||
#if !UWP
 | 
			
		||||
            stream.Close();
 | 
			
		||||
#else
 | 
			
		||||
            stream.Dispose();
 | 
			
		||||
#endif
 | 
			
		||||
            return bytes;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string containing all elements of the sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            StringBuilder s = new StringBuilder();
 | 
			
		||||
 | 
			
		||||
            for (int idx = 0; idx < _items.Count; idx++)
 | 
			
		||||
                s.Append(_items[idx]);
 | 
			
		||||
 | 
			
		||||
            return s.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        IEnumerator IEnumerable.GetEnumerator()
 | 
			
		||||
        {
 | 
			
		||||
            return GetEnumerator();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            for (int idx = 0; idx < _items.Count; idx++)
 | 
			
		||||
                _items[idx].WriteObject(writer);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region IList<CObject> Members
 | 
			
		||||
 | 
			
		||||
        int IList<CObject>.IndexOf(CObject item)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void IList<CObject>.Insert(int index, CObject item)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void IList<CObject>.RemoveAt(int index)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        CObject IList<CObject>.this[int index]
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                throw new NotImplementedException();
 | 
			
		||||
            }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                throw new NotImplementedException();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region ICollection<CObject> Members
 | 
			
		||||
 | 
			
		||||
        void ICollection<CObject>.Add(CObject item)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void ICollection<CObject>.Clear()
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool ICollection<CObject>.Contains(CObject item)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void ICollection<CObject>.CopyTo(CObject[] array, int arrayIndex)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int ICollection<CObject>.Count
 | 
			
		||||
        {
 | 
			
		||||
            get { throw new NotImplementedException(); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool ICollection<CObject>.IsReadOnly
 | 
			
		||||
        {
 | 
			
		||||
            get { throw new NotImplementedException(); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool ICollection<CObject>.Remove(CObject item)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region IEnumerable<CObject> Members
 | 
			
		||||
 | 
			
		||||
        IEnumerator<CObject> IEnumerable<CObject>.GetEnumerator()
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        List<CObject> _items = new List<CObject>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents the base class for numerical objects in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public abstract class CNumber : CObject
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CNumber Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CNumber)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        //{
 | 
			
		||||
        //  throw new Exception("Must not come here.");
 | 
			
		||||
        //}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents an integer value in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("({Value})")]
 | 
			
		||||
    public class CInteger : CNumber
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CInteger Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CInteger)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int Value
 | 
			
		||||
        {
 | 
			
		||||
            get { return _value; }
 | 
			
		||||
            set { _value = value; }
 | 
			
		||||
        }
 | 
			
		||||
        int _value;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return _value.ToString(CultureInfo.InvariantCulture);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            writer.WriteRaw(ToString() + " ");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents a real value in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("({Value})")]
 | 
			
		||||
    public class CReal : CNumber
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CReal Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CReal)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public double Value
 | 
			
		||||
        {
 | 
			
		||||
            get { return _value; }
 | 
			
		||||
            set { _value = value; }
 | 
			
		||||
        }
 | 
			
		||||
        double _value;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            const string format = Config.SignificantFigures1Plus9;
 | 
			
		||||
            return _value.ToString(format, CultureInfo.InvariantCulture);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            writer.WriteRaw(ToString() + " ");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Type of the parsed string.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public enum CStringType
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The string has the format "(...)".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        String,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The string has the format "<...>".
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        HexString,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The string... TODO.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        UnicodeString,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The string... TODO.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        UnicodeHexString,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// HACK: The string is the content of a dictionary.
 | 
			
		||||
        /// Currently there is no parser for dictionaries in Content Streams.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Dictionary,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents a string value in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("({Value})")]
 | 
			
		||||
    public class CString : CObject
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CString Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CString)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Value
 | 
			
		||||
        {
 | 
			
		||||
            get { return _value; }
 | 
			
		||||
            set { _value = value; }
 | 
			
		||||
        }
 | 
			
		||||
        string _value;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the type of the content string.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CStringType CStringType
 | 
			
		||||
        {
 | 
			
		||||
            get { return _cStringType; }
 | 
			
		||||
            set { _cStringType = value; }
 | 
			
		||||
        }
 | 
			
		||||
        CStringType _cStringType;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            StringBuilder s = new StringBuilder();
 | 
			
		||||
            switch (CStringType)
 | 
			
		||||
            {
 | 
			
		||||
                case CStringType.String:
 | 
			
		||||
                    s.Append("(");
 | 
			
		||||
                    int length = _value.Length;
 | 
			
		||||
                    for (int ich = 0; ich < length; ich++)
 | 
			
		||||
                    {
 | 
			
		||||
                        char ch = _value[ich];
 | 
			
		||||
                        switch (ch)
 | 
			
		||||
                        {
 | 
			
		||||
                            case Chars.LF:
 | 
			
		||||
                                s.Append("\\n");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.CR:
 | 
			
		||||
                                s.Append("\\r");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.HT:
 | 
			
		||||
                                s.Append("\\t");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.BS:
 | 
			
		||||
                                s.Append("\\b");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.FF:
 | 
			
		||||
                                s.Append("\\f");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.ParenLeft:
 | 
			
		||||
                                s.Append("\\(");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.ParenRight:
 | 
			
		||||
                                s.Append("\\)");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            case Chars.BackSlash:
 | 
			
		||||
                                s.Append("\\\\");
 | 
			
		||||
                                break;
 | 
			
		||||
 | 
			
		||||
                            default:
 | 
			
		||||
#if true_
 | 
			
		||||
                                // not absolut necessary to use octal encoding for characters less than blank
 | 
			
		||||
                                if (ch < ' ')
 | 
			
		||||
                                {
 | 
			
		||||
                                    s.Append("\\");
 | 
			
		||||
                                    s.Append((char)(((ch >> 6) & 7) + '0'));
 | 
			
		||||
                                    s.Append((char)(((ch >> 3) & 7) + '0'));
 | 
			
		||||
                                    s.Append((char)((ch & 7) + '0'));
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
#endif
 | 
			
		||||
                                s.Append(ch);
 | 
			
		||||
                                break;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    s.Append(')');
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                case CStringType.HexString:
 | 
			
		||||
                    throw new NotImplementedException();
 | 
			
		||||
                //break;
 | 
			
		||||
 | 
			
		||||
                case CStringType.UnicodeString:
 | 
			
		||||
                    throw new NotImplementedException();
 | 
			
		||||
                //break;
 | 
			
		||||
 | 
			
		||||
                case CStringType.UnicodeHexString:
 | 
			
		||||
                    throw new NotImplementedException();
 | 
			
		||||
                //break;
 | 
			
		||||
 | 
			
		||||
                case CStringType.Dictionary:
 | 
			
		||||
                    s.Append(_value);
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                default:
 | 
			
		||||
                    throw new ArgumentOutOfRangeException();
 | 
			
		||||
            }
 | 
			
		||||
            return s.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            writer.WriteRaw(ToString());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents a name in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("({Name})")]
 | 
			
		||||
    public class CName : CObject
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="CName"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public CName()
 | 
			
		||||
        {
 | 
			
		||||
            _name = "/";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="CName"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name">The name.</param>
 | 
			
		||||
        public CName(string name)
 | 
			
		||||
        {
 | 
			
		||||
            Name = name;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CName Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CName)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the name. Names must start with a slash.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string Name
 | 
			
		||||
        {
 | 
			
		||||
            get { return _name; }
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (String.IsNullOrEmpty(_name))
 | 
			
		||||
                    throw new ArgumentNullException(nameof(value));
 | 
			
		||||
                if (_name[0] != '/')
 | 
			
		||||
                    throw new ArgumentException(PSSR.NameMustStartWithSlash);
 | 
			
		||||
                _name = value;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        string _name;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return _name;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            writer.WriteRaw(ToString() + " ");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents an array of objects in a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("(count={Count})")]
 | 
			
		||||
    public class CArray : CSequence
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new CArray Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (CArray)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current value.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            return "[" + base.ToString() + "]";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            writer.WriteRaw(ToString());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents an operator a PDF content stream.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [DebuggerDisplay("({Name}, operands={Operands.Count})")]
 | 
			
		||||
    public class COperator : CObject
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="COperator"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected COperator()
 | 
			
		||||
        { }
 | 
			
		||||
 | 
			
		||||
        internal COperator(OpCode opcode)
 | 
			
		||||
        {
 | 
			
		||||
            _opcode = opcode;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new object that is a copy of the current instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public new COperator Clone()
 | 
			
		||||
        {
 | 
			
		||||
            return (COperator)Copy();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Implements the copy mechanism of this class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected override CObject Copy()
 | 
			
		||||
        {
 | 
			
		||||
            CObject obj = base.Copy();
 | 
			
		||||
            return obj;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the name of the operator
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value>The name.</value>
 | 
			
		||||
        public virtual string Name
 | 
			
		||||
        {
 | 
			
		||||
            get { return _opcode.Name; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets or sets the operands.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <value>The operands.</value>
 | 
			
		||||
        public CSequence Operands
 | 
			
		||||
        {
 | 
			
		||||
            get { return _seqence ?? (_seqence = new CSequence()); }
 | 
			
		||||
        }
 | 
			
		||||
        CSequence _seqence;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Gets the operator description for this instance.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OpCode OpCode
 | 
			
		||||
        {
 | 
			
		||||
            get { return _opcode; }
 | 
			
		||||
        }
 | 
			
		||||
        readonly OpCode _opcode;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a string that represents the current operator.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public override string ToString()
 | 
			
		||||
        {
 | 
			
		||||
            if (_opcode.OpCodeName == OpCodeName.Dictionary)
 | 
			
		||||
                return " ";
 | 
			
		||||
 | 
			
		||||
            return Name;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        internal override void WriteObject(ContentWriter writer)
 | 
			
		||||
        {
 | 
			
		||||
            int count = _seqence != null ? _seqence.Count : 0;
 | 
			
		||||
            for (int idx = 0; idx < count; idx++)
 | 
			
		||||
            {
 | 
			
		||||
                // ReSharper disable once PossibleNullReferenceException because the loop is not entered if _sequence is null
 | 
			
		||||
                _seqence[idx].WriteObject(writer);
 | 
			
		||||
            }
 | 
			
		||||
            writer.WriteLineRaw(ToString());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										367
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/Operators.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										367
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/Operators.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,367 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
using System.Diagnostics;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
 | 
			
		||||
namespace PdfSharp.Pdf.Content.Objects
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Represents a PDF content stream operator description.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public sealed class OpCode
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes a new instance of the <see cref="OpCode"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name">The name.</param>
 | 
			
		||||
        /// <param name="opcodeName">The enum value of the operator.</param>
 | 
			
		||||
        /// <param name="operands">The number of operands.</param>
 | 
			
		||||
        /// <param name="postscript">The postscript equivalent, or null, if no such operation exists.</param>
 | 
			
		||||
        /// <param name="flags">The flags.</param>
 | 
			
		||||
        /// <param name="description">The description from Adobe PDF Reference.</param>
 | 
			
		||||
        internal OpCode(string name, OpCodeName opcodeName, int operands, string postscript, OpCodeFlags flags, string description)
 | 
			
		||||
        {
 | 
			
		||||
            Name = name;
 | 
			
		||||
            OpCodeName = opcodeName;
 | 
			
		||||
            Operands = operands;
 | 
			
		||||
            Postscript = postscript;
 | 
			
		||||
            Flags = flags;
 | 
			
		||||
            Description = description;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The name of the operator.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public readonly string Name;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The enum value of the operator.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public readonly OpCodeName OpCodeName;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The number of operands. -1 indicates a variable number of operands.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public readonly int Operands;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The flags.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public readonly OpCodeFlags Flags;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The postscript equivalent, or null, if no such operation exists.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public readonly string Postscript;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The description from Adobe PDF Reference.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public readonly string Description;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Static class with all PDF op-codes.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class OpCodes
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Operators from name.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name">The name.</param>
 | 
			
		||||
        public static COperator OperatorFromName(string name)
 | 
			
		||||
        {
 | 
			
		||||
            COperator op = null;
 | 
			
		||||
            OpCode opcode = StringToOpCode[name];
 | 
			
		||||
            if (opcode != null)
 | 
			
		||||
            {
 | 
			
		||||
                op = new COperator(opcode);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Debug.Assert(false, "Unknown operator in PDF content stream.");
 | 
			
		||||
            }
 | 
			
		||||
            return op;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Initializes the <see cref="OpCodes"/> class.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        static OpCodes()
 | 
			
		||||
        {
 | 
			
		||||
            StringToOpCode = new Dictionary<string, OpCode>();
 | 
			
		||||
            for (int idx = 0; idx < ops.Length; idx++)
 | 
			
		||||
            {
 | 
			
		||||
                OpCode op = ops[idx];
 | 
			
		||||
                StringToOpCode.Add(op.Name, op);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        static readonly Dictionary<string, OpCode> StringToOpCode;
 | 
			
		||||
 | 
			
		||||
        // ReSharper disable InconsistentNaming
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Dictionary = new OpCode("Dictionary", OpCodeName.Dictionary, -1, "name, dictionary", OpCodeFlags.None,
 | 
			
		||||
            "E.g.: /Name << ... >>");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode b = new OpCode("b", OpCodeName.b, 0, "closepath, fill, stroke", OpCodeFlags.None,
 | 
			
		||||
            "Close, fill, and stroke path using nonzero winding number");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode B = new OpCode("B", OpCodeName.B, 0, "fill, stroke", OpCodeFlags.None,
 | 
			
		||||
            "Fill and stroke path using nonzero winding number rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode bx = new OpCode("b*", OpCodeName.bx, 0, "closepath, eofill, stroke", OpCodeFlags.None,
 | 
			
		||||
            "Close, fill, and stroke path using even-odd rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Bx = new OpCode("B*", OpCodeName.Bx, 0, "eofill, stroke", OpCodeFlags.None,
 | 
			
		||||
            "Fill and stroke path using even-odd rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode BDC = new OpCode("BDC", OpCodeName.BDC, -1, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Begin marked-content sequence with property list");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode BI = new OpCode("BI", OpCodeName.BI, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "Begin inline image object");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode BMC = new OpCode("BMC", OpCodeName.BMC, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Begin marked-content sequence");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode BT = new OpCode("BT", OpCodeName.BT, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "Begin text object");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode BX = new OpCode("BX", OpCodeName.BX, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.1) Begin compatibility section");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode c = new OpCode("c", OpCodeName.c, 6, "curveto", OpCodeFlags.None,
 | 
			
		||||
            "Append curved segment to path (three control points)");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode cm = new OpCode("cm", OpCodeName.cm, 6, "concat", OpCodeFlags.None,
 | 
			
		||||
            "Concatenate matrix to current transformation matrix");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode CS = new OpCode("CS", OpCodeName.CS, 1, "setcolorspace", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.1) Set color space for stroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode cs = new OpCode("cs", OpCodeName.cs, 1, "setcolorspace", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.1) Set color space for nonstroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode d = new OpCode("d", OpCodeName.d, 2, "setdash", OpCodeFlags.None,
 | 
			
		||||
            "Set line dash pattern");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode d0 = new OpCode("d0", OpCodeName.d0, 2, "setcharwidth", OpCodeFlags.None,
 | 
			
		||||
            "Set glyph width in Type 3 font");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode d1 = new OpCode("d1", OpCodeName.d1, 6, "setcachedevice", OpCodeFlags.None,
 | 
			
		||||
            "Set glyph width and bounding box in Type 3 font");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Do = new OpCode("Do", OpCodeName.Do, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Invoke named XObject");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode DP = new OpCode("DP", OpCodeName.DP, 2, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Define marked-content point with property list");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode EI = new OpCode("EI", OpCodeName.EI, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "End inline image object");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode EMC = new OpCode("EMC", OpCodeName.EMC, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) End marked-content sequence");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode ET = new OpCode("ET", OpCodeName.ET, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "End text object");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode EX = new OpCode("EX", OpCodeName.EX, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.1) End compatibility section");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode f = new OpCode("f", OpCodeName.f, 0, "fill", OpCodeFlags.None,
 | 
			
		||||
            "Fill path using nonzero winding number rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode F = new OpCode("F", OpCodeName.F, 0, "fill", OpCodeFlags.None,
 | 
			
		||||
            "Fill path using nonzero winding number rule (obsolete)");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode fx = new OpCode("f*", OpCodeName.fx, 0, "eofill", OpCodeFlags.None,
 | 
			
		||||
            "Fill path using even-odd rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode G = new OpCode("G", OpCodeName.G, 1, "setgray", OpCodeFlags.None,
 | 
			
		||||
            "Set gray level for stroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode g = new OpCode("g", OpCodeName.g, 1, "setgray", OpCodeFlags.None,
 | 
			
		||||
            "Set gray level for nonstroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode gs = new OpCode("gs", OpCodeName.gs, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Set parameters from graphics state parameter dictionary");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode h = new OpCode("h", OpCodeName.h, 0, "closepath", OpCodeFlags.None,
 | 
			
		||||
            "Close subpath");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode i = new OpCode("i", OpCodeName.i, 1, "setflat", OpCodeFlags.None,
 | 
			
		||||
            "Set flatness tolerance");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode ID = new OpCode("ID", OpCodeName.ID, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "Begin inline image data");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode j = new OpCode("j", OpCodeName.j, 1, "setlinejoin", OpCodeFlags.None,
 | 
			
		||||
            "Set line join style");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode J = new OpCode("J", OpCodeName.J, 1, "setlinecap", OpCodeFlags.None,
 | 
			
		||||
            "Set line cap style");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode K = new OpCode("K", OpCodeName.K, 4, "setcmykcolor", OpCodeFlags.None,
 | 
			
		||||
            "Set CMYK color for stroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode k = new OpCode("k", OpCodeName.k, 4, "setcmykcolor", OpCodeFlags.None,
 | 
			
		||||
            "Set CMYK color for nonstroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode l = new OpCode("l", OpCodeName.l, 2, "lineto", OpCodeFlags.None,
 | 
			
		||||
            "Append straight line segment to path");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode m = new OpCode("m", OpCodeName.m, 2, "moveto", OpCodeFlags.None,
 | 
			
		||||
            "Begin new subpath");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode M = new OpCode("M", OpCodeName.M, 1, "setmiterlimit", OpCodeFlags.None,
 | 
			
		||||
            "Set miter limit");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode MP = new OpCode("MP", OpCodeName.MP, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Define marked-content point");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode n = new OpCode("n", OpCodeName.n, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "End path without filling or stroking");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode q = new OpCode("q", OpCodeName.q, 0, "gsave", OpCodeFlags.None,
 | 
			
		||||
            "Save graphics state");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Q = new OpCode("Q", OpCodeName.Q, 0, "grestore", OpCodeFlags.None,
 | 
			
		||||
            "Restore graphics state");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode re = new OpCode("re", OpCodeName.re, 4, null, OpCodeFlags.None,
 | 
			
		||||
            "Append rectangle to path");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode RG = new OpCode("RG", OpCodeName.RG, 3, "setrgbcolor", OpCodeFlags.None,
 | 
			
		||||
            "Set RGB color for stroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode rg = new OpCode("rg", OpCodeName.rg, 3, "setrgbcolor", OpCodeFlags.None,
 | 
			
		||||
            "Set RGB color for nonstroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode ri = new OpCode("ri", OpCodeName.ri, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set color rendering intent");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode s = new OpCode("s", OpCodeName.s, 0, "closepath,stroke", OpCodeFlags.None,
 | 
			
		||||
            "Close and stroke path");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode S = new OpCode("S", OpCodeName.S, 0, "stroke", OpCodeFlags.None,
 | 
			
		||||
            "Stroke path");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode SC = new OpCode("SC", OpCodeName.SC, -1, "setcolor", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.1) Set color for stroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode sc = new OpCode("sc", OpCodeName.sc, -1, "setcolor", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.1) Set color for nonstroking operations");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode SCN = new OpCode("SCN", OpCodeName.SCN, -1, "setcolor", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Set color for stroking operations (ICCBased and special color spaces)");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode scn = new OpCode("scn", OpCodeName.scn, -1, "setcolor", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.2) Set color for nonstroking operations (ICCBased and special color spaces)");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode sh = new OpCode("sh", OpCodeName.sh, 1, "shfill", OpCodeFlags.None,
 | 
			
		||||
            "(PDF 1.3) Paint area defined by shading pattern");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tx = new OpCode("T*", OpCodeName.Tx, 0, null, OpCodeFlags.None,
 | 
			
		||||
            "Move to start of next text line");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tc = new OpCode("Tc", OpCodeName.Tc, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set character spacing");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Td = new OpCode("Td", OpCodeName.Td, 2, null, OpCodeFlags.None,
 | 
			
		||||
            "Move text position");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode TD = new OpCode("TD", OpCodeName.TD, 2, null, OpCodeFlags.None,
 | 
			
		||||
            "Move text position and set leading");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tf = new OpCode("Tf", OpCodeName.Tf, 2, "selectfont", OpCodeFlags.None,
 | 
			
		||||
            "Set text font and size");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tj = new OpCode("Tj", OpCodeName.Tj, 1, "show", OpCodeFlags.TextOut,
 | 
			
		||||
            "Show text");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode TJ = new OpCode("TJ", OpCodeName.TJ, 1, null, OpCodeFlags.TextOut,
 | 
			
		||||
            "Show text, allowing individual glyph positioning");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode TL = new OpCode("TL", OpCodeName.TL, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set text leading");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tm = new OpCode("Tm", OpCodeName.Tm, 6, null, OpCodeFlags.None,
 | 
			
		||||
            "Set text matrix and text line matrix");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tr = new OpCode("Tr", OpCodeName.Tr, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set text rendering mode");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Ts = new OpCode("Ts", OpCodeName.Ts, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set text rise");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tw = new OpCode("Tw", OpCodeName.Tw, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set word spacing");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Tz = new OpCode("Tz", OpCodeName.Tz, 1, null, OpCodeFlags.None,
 | 
			
		||||
            "Set horizontal text scaling");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode v = new OpCode("v", OpCodeName.v, 4, "curveto", OpCodeFlags.None,
 | 
			
		||||
            "Append curved segment to path (initial point replicated)");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode w = new OpCode("w", OpCodeName.w, 1, "setlinewidth", OpCodeFlags.None,
 | 
			
		||||
            "Set line width");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode W = new OpCode("W", OpCodeName.W, 0, "clip", OpCodeFlags.None,
 | 
			
		||||
            "Set clipping path using nonzero winding number rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode Wx = new OpCode("W*", OpCodeName.Wx, 0, "eoclip", OpCodeFlags.None,
 | 
			
		||||
            "Set clipping path using even-odd rule");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode y = new OpCode("y", OpCodeName.y, 4, "curveto", OpCodeFlags.None,
 | 
			
		||||
            "Append curved segment to path (final point replicated)");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode QuoteSingle = new OpCode("'", OpCodeName.QuoteSingle, 1, null, OpCodeFlags.TextOut,
 | 
			
		||||
            "Move to next line and show text");
 | 
			
		||||
 | 
			
		||||
        static readonly OpCode QuoteDbl = new OpCode("\"", OpCodeName.QuoteDbl, 3, null, OpCodeFlags.TextOut,
 | 
			
		||||
            "Set word and character spacing, move to next line, and show text");
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Array of all OpCodes.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        static readonly OpCode[] ops = // new OpCode[]
 | 
			
		||||
            { 
 | 
			
		||||
                // Must be defined behind the code above to ensure that the values are initialized.
 | 
			
		||||
                Dictionary,
 | 
			
		||||
                b, B, bx, Bx, BDC, BI, BMC, BT, BX, c, cm, CS, cs, d, d0, d1, Do,
 | 
			
		||||
                DP, EI, EMC, ET, EX, f, F, fx, G, g, gs, h, i, ID, j, J, K, k, l, m, M, MP,
 | 
			
		||||
                n, q, Q, re, RG, rg, ri, s, S, SC, sc, SCN, scn, sh,
 | 
			
		||||
                Tx, Tc, Td, TD, Tf, Tj, TJ, TL, Tm, Tr, Ts, Tw, Tz, v, w, W, Wx, y,
 | 
			
		||||
                QuoteSingle, QuoteDbl
 | 
			
		||||
            };
 | 
			
		||||
        // ReSharper restore InconsistentNaming
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										51
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/enum/OpCodeFlags.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/enum/OpCodeFlags.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace PdfSharp.Pdf.Content.Objects
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Specifies the group of operations the op-code belongs to.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    [Flags]
 | 
			
		||||
    public enum OpCodeFlags
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        None,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        TextOut = 0x0001,
 | 
			
		||||
        //Color, Pattern, Images,...
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										185
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/enum/OpCodeName.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								PrintPDF/PdfSharp/Pdf.Content.Objects/enum/OpCodeName.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,185 @@
 | 
			
		||||
#region PDFsharp - A .NET library for processing PDF
 | 
			
		||||
//
 | 
			
		||||
// Authors:
 | 
			
		||||
//   Stefan Lange
 | 
			
		||||
//
 | 
			
		||||
// Copyright (c) 2005-2017 empira Software GmbH, Cologne Area (Germany)
 | 
			
		||||
//
 | 
			
		||||
// http://www.pdfsharp.com
 | 
			
		||||
// http://sourceforge.net/projects/pdfsharp
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
// copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
// to deal in the Software without restriction, including without limitation
 | 
			
		||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
// and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
// Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included
 | 
			
		||||
// in all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 | 
			
		||||
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 | 
			
		||||
// DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
#pragma warning disable 1591
 | 
			
		||||
 | 
			
		||||
// ReSharper disable InconsistentNaming
 | 
			
		||||
 | 
			
		||||
namespace PdfSharp.Pdf.Content.Objects
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// The names of the op-codes. 
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public enum OpCodeName
 | 
			
		||||
    {
 | 
			
		||||
        Dictionary,  // Name followed by dictionary.
 | 
			
		||||
 | 
			
		||||
        // I know that this is not useable in VB or other languages with no case sensitivity.
 | 
			
		||||
 | 
			
		||||
        // Reference: TABLE A.1<EFBFBD><EFBFBD>PDF content stream operators / Page 985
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Close, fill, and stroke path using nonzero winding number rule.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        b,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Fill and stroke path using nonzero winding number rule.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        B,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Close, fill, and stroke path using even-odd rule.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        bx,  // b*
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Fill and stroke path using even-odd rule.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        Bx,  // B*
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.2) Begin marked-content sequence with property list.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        BDC,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Begin inline image object.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        BI,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.2) Begin marked-content sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        BMC,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Begin text object.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        BT,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.1) Begin compatibility section.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        BX,
 | 
			
		||||
 | 
			
		||||
        c,
 | 
			
		||||
        cm,
 | 
			
		||||
        CS,
 | 
			
		||||
        cs,
 | 
			
		||||
        d,
 | 
			
		||||
        d0,
 | 
			
		||||
        d1,
 | 
			
		||||
        Do,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.2) Define marked-content point with property list.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        DP,
 | 
			
		||||
 | 
			
		||||
        EI,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.2) End marked-content sequence.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        EMC,
 | 
			
		||||
 | 
			
		||||
        ET,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.1) End compatibility section.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        EX,
 | 
			
		||||
 | 
			
		||||
        f,
 | 
			
		||||
        F,
 | 
			
		||||
        fx,  // f*
 | 
			
		||||
        G,
 | 
			
		||||
        g,
 | 
			
		||||
        gs,
 | 
			
		||||
        h,
 | 
			
		||||
        i,
 | 
			
		||||
        ID,
 | 
			
		||||
        j,
 | 
			
		||||
        J,
 | 
			
		||||
        K,
 | 
			
		||||
        k,
 | 
			
		||||
        l,
 | 
			
		||||
        m,
 | 
			
		||||
        M,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// (PDF 1.2) Define marked-content point
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        MP,
 | 
			
		||||
 | 
			
		||||
        n,
 | 
			
		||||
        q,
 | 
			
		||||
        Q,
 | 
			
		||||
        re,
 | 
			
		||||
        RG,
 | 
			
		||||
        rg,
 | 
			
		||||
        ri,
 | 
			
		||||
        s,
 | 
			
		||||
        S,
 | 
			
		||||
        SC,
 | 
			
		||||
        sc,
 | 
			
		||||
        SCN,
 | 
			
		||||
        scn,
 | 
			
		||||
        sh,
 | 
			
		||||
        Tx,  // T*
 | 
			
		||||
        Tc,
 | 
			
		||||
        Td,
 | 
			
		||||
        TD,
 | 
			
		||||
        Tf,
 | 
			
		||||
        Tj,
 | 
			
		||||
        TJ,
 | 
			
		||||
        TL,
 | 
			
		||||
        Tm,
 | 
			
		||||
        Tr,
 | 
			
		||||
        Ts,
 | 
			
		||||
        Tw,
 | 
			
		||||
        Tz,
 | 
			
		||||
        v,
 | 
			
		||||
        w,
 | 
			
		||||
        W,
 | 
			
		||||
        Wx,  // W*
 | 
			
		||||
        y,
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Move to next line and show text.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        QuoteSingle, // '
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Set word and character spacing, move to next line, and show text.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        QuoteDbl,  // "
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user