可以将打印机默认打印设置改为黑白打印,如果打印对象是RGB配色,打印机驱动转换为CMYK颜色时,黑色都是由彩色墨水组成的
创新互联是一家专注网站建设、网络营销策划、微信小程序定制开发、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十年以来,已经为上千家成都混凝土搅拌机各业的企业公司提供互联网服务。现在,服务的上千家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
2.可以试一下图片从一个标准灰度图片格式化而来,这样图片自身只有黑白色,也许可以
网络上找到这个比较全面,你试一下,我记得以前也是这么设置的。
int GetDeviceCaps( HDC hdc, int nIndex);
其中,hdc用来指定设备环境句柄,nIndex用来指定要获取的参量索引,对于打印机而言,它常常需要下列的预定义值:
LOGPIXELSX 打印机水平分辨率
LOGPIXELSY 打印机垂直分辨率
PHYSICALWIDTH 打印纸的实际宽度
PHYSICALHEIGHT 打印纸的实际高度
PHYSICALOFFSETX 实际可打印区域的物理左边距
PHYSICALOFFSETY 实际可打印区域的物理上边距
下面的函数代码就是用来设置页边距,并且还计算页面的物理边距:
void CEx_Prn1View::SetPageMargin(CDC *pDC, CPrintInfo *pInfo, int l, int t, int r, int b)
// l, t, r, b分别表示左上右下边距, 单位为0.1mm
{
int nOldMode = pDC- GetMapMode();
pDC- SetMapMode(MM_LOMETRIC);
// 计算一个设备单位等于多少0.1mm
double scaleX = 254.0 / (double)GetDeviceCaps(
pDC- m_hAttribDC, LOGPIXELSX);
double scaleY = 254.0 / (double)GetDeviceCaps(
pDC- m_hAttribDC, LOGPIXELSY);
int x = GetDeviceCaps(pDC- m_hAttribDC,
PHYSICALOFFSETX);
int y = GetDeviceCaps(pDC- m_hAttribDC,
PHYSICALOFFSETY);
int w = GetDeviceCaps(pDC- m_hAttribDC,
PHYSICALWIDTH);
int h = GetDeviceCaps(pDC- m_hAttribDC,
PHYSICALHEIGHT);
int nPageWidth = (int)((double)w*scaleX + 0.5);
// 纸宽,单位0.1mm
int nPageHeight = (int)((double)h*scaleY + 0.5);
// 纸高,单位0.1mm
m_nPhyLeft = (int)((double)x*scaleX + 0.5);
// 物理左边距,单位0.1mm
m_nPhyTop = (int)((double)y*scaleY + 0.5);
// 物理上边距,单位0.1mm
pDC- DPtoLP(pInfo- m_rectDraw);
CRect rcTemp = pInfo- m_rectDraw;
rcTemp.NormalizeRect();
m_nPhyRight = nPageWidth - rcTemp.Width() -
m_nPhyLeft; // 物理右边距,单位0.1mm
m_nPhyBottom = nPageHeight - rcTemp.Height() -
m_nPhyTop; // 物理下边距,单位0.1mm
// 若边距小于物理边距,则调整它们
if (l m_nPhyLeft) l = m_nPhyLeft;
if (t m_nPhyTop) t = m_nPhyTop;
if (r m_nPhyRight) r = m_nPhyRight;
if (b m_nPhyBottom) b = m_nPhyBottom;
// 计算并调整pInfo- m_rectDraw的大小
pInfo- m_rectDraw.left = l - m_nPhyLeft;
pInfo- m_rectDraw.top = - t + m_nPhyTop;
pInfo- m_rectDraw.right -= r - m_nPhyRight;
pInfo- m_rectDraw.bottom += b - m_nPhyBottom;
pDC- LPtoDP(pInfo- m_rectDraw);
pDC- SetMapMode(nOldMode);
// 恢复原来的映射模式
}
一般情况下先用EXCEL做好一个样表文件,设定好打印区域和样式,需要填内容的时候,先程序复制一个样表文件,然后调用API打开表格填写内容并打印,如果想用API来实现调整模板和打印预览,可能比较困难,而且很抽象,个人觉得费时费力效果还不一定理想