支持excel ole对象产生的emf文件
This commit is contained in:
parent
448bbfc7e2
commit
5dc201c1a2
|
|
@ -29,6 +29,7 @@ private
|
||||||
function RToDrawingRange(r: R);
|
function RToDrawingRange(r: R);
|
||||||
function RAlternateContentToRange(r: R);
|
function RAlternateContentToRange(r: R);
|
||||||
function RFootnoteReference(r: R);
|
function RFootnoteReference(r: R);
|
||||||
|
function RObject(r: R);
|
||||||
function SetLinesAlignment();
|
function SetLinesAlignment();
|
||||||
function ResetCoordinates();
|
function ResetCoordinates();
|
||||||
function NewLineRange(): TSPdfLineRange;
|
function NewLineRange(): TSPdfLineRange;
|
||||||
|
|
@ -87,7 +88,6 @@ begin
|
||||||
bookmark_flag := false;
|
bookmark_flag := false;
|
||||||
for _,element in elements do
|
for _,element in elements do
|
||||||
begin
|
begin
|
||||||
if not ifObj(element.XmlNode) then continue;
|
|
||||||
if element.LocalName = "r" then
|
if element.LocalName = "r" then
|
||||||
begin
|
begin
|
||||||
empty_flag := false;
|
empty_flag := false;
|
||||||
|
|
@ -120,6 +120,7 @@ begin
|
||||||
else if ifObj(element.Drawing.XmlNode) then {self.}RToDrawingRange(element);
|
else if ifObj(element.Drawing.XmlNode) then {self.}RToDrawingRange(element);
|
||||||
else if ifObj(element.AlternateContent.XmlNode) then {self.}RAlternateContentToRange(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.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);
|
else if not fld then {self.}RToTextRange(element, bookmark_name);
|
||||||
end
|
end
|
||||||
else if element.LocalName = "fldSimple" then
|
else if element.LocalName = "fldSimple" then
|
||||||
|
|
@ -519,6 +520,27 @@ begin
|
||||||
// range := new TSPdfParagraphRange(self, page_, docx_components_ware_, );
|
// range := new TSPdfParagraphRange(self, page_, docx_components_ware_, );
|
||||||
end;
|
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;
|
function TSPdfParagraphRange.GetXYCordinates(): array of real;
|
||||||
begin
|
begin
|
||||||
xml_file := docx_to_pdf_.GetCurrentXmlFile();
|
xml_file := docx_to_pdf_.GetCurrentXmlFile();
|
||||||
|
|
@ -549,12 +571,21 @@ begin
|
||||||
image := docx_components_ware_.Zip().Get(image_path);
|
image := docx_components_ware_.Zip().Get(image_path);
|
||||||
data := image.Data();
|
data := image.Data();
|
||||||
image_path := docx_to_pdf_.GetCachePath(image_path);
|
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;
|
image := nil;
|
||||||
case {self.}GetImageFileType(data) of
|
case image_type of
|
||||||
"png":
|
".png":
|
||||||
image := docx_to_pdf_.GetPdf().LoadPngImageFromFile("", image_path);
|
image := docx_to_pdf_.GetPdf().LoadPngImageFromFile("", image_path);
|
||||||
"jpg":
|
".jpg", ".jpeg":
|
||||||
image := docx_to_pdf_.GetPdf().LoadJpegImageFromFile("", image_path);
|
image := docx_to_pdf_.GetPdf().LoadJpegImageFromFile("", image_path);
|
||||||
end;
|
end;
|
||||||
fileDelete("", image_path);
|
fileDelete("", image_path);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue