визуальная печать PDF-файла на принтере с использованием переполнения стека

В приложении C ++ (dll) я печатаю растровые изображения, не используя диалог печати, т. Е. Из внутреннего кода, не предлагая пользователю выбрать файл. Эта функциональность работает нормально.
Теперь я пытаюсь реализовать другой метод, который будет печатать уже существующий PDF-файл на принтере. Существующая функция специфична для растровых изображений, меня смущает то, как я могу отправить PDF-файл на принтер. Ниже приведен рабочий код

DOCINFO diDocInfo = {0};
diDocInfo.cbSize = sizeof( DOCINFO );
diDocInfo.lpszDocName = L"printTest";

if( StartDoc( memDC.GetSafeHdc(), &diDocInfo ) > 0 )
{
if( StartPage( memDC.GetSafeHdc() ) > 0 )
{
CBitmap bitmap;
CImage frontImage;
frontImage.Load(_T("C:Test.bmp"));
bitmap.Attach(frontImage.Detach());

BITMAP bm;
bitmap.GetBitmap(&bm);
int w = bm.bmWidth;
int h = bm.bmHeight;

// create memory device context
CDC tempDC;
tempDC.CreateCompatibleDC(&memDC);
CBitmap *pBmp = tempDC.SelectObject(&bitmap);
tempDC.SetMapMode(memDC.GetMapMode());
memDC.SetStretchBltMode(HALFTONE);
memDC.StretchBlt(0, 0, 994, 624, &tempDC, 0, 0, 994, 624, 13369376);

EndPage(memDC.GetSafeHdc());
}
}

Я не могу найти способ передать файл PDF вместо растрового изображения в DC

0

Решение

Растровое изображение — это необработанные данные, немедленно доступные для операционной системы. PDF-файлы — это довольно сложные звери, которые нужно анализировать (сложно) и воспроизводить (трудно), если они написаны с нуля.

Ваш лучший способ действий — использовать некоторую существующую библиотеку доступа к PDF (например, MuPDF), чтобы выполнить тяжелую работу за вас. При этом вы должны либо произвести растеризацию PDF, либо команды векторного рисования, отправленные в GDI для печати. К счастью, PDF (-1 / A) не делает вещи, которые не могут быть сопоставлены с GDI; самая сложная часть будет обрабатывать встроенные шрифты; если вы не хотите их растеризовать, вам придется загрузить данные глифов в контекст GDI, используемый для печати.

1

Другие решения


По вопросам рекламы [email protected]