C/C++ 调用Adobe Acrobat Reader DC实现PDF文件打印
由于近期项目开发需要,需要打印PDF文件。
前提需要下载软件Adobe Acrobat Reader DC。该打印方法是使用Adobe Acrobat Reader DC中提供的控件(OCX)来实现打印功能。
Adobe Acrobat Reader DC下载链接:下载 Adobe Acrobat Reader DC | 免费 PDF 浏览器 | Windows、Mac、iOS、Android
安装成功之后即可开始创建Demo来实现功能。
本人使用的开发环境为 VS 2010。
新建一个MFC项目工程,命名为PrintPDF。
项目创建成功之后,需要添加Adobe Acrobat Reader DC提供的ActiveX控件MFC类。
在类向导中,选择“添加类”->“ActiveX 控件中的MFC类(A)”,如下图所示:
之后按下图所示,完成CAcroAXDocShim类的添加。
在 PrintPDFDlg.cpp 源文件中添加上生成的 CAcroAXDocShim 类的头文件。
下图为我的界面设计。
现在就可以开始实现具体的打印方法。
1.添加定义
CAcroAXDocShim cPdf;
2.在按钮中实现具体功能,其中m_Path为路径控件变量,m_StartPage为打印页的起始页控件变量,m_EndPage为打印页的终止页控件变量。
(1)此为打印PDF文件
BOOL bRet = FALSE;
char szPath[MAX_PATH] = {0x00};
//获取PDF文件路径
m_Path.GetWindowText(szPath, sizeof(szPath));
bRet = cPdf.Create("", WS_VISIBLE , CRect(0, 0, 1, 1), AfxGetMainWnd(), 1050);
if (!bRet)
{
::AfxMessageBox("创建PDF失败");
return;
}
bRet = cPdf.LoadFile(szPath);
if (!bRet)
{
::AfxMessageBox("打开PDF文件失败.");
return;
}
//cPdf.printAll(); //默认打印
cPdf.printAllFit(TRUE); //自适应宽度
(2)指定PDF页数进行打印
BOOL bRet = FALSE;
int nStartPage = 0;
int nEndPage = 0;
char szTemp[256] = {0x00};
char szPath[MAX_PATH] = {0x00};
//获取PDF文件路径
m_Path.GetWindowText(szPath, sizeof(szPath));
//获取打印页
m_StartPage.GetWindowText(szTemp, sizeof(szTemp));
nStartPage = atoi(szTemp);
m_EndPage.GetWindowText(szTemp, sizeof(szTemp));
nEndPage = atoi(szTemp);
bRet = cPdf.Create("", WS_VISIBLE , CRect(0, 0, 1, 1), AfxGetMainWnd(), 1050);
if (!bRet)
{
::AfxMessageBox("创建PDF失败");
return;
}
bRet = cPdf.LoadFile(szPath);
if (!bRet)
{
::AfxMessageBox("打开PDF文件失败.");
return;
}
//cPdf.printPages(nStartPage, nEndPage); //默认打印
cPdf.printPagesFit(nStartPage, nEndPage, TRUE); //自适应宽度
这样就能完成使用Adobe Acrobat Reader DC控件实现打印PDF的功能。
工程项目代码下载地址:
使用下载的项目前,需安装Adobe Acrobat Reader DC。