使用 MFC 打印 PDF 文件

Gio*_*diX 5 c++ printing pdf mfc

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

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

我也看到了

ShellExecute(NULL, L"print", L"C:\\Documents\\1.pdf", NULL, NULL, SW_SHOWNORMAL);
Run Code Online (Sandbox Code Playgroud)

可行,但这样我无法选择任何参数...

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

Gio*_*diX -2

我已经用解决方法解决了。CDC我没有使用 ShellExecute,而是使用附加到类的 hDC 的对象来绘制我想要打印的所有内容CPrintDialog。请记住根据打印机 DPI 管理绘图的大小,如下所示

一个片段仅供参考:

    CPrintDialog printDialog(FALSE);

    printDialog.GetDefaults();

    printDialog.m_pd.Flags &= ~PD_RETURNDEFAULT;

    DEVMODE* pDevMode = printDialog.GetDevMode();
    pDevMode->dmFields = DM_ORIENTATION | DM_PAPERSIZE | DM_PRINTQUALITY ;
    pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
    pDevMode->dmPaperSize = DMPAPER_A4;
    ::GlobalUnlock(printDialog.m_pd.hDevMode);

   if (printDialog.DoModal() == IDOK)
   {
       CDC* pDC = new CDC;
       pDC->Attach(printDialog.m_pd.hDC);
       pDCPDF->StartDoc(_T(""));
       pDCPDF->StartPage();
       // ...
       //draw what you want 
       // ...
       pDCPDF->EndPage();
       pDCPDF->EndDoc(); //this starts the printer          
       pDCPDF->DeleteDC();
   }
Run Code Online (Sandbox Code Playgroud)

希望尽快达到15名的声誉来投票其他问题的答案。感谢安德鲁·科米金的回答。