gpt4 book ai didi

c++ - 使用 MFC 打印 PDF 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:41 25 4
gpt4 key购买 nike

在我的应用程序 (MFC, C++) 中,我有一个按钮可以在路径中创建一个 PDF 文件。现在我想创建另一个按钮,该按钮将从路径开始打印 pdf 并选择一些选项,如方向和份数......但我无法做到这一点......

我看到 CPrintDialog 显示了打印机的默认对话框,但我无法使用该路径附加 PDF 文件。

我也看到了

ShellExecute(NULL, L"print", L"C:\\Documents\\1.pdf", NULL, NULL, SW_SHOWNORMAL);

那行得通,但这样我就不能选择任何参数...

如何使用 CPrintDialog 打印路径中的现有 PDF?

最佳答案

您必须使用 ShellExecuteEx 和动词 printto 来更好地控制打印:

      SHELLEXECUTEINFO ShellInfo;
ZeroMemory(&ShellInfo, sizeof(SHELLEXECUTEINFO));
ShellInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShellInfo.lpVerb = L"printto";
ShellInfo.lpFile = L"C:\\Documents\\1.pdf";
ShellInfo.lpParameters = szPrinter;
ShellInfo.nShow = SW_SHOWNORMAL;
ShellInfo.fMask = SEE_MASK_FLAG_DDEWAIT | SEE_MASK_NOCLOSEPROCESS;
if(::ShellExecuteEx(&ShellInfo))
{
if((int)ShellInfo.hInstApp > 32)
{
if(ShellInfo.hProcess != NULL)
{
DWORD dwExitCode = STILL_ACTIVE;
while(dwExitCode == STILL_ACTIVE)
{
if(!::GetExitCodeProcess(ShellInfo.hProcess, &dwExitCode))
{
dwExitCode = 0;
}
}
::CloseHandle(ShellInfo.hProcess);
}
}
}

获取打印机名称:

CPrintDialog dlg(TRUE);
if (dlg.DoModal() == IDOK)
{
CString sPrinterName = dlg.GetDeviceName();
}

关于c++ - 使用 MFC 打印 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com