Initial Commit
This commit is contained in:
213
iTechSharp/iTextSharp/text/html/HtmlEncoder.cs
Normal file
213
iTechSharp/iTextSharp/text/html/HtmlEncoder.cs
Normal file
@@ -0,0 +1,213 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Drawing;
|
||||
|
||||
using iTextSharp.text;
|
||||
|
||||
/*
|
||||
* $Id: HtmlEncoder.cs,v 1.6 2008/05/13 11:25:15 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.html {
|
||||
/**
|
||||
* This class converts a <CODE>String</CODE> to the HTML-format of a String.
|
||||
* <P>
|
||||
* To convert the <CODE>String</CODE>, each character is examined:
|
||||
* <UL>
|
||||
* <LI>ASCII-characters from 000 till 031 are represented as &#xxx;<BR>
|
||||
* (with xxx = the value of the character)
|
||||
* <LI>ASCII-characters from 032 t/m 127 are represented by the character itself, except for:
|
||||
* <UL>
|
||||
* <LI>'\n' becomes <BR>\n
|
||||
* <LI>" becomes &quot;
|
||||
* <LI>& becomes &amp;
|
||||
* <LI>< becomes &lt;
|
||||
* <LI>> becomes &gt;
|
||||
* </UL>
|
||||
* <LI>ASCII-characters from 128 till 255 are represented as &#xxx;<BR>
|
||||
* (with xxx = the value of the character)
|
||||
* </UL>
|
||||
* <P>
|
||||
* Example:
|
||||
* <P><BLOCKQUOTE><PRE>
|
||||
* String htmlPresentation = HtmlEncoder.Encode("Marie-Thérèse Sørensen");
|
||||
* </PRE></BLOCKQUOTE><P>
|
||||
* for more info: see O'Reilly; "HTML: The Definitive Guide" (page 164)
|
||||
*
|
||||
* @author mario.maccarini@rug.ac.be
|
||||
*/
|
||||
|
||||
public sealed class HtmlEncoder {
|
||||
|
||||
// membervariables
|
||||
|
||||
/** List with the HTML translation of all the characters. */
|
||||
private static String[] htmlCode = new String[256];
|
||||
|
||||
static HtmlEncoder() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
htmlCode[i] = "�" + i + ";";
|
||||
}
|
||||
|
||||
for (int i = 10; i < 32; i++) {
|
||||
htmlCode[i] = "�" + i + ";";
|
||||
}
|
||||
|
||||
for (int i = 32; i < 128; i++) {
|
||||
htmlCode[i] = ((char)i).ToString();
|
||||
}
|
||||
|
||||
// Special characters
|
||||
htmlCode['\t'] = "\t";
|
||||
htmlCode['\n'] = "<" + HtmlTags.NEWLINE + " />\n";
|
||||
htmlCode['\"'] = """; // double quote
|
||||
htmlCode['&'] = "&"; // ampersand
|
||||
htmlCode['<'] = "<"; // lower than
|
||||
htmlCode['>'] = ">"; // greater than
|
||||
|
||||
for (int i = 128; i < 256; i++) {
|
||||
htmlCode[i] = "&#" + i + ";";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// constructors
|
||||
|
||||
/**
|
||||
* This class will never be constructed.
|
||||
* <P>
|
||||
* HtmlEncoder only contains static methods.
|
||||
*/
|
||||
|
||||
private HtmlEncoder () { }
|
||||
|
||||
// methods
|
||||
|
||||
/**
|
||||
* Converts a <CODE>String</CODE> to the HTML-format of this <CODE>String</CODE>.
|
||||
*
|
||||
* @param string The <CODE>String</CODE> to convert
|
||||
* @return a <CODE>String</CODE>
|
||||
*/
|
||||
|
||||
public static String Encode(String str) {
|
||||
int n = str.Length;
|
||||
char character;
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
// loop over all the characters of the String.
|
||||
for (int i = 0; i < n; i++) {
|
||||
character = str[i];
|
||||
// the Htmlcode of these characters are added to a StringBuilder one by one
|
||||
if (character < 256) {
|
||||
buffer.Append(htmlCode[character]);
|
||||
}
|
||||
else {
|
||||
// Improvement posted by Joachim Eyrich
|
||||
buffer.Append("&#").Append((int)character).Append(';');
|
||||
}
|
||||
}
|
||||
return buffer.ToString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a <CODE>Color</CODE> into a HTML representation of this <CODE>Color</CODE>.
|
||||
*
|
||||
* @param color the <CODE>Color</CODE> that has to be converted.
|
||||
* @return the HTML representation of this <COLOR>Color</COLOR>
|
||||
*/
|
||||
|
||||
public static String Encode(Color color) {
|
||||
StringBuilder buffer = new StringBuilder("#");
|
||||
if (color.R < 16) {
|
||||
buffer.Append('0');
|
||||
}
|
||||
buffer.Append(System.Convert.ToString(color.R, 16));
|
||||
if (color.G < 16) {
|
||||
buffer.Append('0');
|
||||
}
|
||||
buffer.Append(System.Convert.ToString(color.G, 16));
|
||||
if (color.B < 16) {
|
||||
buffer.Append('0');
|
||||
}
|
||||
buffer.Append(System.Convert.ToString(color.B, 16));
|
||||
return buffer.ToString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates the alignment value.
|
||||
*
|
||||
* @param alignment the alignment value
|
||||
* @return the translated value
|
||||
*/
|
||||
|
||||
public static String GetAlignment(int alignment) {
|
||||
switch (alignment) {
|
||||
case Element.ALIGN_LEFT:
|
||||
return HtmlTags.ALIGN_LEFT;
|
||||
case Element.ALIGN_CENTER:
|
||||
return HtmlTags.ALIGN_CENTER;
|
||||
case Element.ALIGN_RIGHT:
|
||||
return HtmlTags.ALIGN_RIGHT;
|
||||
case Element.ALIGN_JUSTIFIED:
|
||||
case Element.ALIGN_JUSTIFIED_ALL:
|
||||
return HtmlTags.ALIGN_JUSTIFIED;
|
||||
case Element.ALIGN_TOP:
|
||||
return HtmlTags.ALIGN_TOP;
|
||||
case Element.ALIGN_MIDDLE:
|
||||
return HtmlTags.ALIGN_MIDDLE;
|
||||
case Element.ALIGN_BOTTOM:
|
||||
return HtmlTags.ALIGN_BOTTOM;
|
||||
case Element.ALIGN_BASELINE:
|
||||
return HtmlTags.ALIGN_BASELINE;
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
239
iTechSharp/iTextSharp/text/html/HtmlParser.cs
Normal file
239
iTechSharp/iTextSharp/text/html/HtmlParser.cs
Normal file
@@ -0,0 +1,239 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Collections;
|
||||
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.xml;
|
||||
|
||||
/*
|
||||
* Copyright 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.html {
|
||||
|
||||
/// <summary>
|
||||
/// This class can be used to parse an XML file.
|
||||
/// </summary>
|
||||
public class HtmlParser : XmlParser{
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an XmlParser.
|
||||
/// </summary>
|
||||
public HtmlParser() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
public override void Go(IDocListener document, XmlDocument xDoc) {
|
||||
parser = new ITextmyHtmlHandler(document);
|
||||
parser.Parse(xDoc);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
public override void Go(IDocListener document, String file) {
|
||||
parser = new ITextmyHtmlHandler(document);
|
||||
parser.Parse(file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given XmlTextReader.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="reader"></param>
|
||||
public override void Go(IDocListener document, XmlTextReader reader) {
|
||||
parser = new ITextmyHtmlHandler(document);
|
||||
parser.Parse(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public override void Go(IDocListener document, XmlDocument xDoc, XmlDocument xTagmap) {
|
||||
parser = new ITextmyHtmlHandler(document, new TagMap(xTagmap));
|
||||
parser.Parse(xDoc);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given XmlTextReader.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public override void Go(IDocListener document, XmlTextReader reader, String tagmap) {
|
||||
parser = new ITextmyHtmlHandler(document, new TagMap(tagmap));
|
||||
parser.Parse(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public override void Go(IDocListener document, String file, String tagmap) {
|
||||
parser = new ITextmyHtmlHandler(document, new TagMap(tagmap));
|
||||
parser.Parse(file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public override void Go(IDocListener document, String file, Hashtable tagmap) {
|
||||
parser = new ITextmyHtmlHandler(document, tagmap);
|
||||
parser.Parse(file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given XmlTextReader.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public override void Go(IDocListener document, XmlTextReader reader, Hashtable tagmap) {
|
||||
parser = new ITextmyHtmlHandler(document, tagmap);
|
||||
parser.Parse(reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
public new static void Parse(IDocListener document, XmlDocument xDoc) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, xDoc);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
public new static void Parse(IDocListener document, String file) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, file);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given XmlTextReader.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="reader"></param>
|
||||
public new static void Parse(IDocListener document, XmlTextReader reader) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, reader);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public new static void Parse(IDocListener document, XmlDocument xDoc, XmlDocument xTagmap) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, xDoc, xTagmap);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public new static void Parse(IDocListener document, String file, String tagmap) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, file, tagmap);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given file.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="file"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public new static void Parse(IDocListener document, String file, Hashtable tagmap) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, file, tagmap);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given XmlTextReader.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public new static void Parse(IDocListener document, XmlTextReader reader, String tagmap) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, reader, tagmap);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses a given XmlTextReader.
|
||||
/// </summary>
|
||||
/// <param name="document"></param>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="tagmap"></param>
|
||||
public new static void Parse(IDocListener document, XmlTextReader reader, Hashtable tagmap) {
|
||||
HtmlParser p = new HtmlParser();
|
||||
p.Go(document, reader, tagmap);
|
||||
}
|
||||
}
|
||||
}
|
102
iTechSharp/iTextSharp/text/html/HtmlPeer.cs
Normal file
102
iTechSharp/iTextSharp/text/html/HtmlPeer.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Collections;
|
||||
using iTextSharp.text.xml;
|
||||
using System.util;
|
||||
|
||||
/*
|
||||
* $Id: HtmlPeer.cs,v 1.4 2008/05/13 11:25:15 psoares33 Exp $
|
||||
*
|
||||
*
|
||||
* Copyright 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.html {
|
||||
|
||||
/**
|
||||
* This interface is implemented by the peer of all the iText objects.
|
||||
*/
|
||||
|
||||
public class HtmlPeer : XmlPeer {
|
||||
|
||||
/**
|
||||
* Creates a XmlPeer.
|
||||
* @param name the iText name of the tag
|
||||
* @param alias the Html name of the tag
|
||||
*/
|
||||
|
||||
public HtmlPeer(String name, String alias) : base(name, alias.ToLower(CultureInfo.InvariantCulture)) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an alias for an attribute.
|
||||
*
|
||||
* @param name the iText tagname
|
||||
* @param alias the custom tagname
|
||||
*/
|
||||
|
||||
public override void AddAlias(String name, String alias) {
|
||||
attributeAliases.Add(alias.ToLower(CultureInfo.InvariantCulture), name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see com.lowagie.text.xml.XmlPeer#getAttributes(org.xml.sax.Attributes)
|
||||
*/
|
||||
public override Properties GetAttributes(Hashtable attrs) {
|
||||
Properties attributes = new Properties();
|
||||
attributes.AddAll(attributeValues);
|
||||
if (defaultContent != null) {
|
||||
attributes[ElementTags.ITEXT] = defaultContent;
|
||||
}
|
||||
if (attrs != null) {
|
||||
foreach (string key in attrs.Keys) {
|
||||
attributes.Add(GetName(key).ToLower(CultureInfo.InvariantCulture), (string)attrs[key]);
|
||||
}
|
||||
}
|
||||
return attributes;
|
||||
}
|
||||
}
|
||||
}
|
289
iTechSharp/iTextSharp/text/html/HtmlTagMap.cs
Normal file
289
iTechSharp/iTextSharp/text/html/HtmlTagMap.cs
Normal file
@@ -0,0 +1,289 @@
|
||||
using System;
|
||||
using System.util;
|
||||
using System.Collections;
|
||||
using iTextSharp.text;
|
||||
|
||||
/*
|
||||
* $Id: HtmlTagMap.cs,v 1.4 2008/05/13 11:25:15 psoares33 Exp $
|
||||
*
|
||||
*
|
||||
* Copyright 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.html {
|
||||
|
||||
/**
|
||||
* The <CODE>Tags</CODE>-class maps several XHTML-tags to iText-objects.
|
||||
*/
|
||||
|
||||
public class HtmlTagMap : Hashtable {
|
||||
|
||||
/**
|
||||
* Constructs an HtmlTagMap.
|
||||
*/
|
||||
|
||||
public HtmlTagMap() {
|
||||
HtmlPeer peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.ITEXT, HtmlTags.HTML);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.SPAN);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.CHUNK, HtmlTags.CHUNK);
|
||||
peer.AddAlias(ElementTags.FONT, HtmlTags.FONT);
|
||||
peer.AddAlias(ElementTags.SIZE, HtmlTags.SIZE);
|
||||
peer.AddAlias(ElementTags.COLOR, HtmlTags.COLOR);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.ANCHOR, HtmlTags.ANCHOR);
|
||||
peer.AddAlias(ElementTags.NAME, HtmlTags.NAME);
|
||||
peer.AddAlias(ElementTags.REFERENCE, HtmlTags.REFERENCE);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.PARAGRAPH);
|
||||
peer.AddAlias(ElementTags.ALIGN, HtmlTags.ALIGN);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.DIV);
|
||||
peer.AddAlias(ElementTags.ALIGN, HtmlTags.ALIGN);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.H[0]);
|
||||
peer.AddValue(ElementTags.SIZE, "20");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.H[1]);
|
||||
peer.AddValue(ElementTags.SIZE, "18");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.H[2]);
|
||||
peer.AddValue(ElementTags.SIZE, "16");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.H[3]);
|
||||
peer.AddValue(ElementTags.SIZE, "14");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.H[4]);
|
||||
peer.AddValue(ElementTags.SIZE, "12");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PARAGRAPH, HtmlTags.H[5]);
|
||||
peer.AddValue(ElementTags.SIZE, "10");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.LIST, HtmlTags.ORDEREDLIST);
|
||||
peer.AddValue(ElementTags.NUMBERED, "true");
|
||||
peer.AddValue(ElementTags.SYMBOLINDENT, "20");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.LIST, HtmlTags.UNORDEREDLIST);
|
||||
peer.AddValue(ElementTags.NUMBERED, "false");
|
||||
peer.AddValue(ElementTags.SYMBOLINDENT, "20");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.LISTITEM, HtmlTags.LISTITEM);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.I);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_ITALIC);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.EM);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_ITALIC);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.B);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_BOLD);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.STRONG);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_BOLD);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.S);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_LINETHROUGH);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.CODE);
|
||||
peer.AddValue(ElementTags.FONT, FontFactory.COURIER);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.VAR);
|
||||
peer.AddValue(ElementTags.FONT, FontFactory.COURIER);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_ITALIC);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.PHRASE, HtmlTags.U);
|
||||
peer.AddValue(ElementTags.STYLE, Markup.CSS_VALUE_UNDERLINE);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.CHUNK, HtmlTags.SUP);
|
||||
peer.AddValue(ElementTags.SUBSUPSCRIPT, "6.0");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.CHUNK, HtmlTags.SUB);
|
||||
peer.AddValue(ElementTags.SUBSUPSCRIPT, "-6.0");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.HORIZONTALRULE, HtmlTags.HORIZONTALRULE);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.TABLE, HtmlTags.TABLE);
|
||||
peer.AddAlias(ElementTags.WIDTH, HtmlTags.WIDTH);
|
||||
peer.AddAlias(ElementTags.BACKGROUNDCOLOR, HtmlTags.BACKGROUNDCOLOR);
|
||||
peer.AddAlias(ElementTags.BORDERCOLOR, HtmlTags.BORDERCOLOR);
|
||||
peer.AddAlias(ElementTags.COLUMNS, HtmlTags.COLUMNS);
|
||||
peer.AddAlias(ElementTags.CELLPADDING, HtmlTags.CELLPADDING);
|
||||
peer.AddAlias(ElementTags.CELLSPACING, HtmlTags.CELLSPACING);
|
||||
peer.AddAlias(ElementTags.BORDERWIDTH, HtmlTags.BORDERWIDTH);
|
||||
peer.AddAlias(ElementTags.ALIGN, HtmlTags.ALIGN);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.ROW, HtmlTags.ROW);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.CELL, HtmlTags.CELL);
|
||||
peer.AddAlias(ElementTags.WIDTH, HtmlTags.WIDTH);
|
||||
peer.AddAlias(ElementTags.BACKGROUNDCOLOR, HtmlTags.BACKGROUNDCOLOR);
|
||||
peer.AddAlias(ElementTags.BORDERCOLOR, HtmlTags.BORDERCOLOR);
|
||||
peer.AddAlias(ElementTags.COLSPAN, HtmlTags.COLSPAN);
|
||||
peer.AddAlias(ElementTags.ROWSPAN, HtmlTags.ROWSPAN);
|
||||
peer.AddAlias(ElementTags.NOWRAP, HtmlTags.NOWRAP);
|
||||
peer.AddAlias(ElementTags.HORIZONTALALIGN, HtmlTags.HORIZONTALALIGN);
|
||||
peer.AddAlias(ElementTags.VERTICALALIGN, HtmlTags.VERTICALALIGN);
|
||||
peer.AddValue(ElementTags.HEADER, "false");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.CELL, HtmlTags.HEADERCELL);
|
||||
peer.AddAlias(ElementTags.WIDTH, HtmlTags.WIDTH);
|
||||
peer.AddAlias(ElementTags.BACKGROUNDCOLOR, HtmlTags.BACKGROUNDCOLOR);
|
||||
peer.AddAlias(ElementTags.BORDERCOLOR, HtmlTags.BORDERCOLOR);
|
||||
peer.AddAlias(ElementTags.COLSPAN, HtmlTags.COLSPAN);
|
||||
peer.AddAlias(ElementTags.ROWSPAN, HtmlTags.ROWSPAN);
|
||||
peer.AddAlias(ElementTags.NOWRAP, HtmlTags.NOWRAP);
|
||||
peer.AddAlias(ElementTags.HORIZONTALALIGN, HtmlTags.HORIZONTALALIGN);
|
||||
peer.AddAlias(ElementTags.VERTICALALIGN, HtmlTags.VERTICALALIGN);
|
||||
peer.AddValue(ElementTags.HEADER, "true");
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.IMAGE, HtmlTags.IMAGE);
|
||||
peer.AddAlias(ElementTags.URL, HtmlTags.URL);
|
||||
peer.AddAlias(ElementTags.ALT, HtmlTags.ALT);
|
||||
peer.AddAlias(ElementTags.PLAINWIDTH, HtmlTags.PLAINWIDTH);
|
||||
peer.AddAlias(ElementTags.PLAINHEIGHT, HtmlTags.PLAINHEIGHT);
|
||||
this[peer.Alias] = peer;
|
||||
|
||||
peer = new HtmlPeer(ElementTags.NEWLINE, HtmlTags.NEWLINE);
|
||||
this[peer.Alias] = peer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is the root tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is HTML or html
|
||||
*/
|
||||
public static bool IsHtml(String tag) {
|
||||
return Util.EqualsIgnoreCase(HtmlTags.HTML, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is the head tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is HEAD or head
|
||||
*/
|
||||
public static bool IsHead(String tag) {
|
||||
return Util.EqualsIgnoreCase(HtmlTags.HEAD, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is the meta tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is META or meta
|
||||
*/
|
||||
public static bool IsMeta(String tag) {
|
||||
return Util.EqualsIgnoreCase(HtmlTags.META, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is the linl tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is LINK or link
|
||||
*/
|
||||
public static bool IsLink(String tag) {
|
||||
return Util.EqualsIgnoreCase(HtmlTags.LINK, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is the title tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is TITLE or title
|
||||
*/
|
||||
public static bool IsTitle(String tag) {
|
||||
return Util.EqualsIgnoreCase(HtmlTags.TITLE, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is the root tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is BODY or body
|
||||
*/
|
||||
public static bool IsBody(String tag) {
|
||||
return Util.EqualsIgnoreCase(HtmlTags.BODY, tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if this is a special tag.
|
||||
* @param tag a tagvalue
|
||||
* @return true if tag is a HTML, HEAD, META, LINK or BODY tag (case insensitive)
|
||||
*/
|
||||
public static bool IsSpecialTag(String tag) {
|
||||
return IsHtml(tag) || IsHead(tag) || IsMeta(tag) || IsLink(tag) || IsBody(tag);
|
||||
}
|
||||
}
|
||||
}
|
325
iTechSharp/iTextSharp/text/html/HtmlTags.cs
Normal file
325
iTechSharp/iTextSharp/text/html/HtmlTags.cs
Normal file
@@ -0,0 +1,325 @@
|
||||
using System;
|
||||
|
||||
/*
|
||||
* $Id: HtmlTags.cs,v 1.4 2008/05/13 11:25:15 psoares33 Exp $
|
||||
*
|
||||
*
|
||||
* Copyright 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.html {
|
||||
|
||||
/**
|
||||
* A class that contains all the possible tagnames and their attributes.
|
||||
*/
|
||||
|
||||
public class HtmlTags {
|
||||
|
||||
/** the root tag. */
|
||||
public const string HTML = "html";
|
||||
|
||||
/** the head tag */
|
||||
public const string HEAD = "head";
|
||||
|
||||
/** This is a possible HTML attribute for the HEAD tag. */
|
||||
public const string CONTENT = "content";
|
||||
|
||||
/** the meta tag */
|
||||
public const string META = "meta";
|
||||
|
||||
/** attribute of the root tag */
|
||||
public const string SUBJECT = "subject";
|
||||
|
||||
/** attribute of the root tag */
|
||||
public const string KEYWORDS = "keywords";
|
||||
|
||||
/** attribute of the root tag */
|
||||
public const string AUTHOR = "author";
|
||||
|
||||
/** the title tag. */
|
||||
public const string TITLE = "title";
|
||||
|
||||
/** the script tag. */
|
||||
public const string SCRIPT = "script";
|
||||
|
||||
/** This is a possible HTML attribute for the SCRIPT tag. */
|
||||
public const string LANGUAGE = "language";
|
||||
|
||||
/** This is a possible value for the LANGUAGE attribute. */
|
||||
public const string JAVASCRIPT = "JavaScript";
|
||||
|
||||
/** the body tag. */
|
||||
public const string BODY = "body";
|
||||
|
||||
/** This is a possible HTML attribute for the BODY tag */
|
||||
public const string JAVASCRIPT_ONLOAD = "onLoad";
|
||||
|
||||
/** This is a possible HTML attribute for the BODY tag */
|
||||
public const string JAVASCRIPT_ONUNLOAD = "onUnLoad";
|
||||
|
||||
/** This is a possible HTML attribute for the BODY tag. */
|
||||
public const string TOPMARGIN = "topmargin";
|
||||
|
||||
/** This is a possible HTML attribute for the BODY tag. */
|
||||
public const string BOTTOMMARGIN = "bottommargin";
|
||||
|
||||
/** This is a possible HTML attribute for the BODY tag. */
|
||||
public const string LEFTMARGIN = "leftmargin";
|
||||
|
||||
/** This is a possible HTML attribute for the BODY tag. */
|
||||
public const string RIGHTMARGIN = "rightmargin";
|
||||
|
||||
// Phrases, Anchors, Lists and Paragraphs
|
||||
|
||||
/** the chunk tag */
|
||||
public const string CHUNK = "font";
|
||||
|
||||
/** the phrase tag */
|
||||
public const string CODE = "code";
|
||||
|
||||
/** the phrase tag */
|
||||
public const string VAR = "var";
|
||||
|
||||
/** the anchor tag */
|
||||
public const string ANCHOR = "a";
|
||||
|
||||
/** the list tag */
|
||||
public const string ORDEREDLIST = "ol";
|
||||
|
||||
/** the list tag */
|
||||
public const string UNORDEREDLIST = "ul";
|
||||
|
||||
/** the listitem tag */
|
||||
public const string LISTITEM = "li";
|
||||
|
||||
/** the paragraph tag */
|
||||
public const string PARAGRAPH = "p";
|
||||
|
||||
/** attribute of anchor tag */
|
||||
public const string NAME = "name";
|
||||
|
||||
/** attribute of anchor tag */
|
||||
public const string REFERENCE = "href";
|
||||
|
||||
/** attribute of anchor tag */
|
||||
public static string[] H = {"h1", "h2", "h3", "h4", "h5", "h6"};
|
||||
|
||||
// Chunks
|
||||
|
||||
/** attribute of the chunk tag */
|
||||
public const string FONT = "face";
|
||||
|
||||
/** attribute of the chunk tag */
|
||||
public const string SIZE = "point-size";
|
||||
|
||||
/** attribute of the chunk/table/cell tag */
|
||||
public const string COLOR = "color";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string EM = "em";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string I = "i";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string STRONG = "strong";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string B = "b";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string S = "s";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string U = "u";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string SUB = "sub";
|
||||
|
||||
/** some phrase tag */
|
||||
public const string SUP = "sup";
|
||||
|
||||
/** the possible value of a tag */
|
||||
public const string HORIZONTALRULE = "hr";
|
||||
|
||||
// tables/cells
|
||||
|
||||
/** the table tag */
|
||||
public const string TABLE = "table";
|
||||
|
||||
/** the cell tag */
|
||||
public const string ROW = "tr";
|
||||
|
||||
/** the cell tag */
|
||||
public const string CELL = "td";
|
||||
|
||||
/** attribute of the cell tag */
|
||||
public const string HEADERCELL = "th";
|
||||
|
||||
/** attribute of the table tag */
|
||||
public const string COLUMNS = "cols";
|
||||
|
||||
/** attribute of the table tag */
|
||||
public const string CELLPADDING = "cellpadding";
|
||||
|
||||
/** attribute of the table tag */
|
||||
public const string CELLSPACING = "cellspacing";
|
||||
|
||||
/** attribute of the cell tag */
|
||||
public const string COLSPAN = "colspan";
|
||||
|
||||
/** attribute of the cell tag */
|
||||
public const string ROWSPAN = "rowspan";
|
||||
|
||||
/** attribute of the cell tag */
|
||||
public const string NOWRAP = "nowrap";
|
||||
|
||||
/** attribute of the table/cell tag */
|
||||
public const string BORDERWIDTH = "border";
|
||||
|
||||
/** attribute of the table/cell tag */
|
||||
public const string WIDTH = "width";
|
||||
|
||||
/** attribute of the table/cell tag */
|
||||
public const string BACKGROUNDCOLOR = "bgcolor";
|
||||
|
||||
/** attribute of the table/cell tag */
|
||||
public const string BORDERCOLOR = "bordercolor";
|
||||
|
||||
/** attribute of paragraph/image/table tag */
|
||||
public const string ALIGN = "align";
|
||||
|
||||
/** attribute of chapter/section/paragraph/table/cell tag */
|
||||
public const string LEFT = "left";
|
||||
|
||||
/** attribute of chapter/section/paragraph/table/cell tag */
|
||||
public const string RIGHT = "right";
|
||||
|
||||
/** attribute of the cell tag */
|
||||
public const string HORIZONTALALIGN = "align";
|
||||
|
||||
/** attribute of the cell tag */
|
||||
public const string VERTICALALIGN = "valign";
|
||||
|
||||
/** attribute of the table/cell tag */
|
||||
public const string TOP = "top";
|
||||
|
||||
/** attribute of the table/cell tag */
|
||||
public const string BOTTOM = "bottom";
|
||||
|
||||
// Misc
|
||||
|
||||
/** the image tag */
|
||||
public const string IMAGE = "img";
|
||||
|
||||
/** attribute of the image tag */
|
||||
public const string URL = "src";
|
||||
|
||||
/** attribute of the image tag */
|
||||
public const string ALT = "alt";
|
||||
|
||||
/** attribute of the image tag */
|
||||
public const string PLAINWIDTH = "width";
|
||||
|
||||
/** attribute of the image tag */
|
||||
public const string PLAINHEIGHT = "height";
|
||||
|
||||
/** the newpage tag */
|
||||
public const string NEWLINE = "br";
|
||||
|
||||
// alignment attribute values
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_LEFT = "Left";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_CENTER = "Center";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_RIGHT = "Right";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_JUSTIFIED = "Justify";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_TOP = "Top";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_MIDDLE = "Middle";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_BOTTOM = "Bottom";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string ALIGN_BASELINE = "Baseline";
|
||||
|
||||
/** the possible value of an alignment attribute */
|
||||
public const string DEFAULT = "Default";
|
||||
|
||||
/** The DIV tag. */
|
||||
public const string DIV = "div";
|
||||
|
||||
/** The SPAN tag. */
|
||||
public const string SPAN = "span";
|
||||
/** The LINK tag. */
|
||||
public const string LINK = "link";
|
||||
|
||||
/** This is a possible HTML attribute for the LINK tag. */
|
||||
public const string TEXT_CSS = "text/css";
|
||||
|
||||
/** This is a possible HTML attribute for the LINK tag. */
|
||||
public const string REL = "rel";
|
||||
|
||||
/** This is used for inline css style information */
|
||||
public const string STYLE = "style";
|
||||
|
||||
/** This is a possible HTML attribute for the LINK tag. */
|
||||
public const string TYPE = "type";
|
||||
|
||||
/** This is a possible HTML attribute. */
|
||||
public const string STYLESHEET = "stylesheet";
|
||||
}
|
||||
}
|
1041
iTechSharp/iTextSharp/text/html/HtmlWriter.cs
Normal file
1041
iTechSharp/iTextSharp/text/html/HtmlWriter.cs
Normal file
File diff suppressed because it is too large
Load Diff
239
iTechSharp/iTextSharp/text/html/ITextmyHtmlHandler.cs
Normal file
239
iTechSharp/iTextSharp/text/html/ITextmyHtmlHandler.cs
Normal file
@@ -0,0 +1,239 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using System.util;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.xml;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text.factories;
|
||||
|
||||
/*
|
||||
* $Id: ITextmyHtmlHandler.cs,v 1.9 2008/05/13 11:25:15 psoares33 Exp $
|
||||
*
|
||||
*
|
||||
* Copyright 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.html {
|
||||
|
||||
/**
|
||||
* The <CODE>Tags</CODE>-class maps several XHTML-tags to iText-objects.
|
||||
*/
|
||||
|
||||
public class ITextmyHtmlHandler : ITextHandler {
|
||||
|
||||
/** These are the properties of the body section. */
|
||||
private Properties bodyAttributes = new Properties();
|
||||
|
||||
/** This is the status of the table border. */
|
||||
private bool tableBorder = false;
|
||||
|
||||
/**
|
||||
* Constructs a new SAXiTextHandler that will translate all the events
|
||||
* triggered by the parser to actions on the <CODE>Document</CODE>-object.
|
||||
*
|
||||
* @param document this is the document on which events must be triggered
|
||||
*/
|
||||
|
||||
public ITextmyHtmlHandler(IDocListener document) : base(document, new HtmlTagMap()) {
|
||||
}
|
||||
|
||||
public ITextmyHtmlHandler(IDocListener document, BaseFont bf) : base(document, new HtmlTagMap(), bf) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new SAXiTextHandler that will translate all the events
|
||||
* triggered by the parser to actions on the <CODE>Document</CODE>-object.
|
||||
*
|
||||
* @param document this is the document on which events must be triggered
|
||||
* @param htmlTags a tagmap translating HTML tags to iText tags
|
||||
*/
|
||||
|
||||
public ITextmyHtmlHandler(IDocListener document, Hashtable htmlTags) : base(document, htmlTags) {
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets called when a start tag is encountered.
|
||||
*
|
||||
* @param uri the Uniform Resource Identifier
|
||||
* @param lname the local name (without prefix), or the empty string if Namespace processing is not being performed.
|
||||
* @param name the name of the tag that is encountered
|
||||
* @param attrs the list of attributes
|
||||
*/
|
||||
|
||||
public override void StartElement(String uri, String lname, String name, Hashtable attrs) {
|
||||
//System.err.Println("Start: " + name);
|
||||
|
||||
// super.handleStartingTags is replaced with handleStartingTags
|
||||
// suggestion by Vu Ngoc Tan/Hop
|
||||
name = name.ToLower(CultureInfo.InvariantCulture);
|
||||
if (HtmlTagMap.IsHtml(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsHead(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsTitle(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsMeta(name)) {
|
||||
// we look if we can change the body attributes
|
||||
String meta = null;
|
||||
String content = null;
|
||||
if (attrs != null) {
|
||||
foreach (String attribute in attrs.Keys) {
|
||||
if (Util.EqualsIgnoreCase(attribute, HtmlTags.CONTENT))
|
||||
content = (String)attrs[attribute];
|
||||
else if (Util.EqualsIgnoreCase(attribute, HtmlTags.NAME))
|
||||
meta = (String)attrs[attribute];
|
||||
}
|
||||
}
|
||||
if (meta != null && content != null) {
|
||||
bodyAttributes.Add(meta, content);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsLink(name)) {
|
||||
// we do nothing for the moment, in a later version we could extract the style sheet
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsBody(name)) {
|
||||
// maybe we could extract some info about the document: color, margins,...
|
||||
// but that's for a later version...
|
||||
XmlPeer peer = new XmlPeer(ElementTags.ITEXT, name);
|
||||
peer.AddAlias(ElementTags.TOP, HtmlTags.TOPMARGIN);
|
||||
peer.AddAlias(ElementTags.BOTTOM, HtmlTags.BOTTOMMARGIN);
|
||||
peer.AddAlias(ElementTags.RIGHT, HtmlTags.RIGHTMARGIN);
|
||||
peer.AddAlias(ElementTags.LEFT, HtmlTags.LEFTMARGIN);
|
||||
bodyAttributes.AddAll(peer.GetAttributes(attrs));
|
||||
HandleStartingTags(peer.Tag, bodyAttributes);
|
||||
return;
|
||||
}
|
||||
if (myTags.ContainsKey(name)) {
|
||||
XmlPeer peer = (XmlPeer) myTags[name];
|
||||
if (ElementTags.TABLE.Equals(peer.Tag) || ElementTags.CELL.Equals(peer.Tag)) {
|
||||
Properties p = peer.GetAttributes(attrs);
|
||||
String value;
|
||||
if (ElementTags.TABLE.Equals(peer.Tag) && (value = p[ElementTags.BORDERWIDTH]) != null) {
|
||||
if (float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo) > 0) {
|
||||
tableBorder = true;
|
||||
}
|
||||
}
|
||||
if (tableBorder) {
|
||||
p.Add(ElementTags.LEFT, "true");
|
||||
p.Add(ElementTags.RIGHT, "true");
|
||||
p.Add(ElementTags.TOP, "true");
|
||||
p.Add(ElementTags.BOTTOM, "true");
|
||||
}
|
||||
HandleStartingTags(peer.Tag, p);
|
||||
return;
|
||||
}
|
||||
HandleStartingTags(peer.Tag, peer.GetAttributes(attrs));
|
||||
return;
|
||||
}
|
||||
Properties attributes = new Properties();
|
||||
if (attrs != null) {
|
||||
foreach (String attribute in attrs.Keys) {
|
||||
attributes.Add(attribute.ToLower(CultureInfo.InvariantCulture), ((String)attrs[attribute]).ToLower(CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
HandleStartingTags(name, attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method gets called when an end tag is encountered.
|
||||
*
|
||||
* @param uri the Uniform Resource Identifier
|
||||
* @param lname the local name (without prefix), or the empty string if Namespace processing is not being performed.
|
||||
* @param name the name of the tag that ends
|
||||
*/
|
||||
|
||||
public override void EndElement(String uri, String lname, String name) {
|
||||
//System.err.Println("End: " + name);
|
||||
name = name.ToLower(CultureInfo.InvariantCulture);
|
||||
if (ElementTags.PARAGRAPH.Equals(name)) {
|
||||
document.Add((IElement) stack.Pop());
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsHead(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsTitle(name)) {
|
||||
if (currentChunk != null) {
|
||||
bodyAttributes.Add(ElementTags.TITLE, currentChunk.Content);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsMeta(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsLink(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (HtmlTagMap.IsBody(name)) {
|
||||
// we do nothing
|
||||
return;
|
||||
}
|
||||
if (myTags.ContainsKey(name)) {
|
||||
XmlPeer peer = (XmlPeer) myTags[name];
|
||||
if (ElementTags.TABLE.Equals(peer.Tag)) {
|
||||
tableBorder = false;
|
||||
}
|
||||
base.HandleEndingTags(peer.Tag);
|
||||
return;
|
||||
}
|
||||
// super.handleEndingTags is replaced with handleEndingTags
|
||||
// suggestion by Ken Auer
|
||||
HandleEndingTags(name);
|
||||
}
|
||||
}
|
||||
}
|
427
iTechSharp/iTextSharp/text/html/Markup.cs
Normal file
427
iTechSharp/iTextSharp/text/html/Markup.cs
Normal file
@@ -0,0 +1,427 @@
|
||||
using System;
|
||||
using System.util;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using iTextSharp.text;
|
||||
|
||||
/*
|
||||
* $Id: Markup.cs,v 1.2 2008/05/13 11:25:16 psoares33 Exp $
|
||||
*
|
||||
*
|
||||
* Copyright 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.html {
|
||||
/// <summary>
|
||||
/// A class that contains all the possible tagnames and their attributes.
|
||||
/// </summary>
|
||||
public class Markup {
|
||||
// iText specific
|
||||
|
||||
/** the key for any tag */
|
||||
public const string ITEXT_TAG = "tag";
|
||||
|
||||
// HTML tags
|
||||
|
||||
/** the markup for the body part of a file */
|
||||
public const string HTML_TAG_BODY = "body";
|
||||
|
||||
/** The DIV tag. */
|
||||
public const string HTML_TAG_DIV = "div";
|
||||
|
||||
/** This is a possible HTML-tag. */
|
||||
public const string HTML_TAG_LINK = "link";
|
||||
|
||||
/** The SPAN tag. */
|
||||
public const string HTML_TAG_SPAN = "span";
|
||||
|
||||
// HTML attributes
|
||||
|
||||
/** the height attribute. */
|
||||
public const string HTML_ATTR_HEIGHT = "height";
|
||||
|
||||
/** the hyperlink reference attribute. */
|
||||
public const string HTML_ATTR_HREF = "href";
|
||||
|
||||
/** This is a possible HTML attribute for the LINK tag. */
|
||||
public const string HTML_ATTR_REL = "rel";
|
||||
|
||||
/** This is used for inline css style information */
|
||||
public const string HTML_ATTR_STYLE = "style";
|
||||
|
||||
/** This is a possible HTML attribute for the LINK tag. */
|
||||
public const string HTML_ATTR_TYPE = "type";
|
||||
|
||||
/** This is a possible HTML attribute. */
|
||||
public const string HTML_ATTR_STYLESHEET = "stylesheet";
|
||||
|
||||
/** the width attribute. */
|
||||
public const string HTML_ATTR_WIDTH = "width";
|
||||
|
||||
/** attribute for specifying externally defined CSS class */
|
||||
public const string HTML_ATTR_CSS_CLASS = "class";
|
||||
|
||||
/** The ID attribute. */
|
||||
public const string HTML_ATTR_CSS_ID = "id";
|
||||
|
||||
// HTML values
|
||||
|
||||
/** This is a possible value for the language attribute (SCRIPT tag). */
|
||||
public const string HTML_VALUE_JAVASCRIPT = "text/javascript";
|
||||
|
||||
/** This is a possible HTML attribute for the LINK tag. */
|
||||
public const string HTML_VALUE_CSS = "text/css";
|
||||
|
||||
// CSS keys
|
||||
|
||||
/** the CSS tag for background color */
|
||||
public const string CSS_KEY_BGCOLOR = "background-color";
|
||||
|
||||
/** the CSS tag for text color */
|
||||
public const string CSS_KEY_COLOR = "color";
|
||||
|
||||
/** CSS key that indicate the way something has to be displayed */
|
||||
public const string CSS_KEY_DISPLAY = "display";
|
||||
|
||||
/** the CSS tag for the font family */
|
||||
public const string CSS_KEY_FONTFAMILY = "font-family";
|
||||
|
||||
/** the CSS tag for the font size */
|
||||
public const string CSS_KEY_FONTSIZE = "font-size";
|
||||
|
||||
/** the CSS tag for the font style */
|
||||
public const string CSS_KEY_FONTSTYLE = "font-style";
|
||||
|
||||
/** the CSS tag for the font weight */
|
||||
public const string CSS_KEY_FONTWEIGHT = "font-weight";
|
||||
|
||||
/** the CSS tag for text decorations */
|
||||
public const string CSS_KEY_LINEHEIGHT = "line-height";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const string CSS_KEY_MARGIN = "margin";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const string CSS_KEY_MARGINLEFT = "margin-left";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const string CSS_KEY_MARGINRIGHT = "margin-right";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const string CSS_KEY_MARGINTOP = "margin-top";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const string CSS_KEY_MARGINBOTTOM = "margin-bottom";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_PADDING = "padding";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_PADDINGLEFT = "padding-left";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_PADDINGRIGHT = "padding-right";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_PADDINGTOP = "padding-top";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_PADDINGBOTTOM = "padding-bottom";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_BORDERCOLOR = "border-color";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_BORDERWIDTH = "border-width";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_BORDERWIDTHLEFT = "border-left-width";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_BORDERWIDTHRIGHT = "border-right-width";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_BORDERWIDTHTOP = "border-top-width";
|
||||
|
||||
/** the CSS tag for the margin of an object */
|
||||
public const String CSS_KEY_BORDERWIDTHBOTTOM = "border-bottom-width";
|
||||
|
||||
/** the CSS tag for adding a page break when the document is printed */
|
||||
public const string CSS_KEY_PAGE_BREAK_AFTER = "page-break-after";
|
||||
|
||||
/** the CSS tag for adding a page break when the document is printed */
|
||||
public const string CSS_KEY_PAGE_BREAK_BEFORE = "page-break-before";
|
||||
|
||||
/** the CSS tag for the horizontal alignment of an object */
|
||||
public const string CSS_KEY_TEXTALIGN = "text-align";
|
||||
|
||||
/** the CSS tag for text decorations */
|
||||
public const string CSS_KEY_TEXTDECORATION = "text-decoration";
|
||||
|
||||
/** the CSS tag for text decorations */
|
||||
public const string CSS_KEY_VERTICALALIGN = "vertical-align";
|
||||
|
||||
/** the CSS tag for the visibility of objects */
|
||||
public const string CSS_KEY_VISIBILITY = "visibility";
|
||||
|
||||
// CSS values
|
||||
|
||||
/** value for the CSS tag for adding a page break when the document is printed */
|
||||
public const string CSS_VALUE_ALWAYS = "always";
|
||||
|
||||
/** A possible value for the DISPLAY key */
|
||||
public const string CSS_VALUE_BLOCK = "block";
|
||||
|
||||
/** a CSS value for text font weight */
|
||||
public const string CSS_VALUE_BOLD = "bold";
|
||||
|
||||
/** the value if you want to hide objects. */
|
||||
public const string CSS_VALUE_HIDDEN = "hidden";
|
||||
|
||||
/** A possible value for the DISPLAY key */
|
||||
public const string CSS_VALUE_INLINE = "inline";
|
||||
|
||||
/** a CSS value for text font style */
|
||||
public const string CSS_VALUE_ITALIC = "italic";
|
||||
|
||||
/** a CSS value for text decoration */
|
||||
public const string CSS_VALUE_LINETHROUGH = "line-through";
|
||||
|
||||
/** A possible value for the DISPLAY key */
|
||||
public const string CSS_VALUE_LISTITEM = "list-item";
|
||||
|
||||
/** a CSS value */
|
||||
public const string CSS_VALUE_NONE = "none";
|
||||
|
||||
/** a CSS value */
|
||||
public const string CSS_VALUE_NORMAL = "normal";
|
||||
|
||||
/** a CSS value for text font style */
|
||||
public const string CSS_VALUE_OBLIQUE = "oblique";
|
||||
|
||||
/** A possible value for the DISPLAY key */
|
||||
public const string CSS_VALUE_TABLE = "table";
|
||||
|
||||
/** A possible value for the DISPLAY key */
|
||||
public const string CSS_VALUE_TABLEROW = "table-row";
|
||||
|
||||
/** A possible value for the DISPLAY key */
|
||||
public const string CSS_VALUE_TABLECELL = "table-cell";
|
||||
|
||||
/** the CSS value for a horizontal alignment of an object */
|
||||
public const string CSS_VALUE_TEXTALIGNLEFT = "left";
|
||||
|
||||
/** the CSS value for a horizontal alignment of an object */
|
||||
public const string CSS_VALUE_TEXTALIGNRIGHT = "right";
|
||||
|
||||
/** the CSS value for a horizontal alignment of an object */
|
||||
public const string CSS_VALUE_TEXTALIGNCENTER = "center";
|
||||
|
||||
/** the CSS value for a horizontal alignment of an object */
|
||||
public const string CSS_VALUE_TEXTALIGNJUSTIFY = "justify";
|
||||
|
||||
/** a CSS value for text decoration */
|
||||
public const string CSS_VALUE_UNDERLINE = "underline";
|
||||
|
||||
/// <summary>
|
||||
/// Parses a length.
|
||||
/// </summary>
|
||||
/// <param name="str">a length in the form of an optional + or -, followed by a number and a unit.</param>
|
||||
/// <returns>a float</returns>
|
||||
public static float ParseLength(string str) {
|
||||
int pos = 0;
|
||||
int length = str.Length;
|
||||
bool ok = true;
|
||||
while (ok && pos < length) {
|
||||
switch (str[pos]) {
|
||||
case '+':
|
||||
case '-':
|
||||
case '0':
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
case '.':
|
||||
pos++;
|
||||
break;
|
||||
default:
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (pos == 0) return 0f;
|
||||
if (pos == length) return float.Parse(str, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
float f = float.Parse(str.Substring(0, pos), System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
str = str.Substring(pos);
|
||||
// inches
|
||||
if (str.StartsWith("in")) {
|
||||
return f * 72f;
|
||||
}
|
||||
// centimeters
|
||||
if (str.StartsWith("cm")) {
|
||||
return (f / 2.54f) * 72f;
|
||||
}
|
||||
// millimeters
|
||||
if (str.StartsWith("mm")) {
|
||||
return (f / 25.4f) * 72f;
|
||||
}
|
||||
// picas
|
||||
if (str.StartsWith("pc")) {
|
||||
return f * 12f;
|
||||
}
|
||||
// default: we assume the length was measured in points
|
||||
return f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a <CODE>Color</CODE> into a HTML representation of this <CODE>Color</CODE>.
|
||||
/// </summary>
|
||||
/// <param name="color">the <CODE>Color</CODE> that has to be converted.</param>
|
||||
/// <returns>the HTML representation of this <CODE>Color</CODE></returns>
|
||||
public static Color DecodeColor(String s) {
|
||||
if (s == null)
|
||||
return null;
|
||||
s = s.ToLower(CultureInfo.InvariantCulture).Trim();
|
||||
Color c = (Color)WebColors.GetRGBColor(s);
|
||||
if (c != null)
|
||||
return c;
|
||||
try {
|
||||
if (s.StartsWith("#")) {
|
||||
if (s.Length == 4)
|
||||
s = "#" + s.Substring(1, 1) + s.Substring(1, 1)
|
||||
+ s.Substring(2, 1) + s.Substring(2, 1)
|
||||
+ s.Substring(3, 1) + s.Substring(3, 1);
|
||||
if (s.Length == 7)
|
||||
return new Color(int.Parse(s.Substring(1), NumberStyles.HexNumber));
|
||||
}
|
||||
else if (s.StartsWith("rgb")) {
|
||||
StringTokenizer tk = new StringTokenizer(s.Substring(3), " \t\r\n\f(),");
|
||||
int[] cc = new int [3];
|
||||
for (int k = 0; k < 3; ++k) {
|
||||
if (!tk.HasMoreTokens())
|
||||
return null;
|
||||
String t = tk.NextToken();
|
||||
float n;
|
||||
if (t.EndsWith("%")) {
|
||||
n = float.Parse(t.Substring(0, t.Length - 1), System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
n = n * 255f / 100f;
|
||||
}
|
||||
else
|
||||
n = float.Parse(t, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
int ni = (int)n;
|
||||
if (ni > 255)
|
||||
ni = 255;
|
||||
else if (ni < 0)
|
||||
ni = 0;
|
||||
cc[k] = ni;
|
||||
}
|
||||
return new Color(cc[0], cc[1], cc[2]);
|
||||
}
|
||||
}
|
||||
catch {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This method parses a string with attributes and returns a Properties object.
|
||||
/// </summary>
|
||||
/// <param name="str">a string of this form: 'key1="value1"; key2="value2";... keyN="valueN" '</param>
|
||||
/// <returns>a Properties object</returns>
|
||||
public static Properties ParseAttributes(string str) {
|
||||
Properties result = new Properties();
|
||||
if (str == null) return result;
|
||||
StringTokenizer keyValuePairs = new StringTokenizer(str, ";");
|
||||
StringTokenizer keyValuePair;
|
||||
string key;
|
||||
string value;
|
||||
while (keyValuePairs.HasMoreTokens()) {
|
||||
keyValuePair = new StringTokenizer(keyValuePairs.NextToken(), ":");
|
||||
if (keyValuePair.HasMoreTokens()) key = keyValuePair.NextToken().Trim().Trim();
|
||||
else continue;
|
||||
if (keyValuePair.HasMoreTokens()) value = keyValuePair.NextToken().Trim();
|
||||
else continue;
|
||||
if (value.StartsWith("\"")) value = value.Substring(1);
|
||||
if (value.EndsWith("\"")) value = value.Substring(0, value.Length - 1);
|
||||
result.Add(key.ToLower(CultureInfo.InvariantCulture), value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the comments sections of a String.
|
||||
*
|
||||
* @param string
|
||||
* the original String
|
||||
* @param startComment
|
||||
* the String that marks the start of a Comment section
|
||||
* @param endComment
|
||||
* the String that marks the end of a Comment section.
|
||||
* @return the String stripped of its comment section
|
||||
*/
|
||||
public static string RemoveComment(String str, String startComment,
|
||||
String endComment) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
int pos = 0;
|
||||
int end = endComment.Length;
|
||||
int start = str.IndexOf(startComment, pos);
|
||||
while (start > -1) {
|
||||
result.Append(str.Substring(pos, start - pos));
|
||||
pos = str.IndexOf(endComment, start) + end;
|
||||
start = str.IndexOf(startComment, pos);
|
||||
}
|
||||
result.Append(str.Substring(pos));
|
||||
return result.ToString();
|
||||
}
|
||||
}
|
||||
}
|
263
iTechSharp/iTextSharp/text/html/WebColors.cs
Normal file
263
iTechSharp/iTextSharp/text/html/WebColors.cs
Normal file
@@ -0,0 +1,263 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using iTextSharp.text;
|
||||
using System.util;
|
||||
/*
|
||||
* $Id: WebColors.cs,v 1.3 2008/05/13 11:25:16 psoares33 Exp $
|
||||
*
|
||||
*
|
||||
* Copyright 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.html {
|
||||
|
||||
/**
|
||||
* This class is a HashMap that contains the names of colors as a key and the
|
||||
* corresponding Color as value. (Source: Wikipedia
|
||||
* http://en.wikipedia.org/wiki/Web_colors )
|
||||
*
|
||||
* @author blowagie
|
||||
*/
|
||||
public class WebColors : Hashtable {
|
||||
|
||||
public static WebColors NAMES = new WebColors();
|
||||
static WebColors() {
|
||||
NAMES["aliceblue"] = new int[] { 0xf0, 0xf8, 0xff, 0x00 };
|
||||
NAMES["antiquewhite"] = new int[] { 0xfa, 0xeb, 0xd7, 0x00 };
|
||||
NAMES["aqua"] = new int[] { 0x00, 0xff, 0xff, 0x00 };
|
||||
NAMES["aquamarine"] = new int[] { 0x7f, 0xff, 0xd4, 0x00 };
|
||||
NAMES["azure"] = new int[] { 0xf0, 0xff, 0xff, 0x00 };
|
||||
NAMES["beige"] = new int[] { 0xf5, 0xf5, 0xdc, 0x00 };
|
||||
NAMES["bisque"] = new int[] { 0xff, 0xe4, 0xc4, 0x00 };
|
||||
NAMES["black"] = new int[] { 0x00, 0x00, 0x00, 0x00 };
|
||||
NAMES["blanchedalmond"] = new int[] { 0xff, 0xeb, 0xcd, 0x00 };
|
||||
NAMES["blue"] = new int[] { 0x00, 0x00, 0xff, 0x00 };
|
||||
NAMES["blueviolet"] = new int[] { 0x8a, 0x2b, 0xe2, 0x00 };
|
||||
NAMES["brown"] = new int[] { 0xa5, 0x2a, 0x2a, 0x00 };
|
||||
NAMES["burlywood"] = new int[] { 0xde, 0xb8, 0x87, 0x00 };
|
||||
NAMES["cadetblue"] = new int[] { 0x5f, 0x9e, 0xa0, 0x00 };
|
||||
NAMES["chartreuse"] = new int[] { 0x7f, 0xff, 0x00, 0x00 };
|
||||
NAMES["chocolate"] = new int[] { 0xd2, 0x69, 0x1e, 0x00 };
|
||||
NAMES["coral"] = new int[] { 0xff, 0x7f, 0x50, 0x00 };
|
||||
NAMES["cornflowerblue"] = new int[] { 0x64, 0x95, 0xed, 0x00 };
|
||||
NAMES["cornsilk"] = new int[] { 0xff, 0xf8, 0xdc, 0x00 };
|
||||
NAMES["crimson"] = new int[] { 0xdc, 0x14, 0x3c, 0x00 };
|
||||
NAMES["cyan"] = new int[] { 0x00, 0xff, 0xff, 0x00 };
|
||||
NAMES["darkblue"] = new int[] { 0x00, 0x00, 0x8b, 0x00 };
|
||||
NAMES["darkcyan"] = new int[] { 0x00, 0x8b, 0x8b, 0x00 };
|
||||
NAMES["darkgoldenrod"] = new int[] { 0xb8, 0x86, 0x0b, 0x00 };
|
||||
NAMES["darkgray"] = new int[] { 0xa9, 0xa9, 0xa9, 0x00 };
|
||||
NAMES["darkgreen"] = new int[] { 0x00, 0x64, 0x00, 0x00 };
|
||||
NAMES["darkkhaki"] = new int[] { 0xbd, 0xb7, 0x6b, 0x00 };
|
||||
NAMES["darkmagenta"] = new int[] { 0x8b, 0x00, 0x8b, 0x00 };
|
||||
NAMES["darkolivegreen"] = new int[] { 0x55, 0x6b, 0x2f, 0x00 };
|
||||
NAMES["darkorange"] = new int[] { 0xff, 0x8c, 0x00, 0x00 };
|
||||
NAMES["darkorchid"] = new int[] { 0x99, 0x32, 0xcc, 0x00 };
|
||||
NAMES["darkred"] = new int[] { 0x8b, 0x00, 0x00, 0x00 };
|
||||
NAMES["darksalmon"] = new int[] { 0xe9, 0x96, 0x7a, 0x00 };
|
||||
NAMES["darkseagreen"] = new int[] { 0x8f, 0xbc, 0x8f, 0x00 };
|
||||
NAMES["darkslateblue"] = new int[] { 0x48, 0x3d, 0x8b, 0x00 };
|
||||
NAMES["darkslategray"] = new int[] { 0x2f, 0x4f, 0x4f, 0x00 };
|
||||
NAMES["darkturquoise"] = new int[] { 0x00, 0xce, 0xd1, 0x00 };
|
||||
NAMES["darkviolet"] = new int[] { 0x94, 0x00, 0xd3, 0x00 };
|
||||
NAMES["deeppink"] = new int[] { 0xff, 0x14, 0x93, 0x00 };
|
||||
NAMES["deepskyblue"] = new int[] { 0x00, 0xbf, 0xff, 0x00 };
|
||||
NAMES["dimgray"] = new int[] { 0x69, 0x69, 0x69, 0x00 };
|
||||
NAMES["dodgerblue"] = new int[] { 0x1e, 0x90, 0xff, 0x00 };
|
||||
NAMES["firebrick"] = new int[] { 0xb2, 0x22, 0x22, 0x00 };
|
||||
NAMES["floralwhite"] = new int[] { 0xff, 0xfa, 0xf0, 0x00 };
|
||||
NAMES["forestgreen"] = new int[] { 0x22, 0x8b, 0x22, 0x00 };
|
||||
NAMES["fuchsia"] = new int[] { 0xff, 0x00, 0xff, 0x00 };
|
||||
NAMES["gainsboro"] = new int[] { 0xdc, 0xdc, 0xdc, 0x00 };
|
||||
NAMES["ghostwhite"] = new int[] { 0xf8, 0xf8, 0xff, 0x00 };
|
||||
NAMES["gold"] = new int[] { 0xff, 0xd7, 0x00, 0x00 };
|
||||
NAMES["goldenrod"] = new int[] { 0xda, 0xa5, 0x20, 0x00 };
|
||||
NAMES["gray"] = new int[] { 0x80, 0x80, 0x80, 0x00 };
|
||||
NAMES["green"] = new int[] { 0x00, 0x80, 0x00, 0x00 };
|
||||
NAMES["greenyellow"] = new int[] { 0xad, 0xff, 0x2f, 0x00 };
|
||||
NAMES["honeydew"] = new int[] { 0xf0, 0xff, 0xf0, 0x00 };
|
||||
NAMES["hotpink"] = new int[] { 0xff, 0x69, 0xb4, 0x00 };
|
||||
NAMES["indianred"] = new int[] { 0xcd, 0x5c, 0x5c, 0x00 };
|
||||
NAMES["indigo"] = new int[] { 0x4b, 0x00, 0x82, 0x00 };
|
||||
NAMES["ivory"] = new int[] { 0xff, 0xff, 0xf0, 0x00 };
|
||||
NAMES["khaki"] = new int[] { 0xf0, 0xe6, 0x8c, 0x00 };
|
||||
NAMES["lavender"] = new int[] { 0xe6, 0xe6, 0xfa, 0x00 };
|
||||
NAMES["lavenderblush"] = new int[] { 0xff, 0xf0, 0xf5, 0x00 };
|
||||
NAMES["lawngreen"] = new int[] { 0x7c, 0xfc, 0x00, 0x00 };
|
||||
NAMES["lemonchiffon"] = new int[] { 0xff, 0xfa, 0xcd, 0x00 };
|
||||
NAMES["lightblue"] = new int[] { 0xad, 0xd8, 0xe6, 0x00 };
|
||||
NAMES["lightcoral"] = new int[] { 0xf0, 0x80, 0x80, 0x00 };
|
||||
NAMES["lightcyan"] = new int[] { 0xe0, 0xff, 0xff, 0x00 };
|
||||
NAMES["lightgoldenrodyellow"] = new int[] { 0xfa, 0xfa, 0xd2, 0x00 };
|
||||
NAMES["lightgreen"] = new int[] { 0x90, 0xee, 0x90, 0x00 };
|
||||
NAMES["lightgrey"] = new int[] { 0xd3, 0xd3, 0xd3, 0x00 };
|
||||
NAMES["lightpink"] = new int[] { 0xff, 0xb6, 0xc1, 0x00 };
|
||||
NAMES["lightsalmon"] = new int[] { 0xff, 0xa0, 0x7a, 0x00 };
|
||||
NAMES["lightseagreen"] = new int[] { 0x20, 0xb2, 0xaa, 0x00 };
|
||||
NAMES["lightskyblue"] = new int[] { 0x87, 0xce, 0xfa, 0x00 };
|
||||
NAMES["lightslategray"] = new int[] { 0x77, 0x88, 0x99, 0x00 };
|
||||
NAMES["lightsteelblue"] = new int[] { 0xb0, 0xc4, 0xde, 0x00 };
|
||||
NAMES["lightyellow"] = new int[] { 0xff, 0xff, 0xe0, 0x00 };
|
||||
NAMES["lime"] = new int[] { 0x00, 0xff, 0x00, 0x00 };
|
||||
NAMES["limegreen"] = new int[] { 0x32, 0xcd, 0x32, 0x00 };
|
||||
NAMES["linen"] = new int[] { 0xfa, 0xf0, 0xe6, 0x00 };
|
||||
NAMES["magenta"] = new int[] { 0xff, 0x00, 0xff, 0x00 };
|
||||
NAMES["maroon"] = new int[] { 0x80, 0x00, 0x00, 0x00 };
|
||||
NAMES["mediumaquamarine"] = new int[] { 0x66, 0xcd, 0xaa, 0x00 };
|
||||
NAMES["mediumblue"] = new int[] { 0x00, 0x00, 0xcd, 0x00 };
|
||||
NAMES["mediumorchid"] = new int[] { 0xba, 0x55, 0xd3, 0x00 };
|
||||
NAMES["mediumpurple"] = new int[] { 0x93, 0x70, 0xdb, 0x00 };
|
||||
NAMES["mediumseagreen"] = new int[] { 0x3c, 0xb3, 0x71, 0x00 };
|
||||
NAMES["mediumslateblue"] = new int[] { 0x7b, 0x68, 0xee, 0x00 };
|
||||
NAMES["mediumspringgreen"] = new int[] { 0x00, 0xfa, 0x9a, 0x00 };
|
||||
NAMES["mediumturquoise"] = new int[] { 0x48, 0xd1, 0xcc, 0x00 };
|
||||
NAMES["mediumvioletred"] = new int[] { 0xc7, 0x15, 0x85, 0x00 };
|
||||
NAMES["midnightblue"] = new int[] { 0x19, 0x19, 0x70, 0x00 };
|
||||
NAMES["mintcream"] = new int[] { 0xf5, 0xff, 0xfa, 0x00 };
|
||||
NAMES["mistyrose"] = new int[] { 0xff, 0xe4, 0xe1, 0x00 };
|
||||
NAMES["moccasin"] = new int[] { 0xff, 0xe4, 0xb5, 0x00 };
|
||||
NAMES["navajowhite"] = new int[] { 0xff, 0xde, 0xad, 0x00 };
|
||||
NAMES["navy"] = new int[] { 0x00, 0x00, 0x80, 0x00 };
|
||||
NAMES["oldlace"] = new int[] { 0xfd, 0xf5, 0xe6, 0x00 };
|
||||
NAMES["olive"] = new int[] { 0x80, 0x80, 0x00, 0x00 };
|
||||
NAMES["olivedrab"] = new int[] { 0x6b, 0x8e, 0x23, 0x00 };
|
||||
NAMES["orange"] = new int[] { 0xff, 0xa5, 0x00, 0x00 };
|
||||
NAMES["orangered"] = new int[] { 0xff, 0x45, 0x00, 0x00 };
|
||||
NAMES["orchid"] = new int[] { 0xda, 0x70, 0xd6, 0x00 };
|
||||
NAMES["palegoldenrod"] = new int[] { 0xee, 0xe8, 0xaa, 0x00 };
|
||||
NAMES["palegreen"] = new int[] { 0x98, 0xfb, 0x98, 0x00 };
|
||||
NAMES["paleturquoise"] = new int[] { 0xaf, 0xee, 0xee, 0x00 };
|
||||
NAMES["palevioletred"] = new int[] { 0xdb, 0x70, 0x93, 0x00 };
|
||||
NAMES["papayawhip"] = new int[] { 0xff, 0xef, 0xd5, 0x00 };
|
||||
NAMES["peachpuff"] = new int[] { 0xff, 0xda, 0xb9, 0x00 };
|
||||
NAMES["peru"] = new int[] { 0xcd, 0x85, 0x3f, 0x00 };
|
||||
NAMES["pink"] = new int[] { 0xff, 0xc0, 0xcb, 0x00 };
|
||||
NAMES["plum"] = new int[] { 0xdd, 0xa0, 0xdd, 0x00 };
|
||||
NAMES["powderblue"] = new int[] { 0xb0, 0xe0, 0xe6, 0x00 };
|
||||
NAMES["purple"] = new int[] { 0x80, 0x00, 0x80, 0x00 };
|
||||
NAMES["red"] = new int[] { 0xff, 0x00, 0x00, 0x00 };
|
||||
NAMES["rosybrown"] = new int[] { 0xbc, 0x8f, 0x8f, 0x00 };
|
||||
NAMES["royalblue"] = new int[] { 0x41, 0x69, 0xe1, 0x00 };
|
||||
NAMES["saddlebrown"] = new int[] { 0x8b, 0x45, 0x13, 0x00 };
|
||||
NAMES["salmon"] = new int[] { 0xfa, 0x80, 0x72, 0x00 };
|
||||
NAMES["sandybrown"] = new int[] { 0xf4, 0xa4, 0x60, 0x00 };
|
||||
NAMES["seagreen"] = new int[] { 0x2e, 0x8b, 0x57, 0x00 };
|
||||
NAMES["seashell"] = new int[] { 0xff, 0xf5, 0xee, 0x00 };
|
||||
NAMES["sienna"] = new int[] { 0xa0, 0x52, 0x2d, 0x00 };
|
||||
NAMES["silver"] = new int[] { 0xc0, 0xc0, 0xc0, 0x00 };
|
||||
NAMES["skyblue"] = new int[] { 0x87, 0xce, 0xeb, 0x00 };
|
||||
NAMES["slateblue"] = new int[] { 0x6a, 0x5a, 0xcd, 0x00 };
|
||||
NAMES["slategray"] = new int[] { 0x70, 0x80, 0x90, 0x00 };
|
||||
NAMES["snow"] = new int[] { 0xff, 0xfa, 0xfa, 0x00 };
|
||||
NAMES["springgreen"] = new int[] { 0x00, 0xff, 0x7f, 0x00 };
|
||||
NAMES["steelblue"] = new int[] { 0x46, 0x82, 0xb4, 0x00 };
|
||||
NAMES["tan"] = new int[] { 0xd2, 0xb4, 0x8c, 0x00 };
|
||||
NAMES["transparent"] = new int[] { 0x00, 0x00, 0x00, 0xff };
|
||||
NAMES["teal"] = new int[] { 0x00, 0x80, 0x80, 0x00 };
|
||||
NAMES["thistle"] = new int[] { 0xd8, 0xbf, 0xd8, 0x00 };
|
||||
NAMES["tomato"] = new int[] { 0xff, 0x63, 0x47, 0x00 };
|
||||
NAMES["turquoise"] = new int[] { 0x40, 0xe0, 0xd0, 0x00 };
|
||||
NAMES["violet"] = new int[] { 0xee, 0x82, 0xee, 0x00 };
|
||||
NAMES["wheat"] = new int[] { 0xf5, 0xde, 0xb3, 0x00 };
|
||||
NAMES["white"] = new int[] { 0xff, 0xff, 0xff, 0x00 };
|
||||
NAMES["whitesmoke"] = new int[] { 0xf5, 0xf5, 0xf5, 0x00 };
|
||||
NAMES["yellow"] = new int[] { 0xff, 0xff, 0x00, 0x00 };
|
||||
NAMES["yellowgreen"] = new int[] { 0x9, 0xacd, 0x32, 0x00 };
|
||||
}
|
||||
|
||||
/**
|
||||
* Gives you a Color based on a name.
|
||||
*
|
||||
* @param name
|
||||
* a name such as black, violet, cornflowerblue or #RGB or #RRGGBB
|
||||
* or rgb(R,G,B)
|
||||
* @return the corresponding Color object
|
||||
* @throws IllegalArgumentException
|
||||
* if the String isn't a know representation of a color.
|
||||
*/
|
||||
public static Color GetRGBColor(String name) {
|
||||
int[] c = { 0, 0, 0, 0 };
|
||||
if (name.StartsWith("#")) {
|
||||
if (name.Length == 4) {
|
||||
c[0] = int.Parse(name.Substring(1, 1), NumberStyles.HexNumber) * 16;
|
||||
c[1] = int.Parse(name.Substring(2, 1), NumberStyles.HexNumber) * 16;
|
||||
c[2] = int.Parse(name.Substring(3), NumberStyles.HexNumber) * 16;
|
||||
return new Color(c[0], c[1], c[2], c[3]);
|
||||
}
|
||||
if (name.Length == 7) {
|
||||
c[0] = int.Parse(name.Substring(1, 2), NumberStyles.HexNumber);
|
||||
c[1] = int.Parse(name.Substring(3, 2), NumberStyles.HexNumber);
|
||||
c[2] = int.Parse(name.Substring(5), NumberStyles.HexNumber);
|
||||
return new Color(c[0], c[1], c[2], c[3]);
|
||||
}
|
||||
throw new ArgumentException(
|
||||
"Unknown color format. Must be #RGB or #RRGGBB");
|
||||
}
|
||||
else if (name.StartsWith("rgb(")) {
|
||||
StringTokenizer tok = new StringTokenizer(name, "rgb(), \t\r\n\f");
|
||||
for (int k = 0; k < 3; ++k) {
|
||||
String v = tok.NextToken();
|
||||
if (v.EndsWith("%"))
|
||||
c[k] = int.Parse(v.Substring(0, v.Length - 1)) * 255 / 100;
|
||||
else
|
||||
c[k] = int.Parse(v);
|
||||
if (c[k] < 0)
|
||||
c[k] = 0;
|
||||
else if (c[k] > 255)
|
||||
c[k] = 255;
|
||||
}
|
||||
return new Color(c[0], c[1], c[2], c[3]);
|
||||
}
|
||||
name = name.ToLower(CultureInfo.InvariantCulture);
|
||||
if (!NAMES.ContainsKey(name))
|
||||
throw new ArgumentException("Color '" + name
|
||||
+ "' not found.");
|
||||
c = (int[]) NAMES[name];
|
||||
return new Color(c[0], c[1], c[2], c[3]);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,135 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
/*
|
||||
* Copyright 2004 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
|
||||
public class ChainedProperties {
|
||||
|
||||
public static int[] fontSizes = {8, 10, 12, 14, 18, 24, 36};
|
||||
public ArrayList chain = new ArrayList();
|
||||
|
||||
/** Creates a new instance of ChainedProperties */
|
||||
public ChainedProperties() {
|
||||
}
|
||||
|
||||
public String this[String key] {
|
||||
get {
|
||||
for (int k = chain.Count - 1; k >= 0; --k) {
|
||||
Object[] obj = (Object[])chain[k];
|
||||
Hashtable prop = (Hashtable)obj[1];
|
||||
String ret = (String)prop[key];
|
||||
if (ret != null)
|
||||
return ret;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasProperty(String key) {
|
||||
for (int k = chain.Count - 1; k >= 0; --k) {
|
||||
Object[] obj = (Object[])chain[k];
|
||||
Hashtable prop = (Hashtable)obj[1];
|
||||
if (prop.ContainsKey(key))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void AddToChain(String key, Hashtable prop) {
|
||||
// adjust the font size
|
||||
String value = (String)prop["size"];
|
||||
if (value != null) {
|
||||
if (value.EndsWith("px")) {
|
||||
prop["size"] = value.Substring(0, value.Length - 2);
|
||||
}
|
||||
else {
|
||||
int s = 0;
|
||||
if (value.StartsWith("+") || value.StartsWith("-")) {
|
||||
String old = this["basefontsize"];
|
||||
if (old == null)
|
||||
old = "12";
|
||||
float f = float.Parse(old, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
int c = (int)f;
|
||||
for (int k = fontSizes.Length - 1; k >= 0; --k) {
|
||||
if (c >= fontSizes[k]) {
|
||||
s = k;
|
||||
break;
|
||||
}
|
||||
}
|
||||
int inc = int.Parse(value.StartsWith("+") ? value.Substring(1) : value);
|
||||
s += inc;
|
||||
}
|
||||
else {
|
||||
try {
|
||||
s = int.Parse(value) - 1;
|
||||
}
|
||||
catch {
|
||||
s = 0;
|
||||
}
|
||||
}
|
||||
if (s < 0)
|
||||
s = 0;
|
||||
else if (s >= fontSizes.Length)
|
||||
s = fontSizes.Length - 1;
|
||||
prop["size"] = fontSizes[s].ToString();
|
||||
}
|
||||
}
|
||||
chain.Add(new Object[]{key, prop});
|
||||
}
|
||||
|
||||
public void RemoveChain(String key) {
|
||||
for (int k = chain.Count - 1; k >= 0; --k) {
|
||||
if (key.Equals(((Object[])chain[k])[0])) {
|
||||
chain.RemoveAt(k);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,338 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using System.util;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text.html;
|
||||
/*
|
||||
* Copyright 2004 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
|
||||
/**
|
||||
*
|
||||
* @author psoares
|
||||
*/
|
||||
public class FactoryProperties {
|
||||
|
||||
private FontFactoryImp fontImp = FontFactory.FontImp;
|
||||
|
||||
/** Creates a new instance of FactoryProperties */
|
||||
public FactoryProperties() {
|
||||
}
|
||||
|
||||
public Chunk CreateChunk(String text, ChainedProperties props) {
|
||||
Font font = GetFont(props);
|
||||
float size = font.Size;
|
||||
size /= 2;
|
||||
Chunk ck = new Chunk(text, font);
|
||||
if (props.HasProperty("sub"))
|
||||
ck.SetTextRise(-size);
|
||||
else if (props.HasProperty("sup"))
|
||||
ck.SetTextRise(size);
|
||||
ck.SetHyphenation(GetHyphenation(props));
|
||||
return ck;
|
||||
}
|
||||
|
||||
private static void SetParagraphLeading(Paragraph p, String leading) {
|
||||
if (leading == null) {
|
||||
p.SetLeading(0, 1.5f);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
StringTokenizer tk = new StringTokenizer(leading, " ,");
|
||||
String v = tk.NextToken();
|
||||
float v1 = float.Parse(v, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
if (!tk.HasMoreTokens()) {
|
||||
p.SetLeading(v1, 0);
|
||||
return;
|
||||
}
|
||||
v = tk.NextToken();
|
||||
float v2 = float.Parse(v, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
p.SetLeading(v1, v2);
|
||||
}
|
||||
catch {
|
||||
p.SetLeading(0, 1.5f);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Paragraph CreateParagraph(Hashtable props) {
|
||||
Paragraph p = new Paragraph();
|
||||
String value = (String)props["align"];
|
||||
if (value != null) {
|
||||
if (Util.EqualsIgnoreCase(value, "center"))
|
||||
p.Alignment = Element.ALIGN_CENTER;
|
||||
else if (Util.EqualsIgnoreCase(value, "right"))
|
||||
p.Alignment = Element.ALIGN_RIGHT;
|
||||
else if (Util.EqualsIgnoreCase(value, "justify"))
|
||||
p.Alignment = Element.ALIGN_JUSTIFIED;
|
||||
}
|
||||
SetParagraphLeading(p, (String)props["leading"]);
|
||||
p.Hyphenation = GetHyphenation(props);
|
||||
return p;
|
||||
}
|
||||
|
||||
public static void CreateParagraph(Paragraph p, ChainedProperties props) {
|
||||
String value = props["align"];
|
||||
if (value != null) {
|
||||
if (Util.EqualsIgnoreCase(value, "center"))
|
||||
p.Alignment = Element.ALIGN_CENTER;
|
||||
else if (Util.EqualsIgnoreCase(value, "right"))
|
||||
p.Alignment = Element.ALIGN_RIGHT;
|
||||
else if (Util.EqualsIgnoreCase(value, "justify"))
|
||||
p.Alignment = Element.ALIGN_JUSTIFIED;
|
||||
}
|
||||
p.Hyphenation = GetHyphenation(props);
|
||||
SetParagraphLeading(p, props["leading"]);
|
||||
value = props["before"];
|
||||
if (value != null) {
|
||||
try {
|
||||
p.SpacingBefore = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
value = props["after"];
|
||||
if (value != null) {
|
||||
try {
|
||||
p.SpacingAfter = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
value = props["extraparaspace"];
|
||||
if (value != null) {
|
||||
try {
|
||||
p.ExtraParagraphSpace = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
}
|
||||
|
||||
public static Paragraph CreateParagraph(ChainedProperties props) {
|
||||
Paragraph p = new Paragraph();
|
||||
CreateParagraph(p, props);
|
||||
return p;
|
||||
}
|
||||
|
||||
public static ListItem CreateListItem(ChainedProperties props) {
|
||||
ListItem p = new ListItem();
|
||||
CreateParagraph(p, props);
|
||||
return p;
|
||||
}
|
||||
|
||||
public Font GetFont(ChainedProperties props) {
|
||||
String face = props["face"];
|
||||
if (face != null) {
|
||||
StringTokenizer tok = new StringTokenizer(face, ",");
|
||||
while (tok.HasMoreTokens()) {
|
||||
face = tok.NextToken().Trim();
|
||||
if (face.StartsWith("\""))
|
||||
face = face.Substring(1);
|
||||
if (face.EndsWith("\""))
|
||||
face = face.Substring(0, face.Length - 1);
|
||||
if (fontImp.IsRegistered(face))
|
||||
break;
|
||||
}
|
||||
}
|
||||
int style = 0;
|
||||
if (props.HasProperty("i"))
|
||||
style |= Font.ITALIC;
|
||||
if (props.HasProperty("b"))
|
||||
style |= Font.BOLD;
|
||||
if (props.HasProperty("u"))
|
||||
style |= Font.UNDERLINE;
|
||||
if (props.HasProperty("s"))
|
||||
style |= Font.STRIKETHRU ;
|
||||
|
||||
String value = props["size"];
|
||||
float size = 12;
|
||||
if (value != null)
|
||||
size = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
Color color = Markup.DecodeColor(props["color"]);
|
||||
String encoding = props["encoding"];
|
||||
if (encoding == null)
|
||||
encoding = BaseFont.WINANSI;
|
||||
return fontImp.GetFont(face, encoding, true, size, style, color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a HyphenationEvent based on the hyphenation entry in ChainedProperties.
|
||||
* @param props ChainedProperties
|
||||
* @return a HyphenationEvent
|
||||
* @since 2.1.2
|
||||
*/
|
||||
public static IHyphenationEvent GetHyphenation(ChainedProperties props) {
|
||||
return GetHyphenation(props["hyphenation"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a HyphenationEvent based on the hyphenation entry in a HashMap.
|
||||
* @param props a HashMap with properties
|
||||
* @return a HyphenationEvent
|
||||
* @since 2.1.2
|
||||
*/
|
||||
public static IHyphenationEvent GetHyphenation(Hashtable props) {
|
||||
return GetHyphenation((String)props["hyphenation"]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a HyphenationEvent based on a String.
|
||||
* For instance "en_UK,3,2" returns new HyphenationAuto("en", "UK", 3, 2);
|
||||
* @param a String, for instance "en_UK,2,2"
|
||||
* @return a HyphenationEvent
|
||||
* @since 2.1.2
|
||||
*/
|
||||
public static IHyphenationEvent GetHyphenation(String s) {
|
||||
if (s == null || s.Length == 0) {
|
||||
return null;
|
||||
}
|
||||
String lang = s;
|
||||
String country = null;
|
||||
int leftMin = 2;
|
||||
int rightMin = 2;
|
||||
|
||||
int pos = s.IndexOf('_');
|
||||
if (pos == -1) {
|
||||
return new HyphenationAuto(lang, country, leftMin, rightMin);
|
||||
}
|
||||
lang = s.Substring(0, pos);
|
||||
country = s.Substring(pos + 1);
|
||||
pos = country.IndexOf(',');
|
||||
if (pos == -1) {
|
||||
return new HyphenationAuto(lang, country, leftMin, rightMin);
|
||||
}
|
||||
s = country.Substring(pos + 1);
|
||||
country = country.Substring(0, pos);
|
||||
pos = s.IndexOf(',');
|
||||
if (pos == -1) {
|
||||
leftMin = int.Parse(s);
|
||||
}
|
||||
else {
|
||||
leftMin = int.Parse(s.Substring(0, pos));
|
||||
rightMin = int.Parse(s.Substring(pos + 1));
|
||||
}
|
||||
return new HyphenationAuto(lang, country, leftMin, rightMin);
|
||||
}
|
||||
|
||||
public static void InsertStyle(Hashtable h) {
|
||||
String style = (String)h["style"];
|
||||
if (style == null)
|
||||
return;
|
||||
Properties prop = Markup.ParseAttributes(style);
|
||||
foreach (String key in prop.Keys) {
|
||||
if (key.Equals(Markup.CSS_KEY_FONTFAMILY)) {
|
||||
h["face"] = prop[key];
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_FONTSIZE)) {
|
||||
h["size"] = Markup.ParseLength(prop[key]).ToString(NumberFormatInfo.InvariantInfo) + "px";
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_FONTSTYLE)) {
|
||||
String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture);
|
||||
if (ss.Equals("italic") || ss.Equals("oblique"))
|
||||
h["i"] = null;
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_FONTWEIGHT)) {
|
||||
String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture);
|
||||
if (ss.Equals("bold") || ss.Equals("700") || ss.Equals("800") || ss.Equals("900"))
|
||||
h["b"] = null;
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_FONTWEIGHT)) {
|
||||
String ss = prop[key].Trim().ToLower(CultureInfo.InvariantCulture);
|
||||
if (ss.Equals("underline"))
|
||||
h["u"] = null;
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_COLOR)) {
|
||||
Color c = Markup.DecodeColor(prop[key]);
|
||||
if (c != null) {
|
||||
int hh = c.ToArgb() & 0xffffff;
|
||||
String hs = "#" + hh.ToString("X06", NumberFormatInfo.InvariantInfo);
|
||||
h["color"] = hs;
|
||||
}
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_LINEHEIGHT)) {
|
||||
String ss = prop[key].Trim();
|
||||
float v = Markup.ParseLength(prop[key]);
|
||||
if (ss.EndsWith("%")) {
|
||||
v /= 100;
|
||||
h["leading"] = "0," + v.ToString(NumberFormatInfo.InvariantInfo);
|
||||
}
|
||||
else {
|
||||
h["leading"] = v.ToString(NumberFormatInfo.InvariantInfo) + ",0";
|
||||
}
|
||||
}
|
||||
else if (key.Equals(Markup.CSS_KEY_TEXTALIGN)) {
|
||||
String ss = prop[key].Trim().ToLower(System.Globalization.CultureInfo.InvariantCulture);
|
||||
h["align"] = ss;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public FontFactoryImp FontImp {
|
||||
get {
|
||||
return fontImp;
|
||||
}
|
||||
set {
|
||||
fontImp = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static Hashtable followTags = new Hashtable();
|
||||
|
||||
static FactoryProperties() {
|
||||
followTags["i"] = "i";
|
||||
followTags["b"] = "b";
|
||||
followTags["u"] = "u";
|
||||
followTags["sub"] = "sub";
|
||||
followTags["sup"] = "sup";
|
||||
followTags["em"] = "i";
|
||||
followTags["strong"] = "b";
|
||||
followTags["s"] = "s";
|
||||
followTags["strike"] = "s";
|
||||
}
|
||||
}
|
||||
}
|
624
iTechSharp/iTextSharp/text/html/simpleparser/HTMLWorker.cs
Normal file
624
iTechSharp/iTextSharp/text/html/simpleparser/HTMLWorker.cs
Normal file
@@ -0,0 +1,624 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using System.util;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text.xml.simpleparser;
|
||||
/*
|
||||
* Copyright 2004 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
|
||||
public class HTMLWorker : ISimpleXMLDocHandler, IDocListener {
|
||||
|
||||
protected ArrayList objectList;
|
||||
protected IDocListener document;
|
||||
private Paragraph currentParagraph;
|
||||
private ChainedProperties cprops = new ChainedProperties();
|
||||
private Stack stack = new Stack();
|
||||
private bool pendingTR = false;
|
||||
private bool pendingTD = false;
|
||||
private bool pendingLI = false;
|
||||
private StyleSheet style = new StyleSheet();
|
||||
private bool isPRE = false;
|
||||
private Stack tableState = new Stack();
|
||||
private bool skipText = false;
|
||||
private Hashtable interfaceProps;
|
||||
private FactoryProperties factoryProperties = new FactoryProperties();
|
||||
|
||||
/** Creates a new instance of HTMLWorker */
|
||||
public HTMLWorker(IDocListener document) {
|
||||
this.document = document;
|
||||
}
|
||||
|
||||
public StyleSheet Style {
|
||||
set {
|
||||
style = value;
|
||||
}
|
||||
get {
|
||||
return style;
|
||||
}
|
||||
}
|
||||
|
||||
public Hashtable InterfaceProps {
|
||||
set {
|
||||
interfaceProps = value;
|
||||
FontFactoryImp ff = null;
|
||||
if (interfaceProps != null)
|
||||
ff = (FontFactoryImp)interfaceProps["font_factory"];
|
||||
if (ff != null)
|
||||
factoryProperties.FontImp = ff;
|
||||
}
|
||||
get {
|
||||
return interfaceProps;
|
||||
}
|
||||
}
|
||||
|
||||
public void Parse(TextReader reader) {
|
||||
SimpleXMLParser.Parse(this, null, reader, true);
|
||||
}
|
||||
|
||||
public static ArrayList ParseToList(TextReader reader, StyleSheet style) {
|
||||
return ParseToList(reader, style, null);
|
||||
}
|
||||
|
||||
public static ArrayList ParseToList(TextReader reader, StyleSheet style, Hashtable interfaceProps) {
|
||||
HTMLWorker worker = new HTMLWorker(null);
|
||||
if (style != null)
|
||||
worker.Style = style;
|
||||
worker.document = worker;
|
||||
worker.InterfaceProps = interfaceProps;
|
||||
worker.objectList = new ArrayList();
|
||||
worker.Parse(reader);
|
||||
return worker.objectList;
|
||||
}
|
||||
|
||||
public virtual void EndDocument() {
|
||||
foreach (IElement e in stack)
|
||||
document.Add(e);
|
||||
if (currentParagraph != null)
|
||||
document.Add(currentParagraph);
|
||||
currentParagraph = null;
|
||||
}
|
||||
|
||||
public virtual void StartDocument() {
|
||||
Hashtable h = new Hashtable();
|
||||
style.ApplyStyle("body", h);
|
||||
cprops.AddToChain("body", h);
|
||||
}
|
||||
|
||||
public virtual void StartElement(String tag, Hashtable h) {
|
||||
if (!tagsSupported.ContainsKey(tag))
|
||||
return;
|
||||
style.ApplyStyle(tag, h);
|
||||
String follow = (String)FactoryProperties.followTags[tag];
|
||||
if (follow != null) {
|
||||
Hashtable prop = new Hashtable();
|
||||
prop[follow] = null;
|
||||
cprops.AddToChain(follow, prop);
|
||||
return;
|
||||
}
|
||||
FactoryProperties.InsertStyle(h);
|
||||
if (tag.Equals("a")) {
|
||||
cprops.AddToChain(tag, h);
|
||||
if (currentParagraph == null)
|
||||
currentParagraph = new Paragraph();
|
||||
stack.Push(currentParagraph);
|
||||
currentParagraph = new Paragraph();
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("br")) {
|
||||
if (currentParagraph == null)
|
||||
currentParagraph = new Paragraph();
|
||||
currentParagraph.Add(factoryProperties.CreateChunk("\n", cprops));
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("font") || tag.Equals("span")) {
|
||||
cprops.AddToChain(tag, h);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("img")) {
|
||||
String src = (String)h["src"];
|
||||
if (src == null)
|
||||
return;
|
||||
cprops.AddToChain(tag, h);
|
||||
Image img = null;
|
||||
if (interfaceProps != null) {
|
||||
IImageProvider ip = (IImageProvider)interfaceProps["img_provider"];
|
||||
if (ip != null)
|
||||
img = ip.GetImage(src, h, cprops, document);
|
||||
if (img == null) {
|
||||
Hashtable images = (Hashtable)interfaceProps["img_static"];
|
||||
if (images != null) {
|
||||
Image tim = (Image)images[src];
|
||||
if (tim != null)
|
||||
img = Image.GetInstance(tim);
|
||||
} else {
|
||||
if (!src.StartsWith("http")) { // relative src references only
|
||||
String baseurl = (String)interfaceProps["img_baseurl"];
|
||||
if (baseurl != null) {
|
||||
src = baseurl + src;
|
||||
img = Image.GetInstance(src);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (img == null) {
|
||||
if (!src.StartsWith("http")) {
|
||||
String path = cprops["image_path"];
|
||||
if (path == null)
|
||||
path = "";
|
||||
src = Path.Combine(path, src);
|
||||
}
|
||||
img = Image.GetInstance(src);
|
||||
}
|
||||
String align = (String)h["align"];
|
||||
String width = (String)h["width"];
|
||||
String height = (String)h["height"];
|
||||
String before = cprops["before"];
|
||||
String after = cprops["after"];
|
||||
if (before != null)
|
||||
img.SpacingBefore = float.Parse(before, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
if (after != null)
|
||||
img.SpacingAfter = float.Parse(after, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
float wp = LengthParse(width, (int)img.Width);
|
||||
float lp = LengthParse(height, (int)img.Height);
|
||||
if (wp > 0 && lp > 0)
|
||||
img.ScalePercent(wp > lp ? lp : wp);
|
||||
else if (wp > 0)
|
||||
img.ScalePercent(wp);
|
||||
else if (lp > 0)
|
||||
img.ScalePercent(lp);
|
||||
img.WidthPercentage = 0;
|
||||
if (align != null) {
|
||||
EndElement("p");
|
||||
int ralign = Image.MIDDLE_ALIGN;
|
||||
if (Util.EqualsIgnoreCase(align, "left"))
|
||||
ralign = Image.LEFT_ALIGN;
|
||||
else if (Util.EqualsIgnoreCase(align, "right"))
|
||||
ralign = Image.RIGHT_ALIGN;
|
||||
img.Alignment = ralign;
|
||||
IImg i = null;
|
||||
bool skip = false;
|
||||
if (interfaceProps != null) {
|
||||
i = (IImg)interfaceProps["img_interface"];
|
||||
if (i != null)
|
||||
skip = i.Process(img, h, cprops, document);
|
||||
}
|
||||
if (!skip)
|
||||
document.Add(img);
|
||||
cprops.RemoveChain(tag);
|
||||
}
|
||||
else {
|
||||
cprops.RemoveChain(tag);
|
||||
if (currentParagraph == null)
|
||||
currentParagraph = FactoryProperties.CreateParagraph(cprops);
|
||||
currentParagraph.Add(new Chunk(img, 0, 0));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
EndElement("p");
|
||||
if (tag.Equals("h1") || tag.Equals("h2") || tag.Equals("h3") || tag.Equals("h4") || tag.Equals("h5") || tag.Equals("h6")) {
|
||||
if (!h.ContainsKey("size")) {
|
||||
int v = 7 - int.Parse(tag.Substring(1));
|
||||
h["size"] = v.ToString();
|
||||
}
|
||||
cprops.AddToChain(tag, h);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("ul")) {
|
||||
if (pendingLI)
|
||||
EndElement("li");
|
||||
skipText = true;
|
||||
cprops.AddToChain(tag, h);
|
||||
List list = new List(false, 10);
|
||||
list.SetListSymbol("\u2022");
|
||||
stack.Push(list);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("ol")) {
|
||||
if (pendingLI)
|
||||
EndElement("li");
|
||||
skipText = true;
|
||||
cprops.AddToChain(tag, h);
|
||||
List list = new List(true, 10);
|
||||
stack.Push(list);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("li")) {
|
||||
if (pendingLI)
|
||||
EndElement("li");
|
||||
skipText = false;
|
||||
pendingLI = true;
|
||||
cprops.AddToChain(tag, h);
|
||||
stack.Push(FactoryProperties.CreateListItem(cprops));
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("div") || tag.Equals("body")) {
|
||||
cprops.AddToChain(tag, h);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("pre")) {
|
||||
if (!h.ContainsKey("face")) {
|
||||
h["face"] = "Courier";
|
||||
}
|
||||
cprops.AddToChain(tag, h);
|
||||
isPRE = true;
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("p")) {
|
||||
cprops.AddToChain(tag, h);
|
||||
currentParagraph = FactoryProperties.CreateParagraph(h);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("tr")) {
|
||||
if (pendingTR)
|
||||
EndElement("tr");
|
||||
skipText = true;
|
||||
pendingTR = true;
|
||||
cprops.AddToChain("tr", h);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("td") || tag.Equals("th")) {
|
||||
if (pendingTD)
|
||||
EndElement(tag);
|
||||
skipText = false;
|
||||
pendingTD = true;
|
||||
cprops.AddToChain("td", h);
|
||||
stack.Push(new IncCell(tag, cprops));
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("table")) {
|
||||
cprops.AddToChain("table", h);
|
||||
IncTable table = new IncTable(h);
|
||||
stack.Push(table);
|
||||
tableState.Push(new bool[]{pendingTR, pendingTD});
|
||||
pendingTR = pendingTD = false;
|
||||
skipText = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void EndElement(String tag) {
|
||||
if (!tagsSupported.ContainsKey(tag))
|
||||
return;
|
||||
String follow = (String)FactoryProperties.followTags[tag];
|
||||
if (follow != null) {
|
||||
cprops.RemoveChain(follow);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("font") || tag.Equals("span")) {
|
||||
cprops.RemoveChain(tag);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("a")) {
|
||||
if (currentParagraph == null)
|
||||
currentParagraph = new Paragraph();
|
||||
IALink i = null;
|
||||
bool skip = false;
|
||||
if (interfaceProps != null) {
|
||||
i = (IALink)interfaceProps["alink_interface"];
|
||||
if (i != null)
|
||||
skip = i.Process(currentParagraph, cprops);
|
||||
}
|
||||
if (!skip) {
|
||||
String href = cprops["href"];
|
||||
if (href != null) {
|
||||
ArrayList chunks = currentParagraph.Chunks;
|
||||
for (int k = 0; k < chunks.Count; ++k) {
|
||||
Chunk ck = (Chunk)chunks[k];
|
||||
ck.SetAnchor(href);
|
||||
}
|
||||
}
|
||||
}
|
||||
Paragraph tmp = (Paragraph)stack.Pop();
|
||||
Phrase tmp2 = new Phrase();
|
||||
tmp2.Add(currentParagraph);
|
||||
tmp.Add(tmp2);
|
||||
currentParagraph = tmp;
|
||||
cprops.RemoveChain("a");
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("br")) {
|
||||
return;
|
||||
}
|
||||
if (currentParagraph != null) {
|
||||
if (stack.Count == 0)
|
||||
document.Add(currentParagraph);
|
||||
else {
|
||||
Object obj = stack.Pop();
|
||||
if (obj is ITextElementArray) {
|
||||
ITextElementArray current = (ITextElementArray)obj;
|
||||
current.Add(currentParagraph);
|
||||
}
|
||||
stack.Push(obj);
|
||||
}
|
||||
}
|
||||
currentParagraph = null;
|
||||
if (tag.Equals("ul") || tag.Equals("ol")) {
|
||||
if (pendingLI)
|
||||
EndElement("li");
|
||||
skipText = false;
|
||||
cprops.RemoveChain(tag);
|
||||
if (stack.Count == 0)
|
||||
return;
|
||||
Object obj = stack.Pop();
|
||||
if (!(obj is List)) {
|
||||
stack.Push(obj);
|
||||
return;
|
||||
}
|
||||
if (stack.Count == 0)
|
||||
document.Add((IElement)obj);
|
||||
else
|
||||
((ITextElementArray)stack.Peek()).Add(obj);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("li")) {
|
||||
pendingLI = false;
|
||||
skipText = true;
|
||||
cprops.RemoveChain(tag);
|
||||
if (stack.Count == 0)
|
||||
return;
|
||||
Object obj = stack.Pop();
|
||||
if (!(obj is ListItem)) {
|
||||
stack.Push(obj);
|
||||
return;
|
||||
}
|
||||
if (stack.Count == 0) {
|
||||
document.Add((IElement)obj);
|
||||
return;
|
||||
}
|
||||
Object list = stack.Pop();
|
||||
if (!(list is List)) {
|
||||
stack.Push(list);
|
||||
return;
|
||||
}
|
||||
ListItem item = (ListItem)obj;
|
||||
((List)list).Add(item);
|
||||
ArrayList cks = item.Chunks;
|
||||
if (cks.Count > 0)
|
||||
item.ListSymbol.Font = ((Chunk)cks[0]).Font;
|
||||
stack.Push(list);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("div") || tag.Equals("body")) {
|
||||
cprops.RemoveChain(tag);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("pre")) {
|
||||
cprops.RemoveChain(tag);
|
||||
isPRE = false;
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("p")) {
|
||||
cprops.RemoveChain(tag);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("h1") || tag.Equals("h2") || tag.Equals("h3") || tag.Equals("h4") || tag.Equals("h5") || tag.Equals("h6")) {
|
||||
cprops.RemoveChain(tag);
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("table")) {
|
||||
if (pendingTR)
|
||||
EndElement("tr");
|
||||
cprops.RemoveChain("table");
|
||||
IncTable table = (IncTable) stack.Pop();
|
||||
PdfPTable tb = table.BuildTable();
|
||||
tb.SplitRows = true;
|
||||
if (stack.Count == 0)
|
||||
document.Add(tb);
|
||||
else
|
||||
((ITextElementArray)stack.Peek()).Add(tb);
|
||||
bool[] state = (bool[])tableState.Pop();
|
||||
pendingTR = state[0];
|
||||
pendingTD = state[1];
|
||||
skipText = false;
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("tr")) {
|
||||
if (pendingTD)
|
||||
EndElement("td");
|
||||
pendingTR = false;
|
||||
cprops.RemoveChain("tr");
|
||||
ArrayList cells = new ArrayList();
|
||||
IncTable table = null;
|
||||
while (true) {
|
||||
Object obj = stack.Pop();
|
||||
if (obj is IncCell) {
|
||||
cells.Add(((IncCell)obj).Cell);
|
||||
}
|
||||
if (obj is IncTable) {
|
||||
table = (IncTable)obj;
|
||||
break;
|
||||
}
|
||||
}
|
||||
table.AddCols(cells);
|
||||
table.EndRow();
|
||||
stack.Push(table);
|
||||
skipText = true;
|
||||
return;
|
||||
}
|
||||
if (tag.Equals("td") || tag.Equals("th")) {
|
||||
pendingTD = false;
|
||||
cprops.RemoveChain("td");
|
||||
skipText = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Text(String str) {
|
||||
if (skipText)
|
||||
return;
|
||||
String content = str;
|
||||
if (isPRE) {
|
||||
if (currentParagraph == null)
|
||||
currentParagraph = FactoryProperties.CreateParagraph(cprops);
|
||||
currentParagraph.Add(factoryProperties.CreateChunk(content, cprops));
|
||||
return;
|
||||
}
|
||||
if (content.Trim().Length == 0 && content.IndexOf(' ') < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
StringBuilder buf = new StringBuilder();
|
||||
int len = content.Length;
|
||||
char character;
|
||||
bool newline = false;
|
||||
for (int i = 0; i < len; i++) {
|
||||
switch (character = content[i]) {
|
||||
case ' ':
|
||||
if (!newline) {
|
||||
buf.Append(character);
|
||||
}
|
||||
break;
|
||||
case '\n':
|
||||
if (i > 0) {
|
||||
newline = true;
|
||||
buf.Append(' ');
|
||||
}
|
||||
break;
|
||||
case '\r':
|
||||
break;
|
||||
case '\t':
|
||||
break;
|
||||
default:
|
||||
newline = false;
|
||||
buf.Append(character);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (currentParagraph == null)
|
||||
currentParagraph = FactoryProperties.CreateParagraph(cprops);
|
||||
currentParagraph.Add(factoryProperties.CreateChunk(buf.ToString(), cprops));
|
||||
}
|
||||
|
||||
public bool Add(IElement element) {
|
||||
objectList.Add(element);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void ClearTextWrap() {
|
||||
}
|
||||
|
||||
public void Close() {
|
||||
}
|
||||
|
||||
public bool NewPage() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Open() {
|
||||
}
|
||||
|
||||
public void ResetFooter() {
|
||||
}
|
||||
|
||||
public void ResetHeader() {
|
||||
}
|
||||
|
||||
public void ResetPageCount() {
|
||||
}
|
||||
|
||||
public bool SetMarginMirroring(bool marginMirroring) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool SetMargins(float marginLeft, float marginRight, float marginTop, float marginBottom) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool SetPageSize(Rectangle pageSize) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public const String tagsSupportedString = "ol ul li a pre font span br p div body table td th tr i b u sub sup em strong s strike"
|
||||
+ " h1 h2 h3 h4 h5 h6 img";
|
||||
|
||||
public static Hashtable tagsSupported = new Hashtable();
|
||||
|
||||
static HTMLWorker() {
|
||||
StringTokenizer tok = new StringTokenizer(tagsSupportedString);
|
||||
while (tok.HasMoreTokens())
|
||||
tagsSupported[tok.NextToken()] = null;
|
||||
}
|
||||
|
||||
public HeaderFooter Footer {
|
||||
set {
|
||||
}
|
||||
}
|
||||
|
||||
public HeaderFooter Header {
|
||||
set {
|
||||
}
|
||||
}
|
||||
|
||||
public int PageCount {
|
||||
set {
|
||||
}
|
||||
}
|
||||
|
||||
private static float LengthParse(String txt, int c) {
|
||||
if (txt == null)
|
||||
return -1;
|
||||
if (txt.EndsWith("%")) {
|
||||
float vf = float.Parse(txt.Substring(0, txt.Length - 1), System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
return vf;
|
||||
}
|
||||
if (txt.EndsWith("px")) {
|
||||
float vf = float.Parse(txt.Substring(0, txt.Length - 2), System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
return vf;
|
||||
}
|
||||
int v = int.Parse(txt);
|
||||
return (float)v / c * 100f;
|
||||
}
|
||||
}
|
||||
}
|
54
iTechSharp/iTextSharp/text/html/simpleparser/IALink.cs
Normal file
54
iTechSharp/iTextSharp/text/html/simpleparser/IALink.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System;
|
||||
using iTextSharp.text;
|
||||
/*
|
||||
* Copyright 2005 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
public interface IALink {
|
||||
bool Process(Paragraph current, ChainedProperties cprops);
|
||||
}
|
||||
}
|
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using iTextSharp.text;
|
||||
/*
|
||||
* Copyright 2007 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
public interface IImageProvider {
|
||||
Image GetImage(String src, Hashtable h, ChainedProperties cprops, IDocListener doc);
|
||||
}
|
||||
}
|
55
iTechSharp/iTextSharp/text/html/simpleparser/IImg.cs
Normal file
55
iTechSharp/iTextSharp/text/html/simpleparser/IImg.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using iTextSharp.text;
|
||||
|
||||
/*
|
||||
* Copyright 2005 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
public interface IImg {
|
||||
bool Process(Image img, Hashtable h, ChainedProperties cprops, IDocListener doc);
|
||||
}
|
||||
}
|
153
iTechSharp/iTextSharp/text/html/simpleparser/IncCell.cs
Normal file
153
iTechSharp/iTextSharp/text/html/simpleparser/IncCell.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.util;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.pdf;
|
||||
using iTextSharp.text.html;
|
||||
/*
|
||||
* Copyright 2004 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
/**
|
||||
*
|
||||
* @author psoares
|
||||
*/
|
||||
public class IncCell : ITextElementArray {
|
||||
|
||||
private ArrayList chunks = new ArrayList();
|
||||
private PdfPCell cell;
|
||||
|
||||
/** Creates a new instance of IncCell */
|
||||
public IncCell(String tag, ChainedProperties props) {
|
||||
cell = new PdfPCell();
|
||||
String value = props["colspan"];
|
||||
if (value != null)
|
||||
cell.Colspan = int.Parse(value);
|
||||
value = props["align"];
|
||||
if (tag.Equals("th"))
|
||||
cell.HorizontalAlignment = Element.ALIGN_CENTER;
|
||||
if (value != null) {
|
||||
if (Util.EqualsIgnoreCase(value, "center"))
|
||||
cell.HorizontalAlignment = Element.ALIGN_CENTER;
|
||||
else if (Util.EqualsIgnoreCase(value, "right"))
|
||||
cell.HorizontalAlignment = Element.ALIGN_RIGHT;
|
||||
else if (Util.EqualsIgnoreCase(value, "left"))
|
||||
cell.HorizontalAlignment = Element.ALIGN_LEFT;
|
||||
else if (Util.EqualsIgnoreCase(value, "justify"))
|
||||
cell.HorizontalAlignment = Element.ALIGN_JUSTIFIED;
|
||||
}
|
||||
value = props["valign"];
|
||||
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
|
||||
if (value != null) {
|
||||
if (Util.EqualsIgnoreCase(value, "top"))
|
||||
cell.VerticalAlignment = Element.ALIGN_TOP;
|
||||
else if (Util.EqualsIgnoreCase(value, "bottom"))
|
||||
cell.VerticalAlignment = Element.ALIGN_BOTTOM;
|
||||
}
|
||||
value = props["border"];
|
||||
float border = 0;
|
||||
if (value != null)
|
||||
border = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
cell.BorderWidth = border;
|
||||
value = props["cellpadding"];
|
||||
if (value != null)
|
||||
cell.Padding = float.Parse(value, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
cell.UseDescender = true;
|
||||
value = props["bgcolor"];
|
||||
cell.BackgroundColor = Markup.DecodeColor(value);
|
||||
}
|
||||
|
||||
public bool Add(Object o) {
|
||||
if (!(o is IElement))
|
||||
return false;
|
||||
cell.AddElement((IElement)o);
|
||||
return true;
|
||||
}
|
||||
|
||||
public ArrayList Chunks {
|
||||
get {
|
||||
return chunks;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Process(IElementListener listener) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public int Type {
|
||||
get {
|
||||
return Element.RECTANGLE;
|
||||
}
|
||||
}
|
||||
|
||||
public PdfPCell Cell {
|
||||
get {
|
||||
return cell;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @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();
|
||||
}
|
||||
}
|
||||
}
|
124
iTechSharp/iTextSharp/text/html/simpleparser/IncTable.cs
Normal file
124
iTechSharp/iTextSharp/text/html/simpleparser/IncTable.cs
Normal file
@@ -0,0 +1,124 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using iTextSharp.text;
|
||||
using iTextSharp.text.pdf;
|
||||
/*
|
||||
* Copyright 2004 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
|
||||
/**
|
||||
*
|
||||
* @author psoares
|
||||
*/
|
||||
public class IncTable {
|
||||
private Hashtable props = new Hashtable();
|
||||
private ArrayList rows = new ArrayList();
|
||||
private ArrayList cols;
|
||||
/** Creates a new instance of IncTable */
|
||||
public IncTable(Hashtable props) {
|
||||
foreach (DictionaryEntry dc in props)
|
||||
this.props[dc.Key] = dc.Value;
|
||||
}
|
||||
|
||||
public void AddCol(PdfPCell cell) {
|
||||
if (cols == null)
|
||||
cols = new ArrayList();
|
||||
cols.Add(cell);
|
||||
}
|
||||
|
||||
public void AddCols(ArrayList ncols) {
|
||||
if (cols == null)
|
||||
cols = new ArrayList(ncols);
|
||||
else
|
||||
cols.AddRange(ncols);
|
||||
}
|
||||
|
||||
public void EndRow() {
|
||||
if (cols != null) {
|
||||
cols.Reverse();
|
||||
rows.Add(cols);
|
||||
cols = null;
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList Rows {
|
||||
get {
|
||||
return rows;
|
||||
}
|
||||
}
|
||||
|
||||
public PdfPTable BuildTable() {
|
||||
if (rows.Count == 0)
|
||||
return new PdfPTable(1);
|
||||
int ncol = 0;
|
||||
ArrayList c0 = (ArrayList)rows[0];
|
||||
for (int k = 0; k < c0.Count; ++k) {
|
||||
ncol += ((PdfPCell)c0[k]).Colspan;
|
||||
}
|
||||
PdfPTable table = new PdfPTable(ncol);
|
||||
String width = (String)props["width"];
|
||||
if (width == null)
|
||||
table.WidthPercentage = 100;
|
||||
else {
|
||||
if (width.EndsWith("%"))
|
||||
table.WidthPercentage = float.Parse(width.Substring(0, width.Length - 1), System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
else {
|
||||
table.TotalWidth = float.Parse(width, System.Globalization.NumberFormatInfo.InvariantInfo);
|
||||
table.LockedWidth = true;
|
||||
}
|
||||
}
|
||||
for (int row = 0; row < rows.Count; ++row) {
|
||||
ArrayList col = (ArrayList)rows[row];
|
||||
for (int k = 0; k < col.Count; ++k) {
|
||||
table.AddCell((PdfPCell)col[k]);
|
||||
}
|
||||
}
|
||||
return table;
|
||||
}
|
||||
}
|
||||
}
|
117
iTechSharp/iTextSharp/text/html/simpleparser/StyleSheet.cs
Normal file
117
iTechSharp/iTextSharp/text/html/simpleparser/StyleSheet.cs
Normal file
@@ -0,0 +1,117 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
/*
|
||||
* Copyright 2004 Paulo Soares
|
||||
*
|
||||
* 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.html.simpleparser {
|
||||
|
||||
public class StyleSheet {
|
||||
|
||||
public Hashtable classMap = new Hashtable();
|
||||
public Hashtable tagMap = new Hashtable();
|
||||
|
||||
/** Creates a new instance of StyleSheet */
|
||||
public StyleSheet() {
|
||||
}
|
||||
|
||||
public void ApplyStyle(String tag, Hashtable props) {
|
||||
Hashtable map = (Hashtable)tagMap[tag.ToLower(System.Globalization.CultureInfo.InvariantCulture)];
|
||||
Hashtable temp;
|
||||
if (map != null) {
|
||||
temp = new Hashtable(map);
|
||||
foreach (DictionaryEntry dc in props)
|
||||
temp[dc.Key] = dc.Value;
|
||||
foreach (DictionaryEntry dc in temp)
|
||||
props[dc.Key] = dc.Value;
|
||||
}
|
||||
String cm = (String)props["class"];
|
||||
if (cm == null)
|
||||
return;
|
||||
map = (Hashtable)classMap[cm.ToLower(System.Globalization.CultureInfo.InvariantCulture)];
|
||||
if (map == null)
|
||||
return;
|
||||
props.Remove("class");
|
||||
temp = new Hashtable(map);
|
||||
foreach (DictionaryEntry dc in props)
|
||||
temp[dc.Key] = dc.Value;
|
||||
foreach (DictionaryEntry dc in temp)
|
||||
props[dc.Key] = dc.Value;
|
||||
}
|
||||
|
||||
private void ApplyMap(Hashtable map, Hashtable props) {
|
||||
|
||||
}
|
||||
|
||||
public void LoadStyle(String style, Hashtable props) {
|
||||
classMap[style.ToLower(System.Globalization.CultureInfo.InvariantCulture)] = props;
|
||||
}
|
||||
|
||||
public void LoadStyle(String style, String key, String value) {
|
||||
style = style.ToLower(System.Globalization.CultureInfo.InvariantCulture);
|
||||
Hashtable props = (Hashtable)classMap[style];
|
||||
if (props == null) {
|
||||
props = new Hashtable();
|
||||
classMap[style] = props;
|
||||
}
|
||||
props[key] = value;
|
||||
}
|
||||
|
||||
public void LoadTagStyle(String tag, Hashtable props) {
|
||||
tagMap[tag.ToLower(System.Globalization.CultureInfo.InvariantCulture)] = props;
|
||||
}
|
||||
|
||||
public void LoadTagStyle(String tag, String key, String value) {
|
||||
tag = tag.ToLower(System.Globalization.CultureInfo.InvariantCulture);
|
||||
Hashtable props = (Hashtable)tagMap[tag];
|
||||
if (props == null) {
|
||||
props = new Hashtable();
|
||||
tagMap[tag] = props;
|
||||
}
|
||||
props[key] = value;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user