如何在VC++中打印html和PDF文件?

如题,怎么样在VC++中打印HTML文件和PDF文件。
网上查过使用ShellExecute会弹出打印机设置对话框,还必须手工点击确定才能打印。
有什么办法可以让他直接打印?或者调用第三方的控件可以进行打印?
我是DLL程序,不是MFC的exe程序。

img

您可以使用Windows API中的PrintDlg函数来调用打印对话框,并使用PrintDlg函数返回的打印设备上下文句柄来打印HTML文件和PDF文件。
以下是一些示例代码:

// 打印HTML文件
void PrintHtmlFile(LPCTSTR lpszFilePath)
{
    // 获取打印设备上下文句柄
    HDC hdcPrint = GetPrinterDC();
    if (NULL == hdcPrint)
    {
        return;
    }

    // 调用ShellExecute打开HTML文件并打印
    HINSTANCE hinst = ShellExecute(NULL, _T("printto"), lpszFilePath, NULL, NULL, 0);
    if ((int)hinst <= 32)
    {
        // 打印HTML文件失败处理
    }

    // 关闭打印设备上下文句柄
    DeleteDC(hdcPrint);
}

// 打印PDF文件
void PrintPdfFile(LPCTSTR lpszFilePath)
{
    // 获取打印设备上下文句柄
    HDC hdcPrint = GetPrinterDC();
    if (NULL == hdcPrint)
    {
        return;
    }

    // 创建PDF文档对象
    CPDFDocument doc;
    doc.Load(lpszFilePath);

    // 获取文档页面数
    int nPageCount = doc.GetPageCount();
    for (int i = 0; i < nPageCount; i++)
    {
        // 获取指定页面的渲染器
        CPDFRenderer renderer;
        renderer.SetRenderFlag(RENDERFLAG_PRINT);
        renderer.StartRendering(hdcPrint, 0, 0);
        renderer.RenderPage(doc, i);
        renderer.EndRendering();

        // 点击打印机上的打印按钮
        ClickPrintButton();
    }

    // 关闭打印设备上下文句柄
    DeleteDC(hdcPrint);
}

// 获取打印设备上下文句柄
HDC GetPrinterDC()
{
    PRINTDLG pd = { 0 };
    pd.lStructSize = sizeof(PRINTDLG);
    pd.Flags = PD_RETURNDC;
    if (PrintDlg(&pd))
    {
        return pd.hDC;
    }
    return NULL;
}

// 点击打印机上的打印按钮
void ClickPrintButton()
{
    // 使用鼠标模拟点击打印按钮
}

请注意,如果您希望调用第三方控件来打印HTML文件和PDF文件,您需要查看该控件的文档以获取详细说明。