Редактировать и визуализировать RichText - PullRequest
0 голосов
/ 19 марта 2010

У нас есть приложение (пользовательский инструмент управления сетью для автоматизации зданий), которое поддерживает печать этикеток, которые можно вырезать и вставить в передние дисплеи устройств. В более ранних версиях инструмента (не разработанного в моей компании) приложение просто помещало строки в файл Excel, которым полевой техник мог затем манипулировать (например, форматирование текста). Мы не делали этого в новой версии, потому что было трудно (невозможно) синхронизировать файл Excel и избежать привязки к внешнему приложению (не говоря уже о разных версиях Excel).

Мы используем PDFSharp для рендеринга надписей. Он имеет интерфейс, подобный System.Drawing, но может выводить данные в System.Drawing.Graphics (экран / принтер), а также в файл PDF, что является обязательным требованием.

Позже было введено базовое форматирование, такое как семейство шрифтов, стиль, размер, цвет, которые будут применяться к одной метке (то есть к одной строке). Теперь клиент хочет иметь возможность применять эти форматы к отдельным символам в строке. Я думаю, что самым простым способом было бы поддержать подмножество RichText. Это не так просто, как я думал.

В настоящее время редактор просто отображает TextBox для метки, которую вы хотите редактировать, со шрифтом, установленным на шрифт метки. Я подумал, что я просто заменю его на RichTextBox и обновлю кнопки форматирования, чтобы использовать свойства форматирования RichTextBox. Довольно легко. Однако мне нужно нарисовать текст. Я знаю, что вы можете заставить RichTextBox рисовать на HDC или System.Drawing.Graphics - но, как уже было сказано, мне нужно использовать PDFSharp. Рендеринг в растровые изображения не вариант, так как PDF не должен быть огромным, и это много меток. К сожалению, я не мог заставить RichTextBox сказать мне расположение текста - я прекрасно справляюсь с реальным рендерингом вручную, пока я знаю, где что рисовать. Это первый вопрос: Как я могу получить правильно расположенные метрики расширенного текста из RichTextBox? Или есть какой-нибудь способ преобразовать форматированный текст в формат векторной графики, который можно легко нарисовать вручную ?

Я знаю о NRTFTree , который можно использовать для анализа и манипулирования RichText. Документация плохая (на самом деле я не знаю, это испанский), но я думаю, что смогу заставить ее работать. Насколько я понял, это также не обеспечит компоновку. Из-за этого, я думаю, мне придется написать пользовательский элемент управления для редактирования (помните, что это просто одна или две строчные метки с базовым форматированием RTF, а не полноценный элемент управления для редактирования - больше похоже на редактирование текстового поля в PowerPoint) и запись настраиваемая логика размещения текста, которая использует PDFSharp вместо System.Drawing для рисования. Существует ли какое-либо существующее, хотя и частичное, решение для редактирования или для выполнения макета вручную (или оба)?

Или есть совсем другой подход, которого я просто не вижу? Бонусные баллы, если при экспорте текстов меток в формате RTF в файл CSV, а затем при импорте в Excel форматирование сохраняется.

Что касается редактирования, мне нужно, чтобы она работала в Windows Forms. Кроме того, я думаю, что это не связано с Windows Forms.

1 Ответ

1 голос
/ 23 марта 2010

Или есть совершенно другой подход, которого я просто не вижу?

Чтобы импортировать RTF из буфера обмена, мы используем скрытый RichEntryField, вставляем в него весь текст, выбираем первый символ и запрашиваем поддерживаемые форматы (шрифт, размер, жирный, курсив, подчеркивание, ...), выбираем второй символ и запросить форматы ...

Это не простое решение, которое вы ищете, но вам не нужно разбирать RTF самостоятельно.

...