From 9db78902783f1b4b46bc9fe97612a4b001ca571e Mon Sep 17 00:00:00 2001 From: csh Date: Tue, 22 Oct 2024 14:29:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81emf=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E5=9B=BE=E7=89=87=EF=BC=88word=E4=B8=AD=E6=8F=92?= =?UTF-8?q?=E5=85=A5excel=E8=A1=A8=E6=A0=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- range/Advanced/TSPdfParagraphRange.tsf | 16 +++++++++++----- range/basic/TSPdfImageRange.tsf | 7 ++++++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/range/Advanced/TSPdfParagraphRange.tsf b/range/Advanced/TSPdfParagraphRange.tsf index 06dec03..9824ac1 100644 --- a/range/Advanced/TSPdfParagraphRange.tsf +++ b/range/Advanced/TSPdfParagraphRange.tsf @@ -459,11 +459,12 @@ begin if ifObj(r.Drawing._Inline.XmlNode) then begin id := r.Drawing._Inline.Graphic.GraphicData.Pic.BlipFill.Blip.Embed; - image := {self.}GetImageData(id); + [image_type, image] := {self.}GetImageData(id); if not image then return; xfrm := new XfrmUnitDecorator(r.Drawing._Inline.Graphic.GraphicData.Pic.SpPr.Xfrm); image_range := new TSPdfImageRange(); image_range.Image := image; + image_range.Type := image_type; image_range.StartX := xfrm.Off.X; image_range.StartY := xfrm.Off.Y; image_range.Width := xfrm.Ext.CX; @@ -474,7 +475,7 @@ begin begin anchor := r.Drawing.Anchor; id := anchor.Graphic.GraphicData.Pic.BlipFill.Blip.Embed; - image := {self.}GetImageData(id); + [image_type, image] := {self.}GetImageData(id); if not image then return; [x, y] := {self.}GetXYCordinates(); xfrm := new XfrmUnitDecorator(anchor.Graphic.GraphicData.Pic.SpPr.Xfrm); @@ -486,6 +487,7 @@ begin y := {self.}StartY; image_range := new TSPdfImageRange(); image_range.Image := image; + image_range.Type := image_type; image_range.EndX := x + position_h.PosOffset.Text; image_range.EndY := y - position_v.PosOffset.Text - xfrm.Ext.CY; image_range.Width := xfrm.Ext.CX; @@ -541,7 +543,7 @@ end; function TSPdfParagraphRange.RObject(r: R); begin id := r.Object.Shape.Imagedata.Id; - image := {self.}GetImageData(id); + [image_type, image] := {self.}GetImageData(id); if not image then return; style := r.Object.Shape.Style; style_arr := str2array(style, ";"); @@ -552,6 +554,7 @@ begin end image_range := new TSPdfImageRange(); image_range.Image := image; + image_range.Type := image_type; image_range.StartX := 0; image_range.StartY := 0; image_range.Width := w; @@ -591,14 +594,17 @@ begin image_path := docx_to_pdf_.GetCachePath(image_path); writeFile(rwBinary(), "", image_path, 0, length(data), data); image := nil; - case GetImageFileType(data) of + image_type := GetImageFileType(data); + case image_type of "png": image := docx_to_pdf_.GetPdf().LoadPngImageFromFile("", image_path); "jpg": image := docx_to_pdf_.GetPdf().LoadJpegImageFromFile("", image_path); + "emf": + image := docx_to_pdf_.GetPdf().LoadEmfImageFromFile("", image_path); end; fileDelete("", image_path); - return image; + return array(image_type, image); end; function TSPdfParagraphRange.GetImageFileType(data: binary): string; diff --git a/range/basic/TSPdfImageRange.tsf b/range/basic/TSPdfImageRange.tsf index 4782882..c74ecdb 100644 --- a/range/basic/TSPdfImageRange.tsf +++ b/range/basic/TSPdfImageRange.tsf @@ -5,18 +5,23 @@ public public Image: PdfImage; + Type: string; end; function TSPdfImageRange.Create(); begin class(TSPdfBasicRange).Create(); {self.}Image := nil; + {self.}Type := ""; end; function TSPdfImageRange.Do(); begin // println("image = {}, x = {}, y = {}, w = {}, h = {}", {self.}image, {self.}endx, {self.}endy, {self.}width, {self.}DynamicHeight); - {self.}TSPage.PdfPage.DrawImage({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight); + if {self.}Type = "emf" then + {self.}TSPage.PdfPage.DrawEmf({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight); + else + {self.}TSPage.PdfPage.DrawImage({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight); if sysparams["_PDF_IMAGE_DEBUG_"] then begin