PDFsharp - XStringFormatFlags отсутствует в новой версии - PullRequest
0 голосов
/ 14 декабря 2018

Проект, над которым я сейчас работаю, использует MigraDoc и PDFsharp.До сих пор использовалась последняя стабильная версия 1.32.2608, но мы пытаемся перейти на более новую, предварительную версию (из-за подключенного проекта, использующего 1.50.4619-beta4c).И почти все выглядит хорошо, но есть одна вещь, которую я не знаю, как обойти.
Есть функция, измеряющая размер строки, которая ищет (проще говоря) кое-что об этом:

protected SSize GetSize(string text, MigraDoc.DocumentObjectModel.Font font)
{
  var doc = new PdfDocument();
  var page = doc.AddPage;
  var sizer = XGraphics.FromPdfPage(page);
  var style = XFontStyle.Regular;
  //some style checks

  var xf = new XFont(font.Name, font.Size, style);
  var st = new XStringFormat();
  st.FormatFlags = XStringFormatFlags.MeasureTrailingSpaces;
  var xs = sizer.MeasureString(text, xf, st);
  return new SSize {
    Height = XUnit.FromPoint(xs.Height * _measureCorrection).Centimeter,
    Width = XUnit.FromPoint(xs.Width * _measureCorrection).Centimeter
  };
}

и проблемная строка:

st.FormatFlags = XStringFormatFlags.MeasureTrailingSpaces;

, поскольку XStringFormat потерял свойство FormatFlags, и перечисление XStringFormatFlags больше не существует.Кто-нибудь имеет подобный опыт и может дать подсказку, как правильно преобразовать его в новую версию?

1 Ответ

0 голосов
/ 15 декабря 2018

На официальном форуме PDFsharp вы можете найти эту реализацию класса TextMeasurement, которая выглядит намного более эффективной, чем приведенный выше фрагмент кода:
https://forum.pdfsharp.net/viewtopic.php?f=8&t=3196 Ваш код создает новый документ PDF иНовая страница PDF просто для измерения строки - для каждой строки.

Для работы с конечными пробелами:

  • Один из вариантов - измерение пробелов отдельно - измерьте «XX» и «XX» и используйте разницу в качестве ширины пробела.
  • Или добавьте «X» к каждой строке и затем вычтите ширину «X», чтобы получить ширину строки с конечными пробелами.

Вы можете взять класс TextMeasurement дляНачните и сохраните ширину «X» или «» соответственно внутри класса, чтобы получить более эффективную реализацию.

...