Редактировать и визуализировать RichText

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

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

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

В настоящее время редактор просто отображает текстовое поле для метки, которую вы хотите отредактировать, со шрифтом, установленным на шрифт метки. Я подумал, что просто заменю его на 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.


person OregonGhost    schedule 19.03.2010    source источник


Ответы (1)


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

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

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

person I liked the old Stack Overflow    schedule 23.03.2010
comment
Спасибо за ваш вклад, звучит как прагматичное решение. Однако это не устраняет необходимость ручного макета, а также не решает, как получить его в PDFSharp :) - person OregonGhost; 23.03.2010
comment
Я принимаю это сейчас. Я реализовал алгоритм компоновки вручную и очень им доволен, даже несмотря на то, что PDFsharp и GDI+ рендерятся немного по-разному. Однако наши тесты работают для всех случаев, которые мы собираемся поддерживать. - person OregonGhost; 09.07.2010