Создайте номер страницы X из Y в слове через Delphi

Я хочу добавить нумерацию страниц X или Y в текстовый файл, созданный с помощью Delphi, который: - не жирный; - размером шрифта 8; - выровнен вправо.

Обратите внимание, что: Y — общее количество страниц; X — индекс номера страницы.

Пока я нашел это:

procedure Print;
var v:olevariant;

v:=CreateOleObject('Word.Application');
v.Documents.Add;
HeaderandFooter;
firstpage:=true;  

procedure HeaderandFooter;
var adoc,:olevariant;
begin
adoc.Sections.Item(1).Headers.Item(wdHeaderFooterPrimary).Range.Font.Size := 8;
adoc.Sections.Item(1).Footers.Item(wdHeaderFooterPrimary).PageNumbers.Add(wdAlignPageNumberRight);

Я могу изменить формат нумерации:
adoc.Sections.Item(1).Footers.Item(wdHeaderFooterPrimary).PageNumbers.NumberStyle := wdPageNumberStyleLowercaseRoman;

Но нет варианта для страницы X формата Y. Как мне это реализовать?


person Petermch    schedule 07.01.2016    source источник


Ответы (1)


Хотя нет выбираемого стиля нумерации страниц заголовка, который имеет этот формат, вы можете сделать это, добавив определенные поля документа MS Word, PAGE и NUMPAGES, в заголовок страницы (или нижний колонтитул) или где-либо еще.

procedure TForm1.MakeDocWithPageNumbers;
var
  MSWord,
  Document : OleVariant;
  AFileName,
  DocText : String;
begin
  MSWord := CreateOleObject('Word.Application');
  MSWord.Visible := True;

  Document := MSWord.Documents.Add;
  DocText := 'Hello Word!';
  MSWord.Selection.TypeText(DocText);

  if MSWord.ActiveWindow.View.SplitSpecial <> wdPaneNone then
      MSWord.ActiveWindow.Panes(2).Close;
  if (MSWord.ActiveWindow.ActivePane.View.Type = wdNormalView) or (MSWord.ActiveWindow.ActivePane.View.Type = wdOutlineView) then
      MSWord.ActiveWindow.ActivePane.View.Type := wdPrintView;

  MSWord.ActiveWindow.ActivePane.View.SeekView := wdSeekCurrentPageHeader;
  MSWord.Selection.TypeText( Text:='Page ');

  MSWord.Selection.Fields.Add( Range:= MSWord.Selection.Range, Type:=wdFieldEmpty, 
    Text:= 'PAGE  \* Arabic ', PreserveFormatting:=True);
  MSWord.Selection.TypeText( Text:=' of ');
  MSWord.Selection.Fields.Add( Range:=MSWord.Selection.Range, Type:=wdFieldEmpty,
    Text:= 'NUMPAGES  \* Arabic ', PreserveFormatting:=True);
  MSWord.Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Count:=1);

  AFileName := 'd:\aaad7\officeauto\worddocwithheader.docx';
  Document.SaveAs(AFileName);
  ShowMessage('Paused');
  Document.Close;
end;

Я оставил настройку размера шрифта и выравнивание по правому краю в качестве упражнений для читателя, поскольку SO не должен быть службой написания кода; =)

person MartynA    schedule 07.01.2016
comment
Работает как шарм! Я выровнял его по правому краю с помощью: ‹code›MSWord.Selection.ParagraphFormat.Alignment := wdAlignParagraphRight; - person Petermch; 08.01.2016