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;
};

Datagrid的打印预览与打印

Flex中的打印技术、Datagrid的打印预览与打印
  • xinxin19881112
  • xinxin19881112
  • 2010年09月09日 16:28
  • 2313

在C#里实现DATAGRID的打印预览和打印

很多人都在论坛里问,如何实现DATAGRID的打印预览和打印,现在我就把这方面的源代码告诉大家。这段代码也花费了我1个晚上的时间,呵呵!数据库是基于sql server2000自带的northwind...
  • qieyj
  • qieyj
  • 2003年04月08日 09:04
  • 2000

C#打印DataGrid中的数据

对于信息系统,打印功能是必须的。而打印,是一件相当麻烦的事情。打印DataGrid中的数据,尤其如此。要想到的很多,包括页眉、页脚设置,打印字体,分页,标题,预览等等一系列问题。如果从头写,工作量实在...
  • arui319
  • arui319
  • 2005年08月12日 11:15
  • 3320

EasyUI的DataGrid 的打印导出功能

1.打印部分   新增print.js // strPrintName 打印任务名 // printDatagrid 要打印的datagrid function CreateFormPage(...
  • wuyuander
  • wuyuander
  • 2016年11月15日 20:30
  • 2011

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

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

easyui实现datagrid打印

最简单的方法: 调用WebBrowser 控件实现打印,但是会出现“浏览器已经阻止此站点用不安全方式使用ActiveX控件”的问题,可以参考如下这篇文章来解决:点击打开链接    ...
  • qinzhenhua100
  • qinzhenhua100
  • 2016年10月06日 17:06
  • 3028

EasyUiDatagrid打印

// strPrintName 打印任务名 // printDatagrid 要打印的datagrid //title 表格标题 function CreateFormPage(strPrintNam...
  • xuxiaoyinliu
  • xuxiaoyinliu
  • 2017年12月17日 10:15
  • 141

用添加样式的方法为datagrid打印分页(可有页眉页脚)

     好久没写东西了!很快就要有新的项目了。前一段时间因为硬盘坏了,所有的资料都没有了,极其郁闷!现在又搜集整理了一些,还是写到这里吧。     使打印分页的方法有很多了,因为当时客户提出的需求比...
  • ppp80
  • ppp80
  • 2005年09月16日 10:50
  • 1733

easyui datagrid打印

具体思路就在js文件里封装一个函数 将datagri列表里的内容 写入到一个新打开的窗口中 以表格的形式写入 然后在设置字体样式 进行打印 ,在新窗口中打开可以作为预览功能。由于需要数据库获取 所以...
  • gacmy
  • gacmy
  • 2015年08月05日 11:17
  • 1953

dataGrid中文乱码问题解决

是因为底层生成xml时,没有指定编码。虽然打开txt文件时看到的中文都是一样但是还是编码的问题。这个问题需要java生成xml时就指定 import java.io.FileOutputStream;...
  • zfswff
  • zfswff
  • 2010年02月05日 09:06
  • 1158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataGrid打印(一)
举报原因:
原因补充:

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