logo
small logo
  • Продукты
  • Купить
  • Поддержка
  • О нас
  • Клиентская панель Поддержка
  • Главная
  • /
  • Статьи
  • /
  • Закончилась эпоха WinForms, началась FastReport.Core.Skia
  • Сборка библиотеки libgdiplus из исходного кода

    2 октября 2020 г.

    При использовании библиотек FastReport .NET (Core), FastReport Open Source и FastReport Mono под управлением операционной

    Подробнее
  • Запуск приложения с FastReport .NET в Docker под Linux

    17 ноября 2021 г.

    Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Благодаря нему мы

    Подробнее
  • Отчёт из PostgreSQL в приложении .NET 5 под управлением Astra Linux

    4 декабря 2020 г.

    Сегодня мы поговорим о российской операционной системе Astra Linux. Эта система получила в последнее время

    Подробнее
  • Как использовать FastReport Core в Linux

    14 сентября 2017 г.

    В предыдущей статье мы рассмотрели простейший пример использования нового продукта от FastReport – FastReport Core.

    Подробнее
  • Делаем PDF документы на Raspberry PI с .NET Core

    26 мая 2020 г.

    Raspberry PI - миниатюрный одноплатный компьютер, работающий на процессоре ARM. Этот микрокомпьютер часто используется в

    Подробнее

Закончилась эпоха WinForms, началась FastReport.Core.Skia

6 сентября 2022 г.

Для создания качественных отчётов и корректного экспорта их в разные форматы (PDF, Word, Excel и т.д.) необходимо использование графического движка. Начиная с самых первых версий .NET Framework компания Microsoft использовала GDI+ и его обёртку, в составе библиотеки System.Drawing. FastReport .NET уже давно использует эту же библиотеку для создания красивых и функциональных отчётов. Команда Mono разработала свою реализацию GDI+ для Unix-систем: libgdiplus, которая используется в System.Drawing.Common. Однако, и этот метод работает не идеально.

Проблемы GDI+

К сожалению, в отличии от Windows, работа System.Drawing.Common на других платформах весьма специфична. К частым проблемам, которые мы получаем от наших пользователей, относятся: неправильный расчёт размеров отрисовываемого текста, отсутствие поддержки RTL-языков, неверный интервал между словами, ошибка переноса слов в предложении, отсутствие поддержки ARM-процессоров и общая нестабильность libgdiplus (ошибки вида “Out of memory”, проблемы при работе в многопоточной конфигурации).

Часть из этих проблем решается ручной пересборкой libgdiplus из репозитория Mono с поддержкой Pango/Cairo. В любом случае это неудобно, особенно если ваше приложение использует контейнеризацию. Оставшаяся часть проблем влияет на качество экспорта отчётов на всех операционных системах кроме Windows.

В итоге компания Microsoft официально отказалась от поддержки System.Drawing.Common на не-Windows платформах. Вот их публикация на эту тему: “Breaking change: System.Drawing.Common only supported on Windows - .NET | Microsoft Docs“. После неё наши пользователи начали активно интересоваться, как они смогут использовать мощную функциональность FastReport на ОС Linux или macOS.

Решение

Мы разработали специальную версию FastReport.Core, которая использует в качестве графического движка Skia и его обертку для .NET - SkiaSharp, под названием - FastReport.Core.Skia. Пакеты FastReport.Core.Skia и FastReport.Web.Skia доступны на нашем приватном NuGet сервере.

В случае, если у вас наблюдались проблемы с отрисовкой текста под Linux с libgdiplus, настоятельно рекомендуем попробовать FastReport.Core.Skia. Для использования в вашем приложении достаточно сменить название пакета FastReport.Core -> FastReport.Core.Skia, а также добавить следующие пакеты для работы на Linux (на Windows и macOS необходимые пакеты добавляются автоматически):

- SkiaSharp.NativeAssets.Linux (NuGet).

- HarfBuzzSharp.NativeAssets.Linux (NuGet).

