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