juliashs Ответов: 1

Как дать имя файла виртуальному принтеру "Microsoft print to pdf" на языке C++ ?


Я должен распечатать PDF с помощью моего приложения C++ в Windows 10, не открывая "диалог сохранения файла". Ранее я использовал " Generic Postscript Printer "для сохранения файла с заданным именем как". ps", а затем преобразовал его в PDF с помощью другого приложения. Windows 10 не поддерживает "универсальный принтер Postscript", но имеет встроенный принтер "Microsoft Print to Pdf". Я знаю, как дать ему имя файла + свойство бесшумной печати с помощью C#

// initialize PrintDocument object
PrintDocument doc = new PrintDocument() {
    PrinterSettings = new PrinterSettings() {
        // set the printer to 'Microsoft Print to PDF'
        PrinterName = "Microsoft Print to PDF",

        // tell the object this document will print to file
        PrintToFile = true,

        // set the filename to whatever you like (full path)
        PrintFileName = Path.Combine(directory, file + ".pdf"),
    };
}


но не могу найти решение на C++. Кто-нибудь знает, существует ли она вообще?

Что я уже пробовал:

Я использую функцию StartDoc, и принтер открывает диалоговое окно для сохранения файла (он работает хорошо, и мой поток печатается нормально). Однако мне нужно "тихое" решение (без диалога).

Richard MacCutchan

Использование C++ будет таким же; просто установите различные поля в настройках принтера перед началом печати.

juliashs

Спасибо! Я пытался, но не могу найти подходящую ссылку на C++ для API к принтеру

Richard MacCutchan

Видеть GDI Print API Reference (Windows)[^].

juliashs

Да! Большое спасибо!
Следующий код работает нормально:

DOCINFO Dinfo ;
...
Dinfo. lpszOutput = (LPCSTR)"D:\\Test1.pdf";

KarstenK

пожалуйста, напишите такой ответ как решение, чтобы отметить его как ответ. ;-)

juliashs

Готово :) спасибо!

1 Ответов

Рейтинг:
0

juliashs

The following code works fine: 

DOCINFO Dinfo ;
...
Dinfo.lpszOutput = (LPCSTR)"D:\\Test1.pdf";