diff --git a/range/Advanced/TSPdfParagraphRange.tsf b/range/Advanced/TSPdfParagraphRange.tsf index 28c5121..1caa7ad 100644 --- a/range/Advanced/TSPdfParagraphRange.tsf +++ b/range/Advanced/TSPdfParagraphRange.tsf @@ -29,6 +29,7 @@ private function RToDrawingRange(r: R); function RAlternateContentToRange(r: R); function RFootnoteReference(r: R); + function RObject(r: R); function SetLinesAlignment(); function ResetCoordinates(); function NewLineRange(): TSPdfLineRange; @@ -87,7 +88,6 @@ begin bookmark_flag := false; for _,element in elements do begin - if not ifObj(element.XmlNode) then continue; if element.LocalName = "r" then begin empty_flag := false; @@ -120,6 +120,7 @@ begin else if ifObj(element.Drawing.XmlNode) then {self.}RToDrawingRange(element); else if ifObj(element.AlternateContent.XmlNode) then {self.}RAlternateContentToRange(element); else if ifObj(element.FootnoteReference.XmlNode) then {self.}RFootnoteReference(element); + else if ifObj(element.Object) then {self.}RObject(element); else if not fld then {self.}RToTextRange(element, bookmark_name); end else if element.LocalName = "fldSimple" then @@ -519,6 +520,27 @@ begin // range := new TSPdfParagraphRange(self, page_, docx_components_ware_, ); end; +function TSPdfParagraphRange.RObject(r: R); +begin + id := r.Object.Shape.Imagedata.Id; + image := {self.}GetImageData(id); + if not image then return; + style := r.Object.Shape.Style; + style_arr := str2array(style, ";"); + for _,str in style_arr do + begin + if startsStr("width:", str) then w := strtofloat(str[7:length(str)-2]); + else if startsStr("height:", str) then h := strtofloat(str[8:length(str)-2]); + end + image_range := new TSPdfImageRange(); + image_range.Image := image; + image_range.StartX := 0; + image_range.StartY := 0; + image_range.Width := w; + image_range.DynamicHeight := h; + range_array_[length(range_array_)] := image_range; +end; + function TSPdfParagraphRange.GetXYCordinates(): array of real; begin xml_file := docx_to_pdf_.GetCurrentXmlFile(); @@ -549,12 +571,21 @@ begin image := docx_components_ware_.Zip().Get(image_path); data := image.Data(); image_path := docx_to_pdf_.GetCachePath(image_path); - writeFile(rwBinary(), "", image_path, 0, length(data)-1, data); + writeFile(rwBinary(), "", image_path, 0, length(data), data); + image_type := extractFileExt(image_path); + if image_type = ".emf" then + begin + image_old_path := image_path; + image_path := replaceStr(image_path, "emf", "png"); + gdipconvimagetype("", image_old_path, "", image_path, "image/png"); + image_type := ".png"; + fileDelete("", image_old_path); + end image := nil; - case {self.}GetImageFileType(data) of - "png": + case image_type of + ".png": image := docx_to_pdf_.GetPdf().LoadPngImageFromFile("", image_path); - "jpg": + ".jpg", ".jpeg": image := docx_to_pdf_.GetPdf().LoadJpegImageFromFile("", image_path); end; fileDelete("", image_path);