将文档中的多页内容同时打印在一张纸上

在实际中,我们经常需要将文档中的多页内容同时打印在一张纸上,有的打印机支持这种打印方式,并可以通过调整打印机的设置来完成。不过这种方法依赖于特殊的打印机类型,开发人员并不能干预这个打印过程。

发布于 2012/11/16 00:00

在实际中,我们经常需要将文档中的多页内容同时打印在一张纸上,有的打印机支持这种打印方式,并可以通过调整打印机的设置来完成。不过这种方法依赖于特殊的打印机类型,开发人员并不能干预这个打印过程。


本文中的例子主要演示如何利用TX TextControl控件,实现将文档中的多页内容同时打印到一张纸上。

首先,TX TextControl的也渲染引擎将文档中的每一页进行单独的渲染,并将每一页的渲染结果存放到一个Metafile类型的数组中,代码如下:

 
// create a metafile array of all TX Text Control pages
    mfPageImages = new Metafile[textControl1.Pages];
    int iCounter = 0;

    foreach (TXTextControl.Page page in textControl1.GetPages())
    {
        mfPageImages.SetValue(page.GetImage(TXTextControl.Page.PageContent.All), iCounter);
        iCounter++;
    }
复制代码

然后创建一个PrintDocument的实例,并添加相应的事件:

 
// create a new print document that is manipulated in the PrintPage event
    PrintDocument pd = new PrintDocument();
    pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
    pd.QueryPageSettings += new QueryPageSettingsEventHandler(pd_QueryPageSettings);
    pd.BeginPrint += new PrintEventHandler(pd_BeginPrint);
复制代码

在PrintPage事件中,文档中的4页内容将会被打印到纸张上的不同位置,每页内容的缩放比例根据实际页面宽度和页边距计算出来的:

 
// calculate the scale factor based on the current paper size
    iThumbWidth = (int)(((e.PageSettings.PaperSize.Width - iPageMargin) * fDpi) / 2);
    dScaleFactor = ((float)(iThumbWidth) / (float)(mfPageImages[0].Size.Width));
复制代码

通过这种方法的好处在于,所有的画操作并不需要进行手动调整缩放比例,下面代码展示了如何绘制元文件:

 
// draw the metafile
    g.DrawImage(mfPageImages[iPrintPageCounter], 0F, 0F, sfImageSize.Width, sfImageSize.Height);
复制代码

接下来,将通过TranslateTransform方法来改变下一页绘制的横纵起始坐标:

  1.    
    // transform the matrix to move the next page
        switch (i)
        {
            // upper right
            case 0:
                g.TranslateTransform(sfImageSize.Width, 0);
                break;
            // lower left
            case 1:
                g.TranslateTransform(-sfImageSize.Width, sfImageSize.Height);
                break;
            // lower right
            case 2:
                g.TranslateTransform(sfImageSize.Width, 0);
                break;
        }
    复制代码
    源码下载:VS2010 + TX TextControl 17.0

关于葡萄城

葡萄城是专业的软件开发技术和低代码平台提供商,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务,一站式满足开发者需求,帮助企业提升开发效率并创新开发模式。葡萄城开发技术始于1980年,40余年来始终聚焦软件开发技术,有深厚的技术积累和丰富的产品线。是业界能够同时赋能软件开发和低代码开发的企业。凭借过硬的产品能力、活跃的用户社区和丰富的伙伴生态,与超过3000家合作伙伴紧密合作,产品广泛应用于信息和软件服务、制造、交通运输、建筑、金融、能源、教育、公共管理等支柱产业。

推荐相关案例
推荐相关资源
关注微信
葡萄城社区二维码

关注“葡萄城社区”

加微信获取技术资讯

加微信获取技术资讯

想了解更多信息,请联系我们, 随时掌握技术资源和产品动态