适配officexml20250925
This commit is contained in:
parent
7da30f77ab
commit
7a46ccf838
|
|
@ -1,5 +1,5 @@
|
||||||
type TSDocxToPdf = class
|
type TSDocxToPdf = class
|
||||||
uses TSPdfEnumerations, DocxML, DocxMLAdapter, DTPModules, DTPUtils, DTPAdvancedRanges;
|
uses TSPdfEnumerations, DocxMLAdapters, DTPModules, DTPAdvancedRanges;
|
||||||
public
|
public
|
||||||
function Create(alias: string; file: string);
|
function Create(alias: string; file: string);
|
||||||
function Destroy();
|
function Destroy();
|
||||||
|
|
@ -48,7 +48,7 @@ private
|
||||||
font_module_: FontModule; // 字体模块
|
font_module_: FontModule; // 字体模块
|
||||||
sect_module_array_: array of SectModule; // 页面布局模块数组
|
sect_module_array_: array of SectModule; // 页面布局模块数组
|
||||||
current_sect_module_: SectModule;
|
current_sect_module_: SectModule;
|
||||||
current_sect_pr_adapter_: SectPrAdapter;
|
current_sect_pr_adapter_: SectPr; // DocxMLAdapters.SectPr
|
||||||
|
|
||||||
page_manager_module_: PageManagerModule;
|
page_manager_module_: PageManagerModule;
|
||||||
current_page_: Page;
|
current_page_: Page;
|
||||||
|
|
@ -113,7 +113,7 @@ begin
|
||||||
if current_sect_module_ <> sect_module then
|
if current_sect_module_ <> sect_module then
|
||||||
begin
|
begin
|
||||||
current_sect_module_ := sect_module;
|
current_sect_module_ := sect_module;
|
||||||
current_sect_pr_adapter_ := new SectPrAdapter(current_sect_module_.SectPr);
|
current_sect_pr_adapter_ := new DocxMLAdapters.SectPr(current_sect_module_.SectPr);
|
||||||
{self.}AddPage(true);
|
{self.}AddPage(true);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -232,7 +232,7 @@ begin
|
||||||
else if not even_and_odd_flag_ then
|
else if not even_and_odd_flag_ then
|
||||||
type_name := "default";
|
type_name := "default";
|
||||||
else if not odd(current_page_.Index) then
|
else if not odd(current_page_.Index) then
|
||||||
type_name := "even"
|
type_name := "even";
|
||||||
else
|
else
|
||||||
type_name := "default";
|
type_name := "default";
|
||||||
|
|
||||||
|
|
@ -273,7 +273,7 @@ begin
|
||||||
xml_file_ := rel.Target;
|
xml_file_ := rel.Target;
|
||||||
|
|
||||||
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
||||||
ftr_range := new FtrRange(self, ftr);
|
ftr_range := new DTPAdvancedRanges.FtrRange(self, ftr);
|
||||||
ftr_range.Width := w;
|
ftr_range.Width := w;
|
||||||
ftr_range.Parent := self;
|
ftr_range.Parent := self;
|
||||||
ftr_range.LowerBound := 0;
|
ftr_range.LowerBound := 0;
|
||||||
|
|
@ -304,7 +304,7 @@ begin
|
||||||
xml_file_ := rel.Target;
|
xml_file_ := rel.Target;
|
||||||
|
|
||||||
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
||||||
hdr_range := new HdrRange(self, hdr);
|
hdr_range := new DTPAdvancedRanges.HdrRange(self, hdr);
|
||||||
hdr_range.Width := w;
|
hdr_range.Width := w;
|
||||||
hdr_range.Parent := self;
|
hdr_range.Parent := self;
|
||||||
hdr_range.LowerBound := 0;
|
hdr_range.LowerBound := 0;
|
||||||
|
|
@ -322,7 +322,7 @@ function TSDocxToPdf.RangesSpacing(range: BasicRange);
|
||||||
begin
|
begin
|
||||||
if last_range_ then
|
if last_range_ then
|
||||||
begin
|
begin
|
||||||
if last_range_ is class(PRange) and not ifnil(last_range_.P.PPr.OutlineLvl.Val) and (range is class(TblRange) or ifnil(range.P.PPr.OutlineLvl.Val)) then
|
if last_range_ is class(DTPAdvancedRanges.PRange) and not ifnil(last_range_.P.PPr.OutlineLvl.Val) and (range is class(DTPAdvancedRanges.TblRange) or ifnil(range.P.PPr.OutlineLvl.Val)) then
|
||||||
begin
|
begin
|
||||||
if last_range_.P.PPr.Spacing.AfterAutospacing then
|
if last_range_.P.PPr.Spacing.AfterAutospacing then
|
||||||
begin
|
begin
|
||||||
|
|
@ -332,7 +332,7 @@ begin
|
||||||
if y >= 0 then current_page_.TextPoint.Y := y;
|
if y >= 0 then current_page_.TextPoint.Y := y;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if range is class(PRange) and not ifnil(range.P.PPr.OutlineLvl.Val) and (last_range_ is class(TblRange) or ifnil(last_range_.P.PPr.OutlineLvl.Val)) then
|
if range is class(DTPAdvancedRanges.PRange) and not ifnil(range.P.PPr.OutlineLvl.Val) and (last_range_ is class(DTPAdvancedRanges.TblRange) or ifnil(last_range_.P.PPr.OutlineLvl.Val)) then
|
||||||
begin
|
begin
|
||||||
if range.P.PPr.Spacing.BeforeAutospacing then
|
if range.P.PPr.Spacing.BeforeAutospacing then
|
||||||
begin
|
begin
|
||||||
|
|
@ -349,7 +349,7 @@ end;
|
||||||
function TSDocxToPdf.TransformP(p: P);
|
function TSDocxToPdf.TransformP(p: P);
|
||||||
begin
|
begin
|
||||||
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
||||||
range := new PRange(self, p);
|
range := new DTPAdvancedRanges.PRange(self, p);
|
||||||
range.Width := w;
|
range.Width := w;
|
||||||
range.Parent := self;
|
range.Parent := self;
|
||||||
range.LowerBound := current_page_.LowerBound;
|
range.LowerBound := current_page_.LowerBound;
|
||||||
|
|
@ -366,7 +366,7 @@ end;
|
||||||
function TSDocxToPdf.TransformTbl(tbl: Tbl);
|
function TSDocxToPdf.TransformTbl(tbl: Tbl);
|
||||||
begin
|
begin
|
||||||
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
w := current_page_.SectPr.PgSz.W - current_page_.SectPr.PgMar.Right - current_page_.SectPr.PgMar.Left;
|
||||||
range := new TblRange(self, tbl);
|
range := new DTPAdvancedRanges.TblRange(self, tbl);
|
||||||
range.Width := w;
|
range.Width := w;
|
||||||
range.Parent := self;
|
range.Parent := self;
|
||||||
range.LowerBound := current_page_.LowerBound;
|
range.LowerBound := current_page_.LowerBound;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
unit DTPAdvancedRanges;
|
unit DTPAdvancedRanges;
|
||||||
interface
|
interface
|
||||||
uses DTPPrimitiveRanges, DTPUtils, DTPModules, SharedML, DocxML, TSPdfEnumerations;
|
uses DTPPrimitiveRanges, DTPUtils, DocxML, TSPdfEnumerations;
|
||||||
|
|
||||||
type AdvancedRange = class(BasicRange)
|
type AdvancedRange = class(BasicRange)
|
||||||
public
|
public
|
||||||
|
|
@ -172,7 +172,7 @@ public
|
||||||
function SetVAlign();
|
function SetVAlign();
|
||||||
function SetTop();
|
function SetTop();
|
||||||
|
|
||||||
property Tc Read tc_;
|
property Tc read tc_;
|
||||||
|
|
||||||
public
|
public
|
||||||
Row: integer;
|
Row: integer;
|
||||||
|
|
@ -1003,6 +1003,7 @@ begin
|
||||||
begin
|
begin
|
||||||
if fld_struct.Arabic then
|
if fld_struct.Arabic then
|
||||||
begin
|
begin
|
||||||
|
rpr := r.RPr;
|
||||||
if not rpr.Sz.Val then rpr.Sz.Val := rpr.SzCs.Val ? rpr.SzCs.Val : docx_to_pdf_.Font.GetDefaultSz();
|
if not rpr.Sz.Val then rpr.Sz.Val := rpr.SzCs.Val ? rpr.SzCs.Val : docx_to_pdf_.Font.GetDefaultSz();
|
||||||
font_name := rpr.RFonts.EastAsia ? rpr.RFonts.EastAsia : rpr.RFonts.Ascii;
|
font_name := rpr.RFonts.EastAsia ? rpr.RFonts.EastAsia : rpr.RFonts.Ascii;
|
||||||
font_obj := docx_to_pdf_.Font.GetCNSFont(font_name, rpr.B.IsApplied, rpr.I.IsApplied);
|
font_obj := docx_to_pdf_.Font.GetCNSFont(font_name, rpr.B.IsApplied, rpr.I.IsApplied);
|
||||||
|
|
@ -2046,7 +2047,7 @@ begin
|
||||||
for j,tc in tcs do
|
for j,tc in tcs do
|
||||||
begin
|
begin
|
||||||
if i = 0 then {self.}SetTcTcPr(tc, "firstRow");
|
if i = 0 then {self.}SetTcTcPr(tc, "firstRow");
|
||||||
else if i = length(trs)-1 then {self.}SetTcTcPr(tc, "lastRow")
|
else if i = length(trs)-1 then {self.}SetTcTcPr(tc, "lastRow");
|
||||||
else if (i + 1) % 2 = 0 then {self.}SetTcTcPr(tc, "band1Horz");
|
else if (i + 1) % 2 = 0 then {self.}SetTcTcPr(tc, "band1Horz");
|
||||||
else {self.}SetTcTcPr(tc, "band2Horz");
|
else {self.}SetTcTcPr(tc, "band2Horz");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
unit DTPModules;
|
unit DTPModules;
|
||||||
interface
|
interface
|
||||||
uses DTPAdvancedRanges, DocxMLAdapter, SharedMLAdapter;
|
uses DTPAdvancedRanges, DocxMLAdapters, SharedMLAdapters;
|
||||||
|
|
||||||
type DocxComponentsModule = class(DocxComponents)
|
type DocxComponentsModule = class(DocxComponents)
|
||||||
public
|
public
|
||||||
|
|
@ -158,7 +158,7 @@ end;
|
||||||
type PageManagerModule = class
|
type PageManagerModule = class
|
||||||
public
|
public
|
||||||
function Create(pdf_file: PdfFile);
|
function Create(pdf_file: PdfFile);
|
||||||
function Operator[](index: uinteger): Page;
|
function operator[](index: uinteger): Page;
|
||||||
function NewPage(): Page;
|
function NewPage(): Page;
|
||||||
function NextPage(page: Page): Page;
|
function NextPage(page: Page): Page;
|
||||||
function Count(): integer;
|
function Count(): integer;
|
||||||
|
|
@ -193,7 +193,7 @@ end;
|
||||||
function DocxComponentsModule.GetStylesAdapter(): StylesAdapter;
|
function DocxComponentsModule.GetStylesAdapter(): StylesAdapter;
|
||||||
begin
|
begin
|
||||||
if styles_adapter_ then return styles_adapter_;
|
if styles_adapter_ then return styles_adapter_;
|
||||||
styles_adapter_ := new StylesAdapter({self.}GetStyles());
|
styles_adapter_ := new DocxMLAdapters.Styles({self.}GetStyles());
|
||||||
return styles_adapter_;
|
return styles_adapter_;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -201,7 +201,7 @@ function DocxComponentsModule.GetDocumentRelsAdapter(): RelationShipsAdapter;
|
||||||
begin
|
begin
|
||||||
if document_rels_adapter_ then return document_rels_adapter_;
|
if document_rels_adapter_ then return document_rels_adapter_;
|
||||||
{self.}DocumentRels.Deserialize();
|
{self.}DocumentRels.Deserialize();
|
||||||
document_rels_adapter_ := new RelationShipsAdapter({self.}DocumentRels);
|
document_rels_adapter_ := new SharedMLAdapters.RelationShips({self.}DocumentRels);
|
||||||
return document_rels_adapter_;
|
return document_rels_adapter_;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -220,7 +220,7 @@ begin
|
||||||
if tbl_style_pr_hash_[style_id][type] then return tbl_style_pr_hash_[style_id][type];
|
if tbl_style_pr_hash_[style_id][type] then return tbl_style_pr_hash_[style_id][type];
|
||||||
styles_adapter := {self.}GetStylesAdapter();
|
styles_adapter := {self.}GetStylesAdapter();
|
||||||
style := styles_adapter.GetStyleByStyleId(style_id);
|
style := styles_adapter.GetStyleByStyleId(style_id);
|
||||||
style := new StyleAdapter(style);
|
style := new DocxMLAdapters.Style(style);
|
||||||
tbl_style_pr := style.GetTblStylePrByType(type);
|
tbl_style_pr := style.GetTblStylePrByType(type);
|
||||||
tbl_style_pr_hash_[style_id][type] := tbl_style_pr;
|
tbl_style_pr_hash_[style_id][type] := tbl_style_pr;
|
||||||
return tbl_style_pr;
|
return tbl_style_pr;
|
||||||
|
|
@ -254,7 +254,7 @@ begin
|
||||||
index := replaceStr(replaceStr(target, "header", ""), ".xml", "");
|
index := replaceStr(replaceStr(target, "header", ""), ".xml", "");
|
||||||
obj := {self.}HeaderRels(strtoint(index));
|
obj := {self.}HeaderRels(strtoint(index));
|
||||||
obj.Deserialize();
|
obj.Deserialize();
|
||||||
rels_adapter := new RelationShipsAdapter(obj);
|
rels_adapter := new SharedMLAdapters.RelationShips(obj);
|
||||||
hdr_rel_hash_[target] := rels_adapter;
|
hdr_rel_hash_[target] := rels_adapter;
|
||||||
return rels_adapter;
|
return rels_adapter;
|
||||||
end;
|
end;
|
||||||
|
|
@ -265,7 +265,7 @@ begin
|
||||||
index := replaceStr(replaceStr(target, "footer", ""), ".xml", "");
|
index := replaceStr(replaceStr(target, "footer", ""), ".xml", "");
|
||||||
obj := {self.}FooterRels(strtoint(index));
|
obj := {self.}FooterRels(strtoint(index));
|
||||||
obj.Deserialize();
|
obj.Deserialize();
|
||||||
rels_adapter := new RelationShipsAdapter(obj);
|
rels_adapter := new SharedMLAdapters.RelationShips(obj);
|
||||||
ftr_rel_hash_[target] := rels_adapter;
|
ftr_rel_hash_[target] := rels_adapter;
|
||||||
return rels_adapter;
|
return rels_adapter;
|
||||||
end;
|
end;
|
||||||
|
|
@ -276,7 +276,7 @@ begin
|
||||||
obj := {self.}Footnotes;
|
obj := {self.}Footnotes;
|
||||||
obj.Deserialize();
|
obj.Deserialize();
|
||||||
obj.ConvertToPoint();
|
obj.ConvertToPoint();
|
||||||
footnotes_adapter_ := new FootnotesAdapter(obj);
|
footnotes_adapter_ := new DocxMLAdapters.Footnotes(obj);
|
||||||
return footnotes_adapter_;
|
return footnotes_adapter_;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -504,7 +504,7 @@ end;
|
||||||
// NumberingModule
|
// NumberingModule
|
||||||
function NumberingModule.Create(number: NumberingAdapter);
|
function NumberingModule.Create(number: NumberingAdapter);
|
||||||
begin
|
begin
|
||||||
numbering_adapter_ := new NumberingAdapter(number);
|
numbering_adapter_ := new DocxMLAdapters.Numbering(number);
|
||||||
num_hash_ := array();
|
num_hash_ := array();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -656,7 +656,7 @@ begin
|
||||||
page_array_ := array();
|
page_array_ := array();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function Operator PageManagerModule.[](index: uinteger): Page;
|
function operator PageManagerModule.[](index: uinteger): Page;
|
||||||
begin
|
begin
|
||||||
return page_array_[index];
|
return page_array_[index];
|
||||||
end;
|
end;
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,6 @@ begin
|
||||||
{self.}EndPage.PdfPage.SetRGBFill(0, 0, 0);
|
{self.}EndPage.PdfPage.SetRGBFill(0, 0, 0);
|
||||||
end
|
end
|
||||||
|
|
||||||
// println("image = {}, type = {}, x = {}, y = {}, w = {}, h = {}", {self.}image, {self.}Type, {self.}endx, {self.}endy, {self.}width, {self.}DynamicHeight);
|
|
||||||
if {self.}Type = "emf" then
|
if {self.}Type = "emf" then
|
||||||
{self.}EndPage.PdfPage.DrawEmf({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight);
|
{self.}EndPage.PdfPage.DrawEmf({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight);
|
||||||
else if {self.}Type = "wmf" then
|
else if {self.}Type = "wmf" then
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue