DataGrid打印(一)

原创 2006年06月01日 17:13:00

#pragma once

#include "Msflexgrid.h"
#include "ForestEnum.h"

///////////////////////////////////////////////////////////
//  PrintHelper
//  Implementation of the Class PrintHelper
//  Created on:      10-2-2006 20:42:11
//  Original author: huangxinzhang
///////////////////////////////////////////////////////////
class CPrintHelper
{
public:

 CPrintHelper(CDC * pDc, bool bHeader, bool bFooter);

 ~CPrintHelper();

 // 該打印設備的 DPI 値
 int dpi() { return _dpi; }

 // 根據DPI値,將毫米單位轉換成像素單位
 int mm2pixel(float mm) {
  return (int) (mm * dpi() / 25.4);
 }

 // 根據DPI値,將像素單位轉換成毫米單位
 float pixel2mm(int pixel) {
  return (float) 25.4 * pixel / dpi();
 }

 //可打印區域頁高(單位:像素)
 int GetPagePixelHeight() { return _pDc->GetDeviceCaps(VERTRES); }

 //可打印區域頁寬(單位:像素)
 int GetPagePixelWidth() { return _pDc->GetDeviceCaps(HORZRES); }

 // 紙高(單位:像素)
 int GetPaperHeight() { return _pDc->GetDeviceCaps(PHYSICALHEIGHT); }

 // 紙寬 (單位:像素)
 int GetPaperWidth() { return _pDc->GetDeviceCaps(PHYSICALWIDTH); }

 //頁眉高度(單位:像素)
 int GetHeaderHeight() { return _bHeader ? _headerHeight : 0; }

 //頁脚高度(單位:像素)
 int GetFooterHeight() { return _bFooter ? _footerHeight : 0; }

 //字體高度(單位:像素)
 int GetFontPixelHeight() { return _fontHeight; }

 //行高 = 字體高度 + 行間距(單位:像素)
 int GetLinePixelHeight()
 {
  return _fontHeight + _LineSpacing;
 }
    // 頁的默認左空白(單位:mm)
 int GetPaperLMargin()
 {
  return int((25.4 * (GetPaperWidth() - GetPagePixelWidth()) / dpi()/2));
 }
    //頁的默認上空白(單位:mm)
 int GetPaperTMargin()
 {
  return int((25.4 * (GetPaperHeight() - GetPagePixelHeight()) / dpi()/2));
 }

 // 一頁可打印多少行
 int LinesPerPage() {
  int pageHeight = GetPagePixelHeight() - _topMargin - _bottomMargin;

  pageHeight -= GetHeaderHeight();
  pageHeight -= GetFooterHeight();

  int lpp = (int) (pageHeight / GetLinePixelHeight());

  return lpp - 1;  // 表頭用掉一行,所以減一
 }

 // 打印頁眉
 void PrintHeader(CString title, CString sYear, CString sImage, CString eYear, CString eImage);

 // 打印頁脚
 void PrintFooter(int currentPage); // , int totalPage);

 //打印一行格子及其内容
 void PrintGridHeader();

 // 打印一頁
 int PrintPage(CMsflexgrid1 &grid, int line);

 // 畫一行格子(除第一個格子外,其他格子同樣大小)
 void PrintLineGrid(int top, int height = 1);

 // 打印一行數據
 bool PrintLineText(CMsflexgrid1 &grid, int row, int& linePosition);

 // 打印一條row數據需要多少行
 int GetPrintLineNumber(CMsflexgrid1 &grid, int rowPos);

private:
 CString CPrintHelper::GetSubString( const CString s, int iStartPos, int iLen ) const;

private:
 CDC * _pDc;
 CFont * _pFont;
 CPen * _pPen;

 bool _bHeader; // 是否打印頁頭
 bool _bFooter; // 是否打印頁脚

 int _dpi;     // DPI (英寸點數)
 int _headerHeight; // 頁眉高度(單位:像素)
 int _titleHeight;  // 標題高(單位:像素)
 int _footerHeight; // 頁脚高度(單位:像素)
 int _fontHeight;   // 字體高度(單位:像素)
 int _LineSpacing;  // 行間距(單位:像素)

 int _topMargin;    // 上留白(單位:像素)
 int _bottomMargin; // 下留白(單位:像素)
 int _leftMargin;   // 左留白(單位:像素)
 int _rightMargin;  // 右留白(單位:像素)

 int _gridWidth;    // 格子寬度(單位:像素)
 int _firstGridWidth; // 第一個格子寬度(單位:像素)
 int _gridNUmber;   // 行格子數
 int _gridMargin;   // 格子中的左右邊界(像素)
    float _ratio;       //與A3紙相對的比率

 // 字體平均寬度(單位:mm)
 float _CharWidth;
};

相关文章推荐

c#实现御览、打印datagrid中的数据

  • 2008年05月25日 21:12
  • 125KB
  • 下载

DataGrid打印类(WinForm C#)

using System; using System.Collections; using System.ComponentModel; using System.Drawing; using...

DataGrid的打印预览和打印

  • 2009年06月25日 18:03
  • 29KB
  • 下载

DataGrid的打印预览和打印.rar

  • 2008年03月12日 22:48
  • 4KB
  • 下载

Winform 打印DataGrid View

winform 打印原理.. 1.先在画布上面画好表格 2.再在表格上面写上以前的字 此类不足:不能自定义 表标题的位置.以及表尾的内容. 以及 页眉 和 页脚的内容.. 下次有空了记得修...

打印easyui的datagrid内容

在使用easyui插件的时候,使用最多的应该是datagrid插件。有时候根据客户需求,可能需要将datagrid内容进行打印,这时候如果直接调用window.print,可能由于easyui的dat...

Easyui 中 datagrid 合并单元格的打印问题

最近在做一个项目,项目中要求将Easyui中的datagrid
  • kokar
  • kokar
  • 2014年11月21日 16:18
  • 1741

EasyUI的DataGrid 的打印导出功能

1.打印部分   新增print.js // strPrintName 打印任务名 // printDatagrid 要打印的datagrid function CreateFormPage(...

DataGrid打印类(WinForm C#)

using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataGrid打印(一)
举报原因:
原因补充:

(最多只允许输入30个字)