Хобрук: Ваш путь к мастерству в программировании

Winform .net PrintDocument DrawString со встроенным шрифтом не работает

После долгих поисков в Google я пришел сюда за помощью: Проблема: когда я пытаюсь рисовать с помощью printDocument, код показывает шрифт по умолчанию (Arial). Пожалуйста помоги.

введите здесь описание изображения

namespace EmbededFonts
{
    public partial class Form1 : Form
    {

        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        private static extern IntPtr AddFontMemResourceEx(IntPtr pbFont, uint cbFont,
            IntPtr pdv, [System.Runtime.InteropServices.In] ref uint pcFonts);

        private PrivateFontCollection fonts = new PrivateFontCollection();

        Font mySignatureFont;

        public Form1()
        {
            InitializeComponent();

            byte[] fontData = Properties.Resources.SignatureFont;
            IntPtr fontPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(fontData.Length);
            System.Runtime.InteropServices.Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
            uint dummy = 0;
            fonts.AddMemoryFont(fontPtr, Properties.Resources.SignatureFont.Length);
            AddFontMemResourceEx(fontPtr, (uint)Properties.Resources.SignatureFont.Length, IntPtr.Zero, ref dummy);
            System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr);

            mySignatureFont = new Font(fonts.Families[0], 16.0F);

        } 

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawString("My Artistic Signature", mySignatureFont, Brushes.Black, 10, 10);
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawString("My Artistic Signature", mySignatureFont, Brushes.Black, 10, 10);
        }
    }
}

  • Удалите этот System.Runtime.InteropServices.Marshal.FreeCoTaskMem(fontPtr); и удалите fonts (объект PrivateFontCollection) и mySignatureFont в событии Form1.Closed. 17.02.2021
  • Похоже, вы используете PrintPreviewControl. Используйте его событие Paint, чтобы нарисовать строку с этим шрифтом, а не с событием PrintDocument.PrintPage. Кстати, прочитайте примечания здесь: Как правильно отображать встроенный шрифт? и выберите версию кода, которую вы предпочитаете, из здесь, если вы хотите загрузить шрифт из файла (в любом случае массив байтов). 18.02.2021

Новые материалы

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

Универсальный базовый доход
Универсальный базовый доход В последние годы концепция всеобщего базового дохода (УБД) набирает обороты как все более эффективное решение для борьбы с растущим неравенством доходов и..

Освоение Python для анализа финансовых данных: руководство по получению данных о доходах от акций
Если вы хотите научиться получать данные о доходах от акций с помощью Python, то это руководство для вас! В этой статье мы рассмотрим несколько примеров сбора данных о доходах от акций. Мы..

Абсолютно имеет смысл.
Абсолютно имеет смысл. Мой репетитор даже предложил то же самое. Одна проблема, с которой я столкнулся, заключается в том, что для каждой из категорий не было ярлыка «хорошо». Если я перебираю..

МАШИННОЕ ОБУЧЕНИЕ И EDA
Каковы шаги в машинном обучении Определение проблемы Генерация гипотез Извлечение данных Исследование данных Прогнозное моделирование Развертывание модели Зачем нам ЭДА? Идентификация..

В чем основные различия между ReactJS и React-Native?
В чем основные различия между ReactJS и React-Native? Что я узнал, создавая веб-приложения, а затем мобильные приложения на React React-Native существует уже около 2 лет и стал..

LeetCode — Умножение строк
Постановка задачи Даны два неотрицательных целых числа num1 и num2 , представленные в виде строк, вернуть произведение num1 и num2 , а также представлен в виде строки. Примечание . Вы..