新增修改docx页码接口`UpdateDocxPageNumpages`,以及保存修改docx文件接口`SaveDocxFile`
This commit is contained in:
parent
8ab1670eea
commit
0437961953
|
|
@ -14,13 +14,17 @@ public
|
||||||
function GetNextPage(page: TSPage): TSPage;
|
function GetNextPage(page: TSPage): TSPage;
|
||||||
function GetCurrentXmlFile(): string;
|
function GetCurrentXmlFile(): string;
|
||||||
function AddTSPage(flag: boolean): TSPage;
|
function AddTSPage(flag: boolean): TSPage;
|
||||||
function AdjustPageNumber(page: TSPage; num: integer);
|
|
||||||
function LinkToToc(anchor: string; page: TSPage; left: real; top: real);
|
function LinkToToc(anchor: string; page: TSPage; left: real; top: real);
|
||||||
function AddToc(anchor: string; toc: TSToc);
|
function AddToc(anchor: string; toc: TSToc);
|
||||||
function SetHeaderAndFooter();
|
function SetHeaderAndFooter();
|
||||||
function ProcessNumpages();
|
function ProcessNumpages();
|
||||||
function CalculateTextCoordinates(): array of real;
|
function CalculateTextCoordinates(): array of real;
|
||||||
function GetSymbol(symbol: string);
|
function GetSymbol(symbol: string);
|
||||||
|
function AddDocxPage(pg: TSPage; r: R);
|
||||||
|
|
||||||
|
function UpdateDocxPageNumpages();
|
||||||
|
function SaveDocxFile();overload;
|
||||||
|
function SaveDocxFile(alias: string; file: string);overload;
|
||||||
|
|
||||||
property Font read ReadFont;
|
property Font read ReadFont;
|
||||||
function ReadFont();
|
function ReadFont();
|
||||||
|
|
@ -60,6 +64,9 @@ private
|
||||||
even_and_odd_flag_: boolean;
|
even_and_odd_flag_: boolean;
|
||||||
xml_file_: string;
|
xml_file_: string;
|
||||||
symbol_: tableArray;
|
symbol_: tableArray;
|
||||||
|
|
||||||
|
docx_page_arr_: tableArray;
|
||||||
|
update_docx_pages_: boolean;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
type Point = class
|
type Point = class
|
||||||
|
|
@ -94,6 +101,9 @@ begin
|
||||||
settings := docx_components_ware_.Settings;
|
settings := docx_components_ware_.Settings;
|
||||||
settings.XmlChildEvenAndOddHeaders.Deserialize();
|
settings.XmlChildEvenAndOddHeaders.Deserialize();
|
||||||
even_and_odd_flag_ := settings.EvenAndOddHeaders ? true : false;
|
even_and_odd_flag_ := settings.EvenAndOddHeaders ? true : false;
|
||||||
|
|
||||||
|
docx_page_arr_ := array();
|
||||||
|
update_docx_pages_ := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSDocxToPdf.Destroy();
|
function TSDocxToPdf.Destroy();
|
||||||
|
|
@ -380,12 +390,6 @@ begin
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSDocxToPdf.AdjustPageNumber(page: TSPage; num: integer);
|
|
||||||
begin
|
|
||||||
for i:=page.Index to length(page_array_)-1 do
|
|
||||||
page_array_[i].Number := num++;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function TSDocxToPdf.GetNextPage(page: TSPage);
|
function TSDocxToPdf.GetNextPage(page: TSPage);
|
||||||
begin
|
begin
|
||||||
return page_array_[page.Index + 1];
|
return page_array_[page.Index + 1];
|
||||||
|
|
@ -455,6 +459,13 @@ begin
|
||||||
for _,toc in arr do
|
for _,toc in arr do
|
||||||
toc.LinkAnnot(dst);
|
toc.LinkAnnot(dst);
|
||||||
toc.AddPageNumber(page);
|
toc.AddPageNumber(page);
|
||||||
|
|
||||||
|
if update_docx_pages_ then
|
||||||
|
begin
|
||||||
|
r := docx_page_arr_[anchor];
|
||||||
|
r.T.Text := page.Number;
|
||||||
|
r.Serialize();
|
||||||
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSDocxToPdf.GetSymbol(symbol: string);
|
function TSDocxToPdf.GetSymbol(symbol: string);
|
||||||
|
|
@ -462,3 +473,24 @@ begin
|
||||||
// println("symbol = {}, symbol_ = {}", symbol, symbol_);
|
// println("symbol = {}, symbol_ = {}", symbol, symbol_);
|
||||||
return symbol_[symbol];
|
return symbol_[symbol];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSDocxToPdf.AddDocxPage(anchor: string; r: R);
|
||||||
|
begin
|
||||||
|
docx_page_arr_[anchor] := r;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSDocxToPdf.UpdateDocxPageNumpages();
|
||||||
|
begin
|
||||||
|
update_docx_pages_ := true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSDocxToPdf.SaveDocxFile();overload;
|
||||||
|
begin
|
||||||
|
return docx_components_ware_.Save();
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSDocxToPdf.SaveDocxFile(alias: string; file: string);overload;
|
||||||
|
begin
|
||||||
|
return docx_components_ware_.SaveAs(alias, file);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -316,15 +316,30 @@ function TSPdfParagraphRange.HyperlinkToTextRange(hyperlink: Hyperlink; ppr: PPr
|
||||||
begin
|
begin
|
||||||
i := length(range_array_);
|
i := length(range_array_);
|
||||||
rs := hyperlink.Rs();
|
rs := hyperlink.Rs();
|
||||||
|
char_type := false;
|
||||||
|
separate := false;
|
||||||
for _,r in rs do
|
for _,r in rs do
|
||||||
begin
|
begin
|
||||||
if r.FldChar.FldCharType = "begin" then break;
|
if r.FldChar.FldCharType = "begin" then char_type := true;
|
||||||
// TODO:officexml项目是否应该保留赋值接口,如何统一
|
// TODO:officexml项目是否应该保留赋值接口,如何统一
|
||||||
if ifnil(r.XmlChildRPr) then r.XmlChildRPr := new RPr();
|
if char_type then
|
||||||
// r.RPr := new RPr();
|
begin
|
||||||
{self.}SetRPr(r.RPr, ppr_unit_decorator_);
|
if r.FldChar.FldCharType = "separate" then
|
||||||
r.RPr.Color.Val := nil;
|
begin
|
||||||
{self.}RToTextRange(r, hyperlink.Anchor);
|
separate := true;
|
||||||
|
continue;
|
||||||
|
end
|
||||||
|
if r.FldChar.FldCharType = "end" then
|
||||||
|
separate := char_type := false;
|
||||||
|
if separate then
|
||||||
|
docx_to_pdf_.AddDocxPage(hyperlink.Anchor, r);
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if ifnil(r.XmlChildRPr) then r.XmlChildRPr := new RPr();
|
||||||
|
{self.}SetRPr(r.RPr, ppr_unit_decorator_);
|
||||||
|
r.RPr.Color.Val := nil;
|
||||||
|
{self.}RToTextRange(r, hyperlink.Anchor);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
arr := array();
|
arr := array();
|
||||||
while i < length(range_array_) do
|
while i < length(range_array_) do
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue