/** * Writes the HTML representation of a section. * * @param section the section to write * @param indent the indentation */ protected void WriteSection(Section section, int indent) { if (section.Title != null) { int depth = section.Depth - 1; if (depth > 5) { depth = 5; } itextProperties styleAttributes = new itextProperties(); if (section.Title.HasLeading()) { styleAttributes[Markup.CSS_KEY_LINEHEIGHT] = section.Title.TotalLeading.ToString() + "pt"; } // start tag AddTabs(indent); WriteStart(HtmlTags.H[depth]); Write(section.Title.Font, styleAttributes); String alignment = HtmlEncoder.GetAlignment(section.Title.Alignment); if (!"".Equals(alignment)) { Write(HtmlTags.ALIGN, alignment); } WriteMarkupAttributes(markup); os.WriteByte(GT); currentfont.Push(section.Title.Font); // contents foreach (IElement i in section.Title) { Write(i, indent + 1); } // end tag AddTabs(indent); WriteEnd(HtmlTags.H[depth]); currentfont.Pop(); } foreach (IElement i in section) { Write(i, indent); } }
/** * Writes the HTML representation of an element. * * @param element the element * @param indent the indentation */ protected void Write(IElement element, int indent) { itextProperties styleAttributes = null; switch (element.Type) { case Element.MARKED: { try { Add(element); } catch (DocumentException) { } return; } case Element.CHUNK: { Chunk chunk = (Chunk)element; // if the chunk contains an image, return the image representation Image image = chunk.GetImage(); if (image != null) { Write(image, indent); return; } if (chunk.IsEmpty()) { return; } Hashtable attributes = chunk.Attributes; if (attributes != null && attributes[Chunk.NEWPAGE] != null) { return; } bool tag = IsOtherFont(chunk.Font) || markup.Count > 0; if (tag) { // start span tag AddTabs(indent); WriteStart(HtmlTags.SPAN); if (IsOtherFont(chunk.Font)) { Write(chunk.Font, null); } WriteMarkupAttributes(markup); os.WriteByte(GT); } if (attributes != null && attributes[Chunk.SUBSUPSCRIPT] != null) { // start sup or sub tag if ((float)attributes[Chunk.SUBSUPSCRIPT] > 0) { WriteStart(HtmlTags.SUP); } else { WriteStart(HtmlTags.SUB); } os.WriteByte(GT); } // contents Write(HtmlEncoder.Encode(chunk.Content)); if (attributes != null && attributes[Chunk.SUBSUPSCRIPT] != null) { // end sup or sub tag os.WriteByte(LT); os.WriteByte(FORWARD); if ((float)attributes[Chunk.SUBSUPSCRIPT] > 0) { Write(HtmlTags.SUP); } else { Write(HtmlTags.SUB); } os.WriteByte(GT); } if (tag) { // end tag WriteEnd(Markup.HTML_TAG_SPAN); } return; } case Element.PHRASE: { Phrase phrase = (Phrase)element; styleAttributes = new itextProperties(); if (phrase.HasLeading()) { styleAttributes[Markup.CSS_KEY_LINEHEIGHT] = phrase.Leading.ToString() + "pt"; } // start tag AddTabs(indent); WriteStart(Markup.HTML_TAG_SPAN); WriteMarkupAttributes(markup); Write(phrase.Font, styleAttributes); os.WriteByte(GT); currentfont.Push(phrase.Font); // contents foreach (IElement i in phrase) { Write(i, indent + 1); } // end tag AddTabs(indent); WriteEnd(Markup.HTML_TAG_SPAN); currentfont.Pop(); return; } case Element.ANCHOR: { Anchor anchor = (Anchor)element; styleAttributes = new itextProperties(); if (anchor.HasLeading()) { styleAttributes[Markup.CSS_KEY_LINEHEIGHT] = anchor.Leading.ToString() + "pt"; } // start tag AddTabs(indent); WriteStart(HtmlTags.ANCHOR); if (anchor.Name != null) { Write(HtmlTags.NAME, anchor.Name); } if (anchor.Reference != null) { Write(HtmlTags.REFERENCE, anchor.Reference); } WriteMarkupAttributes(markup); Write(anchor.Font, styleAttributes); os.WriteByte(GT); currentfont.Push(anchor.Font); // contents foreach (IElement i in anchor) { Write(i, indent + 1); } // end tag AddTabs(indent); WriteEnd(HtmlTags.ANCHOR); currentfont.Pop(); return; } case Element.PARAGRAPH: { Paragraph paragraph = (Paragraph)element; styleAttributes = new itextProperties(); if (paragraph.HasLeading()) { styleAttributes[Markup.CSS_KEY_LINEHEIGHT] = paragraph.TotalLeading.ToString() + "pt"; } // start tag AddTabs(indent); WriteStart(HtmlTags.DIV); WriteMarkupAttributes(markup); String alignment = HtmlEncoder.GetAlignment(paragraph.Alignment); if (!"".Equals(alignment)) { Write(HtmlTags.ALIGN, alignment); } Write(paragraph.Font, styleAttributes); os.WriteByte(GT); currentfont.Push(paragraph.Font); // contents foreach (IElement i in paragraph) { Write(i, indent + 1); } // end tag AddTabs(indent); WriteEnd(HtmlTags.DIV); currentfont.Pop(); return; } case Element.SECTION: case Element.CHAPTER: { // part of the start tag + contents WriteSection((Section)element, indent); return; } case Element.LIST: { List list = (List)element; // start tag AddTabs(indent); if (list.Numbered) { WriteStart(HtmlTags.ORDEREDLIST); } else { WriteStart(HtmlTags.UNORDEREDLIST); } WriteMarkupAttributes(markup); os.WriteByte(GT); // contents foreach (IElement i in list.Items) { Write(i, indent + 1); } // end tag AddTabs(indent); if (list.Numbered) { WriteEnd(HtmlTags.ORDEREDLIST); } else { WriteEnd(HtmlTags.UNORDEREDLIST); } return; } case Element.LISTITEM: { ListItem listItem = (ListItem)element; styleAttributes = new itextProperties(); if (listItem.HasLeading()) { styleAttributes[Markup.CSS_KEY_LINEHEIGHT] = listItem.TotalLeading.ToString() + "pt"; } // start tag AddTabs(indent); WriteStart(HtmlTags.LISTITEM); WriteMarkupAttributes(markup); Write(listItem.Font, styleAttributes); os.WriteByte(GT); currentfont.Push(listItem.Font); // contents foreach (IElement i in listItem) { Write(i, indent + 1); } // end tag AddTabs(indent); WriteEnd(HtmlTags.LISTITEM); currentfont.Pop(); return; } case Element.CELL: { Cell cell = (Cell)element; // start tag AddTabs(indent); if (cell.Header) { WriteStart(HtmlTags.HEADERCELL); } else { WriteStart(HtmlTags.CELL); } WriteMarkupAttributes(markup); if (cell.BorderWidth != Rectangle.UNDEFINED) { Write(HtmlTags.BORDERWIDTH, cell.BorderWidth.ToString()); } if (cell.BorderColor != null) { Write(HtmlTags.BORDERCOLOR, HtmlEncoder.Encode(cell.BorderColor)); } if (cell.BackgroundColor != null) { Write(HtmlTags.BACKGROUNDCOLOR, HtmlEncoder.Encode(cell.BackgroundColor)); } String alignment = HtmlEncoder.GetAlignment(cell.HorizontalAlignment); if (!"".Equals(alignment)) { Write(HtmlTags.HORIZONTALALIGN, alignment); } alignment = HtmlEncoder.GetAlignment(cell.VerticalAlignment); if (!"".Equals(alignment)) { Write(HtmlTags.VERTICALALIGN, alignment); } if (cell.GetWidthAsString() != null) { Write(HtmlTags.WIDTH, cell.GetWidthAsString()); } if (cell.Colspan != 1) { Write(HtmlTags.COLSPAN, cell.Colspan.ToString()); } if (cell.Rowspan != 1) { Write(HtmlTags.ROWSPAN, cell.Rowspan.ToString()); } if (cell.MaxLines == 1) { Write(HtmlTags.STYLE, "white-space: nowrap;"); } os.WriteByte(GT); // contents if (cell.IsEmpty()) { Write(NBSP); } else { foreach (IElement i in cell.Elements) { Write(i, indent + 1); } } // end tag AddTabs(indent); if (cell.Header) { WriteEnd(HtmlTags.HEADERCELL); } else { WriteEnd(HtmlTags.CELL); } return; } case Element.ROW: { Row row = (Row)element; // start tag AddTabs(indent); WriteStart(HtmlTags.ROW); WriteMarkupAttributes(markup); os.WriteByte(GT); // contents IElement cell; for (int i = 0; i < row.Columns; i++) { if ((cell = (IElement)row.GetCell(i)) != null) { Write(cell, indent + 1); } } // end tag AddTabs(indent); WriteEnd(HtmlTags.ROW); return; } case Element.TABLE: { Table table; try { table = (Table)element; } catch (InvalidCastException) { table = ((SimpleTable)element).CreateTable(); } table.Complete(); // start tag AddTabs(indent); WriteStart(HtmlTags.TABLE); WriteMarkupAttributes(markup); os.WriteByte(SPACE); Write(HtmlTags.WIDTH); os.WriteByte(EQUALS); os.WriteByte(QUOTE); Write(table.Width.ToString(System.Globalization.CultureInfo.InvariantCulture)); if (!table.Locked) { Write("%"); } os.WriteByte(QUOTE); String alignment = HtmlEncoder.GetAlignment(table.Alignment); if (!"".Equals(alignment)) { Write(HtmlTags.ALIGN, alignment); } Write(HtmlTags.CELLPADDING, table.Cellpadding.ToString(System.Globalization.CultureInfo.InvariantCulture)); Write(HtmlTags.CELLSPACING, table.Cellspacing.ToString(System.Globalization.CultureInfo.InvariantCulture)); if (table.BorderWidth != Rectangle.UNDEFINED) { Write(HtmlTags.BORDERWIDTH, table.BorderWidth.ToString(System.Globalization.CultureInfo.InvariantCulture)); } if (table.BorderColor != null) { Write(HtmlTags.BORDERCOLOR, HtmlEncoder.Encode(table.BorderColor)); } if (table.BackgroundColor != null) { Write(HtmlTags.BACKGROUNDCOLOR, HtmlEncoder.Encode(table.BackgroundColor)); } os.WriteByte(GT); // contents foreach (Row row in table) { Write(row, indent + 1); } // end tag AddTabs(indent); WriteEnd(HtmlTags.TABLE); return; } case Element.ANNOTATION: { Annotation annotation = (Annotation)element; WriteComment(annotation.Title + ": " + annotation.Content); return; } case Element.IMGRAW: case Element.JPEG: case Element.JPEG2000: case Element.IMGTEMPLATE: { Image image = (Image)element; if (image.Url == null) { return; } // start tag AddTabs(indent); WriteStart(HtmlTags.IMAGE); String path = image.Url.ToString(); if (imagepath != null) { if (path.IndexOf('/') > 0) { path = imagepath + path.Substring(path.LastIndexOf('/') + 1); } else { path = imagepath + path; } } Write(HtmlTags.URL, path); if ((image.Alignment & Image.RIGHT_ALIGN) > 0) { Write(HtmlTags.ALIGN, HtmlTags.ALIGN_RIGHT); } else if ((image.Alignment & Image.MIDDLE_ALIGN) > 0) { Write(HtmlTags.ALIGN, HtmlTags.ALIGN_MIDDLE); } else { Write(HtmlTags.ALIGN, HtmlTags.ALIGN_LEFT); } if (image.Alt != null) { Write(HtmlTags.ALT, image.Alt); } Write(HtmlTags.PLAINWIDTH, image.ScaledWidth.ToString()); Write(HtmlTags.PLAINHEIGHT, image.ScaledHeight.ToString()); WriteMarkupAttributes(markup); WriteEnd(); return; } default: return; } }