如题,怎么样在VC++中打印HTML文件和PDF文件。
网上查过使用ShellExecute会弹出打印机设置对话框,还必须手工点击确定才能打印。
有什么办法可以让他直接打印?或者调用第三方的控件可以进行打印?
我是DLL程序,不是MFC的exe程序。
您可以使用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文件,您需要查看该控件的文档以获取详细说明。