仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2624|回复: 18
打印 上一主题 下一主题

[学习教程] ASP网页设计VC打印理论浅谈

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:24:31 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ASP脚本是采用明文(plain text)方式来编写的。打印   常常看到VC服装论坛中一些伴侣问关于打印的成绩,很多多少是问过很多多少遍的,其实搜刮一下本来的帖子可以找到很多多少,并且都是给了准确的处理办法的。但我搜了一下文档中间,发明好象关于一下我要讲的内容的还没有。所以我决意把本人在做法式时碰到的成绩,及完成办法和心得体味写上去,重在交换。文中若有疏漏的地方,请列位伴侣实时指出,以避免我落个误人误己的下场。

在做打印模块时,常常会出于分歧的目标改动打印机的默许设置装备摆设。关于打印机设置装备摆设最主要的一个布局就是DEVMODE布局(布局的详细组成请MSDN),该布局中几近包括了打印机的一切设置装备摆设信息。上面将给出几个常常要用到的设置装备摆设项的完成。

PRINTDLG pd; //该布局包括打印对话框中的一切信息
LPDEVMODE lpDevMode;
if(AfxGetApp()->GetPrinterDeviceDefaults(&pd)) //取得默许的打印机的信息
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
lpDevMode->dmPaperSize=DMPAPER_A4; //将打印纸设置为A4
lpDevMode->dmOrientation=DMORIENT_LANDSCAPE; //将打印机设置为横向打印。
lpDevMode->dmPrintQuality=600 //打印分辩率为600dpi
}
GlobalUnlock(pd.hDevMode);
}

其实,看看MSDN中DEVMODE布局的文档,套用下面这个形式,你就能够随意设置装备摆设你的打印机了。假如你想设置装备摆设完成后,还为用户显示打印对话框的话。可以将pd交换为printDlg.m_pd,固然你要事前界说printDlg。完成言语为“CPrintDialog printDlg(FALSE);”。

上面要讲的内容才是我要写本文的初志,这是我方才处理的成绩,在网上贴帖子没有人能回覆的出,所以将它写出来同列位伴侣同享。

我写的打印法式,在我的机械上打印正常,可是到了某些机械上打印就不正常了,打印的字体比我的大,全部版面都乱了。这下我可给弄懵懂了,同是一台打印机,法式中我也设置了映照形式为MM_TEXT,怎样能够呈现这类情形呢?后来同事发明了成绩的地点,由于打印时采取的分辩率分歧。因为咱们分歧的机械上装的是分歧版本的打印驱动法式,他们默许的打印分辩率也不不异。我的机械上的打印驱动默许的是1200dpi的分辩率,而出成绩的打印机的分辩率为600dpi。所以打出来的字体比本来大了两倍。上面我来剖析一下缘由:
WINDOWS中的字体的高度,宽度是用逻辑单位(Logical units)来暗示的,逻辑单位自己并非一种长度单元。但字体可以经由过程它依照必定的映照形式,经由盘算后显示在分歧的装备终端上。好比:有一个高为240个逻辑单位的字体,体系的映照形式为MM_TEXT(即一个逻辑单位对应一个装备像素),那末字体在屏幕的输入为240个像素高,假如换为其他的映照形式那末它就会在屏幕输入分歧的巨细。假如咱们改动了显示器的分辩率,将它的分辩率调高,响应的每一个像素巨细就会变小。那末再依照MM_TEXT映照形式,将字体显示在显示器上,那末此时字体也会比方才看着小。

一样,这中情形也适于打印机,打印机的装备像素是点。1200dpi暗示打印机每英寸可以打1200个点。600dpi暗示每英寸可以打600个点。明显关于任何字体,在分辩率为600dpi的打印机上打印的巨细是在1200dpi分辩率打印机上打印巨细的两倍。所觉得了处置这个成绩我设置了一个打印系数,关于一切的打印排版所用的
参数都乘以这个系数,如许成绩就水到渠成了。上面是失掉打印系数的完成:

#define PRINT_DPI_DEFAULT 1200 //我调好的法式分辩率为1200dpi
m_fXCoefficient=1;//初始化打印系数

PRINTDLG pd;
LPDEVMODE lpDevMode;
double fXDPI=PRINT_DPI_DEFAULT; //

CPrintDialog printDlg(FALSE);

if(AfxGetApp()->GetPrinterDeviceDefaults(&pd))
{
lpDevMode=(LPDEVMODE)GlobalLock(pd.hDevMode);
if(lpDevMode)
{
lpDevMode->dmPaperSize=DMPAPER_A4;
}
GlobalUnlock(pd.hDevMode);
}

printDlg.m_pd.hDevMode=pd.hDevMode;

if (printDlg.DoModal() == IDCANCEL)
return;

fXDPI=(double)lpDevMode->dmPrintQuality;
if(fXDPI>0)
{
m_fXCoefficient=fXDPI/PRINT_DPI_DEFAULT;
}

唉!自己汉语才能无限,只能写成如许了,望列位伴侣不要见责!!!
</p>  asp可以轻松地实现对页面内容的动态控制,根据不同的浏览者,显示不同的页面内容。而浏览者一点觉察不出来,就像为他专门制作的页面一样。使用各种各样的组件,asp可以完成无比强大的功能。
爱飞 该用户已被删除
沙发
 楼主| 发表于 2015-5-2 13:24:42 | 显示全部楼层
运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-15 23:20

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表