using System; using System.Collections; using System.util; using iTextSharp.text.factories; /* * $Id: Annotation.cs,v 1.12 2008/05/13 11:25:08 psoares33 Exp $ * * * Copyright 1999, 2000, 2001, 2002 by Bruno Lowagie. * * The contents of this file are subject to the Mozilla Public License Version 1.1 * (the "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the License. * * The Original Code is 'iText, a free JAVA-PDF library'. * * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie. * All Rights Reserved. * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved. * * Contributor(s): all the names of the contributors are added in the source code * where applicable. * * Alternatively, the contents of this file may be used under the terms of the * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the * provisions of LGPL are applicable instead of those above. If you wish to * allow use of your version of this file only under the terms of the LGPL * License and not to allow others to use your version of this file under * the MPL, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the LGPL. * If you do not delete the provisions above, a recipient may use your version * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. * * This library is free software; you can redistribute it and/or modify it * under the terms of the MPL as stated above or under the terms of the GNU * Library General Public License as published by the Free Software Foundation; * either version 2 of the License, or any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more * details. * * If you didn't download this code from the following link, you should check if * you aren't using an obsolete version: * http://www.lowagie.com/iText/ */ namespace iTextSharp.text { /// /// An Annotation is a little note that can be added to a page /// on a document. /// /// /// public class Annotation : IElement { // membervariables /// This is a possible annotation type. public const int TEXT = 0; /// This is a possible annotation type. public const int URL_NET = 1; /// This is a possible annotation type. public const int URL_AS_STRING = 2; /// This is a possible annotation type. public const int FILE_DEST = 3; /// This is a possible annotation type. public const int FILE_PAGE = 4; /// This is a possible annotation type. public const int NAMED_DEST = 5; /// This is a possible annotation type. public const int LAUNCH = 6; /// This is a possible annotation type. public const int SCREEN = 7; /// This is a possible attribute. public const string TITLE = "title"; /// This is a possible attribute. public const string CONTENT = "content"; /// This is a possible attribute. public const string URL = "url"; /// This is a possible attribute. public const string FILE = "file"; /// This is a possible attribute. public const string DESTINATION = "destination"; /// This is a possible attribute. public const string PAGE = "page"; /// This is a possible attribute. public const string NAMED = "named"; /// This is a possible attribute. public const string APPLICATION = "application"; /// This is a possible attribute. public const string PARAMETERS = "parameters"; /// This is a possible attribute. public const string OPERATION = "operation"; /// This is a possible attribute. public const string DEFAULTDIR = "defaultdir"; /// This is a possible attribute. public const string LLX = "llx"; /// This is a possible attribute. public const string LLY = "lly"; /// This is a possible attribute. public const string URX = "urx"; /// This is a possible attribute. public const string URY = "ury"; /// This is a possible attribute. public const string MIMETYPE = "mime"; /// This is the type of annotation. protected int annotationtype; /// This is the title of the Annotation. protected Hashtable annotationAttributes = new Hashtable(); /// This is the lower left x-value private float llx = float.NaN; /// This is the lower left y-value private float lly = float.NaN; /// This is the upper right x-value private float urx = float.NaN; /// This is the upper right y-value private float ury = float.NaN; // constructors /// /// Constructs an Annotation with a certain title and some text. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value private Annotation(float llx, float lly, float urx, float ury) { this.llx = llx; this.lly = lly; this.urx = urx; this.ury = ury; } public Annotation(Annotation an) { annotationtype = an.annotationtype; annotationAttributes = an.annotationAttributes; llx = an.llx; lly = an.lly; urx = an.urx; ury = an.ury; } /// /// Constructs an Annotation with a certain title and some text. /// /// the title of the annotation /// the content of the annotation public Annotation(string title, string text) { annotationtype = TEXT; annotationAttributes[TITLE] = title; annotationAttributes[CONTENT] = text; } /// /// Constructs an Annotation with a certain title and some text. /// /// the title of the annotation /// the content of the annotation /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value public Annotation(string title, string text, float llx, float lly, float urx, float ury) : this(llx, lly, urx, ury) { annotationtype = TEXT; annotationAttributes[TITLE] = title; annotationAttributes[CONTENT] = text; } /// /// Constructs an Annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// the external reference public Annotation(float llx, float lly, float urx, float ury, Uri url) : this(llx, lly, urx, ury) { annotationtype = URL_NET; annotationAttributes[URL] = url; } /// /// Constructs an Annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// the external reference public Annotation(float llx, float lly, float urx, float ury, string url) : this(llx, lly, urx, ury) { annotationtype = URL_AS_STRING; annotationAttributes[FILE] = url; } /// /// Constructs an Annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// an external PDF file /// the destination in this file public Annotation(float llx, float lly, float urx, float ury, string file, string dest) : this(llx, lly, urx, ury) { annotationtype = FILE_DEST; annotationAttributes[FILE] = file; annotationAttributes[DESTINATION] = dest; } /// /// Creates a Screen anotation to embed media clips /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// path to the media clip file /// mime type of the media /// if true play on display of the page public Annotation(float llx, float lly, float urx, float ury, string moviePath, string mimeType, bool showOnDisplay) : this(llx, lly, urx, ury) { annotationtype = SCREEN; annotationAttributes[FILE] = moviePath; annotationAttributes[MIMETYPE] = mimeType; annotationAttributes[PARAMETERS] = new bool[] {false /* embedded */, showOnDisplay }; } /// /// Constructs an Annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// an external PDF file /// a page number in this file public Annotation(float llx, float lly, float urx, float ury, string file, int page) : this(llx, lly, urx, ury) { annotationtype = FILE_PAGE; annotationAttributes[FILE] = file; annotationAttributes[PAGE] = page; } /// /// Constructs an Annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// a named destination in this file /// /// Has nine overloads. /// public Annotation(float llx, float lly, float urx, float ury, int named) : this(llx, lly, urx, ury) { annotationtype = NAMED_DEST; annotationAttributes[NAMED] = named; } /// /// Constructs an Annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value /// an external application /// parameters to pass to this application /// the operation to pass to this application /// the default directory to run this application in public Annotation(float llx, float lly, float urx, float ury, string application, string parameters, string operation, string defaultdir) : this(llx, lly, urx, ury) { annotationtype = LAUNCH; annotationAttributes[APPLICATION] = application; annotationAttributes[PARAMETERS] = parameters; annotationAttributes[OPERATION] = operation; annotationAttributes[DEFAULTDIR] = defaultdir; } // implementation of the Element-methods /// /// Gets the type of the text element /// public int Type { get { return Element.ANNOTATION; } } // methods /// /// Processes the element by adding it (or the different parts) to an /// IElementListener. /// /// an IElementListener /// true if the element was process successfully public bool Process(IElementListener listener) { try { return listener.Add(this); } catch (DocumentException) { return false; } } /// /// Gets all the chunks in this element. /// /// an ArrayList public ArrayList Chunks { get { return new ArrayList(); } } // methods /// /// Sets the dimensions of this annotation. /// /// the lower left x-value /// the lower left y-value /// the upper right x-value /// the upper right y-value public void SetDimensions (float llx, float lly, float urx, float ury) { this.llx = llx; this.lly = lly; this.urx = urx; this.ury = ury; } // methods to retrieve information /// /// Returns the lower left x-value. /// /// a value public float GetLlx() { return llx; } /// /// Returns the lower left y-value. /// /// a value public float GetLly() { return lly; } /// /// Returns the uppper right x-value. /// /// a value public float GetUrx() { return urx; } /// /// Returns the uppper right y-value. /// /// a value public float GetUry() { return ury; } /// /// Returns the lower left x-value. /// /// the default value /// a value public float GetLlx(float def) { if (float.IsNaN(llx)) return def; return llx; } /// /// Returns the lower left y-value. /// /// the default value /// a value public float GetLly(float def) { if (float.IsNaN(lly)) return def; return lly; } /// /// Returns the upper right x-value. /// /// the default value /// a value public float GetUrx(float def) { if (float.IsNaN(urx)) return def; return urx; } /// /// Returns the upper right y-value. /// /// the default value /// a value public float GetUry(float def) { if (float.IsNaN(ury)) return def; return ury; } /// /// Returns the type of this Annotation. /// /// a type public int AnnotationType { get { return annotationtype; } } /// /// Returns the title of this Annotation. /// /// a name public string Title { get { string s = (string)annotationAttributes[TITLE]; if (s == null) s = ""; return s; } } /// /// Gets the content of this Annotation. /// /// a reference public string Content { get { string s = (string)annotationAttributes[CONTENT]; if (s == null) s = ""; return s; } } /// /// Gets the content of this Annotation. /// /// a reference public Hashtable Attributes { get { return annotationAttributes; } } /** * @see com.lowagie.text.Element#isContent() * @since iText 2.0.8 */ public bool IsContent() { return true; } /** * @see com.lowagie.text.Element#isNestable() * @since iText 2.0.8 */ public bool IsNestable() { return true; } public override string ToString() { return base.ToString(); } } }