Давайте теперь попробуем сравнить FastReport.Core с libgdiplus и FastReport.Core.Skia на Linux/macOS.

Для начала рассмотрим некорректный расчет длины текста после экспорта в HTML формат на ОС Linux Ubuntu 20.04. На изображениях ниже можно заметить, как даже пересобранный из исходников libgdiplus с Pango неверно отображает конец 1-ой строки, теряя часть информации, Skia работает отлично.

Некорректный HTML экспорт на Linux, libgdiplus + Pango

Некорректный HTML экспорт на Linux, libgdiplus + Pango

 

Корректный HTML экспорт на Linux, SkiaSharp

Корректный HTML экспорт на Linux, SkiaSharp

Рассмотрим экспорт отчёта Unicode.frx из нашей демки с текстами на разных языках. К сожалению, даже после пересборки libgdiplus с Pango не работает c RtL-языками, такими как Hebrew, Arabic и другие. FastReport.Core.Skia умеет работать с такими языками.

Некорректный PDF экспорт RtL-текста на Linux, libgdiplus с Pango записал весь текст в 1 столбик на 8 страниц

Некорректный PDF экспорт RtL-текста на Linux, libgdiplus с Pango записал весь текст в 1 столбик на 8 страниц

Корректный PDF экспорт RtL-текста на Linux, SkiaSharp

Корректный PDF экспорт RtL-текста на Linux, SkiaSharp

Похожая ситуация наблюдается с некоторыми восточными языками, для корректного отображения которых нужен специальный шрифт:

Некорректный PDF экспорт текста на Linux, libgdiplus с Pango

Некорректный PDF экспорт текста на Linux, libgdiplus с Pango

Корректный PDF экспорт текста на Linux, Skia. Для каждого текста автоматически выбирается подходящий шрифт.

Корректный PDF экспорт текста на Linux, Skia. Для каждого текста автоматически выбирается подходящий шрифт.

Попробуем работу FastReport.Core.Skia в ранее неподдерживаемом сценарии: работу на устройствах с ARM-процессорами, таких как Apple M1. Создадим консольное приложение .NET 6 (т.к. только .NET 6 имеет нативную поддержку ARM архитектуры для macOS) и сделаем экспорт отчёта Simple List.frx из нашего демо.

PDF экспорт на macOS с Apple M1, SkiaSharp

И под конец напомним, что System.Drawing.Common начиная с версии 7.0 полностью перестанет поддерживать не-Windows системы, поэтому приведенные выше примеры работы libgdiplus скоро вовсе не будут работать.

System.Drawing.Common перестанет поддерживать не-Windows системы

Ограничения:

Эту версию FastReport.Core нельзя использовать, если применяется API System.Drawing: в некоторых .NET Framework проектах, NET Core 3.1/ NET 5+ WindowsForms проекты, а также в проектах с System.Drawing.Common из-за специфики данной модификации.

Попробуйте новую версию FastReport.Core с поддержкой SkiaSharp и оцените все её преимущества. При возникновении каких-либо вопросов - обращайтесь в нашу Поддержку.

О продукте Купить
avatar
Kirill Kornienko
.NET разработка
Fast Reports Team: Kirill Kornienko - NET Development at Fast Reports
.NET MacOS Mono FastReport Linux Core PDF WinForms HTML Libgdiplus Windows

Добавить комментарий
logo
  • +7(800)551-75-80
  • info@fastreport.ru
  • Ростов-на-Дону, Россия, 344082, ул.Обороны 24, офис 311
  • Купить
  • Загрузить
  • Документация
  • Отзывы
  • Как деинсталировать
  • FAQ
  • Видео уроки
  • Форум
  • Условия оказания поддержки
  • Статьи
  • Наши Новости
  • Пресса о нас
  • Реселлеры
  • Нестандартное лицензирование
  • ВУЗам
  • Карьера
  • Контакты

© 1998-2023 ООО «Быстрые отчеты»

  • Согласие с обработкой персональных данных
  • Не является публичной офертой