git-svn-id: https://pdfsharp.svn.codeplex.com/svn@39620 56d0cb2f-6006-4f69-a5a2-94740...
[pdfsharp:pdfsharp.git] / PDFsharp / code / PdfSharp / PdfSharp.Pdf / PdfViewerPreferences.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.Collections;\r
32 using System.Globalization;\r
33 using System.Text;\r
34 using System.IO;\r
35 using PdfSharp.Internal;\r
36 using PdfSharp;\r
37 \r
38 namespace PdfSharp.Pdf\r
39 {\r
40   /// <summary>\r
41   /// Represents the PDF document viewer preferences dictionary.\r
42   /// </summary>\r
43   public sealed class PdfViewerPreferences : PdfDictionary\r
44   {\r
45     internal PdfViewerPreferences(PdfDocument document)\r
46       : base(document)\r
47     { }\r
48 \r
49     /// <summary>\r
50     /// Initializes a new instance of the <see cref="PdfViewerPreferences"/> class.\r
51     /// </summary>\r
52     PdfViewerPreferences(PdfDictionary dict)\r
53       : base(dict)\r
54     { }\r
55 \r
56     /// <summary>\r
57     /// Gets or sets a value indicating whether to hide the viewer application\92s tool\r
58     ///  bars when the document is active.\r
59     /// </summary>\r
60     public bool HideToolbar\r
61     {\r
62       get { return Elements.GetBoolean(Keys.HideToolbar); }\r
63       set { Elements.SetBoolean(Keys.HideToolbar, value); }\r
64     }\r
65 \r
66     /// <summary>\r
67     /// Gets or sets a value indicating whether to hide the viewer application\92s\r
68     /// menu bar when the document is active.\r
69     /// </summary>\r
70     public bool HideMenubar\r
71     {\r
72       get { return Elements.GetBoolean(Keys.HideMenubar); }\r
73       set { Elements.SetBoolean(Keys.HideMenubar, value); }\r
74     }\r
75 \r
76     /// <summary>\r
77     /// Gets or sets a value indicating whether to hide user interface elements in\r
78     /// the document\92s window (such as scroll bars and navigation controls),\r
79     /// leaving only the document\92s contents displayed.\r
80     /// </summary>\r
81     public bool HideWindowUI\r
82     {\r
83       get { return Elements.GetBoolean(Keys.HideWindowUI); }\r
84       set { Elements.SetBoolean(Keys.HideWindowUI, value); }\r
85     }\r
86 \r
87     /// <summary>\r
88     /// Gets or sets a value indicating whether to resize the document\92s window to\r
89     /// fit the size of the first displayed page.\r
90     /// </summary>\r
91     public bool FitWindow\r
92     {\r
93       get { return Elements.GetBoolean(Keys.FitWindow); }\r
94       set { Elements.SetBoolean(Keys.FitWindow, value); }\r
95     }\r
96 \r
97     /// <summary>\r
98     /// Gets or sets a value indicating whether to position the document\92s window\r
99     /// in the center of the screen.\r
100     /// </summary>\r
101     public bool CenterWindow\r
102     {\r
103       get { return Elements.GetBoolean(Keys.CenterWindow); }\r
104       set { Elements.SetBoolean(Keys.CenterWindow, value); }\r
105     }\r
106 \r
107     /// <summary>\r
108     /// Gets or sets a value indicating whether the window\92s title bar\r
109     /// should display the document title taken from the Title entry of the document\r
110     /// information dictionary. If false, the title bar should instead display the name\r
111     /// of the PDF file containing the document.\r
112     /// </summary>\r
113     public bool DisplayDocTitle\r
114     {\r
115       get { return Elements.GetBoolean(Keys.DisplayDocTitle); }\r
116       set { Elements.SetBoolean(Keys.DisplayDocTitle, value); }\r
117     }\r
118 \r
119     /// <summary>\r
120     /// The predominant reading order for text: LeftToRight or RightToLeft \r
121     /// (including vertical writing systems, such as Chinese, Japanese, and Korean).\r
122     /// This entry has no direct effect on the document\92s contents or page numbering\r
123     /// but can be used to determine the relative positioning of pages when displayed \r
124     /// side by side or printed n-up. Default value: LeftToRight.\r
125     /// </summary>\r
126     public PdfReadingDirection? Direction\r
127     {\r
128       get\r
129       {\r
130         switch (Elements.GetName(Keys.Direction))\r
131         {\r
132           case "L2R":\r
133             return PdfReadingDirection.LeftToRight;\r
134 \r
135           case "R2L":\r
136             return PdfReadingDirection.RightToLeft;\r
137         }\r
138         return null;\r
139       }\r
140       set\r
141       {\r
142         if (value.HasValue)\r
143         {\r
144           switch (value.Value)\r
145           {\r
146             case PdfReadingDirection.RightToLeft:\r
147               Elements.SetName(Keys.Direction, "R2L");\r
148               break;\r
149 \r
150             default:\r
151               Elements.SetName(Keys.Direction, "L2R");\r
152               break;\r
153           }\r
154         }\r
155         else\r
156           Elements.Remove(Keys.Direction);\r
157       }\r
158     }\r
159 \r
160     /// <summary>\r
161     /// Predefined keys of this dictionary.\r
162     /// </summary>\r
163     internal sealed class Keys : KeysBase\r
164     {\r
165       /// <summary>\r
166       /// (Optional) A flag specifying whether to hide the viewer application\92s tool\r
167       ///  bars when the document is active. Default value: false.\r
168       /// </summary>\r
169       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
170       public const string HideToolbar = "/HideToolbar";\r
171 \r
172       /// <summary>\r
173       /// (Optional) A flag specifying whether to hide the viewer application\92s\r
174       /// menu bar when the document is active. Default value: false.\r
175       /// </summary>\r
176       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
177       public const string HideMenubar = "/HideMenubar";\r
178 \r
179       /// <summary>\r
180       /// (Optional) A flag specifying whether to hide user interface elements in\r
181       ///  the document\92s window (such as scroll bars and navigation controls),\r
182       ///  leaving only the document\92s contents displayed. Default value: false.\r
183       /// </summary>\r
184       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
185       public const string HideWindowUI = "/HideWindowUI";\r
186 \r
187       /// <summary>\r
188       /// (Optional) A flag specifying whether to resize the document\92s window to\r
189       /// fit the size of the first displayed page. Default value: false.\r
190       /// </summary>\r
191       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
192       public const string FitWindow = "/FitWindow";\r
193 \r
194       /// <summary>\r
195       /// (Optional) A flag specifying whether to position the document\92s window\r
196       /// in the center of the screen. Default value: false.\r
197       /// </summary>\r
198       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
199       public const string CenterWindow = "/CenterWindow";\r
200 \r
201       /// <summary>\r
202       /// (Optional; PDF 1.4) A flag specifying whether the window\92s title bar\r
203       /// should display the document title taken from the Title entry of the document\r
204       /// information dictionary. If false, the title bar should instead display the name\r
205       /// of the PDF file containing the document. Default value: false.\r
206       /// </summary>\r
207       [KeyInfo(KeyType.Boolean | KeyType.Optional)]\r
208       public const string DisplayDocTitle = "/DisplayDocTitle";\r
209 \r
210       /// <summary>\r
211       /// (Optional) The document\92s page mode, specifying how to display the document on \r
212       /// exiting full-screen mode:\r
213       ///   UseNone     Neither document outline nor thumbnail images visible\r
214       ///   UseOutlines Document outline visible\r
215       ///   UseThumbs   Thumbnail images visible\r
216       ///   UseOC       Optional content group panel visible\r
217       /// This entry is meaningful only if the value of the PageMode entry in the catalog \r
218       /// dictionary is FullScreen; it is ignored otherwise. Default value: UseNone.\r
219       /// </summary>\r
220       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
221       public const string NonFullScreenPageMode = "/NonFullScreenPageMode";\r
222 \r
223       /// <summary>\r
224       /// (Optional; PDF 1.3) The predominant reading order for text:\r
225       ///   L2R  Left to right\r
226       ///   R2L  Right to left (including vertical writing systems, such as Chinese, Japanese, and Korean)\r
227       /// This entry has no direct effect on the document\92s contents or page numbering\r
228       /// but can be used to determine the relative positioning of pages when displayed \r
229       /// side by side or printed n-up. Default value: L2R.\r
230       /// </summary>\r
231       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
232       public const string Direction = "/Direction";\r
233 \r
234       /// <summary>\r
235       /// (Optional; PDF 1.4) The name of the page boundary representing the area of a page\r
236       /// to be displayed when viewing the document on the screen. The value is the key \r
237       /// designating the relevant page boundary in the page object. If the specified page\r
238       /// boundary is not defined in the page object, its default value is used.\r
239       /// Default value: CropBox.\r
240       /// Note: This entry is intended primarily for use by prepress applications that\r
241       /// interpret or manipulate the page boundaries as described in Section 10.10.1, \93Page Boundaries.\94\r
242       /// Most PDF consumer applications disregard it.\r
243       /// </summary>\r
244       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
245       public const string ViewArea = "/ViewArea";\r
246 \r
247       /// <summary>\r
248       /// (Optional; PDF 1.4) The name of the page boundary to which the contents of a page \r
249       /// are to be clipped when viewing the document on the screen. The value is the key \r
250       /// designating the relevant page boundary in the page object. If the specified page \r
251       /// boundary is not defined in the page object, its default value is used.\r
252       /// Default value: CropBox.\r
253       /// Note: This entry is intended primarily for use by prepress applications that\r
254       /// interpret or manipulate the page boundaries as described in Section 10.10.1, \93Page Boundaries.\94\r
255       /// Most PDF consumer applications disregard it.\r
256       /// </summary>\r
257       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
258       public const string ViewClip = "/ViewClip";\r
259 \r
260       /// <summary>\r
261       /// (Optional; PDF 1.4) The name of the page boundary representing the area of a page\r
262       /// to be rendered when printing the document. The value is the key designating the \r
263       /// relevant page boundary in the page object. If the specified page boundary is not \r
264       /// defined in the page object, its default value is used.\r
265       /// Default value: CropBox.\r
266       /// Note: This entry is intended primarily for use by prepress applications that\r
267       /// interpret or manipulate the page boundaries as described in Section 10.10.1, \93Page Boundaries.\94\r
268       /// Most PDF consumer applications disregard it.\r
269       /// </summary>\r
270       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
271       public const string PrintArea = "/PrintArea";\r
272 \r
273       /// <summary>\r
274       /// (Optional; PDF 1.4) The name of the page boundary to which the contents of a page\r
275       /// are to be clipped when printing the document. The value is the key designating the \r
276       /// relevant page boundary in the page object. If the specified page boundary is not\r
277       /// defined in the page object, its default value is used.\r
278       /// Default value: CropBox.\r
279       /// Note: This entry is intended primarily for use by prepress applications that interpret\r
280       /// or manipulate the page boundaries. Most PDF consumer applications disregard it.\r
281       /// </summary>\r
282       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
283       public const string PrintClip = "/PrintClip";\r
284 \r
285       /// <summary>\r
286       /// (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is\r
287       /// displayed for this document. Valid values are None, which indicates that the print\r
288       /// dialog should reflect no page scaling, and AppDefault, which indicates that \r
289       /// applications should use the current print scaling. If this entry has an unrecognized\r
290       /// value, applications should use the current print scaling.\r
291       /// Default value: AppDefault.\r
292       /// Note: If the print dialog is suppressed and its parameters are provided directly\r
293       /// by the application, the value of this entry should still be used.\r
294       /// </summary>\r
295       [KeyInfo(KeyType.Name | KeyType.Optional)]\r
296       public const string PrintScaling = "/PrintScaling";\r
297 \r
298       /// <summary>\r
299       /// Gets the KeysMeta for these keys.\r
300       /// </summary>\r
301       public static DictionaryMeta Meta\r
302       {\r
303         get\r
304         {\r
305           if (Keys.meta == null)\r
306             Keys.meta = CreateMeta(typeof(Keys));\r
307           return Keys.meta;\r
308         }\r
309       }\r
310       static DictionaryMeta meta;\r
311     }\r
312 \r
313     /// <summary>\r
314     /// Gets the KeysMeta of this dictionary type.\r
315     /// </summary>\r
316     internal override DictionaryMeta Meta\r
317     {\r
318       get { return Keys.Meta; }\r
319     }\r
320   }\r
321 }