diff --git a/TSDocxToPdf.tsf b/TSDocxToPdf.tsf index 5509fef..09ac3c1 100644 --- a/TSDocxToPdf.tsf +++ b/TSDocxToPdf.tsf @@ -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 diff --git a/range/Advanced/TSPdfParagraphRange.tsf b/range/Advanced/TSPdfParagraphRange.tsf index 1e52920..f2c8e82 100644 --- a/range/Advanced/TSPdfParagraphRange.tsf +++ b/range/Advanced/TSPdfParagraphRange.tsf @@ -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; diff --git a/ware/TSDocxComponentsWare.tsf b/ware/TSDocxComponentsWare.tsf index 0bcc437..abbf488 100644 --- a/ware/TSDocxComponentsWare.tsf +++ b/ware/TSDocxComponentsWare.tsf @@ -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;