protected override void ProcessParagraph(HWPFDocumentCore wordDocument, XmlElement parentElement, int currentTableLevel, Paragraph paragraph, string bulletText) { XmlElement pElement = htmlDocumentFacade.CreateParagraph(); parentElement.AppendChild(pElement); StringBuilder style = new StringBuilder(); WordToHtmlUtils.AddParagraphProperties(paragraph, style); int charRuns = paragraph.NumCharacterRuns; if (charRuns == 0) { return; } { String pFontName; int pFontSize; CharacterRun characterRun = paragraph.GetCharacterRun(0); if (characterRun != null) { Triplet triplet = GetCharacterRunTriplet(characterRun); pFontSize = characterRun.GetFontSize() / 2; pFontName = triplet.fontName; WordToHtmlUtils.AddFontFamily(pFontName, style); WordToHtmlUtils.AddFontSize(pFontSize, style); } else { pFontSize = -1; pFontName = string.Empty; } blocksProperies.Push(new BlockProperies(pFontName, pFontSize)); } try { if (!string.IsNullOrEmpty(bulletText)) { XmlText textNode = htmlDocumentFacade.CreateText(bulletText); pElement.AppendChild(textNode); } ProcessCharacters(wordDocument, currentTableLevel, paragraph, pElement); } finally { blocksProperies.Pop(); } if (style.Length > 0) { htmlDocumentFacade.AddStyleClass(pElement, "p", style.ToString()); } WordToHtmlUtils.CompactSpans(pElement); }
public static XmlDocument Process(string docFile) { HWPFDocumentCore wordDocument = WordToHtmlUtils.LoadDoc(docFile); XmlDocument xmlDoc = new XmlDocument(); //WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(xmlDoc); // wordToHtmlConverter.ProcessDocument(wordDocument); return(xmlDoc); }
protected override void OutputCharacters(XmlElement pElement, CharacterRun characterRun, string text) { XmlElement span = htmlDocumentFacade.Document.CreateElement("span"); pElement.AppendChild(span); StringBuilder style = new StringBuilder(); BlockProperies blockProperies = this.blocksProperies.Peek(); Triplet triplet = GetCharacterRunTriplet(characterRun); if (!string.IsNullOrEmpty(triplet.fontName) && !WordToHtmlUtils.Equals(triplet.fontName, blockProperies.pFontName)) { style.Append("font-family:" + triplet.fontName + ";"); } if (characterRun.GetFontSize() / 2 != blockProperies.pFontSize) { style.Append("font-size:" + characterRun.GetFontSize() / 2 + "pt;"); } if (triplet.bold) { style.Append("font-weight:bold;"); } if (triplet.italic) { style.Append("font-style:italic;"); } WordToHtmlUtils.AddCharactersProperties(characterRun, style); if (style.Length != 0) { htmlDocumentFacade.AddStyleClass(span, "s", style.ToString()); } XmlText textNode = htmlDocumentFacade.CreateText(text); span.AppendChild(textNode); }
protected override void ProcessTable(HWPFDocumentCore wordDocument, XmlElement flow, Table table) { XmlElement tableHeader = foDocumentFacade.CreateTableHeader(); XmlElement tableBody = foDocumentFacade.CreateTableBody(); int[] tableCellEdges = WordToHtmlUtils.BuildTableCellEdgesArray(table); int tableRows = table.NumRows; int maxColumns = int.MinValue; for (int r = 0; r < tableRows; r++) { maxColumns = Math.Max(maxColumns, table.GetRow(r).NumCells()); } for (int r = 0; r < tableRows; r++) { TableRow tableRow = table.GetRow(r); XmlElement tableRowElement = foDocumentFacade.CreateTableRow(); WordToFoUtils.SetTableRowProperties(tableRow, tableRowElement); // index of current element in tableCellEdges[] int currentEdgeIndex = 0; int rowCells = tableRow.NumCells(); for (int c = 0; c < rowCells; c++) { TableCell tableCell = tableRow.GetCell(c); if (tableCell.IsVerticallyMerged() && !tableCell.IsFirstVerticallyMerged()) { currentEdgeIndex += getTableCellEdgesIndexSkipCount(table, r, tableCellEdges, currentEdgeIndex, c, tableCell); continue; } XmlElement tableCellElement = foDocumentFacade.CreateTableCell(); WordToFoUtils.SetTableCellProperties(tableRow, tableCell, tableCellElement, r == 0, r == tableRows - 1, c == 0, c == rowCells - 1); int colSpan = GetNumberColumnsSpanned(tableCellEdges, currentEdgeIndex, tableCell); currentEdgeIndex += colSpan; if (colSpan == 0) { continue; } if (colSpan != 1) { tableCellElement.SetAttribute("number-columns-spanned", (colSpan).ToString()); } int rowSpan = GetNumberRowsSpanned(table, r, c, tableCell); if (rowSpan > 1) { tableCellElement.SetAttribute("number-rows-spanned", (rowSpan).ToString()); } ProcessParagraphes(wordDocument, tableCellElement, tableCell, table.TableLevel); if (!tableCellElement.HasChildNodes) { tableCellElement.AppendChild(foDocumentFacade .CreateBlock()); } tableRowElement.AppendChild(tableCellElement); } if (tableRowElement.HasChildNodes) { if (tableRow.isTableHeader()) { tableHeader.AppendChild(tableRowElement); } else { tableBody.AppendChild(tableRowElement); } } } XmlElement tableElement = foDocumentFacade.CreateTable(); tableElement.SetAttribute("table-layout", "fixed"); if (tableHeader.HasChildNodes) { tableElement.AppendChild(tableHeader); } if (tableBody.HasChildNodes) { tableElement.AppendChild(tableBody); flow.AppendChild(tableElement); } else { logger.Log(POILogger.WARN, "Table without body starting on offset " + table.StartOffset + " -- " + table.EndOffset); } }
protected override void ProcessTable(HWPFDocumentCore wordDocument, XmlElement flow, Table table) { XmlElement tableHeader = htmlDocumentFacade.CreateTableHeader(); XmlElement tableBody = htmlDocumentFacade.CreateTableBody(); int[] tableCellEdges = WordToHtmlUtils.BuildTableCellEdgesArray(table); int tableRows = table.NumRows; int maxColumns = int.MinValue; for (int r = 0; r < tableRows; r++) { maxColumns = Math.Max(maxColumns, table.GetRow(r).NumCells()); } for (int r = 0; r < tableRows; r++) { TableRow tableRow = table.GetRow(r); XmlElement tableRowElement = htmlDocumentFacade.CreateTableRow(); StringBuilder tableRowStyle = new StringBuilder(); WordToHtmlUtils.AddTableRowProperties(tableRow, tableRowStyle); // index of current element in tableCellEdges[] int currentEdgeIndex = 0; int rowCells = tableRow.NumCells(); for (int c = 0; c < rowCells; c++) { TableCell tableCell = tableRow.GetCell(c); if (tableCell.IsVerticallyMerged() && !tableCell.IsFirstVerticallyMerged()) { currentEdgeIndex += getTableCellEdgesIndexSkipCount(table, r, tableCellEdges, currentEdgeIndex, c, tableCell); continue; } XmlElement tableCellElement; if (tableRow.isTableHeader()) { tableCellElement = htmlDocumentFacade.CreateTableHeaderCell(); } else { tableCellElement = htmlDocumentFacade.CreateTableCell(); } StringBuilder tableCellStyle = new StringBuilder(); WordToHtmlUtils.AddTableCellProperties(tableRow, tableCell, r == 0, r == tableRows - 1, c == 0, c == rowCells - 1, tableCellStyle); int colSpan = GetNumberColumnsSpanned(tableCellEdges, currentEdgeIndex, tableCell); currentEdgeIndex += colSpan; if (colSpan == 0) { continue; } if (colSpan != 1) { tableCellElement.SetAttribute("colspan", colSpan.ToString()); } int rowSpan = GetNumberRowsSpanned(table, r, c, tableCell); if (rowSpan > 1) { tableCellElement.SetAttribute("rowspan", rowSpan.ToString()); } ProcessParagraphes(wordDocument, tableCellElement, tableCell, 0 /*table.TableLevel Todo: */); if (!tableCellElement.HasChildNodes) { tableCellElement.AppendChild(htmlDocumentFacade.CreateParagraph()); } if (tableCellStyle.Length > 0) { htmlDocumentFacade.AddStyleClass(tableCellElement, tableCellElement.LocalName, tableCellStyle.ToString()); } tableRowElement.AppendChild(tableCellElement); } if (tableRowStyle.Length > 0) { tableRowElement.SetAttribute("class", htmlDocumentFacade.GetOrCreateCssClass("tr", "r", tableRowStyle.ToString())); } if (tableRow.isTableHeader()) { tableHeader.AppendChild(tableRowElement); } else { tableBody.AppendChild(tableRowElement); } } XmlElement tableElement = htmlDocumentFacade.CreateTable(); tableElement.SetAttribute("class", htmlDocumentFacade.GetOrCreateCssClass(tableElement.LocalName, "t", "table-layout:fixed;border-collapse:collapse;border-spacing:0;")); if (tableHeader.HasChildNodes) { tableElement.AppendChild(tableHeader); } if (tableBody.HasChildNodes) { tableElement.AppendChild(tableBody); flow.AppendChild(tableElement); } else { logger.Log(POILogger.WARN, "Table without body starting at [", table.StartOffset.ToString(), "; ", table.EndOffset.ToString(), ")"); } }