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