完善对页眉页脚的支持

This commit is contained in:
csh 2024-08-27 15:59:44 +08:00
parent 4c6f4d6e09
commit ca18537538
3 changed files with 21 additions and 9 deletions

View File

@ -234,7 +234,7 @@ begin
page_array_[len] := current_page_;
// 页眉页脚
if current_page_.Index = 0 then
if sect_ware_.SectPr.TitlePg and current_page_.Index = 0 then
type_name := "first";
else if not even_and_odd_flag_ then
type_name := "default";
@ -267,7 +267,7 @@ function TSDocxToPdf.SetFtr(type: string);
begin
ftr_point_.X := sect_ware_.SectPr.PgMar.Left;
ftr_point_.Y := sect_ware_.SectPr.PgMar.Bottom;
footer_reference := sect_pr_adapter_.GetFooterReferenceByType(type_name);
footer_reference := sect_pr_adapter_.GetFooterReferenceByType(type);
if ifObj(footer_reference) then
begin
rels_adapter := docx_components_ware_.GetDocumentRelsAdapter();
@ -295,7 +295,7 @@ begin
rel := rels_adapter.GetRelationshipById(header_reference.Id);
w := sect_ware_.SectPr.PgSz.W - sect_ware_.SectPr.PgMar.Right - sect_ware_.SectPr.PgMar.Left;
lb := 0;
obj := docx_components_ware_.GetFtr(rel.Target);
obj := docx_components_ware_.GetHdr(rel.Target);
xml_file_ := rel.Target;
elements := obj.Elements();
for _,element in elements do

View File

@ -85,13 +85,15 @@ begin
begin
empty_flag := false;
{self.}SetRPr(element.RPr, ppr_unit_decorator_);
if element.FldChar.FldCharType = "separate" then
if element.FldChar.FldCharType = "begin" then
continue;
else if element.FldChar.FldCharType = "separate" then
fld := true;
else if element.FldChar.FldCharType = "end" then
fld := false;
else if element.InstrText.Text = "PAGE \\* Arabic \\* MERGEFORMAT" then
else if ifString(element.InstrText.Text) and trim(element.InstrText.Text) = "PAGE \\* Arabic \\* MERGEFORMAT" then
page_number := true;
else if element.InstrText.Text = " NUMPAGES " then
else if ifString(element.InstrText.Text) and trim(element.InstrText.Text) = "NUMPAGES" then
numpages := true;
else if fld and page_number then
begin
@ -112,6 +114,16 @@ begin
else if ifObj(element.AlternateContent.XmlNode) then {self.}RAlternateContentToRange(element);
else if not fld then {self.}RToTextRange(element, bookmark_name);
end
else if element.LocalName = "fldSimple" then
begin
if ifString(element.Instr) and trim(element.Instr) = "NUMPAGES \\* Arabic \\* MERGEFORMAT" then
begin
rpr := new RPrUnitDecorator(element.Rs(0).RPr);
numpages_index := length(range_array_);
placeholder_array_ := array(numpages_index, rpr);
numpages := false;
end
end
else if element.LocalName = "hyperlink" then
begin
empty_flag := false;

View File

@ -79,8 +79,8 @@ end;
function TSDocxComponentsWare.GetFtr(target: string): Ftr;
begin
if ftr_hash_[target] then return ftr_hash_[target];
index := replaceStr(replaceStr(target, "header", ""), ".xml", "");
obj := {self.}Headers(strtoint(index));
index := replaceStr(replaceStr(target, "footer", ""), ".xml", "");
obj := {self.}Footers(strtoint(index));
obj.Deserialize();
ftr_hash_[target] := obj;
return obj;
@ -90,7 +90,7 @@ function TSDocxComponentsWare.GetHdr(target: string): Hdr;
begin
if hdr_hash_[target] then return hdr_hash_[target];
index := replaceStr(replaceStr(target, "header", ""), ".xml", "");
obj := {self.}Footers(strtoint(index));
obj := {self.}Headers(strtoint(index));
obj.Deserialize();
hdr_hash_[target] := obj;
return obj;