2010-03-19 4 views
0

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

Мы используем 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.

ответ

1

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

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

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

+0

Спасибо за ваш вклад, звучит как прагматичное решение. Не решает необходимость ручной компоновки, хотя и не как получить ее в PDFSharp :) – OregonGhost

+0

Я принимаю это сейчас. Я реализовал алгоритм компоновки вручную, и я очень доволен этим, хотя PDFsharp и GDI + кажутся немного отличающимися. Наши тесты работают для всех случаев, которые мы намерены поддерживать. – OregonGhost

Смежные вопросы