git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Pdf.AcroForms / PdfAcroForm.cs
1 #region PDFsharp - A .NET library for processing PDF\r
2 //\r
3 // Authors:\r
4 //   Stefan Lange (mailto:Stefan.Lange@pdfsharp.com)\r
5 //\r
6 // Copyright (c) 2005-2009 empira Software GmbH, Cologne (Germany)\r
7 //\r
8 // http://www.pdfsharp.com\r
9 // http://sourceforge.net/projects/pdfsharp\r
10 //\r
11 // Permission is hereby granted, free of charge, to any person obtaining a\r
12 // copy of this software and associated documentation files (the "Software"),\r
13 // to deal in the Software without restriction, including without limitation\r
14 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
15 // and/or sell copies of the Software, and to permit persons to whom the\r
16 // Software is furnished to do so, subject to the following conditions:\r
17 //\r
18 // The above copyright notice and this permission notice shall be included\r
19 // in all copies or substantial portions of the Software.\r
20 //\r
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
22 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
23 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
24 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
25 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r
26 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER \r
27 // DEALINGS IN THE SOFTWARE.\r
28 #endregion\r
29 \r
30 using System;\r
31 using System.Diagnostics;\r
32 using System.Collections;\r
33 using PdfSharp.Pdf.Internal;\r
34 \r
35 namespace PdfSharp.Pdf.AcroForms\r
36 {\r
37   /// <summary>\r
38   /// Represents a interactive form (or AcroForm), a collection of fields for \r
39   /// gathering information interactively from the user.\r
40   /// </summary>\r
41   public sealed class PdfAcroForm : PdfDictionary\r
42   {\r
43     /// <summary>\r
44     /// Initializes a new instance of AcroForm.\r
45     /// </summary>\r
46     internal PdfAcroForm(PdfDocument document) : base(document)\r
47     {\r
48       this.document = document;\r
49     }\r
50 \r
51     internal PdfAcroForm(PdfDictionary dictionary) : base(dictionary)\r
52     {\r
53     }\r
54 \r
55     /// <summary>\r
56     /// Gets the fields collection of this form.\r
57     /// </summary>\r
58     public PdfAcroField.PdfAcroFieldCollection Fields\r
59     {\r
60       get\r
61       {\r
62         if (this.fields == null)\r
63         {\r
64           object o = Elements.GetValue(Keys.Fields, VCF.CreateIndirect);\r
65           this.fields = (PdfAcroField.PdfAcroFieldCollection)o;\r
66         }\r
67         return this.fields;\r
68       }\r
69     }\r
70     PdfAcroField.PdfAcroFieldCollection fields;\r
71 \r
72     /// <summary>\r
73     /// Predefined keys of this dictionary. \r
74     /// The description comes from PDF 1.4 Reference.\r
75     /// </summary>\r
76     public sealed class Keys : KeysBase\r
77     {\r
78       /// <summary>\r
79       /// (Required) An array of references to the document\92s root fields (those with\r
80       /// no ancestors in the field hierarchy).\r
81       /// </summary>\r
82       [KeyInfo(KeyType.Array | KeyType.Required, typeof(PdfAcroField.PdfAcroFieldCollection))]\r
83       public const string Fields = "/Fields";\r
84 \r
85       /// <summary>\r
86       /// (Optional) A flag specifying whether to construct appearance streams and\r
87       /// appearance dictionaries for all widget annotations in the document.\r
88       /// Default value: false.\r
89       /// </summary>\r
90       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
91       public const string NeedAppearances = "/NeedAppearances";\r
92 \r
93       /// <summary>\r
94       /// (Optional; PDF 1.3) A set of flags specifying various document-level characteristics\r
95       /// related to signature fields.\r
96       /// Default value: 0.\r
97       /// </summary>\r
98       [KeyInfo("1.3", KeyType.Integer | KeyType.Optional)]\r
99       public const string SigFlags = "/SigFlags";\r
100 \r
101       /// <summary>\r
102       /// (Required if any fields in the document have additional-actions dictionaries\r
103       /// containing a C entry; PDF 1.3) An array of indirect references to field dictionaries\r
104       /// with calculation actions, defining the calculation order in which their values will \r
105       /// be recalculated when the value of any field changes.\r
106       /// </summary>\r
107       [KeyInfo(KeyType.Array)]\r
108       public const string CO = "/CO";\r
109 \r
110       /// <summary>\r
111       /// (Optional) A document-wide default value for the DR attribute of variable text fields.\r
112       /// </summary>\r
113       [KeyInfo(KeyType.Dictionary | KeyType.Optional)]\r
114       public const string DR = "/DR";\r
115 \r
116       /// <summary>\r
117       /// (Optional) A document-wide default value for the DA attribute of variable text fields.\r
118       /// </summary>\r
119       [KeyInfo(KeyType.String | KeyType.Optional)]\r
120       public const string DA = "/DA";\r
121 \r
122       /// <summary>\r
123       /// (Optional) A document-wide default value for the Q attribute of variable text fields.\r
124       /// </summary>\r
125       [KeyInfo(KeyType.Integer | KeyType.Optional)]\r
126       public const string Q = "/Q";\r
127 \r
128       /// <summary>\r
129       /// Gets the KeysMeta for these keys.\r
130       /// </summary>\r
131       internal static DictionaryMeta Meta\r
132       {\r
133         get\r
134         {\r
135           if (Keys.meta == null)\r
136             Keys.meta = CreateMeta(typeof(Keys));\r
137           return Keys.meta;\r
138         }\r
139       }\r
140       static DictionaryMeta meta;\r
141     }\r
142 \r
143     /// <summary>\r
144     /// Gets the KeysMeta of this dictionary type.\r
145     /// </summary>\r
146     internal override DictionaryMeta Meta\r
147     {\r
148       get {return Keys.Meta;}\r
149     }\r
150   }\r
151 }\r