适配officexml20250925

This commit is contained in:
csh 2025-09-25 17:58:36 +08:00
parent 7da30f77ab
commit 7a46ccf838
4 changed files with 24 additions and 24 deletions

View File

@ -1,5 +1,5 @@
type TSDocxToPdf = class
uses TSPdfEnumerations, DocxML, DocxMLAdapter, DTPModules, DTPUtils, DTPAdvancedRanges;
uses TSPdfEnumerations, DocxMLAdapters, DTPModules, DTPAdvancedRanges;
public
function Create(alias: string; file: string);
function Destroy();
@ -48,7 +48,7 @@ private
font_module_: FontModule; // 字体模块
sect_module_array_: array of SectModule; // 页面布局模块数组
current_sect_module_: SectModule;
current_sect_pr_adapter_: SectPrAdapter;
current_sect_pr_adapter_: SectPr; // DocxMLAdapters.SectPr
page_manager_module_: PageManagerModule;
current_page_: Page;
@ -113,7 +113,7 @@ begin
if current_sect_module_ <> sect_module then
begin
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);
end
@ -232,7 +232,7 @@ begin
else if not even_and_odd_flag_ then
type_name := "default";
else if not odd(current_page_.Index) then
type_name := "even"
type_name := "even";
else
type_name := "default";
@ -273,7 +273,7 @@ begin
xml_file_ := rel.Target;
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.Parent := self;
ftr_range.LowerBound := 0;
@ -304,7 +304,7 @@ begin
xml_file_ := rel.Target;
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.Parent := self;
hdr_range.LowerBound := 0;
@ -322,7 +322,7 @@ function TSDocxToPdf.RangesSpacing(range: BasicRange);
begin
if last_range_ then
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
if last_range_.P.PPr.Spacing.AfterAutospacing then
begin
@ -332,7 +332,7 @@ begin
if y >= 0 then current_page_.TextPoint.Y := y;
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
if range.P.PPr.Spacing.BeforeAutospacing then
begin
@ -349,7 +349,7 @@ end;
function TSDocxToPdf.TransformP(p: P);
begin
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.Parent := self;
range.LowerBound := current_page_.LowerBound;
@ -366,7 +366,7 @@ end;
function TSDocxToPdf.TransformTbl(tbl: Tbl);
begin
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.Parent := self;
range.LowerBound := current_page_.LowerBound;

View File

@ -1,6 +1,6 @@
unit DTPAdvancedRanges;
interface
uses DTPPrimitiveRanges, DTPUtils, DTPModules, SharedML, DocxML, TSPdfEnumerations;
uses DTPPrimitiveRanges, DTPUtils, DocxML, TSPdfEnumerations;
type AdvancedRange = class(BasicRange)
public
@ -172,7 +172,7 @@ public
function SetVAlign();
function SetTop();
property Tc Read tc_;
property Tc read tc_;
public
Row: integer;
@ -1003,6 +1003,7 @@ begin
begin
if fld_struct.Arabic then
begin
rpr := r.RPr;
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_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
begin
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 {self.}SetTcTcPr(tc, "band2Horz");

View File

@ -1,6 +1,6 @@
unit DTPModules;
interface
uses DTPAdvancedRanges, DocxMLAdapter, SharedMLAdapter;
uses DTPAdvancedRanges, DocxMLAdapters, SharedMLAdapters;
type DocxComponentsModule = class(DocxComponents)
public
@ -158,7 +158,7 @@ end;
type PageManagerModule = class
public
function Create(pdf_file: PdfFile);
function Operator[](index: uinteger): Page;
function operator[](index: uinteger): Page;
function NewPage(): Page;
function NextPage(page: Page): Page;
function Count(): integer;
@ -193,7 +193,7 @@ end;
function DocxComponentsModule.GetStylesAdapter(): StylesAdapter;
begin
if styles_adapter_ then return styles_adapter_;
styles_adapter_ := new StylesAdapter({self.}GetStyles());
styles_adapter_ := new DocxMLAdapters.Styles({self.}GetStyles());
return styles_adapter_;
end;
@ -201,7 +201,7 @@ function DocxComponentsModule.GetDocumentRelsAdapter(): RelationShipsAdapter;
begin
if document_rels_adapter_ then return document_rels_adapter_;
{self.}DocumentRels.Deserialize();
document_rels_adapter_ := new RelationShipsAdapter({self.}DocumentRels);
document_rels_adapter_ := new SharedMLAdapters.RelationShips({self.}DocumentRels);
return document_rels_adapter_;
end;
@ -220,7 +220,7 @@ begin
if tbl_style_pr_hash_[style_id][type] then return tbl_style_pr_hash_[style_id][type];
styles_adapter := {self.}GetStylesAdapter();
style := styles_adapter.GetStyleByStyleId(style_id);
style := new StyleAdapter(style);
style := new DocxMLAdapters.Style(style);
tbl_style_pr := style.GetTblStylePrByType(type);
tbl_style_pr_hash_[style_id][type] := tbl_style_pr;
return tbl_style_pr;
@ -254,7 +254,7 @@ begin
index := replaceStr(replaceStr(target, "header", ""), ".xml", "");
obj := {self.}HeaderRels(strtoint(index));
obj.Deserialize();
rels_adapter := new RelationShipsAdapter(obj);
rels_adapter := new SharedMLAdapters.RelationShips(obj);
hdr_rel_hash_[target] := rels_adapter;
return rels_adapter;
end;
@ -265,7 +265,7 @@ begin
index := replaceStr(replaceStr(target, "footer", ""), ".xml", "");
obj := {self.}FooterRels(strtoint(index));
obj.Deserialize();
rels_adapter := new RelationShipsAdapter(obj);
rels_adapter := new SharedMLAdapters.RelationShips(obj);
ftr_rel_hash_[target] := rels_adapter;
return rels_adapter;
end;
@ -276,7 +276,7 @@ begin
obj := {self.}Footnotes;
obj.Deserialize();
obj.ConvertToPoint();
footnotes_adapter_ := new FootnotesAdapter(obj);
footnotes_adapter_ := new DocxMLAdapters.Footnotes(obj);
return footnotes_adapter_;
end;
@ -504,7 +504,7 @@ end;
// NumberingModule
function NumberingModule.Create(number: NumberingAdapter);
begin
numbering_adapter_ := new NumberingAdapter(number);
numbering_adapter_ := new DocxMLAdapters.Numbering(number);
num_hash_ := array();
end;
@ -656,7 +656,7 @@ begin
page_array_ := array();
end;
function Operator PageManagerModule.[](index: uinteger): Page;
function operator PageManagerModule.[](index: uinteger): Page;
begin
return page_array_[index];
end;

View File

@ -128,7 +128,6 @@ begin
{self.}EndPage.PdfPage.SetRGBFill(0, 0, 0);
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
{self.}EndPage.PdfPage.DrawEmf({self.}Image, {self.}EndX, {self.}EndY, {self.}Width, {self.}DynamicHeight);
else if {self.}Type = "wmf" then