С# – Как измерить размер текста/отдельного глифа, как он будет отображаться в PDF-файле?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 С# – Как измерить размер текста/отдельного глифа, как он будет отображаться в PDF-файле?

Сообщение Anonymous »

Я пытаюсь создать очень простую библиотеку для создания PDF-файлов, и текст кажется самой сложной частью (как мне также говорили).
Основная трудность заключается в том, что универсальная графика Кажется, у .MeasureText нет опции, дающей идеальные результаты.
Это то, что у меня есть в настоящее время, которое дает наилучшие результаты, но оно все еще несовершенно и при попытке выравнивания по правому краю или центру например текст, мне действительно нужно как можно точнее знать ширину текста.

Код: Выделить всё

private SizeF MeasureTextSize(FontFamily fontFamily, float fontSize, string text)
{
Font pixelFont = new Font(fontFamily, fontSize, GraphicsUnit.Pixel);

using (Graphics graphics = Graphics.FromImage(new Bitmap(1, 1)))
{
return graphics.MeasureString(text, pixelFont, PointF.Empty, StringFormat.GenericTypographic);
}
}
На данный момент я пробовал:
  • используя все различные графические единицы, Pixel кажется наиболее точным (даже хотя я читал, что вывод PDF вместо этого выполняется с помощью Points)
  • Различные форматы строк. Может быть, ответом является собственный StringFormat?
Ниже приведен пример вывода. Я создал таблицу 3х3 на странице шириной 300 пикселей. Таким образом, каждая ячейка имеет ширину 100 пикселей. Текст xPos размещается с выравниванием по правому краю с помощью параметра cellWidth — textWidth. CellWidth всегда имеет правильное значение 100, поэтому проблема, должно быть, связана с тем, как работает Graphics.MeasureString.
Изображение

Я не эксперт по тексту, поэтому предполагаю, что существует несоответствие между GDI/GDI+ или что-то еще с измеренным типом шрифта и типом напечатанного шрифта.
Кроме того, это необходимо сделать без каких-либо других ранее существовавших библиотек PDF. Поэтому я не могу использовать решения iText или PDFSharp.
редактировать: добавлен базовый код, чтобы вы могли запустить его самостоятельно
https://dotnetfiddle.net/m18wez

Подробнее здесь: https://stackoverflow.com/questions/783 ... w-on-a-pdf
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»