Вопрос:

Пример списка маркеров RTF

rtf

14027 просмотра

5 ответа

51 Репутация автора

Кажется невозможным найти очень простой рабочий пример для списка маркеров RTF, который выглядит следующим образом:

  • Привет
  • Мир
    • Вложенный (но с квадратом в качестве пули, пожалуйста)
    • Также вложенный (также квадратная пуля)
  • и снова регулярно

Я попытался сделать небольшой образец с помощью Word или TextEdit.app, но они производят много мусора. Кто-нибудь может помочь?

Автор: ckck Источник Размещён: 12.03.2013 05:25

Ответы (5)


8 плюса

3336 Репутация автора

Если вы достаточно долго просматривали RTF в формате Word или Wordpad, вы можете найти строки, которые выглядят так:

{\ f2 {\ pntext \ 'B7 \ tab} {* \ pn \ pnlvlblt \ pnstart1 {\ pntxtb \' B7}} {\ ltrch Это тест.} \ li720 \ ri0 \ sa0 \ sb0 \ jclisttab \ tx720 \ Fi-360 \ QL \ пар}

{\ f2 {\ pntext \ 'B7 \ tab} {* \ pn \ pnlvlblt \ pnstart1 {\ pntxtb \' B7}} {\ ltrch Так и есть.} \ li720 \ ri0 \ sa0 \ sb0 \ jclisttab \ tx720 \ fi -360 \ QL \ п}

Это будет форматировать так

  • Это тест.
  • Так и это.

Вложенные списки, вероятно, немного сложнее, но это то, что вам нужно, если у вас нет вложенных списков.

Теперь это зависит от того, что вы хотите сделать с этим. Если вы просто отображаете это, каждый тег означает что-то полезное. Когда я работал со списками, я их преобразования в HTML, так много тэгов форматирования ( \li, \ri, \txи т.д.), мне не нужно для моего приложения , потому что я просто использовал <ol>, <ul>и <li>теги. Главное, чтобы это был тег \pnlvlblt, который делает этот список маркированным списком. Кроме того, \'B7это фактический тег Unicode для пули, ·

Наиболее актуальная спецификация RTF находится здесь:

https://www.microsoft.com/en-us/download/details.aspx?id=10725

Автор: ToastyMallows Размещён: 28.06.2013 08:42

6 плюса

16417 Репутация автора

Простой, простой способ - использовать символы следующим образом:

\line \bullet Hello
\line \bullet World
\line \tab \bullet Nested (but with square as bullet please)
\line \tab \u9632 Also nested (also square bullet)
\line \tab and regular again

После этого вы все равно могли бы проанализировать RTF обратно в формат на основе тегов с включением тегов, так как информация об иерархии предоставляется отступом.

Как видите, любой вид использования Юникода в порядке. Для Unicodes см. Этот сайт .

Для получения дополнительной информации обязательно ознакомьтесь с разделом « Маркеры и нумерация» в Спецификациях RTF.

Автор: Lorenz Lo Sauer Размещён: 31.10.2013 06:28

2 плюса

546 Репутация автора

Я попробовал anser Saur, но линия «Также вложенная (также квадратная пуля)» имела A также закрыта квадратной пулей. Не уверен, почему это произошло.
■ также вложенный (также квадратная пуля)

Мне нравится использовать команды отступа строки, поэтому, если происходит перенос строки, переносимый текст также имеет отступ. Когда вы делаете \ line \ tab, все, что выходит за пределы напечатанной страницы, будет начинаться с левого поля, а не с того места, откуда начинался текст с отступами. Это система, сгенерированная System.Windows.Forms.RichTextBox, которую я вставил (из MS-Word), а затем вызвал RichTextBox.RTF, чтобы получить код.

{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\froman\fprq2\fcharset2 Symbol;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fnil\fprq2\fcharset2 Wingdings;}{\f3\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\ltrpar\fi-360\li360\f0\fs20\'b7\tab\f1 Hello\par
\f0\'b7\tab\f1 World\par
\pard\ltrpar\fi-360\li990\f2\'a7\tab\f1 Nested (but with square as bullet please)\par
\f2\'a7\tab\f1 Also nested (also square bullet)\par
\pard\ltrpar\fi-360\li360\sa200\sl276\slmult1\f0\'b7\tab\f1 and regular again\lang1024\par
\pard\ltrpar\lang1033\f3\fs17\par
}
Автор: user922020 Размещён: 06.01.2014 10:18

1 плюс

5142 Репутация автора

Вот как я создаю список маркеров:

{\rtf1\ansi\deff0
{{\li0\pntext\pn\pnlvlblt\pntxtb\u8226?\tab}{This is item one}\par}
{{\li0\pntext\pn\pnlvlblt\pntxtb\u8226?\tab}{This is item two}\par}
{{\li400\pntext\pn\pnlvlblt\pntxtb\u9642?\tab}{This is item three}\par}
{{\li400\pntext\pn\pnlvlblt\pntxtb\u9642?\tab}{This is item four}\par}
{{\li0\pntext\pn\pnlvlblt\pntxtb\u8226?\tab}{This is item five}\par}
}

Отображается как:

введите описание изображения здесь

Имейте в виду, что многоуровневый список на самом деле не угрожает, как один в слове. В основном это обычный список с отступом узлов.

Объяснение:

\li0 : intend 0 (полезно для многоуровневых списков)

\pntext : префикс для всех пронумерованных / маркированных абзацев

\pn : включает нумерацию абзацев (также необходимо для маркированных списков)

\pnlvlblt : этот абзац является пулевым абзацем

\pntxtb : текст перед (иконка)

\u8226?: Юникод символ для маркера

\u9642? символ Юникод для маленького черного квадрата

\tab : добавляет вкладку после иконки

\par конец абзаца

Автор: NtFreX Размещён: 10.04.2018 02:45

0 плюса

575 Репутация автора

Это для людей, которые хотят добавить текст и список маркеров в расширенный инструментарий wpf (wpfToolKit) richTextBox . Я создал это, потому что у меня были некоторые проблемы с решениями здесь. Они не сработали для меня или \tabслишком большой перед пули. С помощью этой реализации вы можете отрегулировать отступ перед пулями .

Примечания для этой реализации:

  • Вы должны поиграть с отступом ( \li). В моем случае значения должны отличаться на сотни, чтобы увидеть эффект. в этом примере: 100 и 500.

  • \par\pardважно использовать для каждой строки в поле richtext. Без него он бы отступал и от других строк без пуль.

  • заголовок включает в себя такие вещи, как окраска, которая вам, вероятно, не нужна.

методы

public  string AddBullet(string textRow, int indent)
{
    return $@"\li{indent}{{\pntext\f1\'B7}}{{\*\pn\pnlvlblt{{\pntxtb\'B7}}}}{textRow}";
}

public  string AddNewLine(string text)
{
    return $@"{text}\par\pard ";
}


public  string AddHeader(string text, string fontName, int fontSize)
{
    return $@"{{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{{\fonttbl{{\f0\fnil\fcharset0 {fontName};}}{{\f1\fnil\fcharset2 Symbol;}}}}{{\colortbl ;\red0\green77\blue187;\red128\green0\blue0;\red0\green0\blue0;\red155\green0\blue211;\red81\green163\blue69;\red51\green51\blue51;}}\viewkind4\uc1\pard\sl0\slmult1\f0\fs{fontSize * 2}\lang7 {text}}}";
}

Как использовать методы

var regularRow1     = AddNewLine("AAAA");
var bulletRow1      = AddNewLine(AddBullet("BBBB", 100));
var bulletRowNested = AddNewLine(AddBullet("CCCC", 500));
var bulletRow2      = AddNewLine(AddBullet("BBBB", 100));
var regularRow2     = AddNewLine("AAAA");

var richTextWithoutHeader = regularRow1 + bulletRow1 + bulletRowNested + bulletRow2 + regularRow2;
var richText = AddHeader(richTextWithoutHeader, "Arial", 12);

Результат

Результат

Автор: Blechdose Размещён: 11.08.2019 08:21
Вопросы из категории :
32x32