Добавить оглавление в документ RTF
Я пытаюсь сгенерировать RTF-документ вручную и в конечном итоге сделаю это программно. Я планирую улучшить pyRTF, чтобы он мог генерировать "оглавление", что, я думаю, не может.
Я не могу использовать слова управления RTF (\tc, \tcf и \tcl.) Для генерации оглавления. http://msdn.microsoft.com/en-us/library/aa140283(office.10).aspx дает подробную информацию об оглавлении, но я не смог найти или сделать какой-либо пример RTF, который имеет оглавление.
Так есть ли простой пример, показывающий RTF с TOC?
3 ответа
Решение
Я создаю таблицу с гиперссылками на закладки для заголовка на разных страницах.
например
'{\\field{\\*\\fldinst HYPERLINK \\\\l "%s"} {\\fldrslt %s}}'%(bookmark, text)
"{\\field{\\*\\fldinst PAGEREF %s }}"%bookmark
{\rtf1\ansi\deff0\adeflang1045
{\fonttbl {\f0\fsserif\fcharset238 Verdana;}}
\titlepage\line\line\line\line\line
{\pard \s1\f0\b\scaps\fs80\qc
{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt\ul0 Title Page\line\fs30\scaps0\b0 go to Table of Contents}}
\par}
\page{\*\bkmkstart page2}{\*\bkmkend page2}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page \chpgn}}\par}
\page{\*\bkmkstart page3}{\*\bkmkend page3}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page \chpgn}}\par}
\page{\*\bkmkstart page4}{\*\bkmkend page4}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page \chpgn}}\par}
\page{\*\bkmkstart page5}{\*\bkmkend page5}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page \chpgn}}\par}
\page{\*\bkmkstart toc}{\*\bkmkend toc}{\pard\sa1000\f0\fs50\b\qc{\field{\*\fldinst TOC}{\fldrslt Table of Contents}}\par}
{\pard\f0\fs28\fi0\trowd\cellx8000\cellx8600
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page2"} {\fldrslt\ul0 Link to anchor #page2}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page2}}\cell\row
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page3"} {\fldrslt\ul0 Link to anchor #page3}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page3}}\cell\row
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page4"} {\fldrslt\ul0 Link to anchor #page4}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page4}}\cell\row
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page5"} {\fldrslt\ul0 Link to anchor #page5}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page5}}\cell\row
\par}
}
Этот код демонстрирует правильно сформированное содержание
{\rtf1\ansi\deff0\adeflang1045
{\fonttbl {\f0\fsserif\fcharset238 Verdana;}}
\titlepage\line\line\line\line\line
{\pard
{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt\f0\fs80\b\scaps\qc\ul0 Title Page\line go to Table of Contents}}
\par}
\page{\*\bkmkstart page2}{\*\bkmkend page2}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page}} \chpgn\par}
\page{\*\bkmkstart page3}{\*\bkmkend page3}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page}} \chpgn\par}
\page{\*\bkmkstart page4}{\*\bkmkend page4}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page}} \chpgn\par}
\page{\*\bkmkstart page5}{\*\bkmkend page5}\line\line\line\line\line{\pard\f0\fs80\b\scaps\qc\sa10000{\field{\*\fldinst HYPERLINK \\l "toc"} {\fldrslt Page}} \chpgn\par}
\page{\*\bkmkstart toc}{\*\bkmkend toc}{\pard\sa1000\f0\fs50\b\qc{\field{\*\fldinst TOC}{\fldrslt Table of Contents}}\par}
{\pard\f0\fs28\fi0\trowd\cellx8000\cellx8600
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page2"} {\fldrslt\ul0 Link to anchor #page2}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page2}}\cell\row
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page3"} {\fldrslt\ul0 Link to anchor #page3}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page3}}\cell\row
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page4"} {\fldrslt\ul0 Link to anchor #page4}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page4}}\cell\row
\pard\intbl\ql {\field{\*\fldinst HYPERLINK \\l "page5"} {\fldrslt\ul0 Link to anchor #page5}}\cell\pard\intbl\qr {\field{\*\fldinst PAGEREF page5}}\cell\row
\par}
}