From 421e39644149c635c35749cda307efd98f0dcddd Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Tue, 15 Mar 2016 16:26:12 +0000 Subject: [PATCH] fpvectorial: Improves html with images on tables git-svn-id: trunk@51953 - --- components/fpvectorial/fpvectorial.pas | 2 +- .../fpvectorial/htmlvectorialreader.pas | 30 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/components/fpvectorial/fpvectorial.pas b/components/fpvectorial/fpvectorial.pas index 183a9958a2..8dd796c8cd 100644 --- a/components/fpvectorial/fpvectorial.pas +++ b/components/fpvectorial/fpvectorial.pas @@ -2289,7 +2289,7 @@ var OriginalColWidthsInMM: array of Double; CurRowTableWidth: Double; begin - SetLength(ColWidthsInMM, GetRowCount()); + SetLength(ColWidthsInMM, GetColCount()); // Process predefined widths for col := 0 to Length(ColWidthsInMM)-1 do diff --git a/components/fpvectorial/htmlvectorialreader.pas b/components/fpvectorial/htmlvectorialreader.pas index 89c9501aa2..74af450d03 100644 --- a/components/fpvectorial/htmlvectorialreader.pas +++ b/components/fpvectorial/htmlvectorialreader.pas @@ -34,6 +34,7 @@ type function ReadHeaderFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity; procedure ReadParagraphFromNode(ADest: TvParagraph; ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument); function ReadSVGFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity; + function ReadSVGFromNode_WithEmbDoc(ANode: TDOMNode; AEmbDoc: TvEmbeddedVectorialDoc; ADoc: TvVectorialDocument): TvEntity; function ReadMathFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity; function ReadTableFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity; function ReadTableRowNode(ATable: TvTable; ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity; @@ -106,7 +107,7 @@ begin // Raw text if (ANode is TDOMText) and (lEntityName = '#text') then begin - lTextValue := Trim(ANode.NodeValue); + lTextValue := RemoveLineEndingsAndTrim(ANode.NodeValue); if (lTextValue <> '') then begin AData.AddParagraph().AddText(lTextValue); @@ -290,6 +291,11 @@ begin lEmbVecImg.Height := lHeight; end; end; + 'svg': + begin + lEmbVecImg := ADest.AddEmbeddedVectorialDoc(); + ReadSVGFromNode_WithEmbDoc(lCurNode, lEmbVecImg, ADoc); + end; end; lCurNode := lCurNode.NextSibling; @@ -318,6 +324,26 @@ begin end; end; +function TvHTMLVectorialReader.ReadSVGFromNode_WithEmbDoc(ANode: TDOMNode; + AEmbDoc: TvEmbeddedVectorialDoc; ADoc: TvVectorialDocument): TvEntity; +var + CurSVG: TvEmbeddedVectorialDoc; + lText: TvText; + lDoc: TXMLDocument; + lImportedNode: TDOMNode; +begin + Result := nil; + CurSVG := AEmbDoc; + lDoc := TXMLDocument.Create; + try + lImportedNode := lDoc.ImportNode(ANode, True); + lDoc.AppendChild(lImportedNode); + CurSVG.Document.ReadFromXML(lDoc, vfSVG); + finally + lDoc.Free; + end; +end; + function TvHTMLVectorialReader.ReadMathFromNode(ANode: TDOMNode; AData: TvTextPageSequence; ADoc: TvVectorialDocument): TvEntity; var @@ -598,7 +624,7 @@ begin Result := False; lExt := LowerCase(ExtractFileExt(AFileName)); case lExt of - '.png', '.jpg', '.jpeg', '.bmp', '.xpm': + '.png', '.jpg', '.jpeg', '.bmp', '.xpm', '.gif': Result := True end; end;