支持emf格式的图片(word中插入excel表格)
This commit is contained in:
parent
2a7027476a
commit
9db7890278
|
|
@ -459,11 +459,12 @@ begin
|
||||||
if ifObj(r.Drawing._Inline.XmlNode) then
|
if ifObj(r.Drawing._Inline.XmlNode) then
|
||||||
begin
|
begin
|
||||||
id := r.Drawing._Inline.Graphic.GraphicData.Pic.BlipFill.Blip.Embed;
|
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;
|
if not image then return;
|
||||||
xfrm := new XfrmUnitDecorator(r.Drawing._Inline.Graphic.GraphicData.Pic.SpPr.Xfrm);
|
xfrm := new XfrmUnitDecorator(r.Drawing._Inline.Graphic.GraphicData.Pic.SpPr.Xfrm);
|
||||||
image_range := new TSPdfImageRange();
|
image_range := new TSPdfImageRange();
|
||||||
image_range.Image := image;
|
image_range.Image := image;
|
||||||
|
image_range.Type := image_type;
|
||||||
image_range.StartX := xfrm.Off.X;
|
image_range.StartX := xfrm.Off.X;
|
||||||
image_range.StartY := xfrm.Off.Y;
|
image_range.StartY := xfrm.Off.Y;
|
||||||
image_range.Width := xfrm.Ext.CX;
|
image_range.Width := xfrm.Ext.CX;
|
||||||
|
|
@ -474,7 +475,7 @@ begin
|
||||||
begin
|
begin
|
||||||
anchor := r.Drawing.Anchor;
|
anchor := r.Drawing.Anchor;
|
||||||
id := anchor.Graphic.GraphicData.Pic.BlipFill.Blip.Embed;
|
id := anchor.Graphic.GraphicData.Pic.BlipFill.Blip.Embed;
|
||||||
image := {self.}GetImageData(id);
|
[image_type, image] := {self.}GetImageData(id);
|
||||||
if not image then return;
|
if not image then return;
|
||||||
[x, y] := {self.}GetXYCordinates();
|
[x, y] := {self.}GetXYCordinates();
|
||||||
xfrm := new XfrmUnitDecorator(anchor.Graphic.GraphicData.Pic.SpPr.Xfrm);
|
xfrm := new XfrmUnitDecorator(anchor.Graphic.GraphicData.Pic.SpPr.Xfrm);
|
||||||
|
|
@ -486,6 +487,7 @@ begin
|
||||||
y := {self.}StartY;
|
y := {self.}StartY;
|
||||||
image_range := new TSPdfImageRange();
|
image_range := new TSPdfImageRange();
|
||||||
image_range.Image := image;
|
image_range.Image := image;
|
||||||
|
image_range.Type := image_type;
|
||||||
image_range.EndX := x + position_h.PosOffset.Text;
|
image_range.EndX := x + position_h.PosOffset.Text;
|
||||||
image_range.EndY := y - position_v.PosOffset.Text - xfrm.Ext.CY;
|
image_range.EndY := y - position_v.PosOffset.Text - xfrm.Ext.CY;
|
||||||
image_range.Width := xfrm.Ext.CX;
|
image_range.Width := xfrm.Ext.CX;
|
||||||
|
|
@ -541,7 +543,7 @@ end;
|
||||||
function TSPdfParagraphRange.RObject(r: R);
|
function TSPdfParagraphRange.RObject(r: R);
|
||||||
begin
|
begin
|
||||||
id := r.Object.Shape.Imagedata.Id;
|
id := r.Object.Shape.Imagedata.Id;
|
||||||
image := {self.}GetImageData(id);
|
[image_type, image] := {self.}GetImageData(id);
|
||||||
if not image then return;
|
if not image then return;
|
||||||
style := r.Object.Shape.Style;
|
style := r.Object.Shape.Style;
|
||||||
style_arr := str2array(style, ";");
|
style_arr := str2array(style, ";");
|
||||||
|
|
@ -552,6 +554,7 @@ begin
|
||||||
end
|
end
|
||||||
image_range := new TSPdfImageRange();
|
image_range := new TSPdfImageRange();
|
||||||
image_range.Image := image;
|
image_range.Image := image;
|
||||||
|
image_range.Type := image_type;
|
||||||
image_range.StartX := 0;
|
image_range.StartX := 0;
|
||||||
image_range.StartY := 0;
|
image_range.StartY := 0;
|
||||||
image_range.Width := w;
|
image_range.Width := w;
|
||||||
|
|
@ -591,14 +594,17 @@ begin
|
||||||
image_path := docx_to_pdf_.GetCachePath(image_path);
|
image_path := docx_to_pdf_.GetCachePath(image_path);
|
||||||
writeFile(rwBinary(), "", image_path, 0, length(data), data);
|
writeFile(rwBinary(), "", image_path, 0, length(data), data);
|
||||||
image := nil;
|
image := nil;
|
||||||
case GetImageFileType(data) of
|
image_type := GetImageFileType(data);
|
||||||
|
case image_type of
|
||||||
"png":
|
"png":
|
||||||
image := docx_to_pdf_.GetPdf().LoadPngImageFromFile("", image_path);
|
image := docx_to_pdf_.GetPdf().LoadPngImageFromFile("", image_path);
|
||||||
"jpg":
|
"jpg":
|
||||||
image := docx_to_pdf_.GetPdf().LoadJpegImageFromFile("", image_path);
|
image := docx_to_pdf_.GetPdf().LoadJpegImageFromFile("", image_path);
|
||||||
|
"emf":
|
||||||
|
image := docx_to_pdf_.GetPdf().LoadEmfImageFromFile("", image_path);
|
||||||
end;
|
end;
|
||||||
fileDelete("", image_path);
|
fileDelete("", image_path);
|
||||||
return image;
|
return array(image_type, image);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSPdfParagraphRange.GetImageFileType(data: binary): string;
|
function TSPdfParagraphRange.GetImageFileType(data: binary): string;
|
||||||
|
|
|
||||||
|
|
@ -5,17 +5,22 @@ public
|
||||||
|
|
||||||
public
|
public
|
||||||
Image: PdfImage;
|
Image: PdfImage;
|
||||||
|
Type: string;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSPdfImageRange.Create();
|
function TSPdfImageRange.Create();
|
||||||
begin
|
begin
|
||||||
class(TSPdfBasicRange).Create();
|
class(TSPdfBasicRange).Create();
|
||||||
{self.}Image := nil;
|
{self.}Image := nil;
|
||||||
|
{self.}Type := "";
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSPdfImageRange.Do();
|
function TSPdfImageRange.Do();
|
||||||
begin
|
begin
|
||||||
// println("image = {}, x = {}, y = {}, w = {}, h = {}", {self.}image, {self.}endx, {self.}endy, {self.}width, {self.}DynamicHeight);
|
// println("image = {}, x = {}, y = {}, w = {}, h = {}", {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);
|
{self.}TSPage.PdfPage.DrawImage({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight);
|
||||||
|
|
||||||
if sysparams["_PDF_IMAGE_DEBUG_"] then
|
if sysparams["_PDF_IMAGE_DEBUG_"] then
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue