Библиотеки/средства, способные напечатать текст в изображение, пригодное для печати на принтере?
Доброго времени суток…
Имеется принтер для печати пластиковых карточек Zebra P430i и SDK для него. Принтер умеет печатать текст, и делает это хорошо, но выравнивание по правому краю/центру не поддерживает, а оно нужно. Т. к. узнать точные размеры будущего текста для коррекции координат для печати невозможно, текст я сначала печатаю в картинку, а затем картинку отправляю на принтер. Проблема в том, что после печати на принтере этой картинки текст получается не очень хорошего качества, не смотря на то, что картинка имеет DPI как у принтера — 300.
Отсюда вопрос — посоветуйте, пожалуйста, бесплатные библиотеки на C, C++, C#, которыми можно было бы напечатать текст в картинку и при этом поиграться со всякими параметрами сглаживания и т. д (лицензия должна позволять динамическую линковку с закрытым кодом). Ну или другие способы улучшения качества печати.
Текст и картинка разные вещи. Текст печатается с разрешением принтера (например, 300 dpi — это достаточно низкое разрешение, недостатки будут заметны невооруженным глазом), а картинка — с линеатурой растра (например, 75 lpi — это, напротив, довольно высокая линеатура). Если печатать текст картинкой, он всегда будет дробиться растром, тут ничего не сделать. Копайте все-таки в сторону измерения длины строки как-то.
Я глянул там у них три SDK для разных принтеров и вроде как этот принтер самый простой — может быть для более дорогих это есть? А в операционной системе нет такой функции? Она, может быть, будет отличаться, но пропорцию можно посчитать. Или, если есть файл шрифта, то можно оттуда считать информацию о ширине символов и кернинге, собственно, такие библиотеки есть, тот же freetype.
Хм, а подробнее можно про считывание информации из шрифтов? В программе используются только установленные в систему шрифты. Если реально можно узнать точные размеры текста при печати/отображении для разных DPI из шрифта, это было бы просто замечательно.
Если вы под Windows пишете, то в Win32 это будет GetTextExtentPoint32. Насколько я понимаю, нужно предварительно настроить device context, который идет первым параметром (шрифт, размер, наверное разрешение и т. п.), а уж затем измерять. Из шрифтов считывать тоже можно, но тут уже вроде как все готово.