VS2010制作PDF报表
程序员文章站
2024-03-21 14:53:34
...
VS2010制作PDF报表
一、开发环境
- 编程环境 VS2010
- 采用pdflib 9.0.0 库
二、基本实现功能
- 创建一个PDF文件,并在里面绘制表格
三、基本操作步骤
1. 新建一个基于MFC的对话框工程,添加一个按钮
2. PDFlib库的导入
- 网上下载PDFlib库,任意版本,最好下载一个**版本,一般的都有水印。我这里用的是9.0的。解压PDFlib-9.0.0-MSWin64-C-C++(我的操作系统是64位的),一般包含基本例子和文档,还有pdflib库。
- 将pdflib.lib、pdflib.h、pdflib.hpp、cpp_wrapped.h、pdflib.dll复制到当前工程目录下,同时加载pdflib.lib库(#pragma comment(lib,”pdflib.lib”))
3. 基本代码实现。参考官网例子
/************************************************************************
*功 能:PDF制作报表
*函 数 名:PDFDrawTable
*参 数:无
*返 回 值:错误状态
*作 者:Ywx
/********************************************************************/
int CPDFTestDlg::PDFDrawTable(void)
{
try
{
int row, col, font, image, tf=-1, tbl=-1;
int rowmax=38, colmax=9;
PDFlib p;
double llx= 50, lly=50, urx=550, ury=800;
const wstring headertext =L"xx测试系统数据报告";
wstring result;
wostringstream optlist;
wstring tf_text[] ={
L"序号",
L"项目名称",
L"参数名称",
L"最大值",
L"最小值",
L"量纲",
L"标准值",
L"测量值",
L"结果"};
p.set_option(L"errorpolicy=return");
optlist.str(L"");
p.set_option(optlist.str());
if (p.begin_document(L"table.pdf", L"") == -1) //打开文档
{
wcerr << L"Error: " << p.get_errmsg() << endl;
return 2;
}
p.set_info(L"Creator", L"PDFlib starter sample");
p.set_info(L"Title", L"table");
/* -------------------- Add table cells -------------------- */
/* ---------- Row 1: table header (spans all columns) */
row = 1; col = 1;
font = p.load_font(L"宋体", L"host", L""); //设置主机上字体
if (font == -1)
{
wcerr << L"Error: " << p.get_errmsg() << endl;
return(2);
}
//设置字体,合并单元格
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=18} colspan="<<colmax;
tbl = p.add_table_cell(tbl, col, row, headertext, optlist.str());
//---------------------row2----------------------------------------//
row++;
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=18} colspan=" << colmax ;
tbl = p.add_table_cell(tbl, col, row, L"xx系统检查装置", optlist.str());
// --------------------row---------------------------------------- //
// -----第三行,跨三列*/
row++;
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12} colspan=3" ;
tbl = p.add_table_cell(tbl, col, row, L"xx名称", optlist.str());
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12} colspan=4" ;
tbl = p.add_table_cell(tbl, col+3, row, L"", optlist.str());
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12} colspan=2" ;
tbl = p.add_table_cell(tbl, col+7, row, L"xx检测者", optlist.str());
//---------------------------------row 4 ---------------------------//
row++;
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12} colspan=3" ;
tbl = p.add_table_cell(tbl, col, row, L"xx型号", optlist.str());
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12} colspan=4" ;
tbl = p.add_table_cell(tbl, col+3, row, L"", optlist.str());
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12} colspan=2" ;
tbl = p.add_table_cell(tbl, col+7, row, L"检测日期", optlist.str());
//--------------row 5 ------------------------------------------//
row++;
for(col = 1; col <=colmax;col++)
{
optlist.str(L"");
optlist << L"fittextline={position=center font=" << font
<< L" fontsize=12}" ;
tbl = p.add_table_cell(tbl, col, row, tf_text[col-1], optlist.str());
}
/* ---------- Fill row 5 and above with their numbers */
for (row++; row <= rowmax; row++)
{
for (col = 1; col <= colmax; col++)
{
wostringstream num;
optlist.str(L"");
optlist << L"colwidth=20% fittextline={font=" << font
<< L" fontsize=10}";
tbl = p.add_table_cell(tbl, col, row, L"", optlist.str());
}
}
do {
p.begin_page_ext(0, 0, L"width=a4.width height=a4.height");
optlist.str(L"");
optlist << L" header=5 rowheightdefault=auto stroke={{line=other linewidth = 0.5}}";
result = p.fit_table(tbl, llx, lly, urx, ury,
// L"header=4 rowheightdefault=auto "
// L"colwidth=20%"
// L"fill={{area=rowodd fillcolor={gray 0.9}}} "
L"stroke={{line=other linewidth = 0.5}}");
// optlist.str());
if (result == L"_error") {
wcerr << L"Couldn't place table: " << p.get_errmsg() << endl;
return 2;
}
p.end_page_ext(L"");
} while (result == L"_boxfull");
if (result != L"_stop")
{
if (result == L"_error")
{
wcerr << L"Error when placing table: " << p.get_errmsg()
<< endl;
return 2;
}
else
{
wcerr << L"User return found in Table" << endl;
return 2;
}
}
p.delete_table(tbl, L"");
p.end_document(L"");
}
catch (PDFlib::Exception &ex) {
wcerr << L"PDFlib exception occurred:" << endl
<< L"[" << ex.get_errnum() << L"] " << ex.get_apiname()
<< L": " << ex.get_errmsg() << endl;
return 2;
}
return 0;
}
四、总结
- 本文只是简单的对pdflib进行了一个操作,参考官网例子static_table.cpp修改而来!侵删。
上一篇: leetcode 78. 子集
下一篇: 生成PDF工具
推荐阅读
-
itext制作pdf报表
-
VS2010制作PDF报表
-
jasperReport+ireport制作pdf报表教程
-
Apache POI组件操作Excel,制作报表(二)
-
Apache POI组件操作Excel,制作报表(四)
-
jfreechart生成条形图,扇图 博客分类: JAVA报表制作jfreechart生成条形图,扇图 jfreechart统计图
-
Ireport,JAVA报表制作并导出(pdf、excel、word) 博客分类: IreportJAVA报表制作 ireport
-
birt 3.7.1导出PDF报表中文问题 博客分类: eclipse birt3.7.1PDF中文乱码
-
报表传递参数控制数据权限 博客分类: 报表制作展现 报表美化美化报表复杂报表设计统计图数据可视化
-
VS2010 水晶报表的使用方法