控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

winform 按顺序连续打印多个PDF文件

作者:未知 出处:cnblog 2013年11月08日 阅读:

关于PDF打印的问题,前面有篇文章(点这里查看)也叙述过,今天来谈谈另外一种方法

其实方法很简单,因为需要把多个PDF文档按顺序连续打印,为此我们为什么不把要打印的pdf文档按顺序合并成一个PDF打印呢?如此就简单多了哦。

这里文章写出来并不是为了炫耀什么,只是觉得发现些好东西就分享出来而已,同时也做个记录,方便以后查找

开始正文

1、为了方便,打印方法就不另寻他路了,和前面一致,具体如下:

 

Process proc = new Process();
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.FileName = itemPath;//打印文件路径(本地完整路径包括文件名和后缀名)
proc.StartInfo.Verb = "print";
proc.Start();
proc.Close();

2、就是重点了,合并PDF文档,方法很简单,网上一搜一大把,因为我的需求需要把jpg图片和pdf一起打印,因此合并方法中包含图片

使用此方法需要第三方控件iTextSharp.dll(点击这里下载)

 

        /// <summary>
        /// 把多个PDF文件和JPG/PNG图合并成一个PDF文档
        /// </summary>
        /// <param name="fileList">需要合并文件的完整路径列表</param>
        /// <param name="outMergeFile">输出文件完整路径</param>
        public static void MergePDFFile(List<string> fileList, string outMergeFile)
        {
            PdfReader reader;
            Document document = new Document();
            PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));
            document.Open();
            PdfContentByte cb = writer.DirectContent;
            PdfImportedPage newPage;
            foreach (var itemFile in fileList)
            {
                if (!File.Exists(itemFile))
                {
                    string fileName = Path.GetFileName(itemFile);
                    LogMessageWrite.WriteMessage(string.Format("文件打印合并__{0} 文件不存在", fileName));
                    continue;
                }
                FileInfo fInfo = new FileInfo(itemFile);
                if (fInfo.Length < 1)
                {
                    string fileName = Path.GetFileName(itemFile);
                    LogMessageWrite.WriteMessage(string.Format("文件打印合并__文件内容为空,无法打印,{0}", fileName));
                    return;
                }
               

                var ext = Path.GetExtension(itemFile).ToLower();
                if (".pdf".Equals(ext))
                {
                    reader = new PdfReader(itemFile);
                    int iPageNum = reader.NumberOfPages;
                    for (int j = 1; j <= iPageNum; j++)
                    {
                        document.NewPage();
                        newPage = writer.GetImportedPage(reader, j);
                        cb.AddTemplate(newPage, 0, 0);
                    }
                }
                else if (".jpg".Equals(ext) || ".jpge".Equals(ext) || ".png".Equals(ext))
                {
                    FileStream rf = new FileStream(itemFile, FileMode.Open, FileAccess.Read);
                    int size = (int)rf.Length;
                    byte[] imext = new byte[size];
                    rf.Read(imext, 0, size);
                    rf.Close();

                    Image img = Image.GetInstance(imext);

                    //调整图片大小,使之适合A4
                    var imgHeight = img.Height;
                    var imgWidth = img.Width;
                    if (img.Height > iTextSharp.text.PageSize.A4.Height)
                    {
                        imgHeight = iTextSharp.text.PageSize.A4.Height;
                    }

                    if (img.Width > iTextSharp.text.PageSize.A4.Width)
                    {
                        imgWidth = iTextSharp.text.PageSize.A4.Width;
                    }
                    img.ScaleToFit(imgWidth, imgHeight);

                    //调整图片位置,使之居中
                    img.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;

                    document.NewPage();
                    document.Add(img);
                }
            }
            document.Close();
        }

3、打印合并后的文件

 

            try
            {
    var mergeFilePath = string.Format("{0}mergepdf.pdf", tempDownDir);

                PDFPrintHelper.MergePDFFile(pdfList, mergeFilePath);

                Process proc = new Process();
                proc.StartInfo.CreateNoWindow = false;
                proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                proc.StartInfo.UseShellExecute = true;
                proc.StartInfo.FileName = mergeFilePath;//打印文件路径(本地完整路径包括文件名和后缀名)
                proc.StartInfo.Verb = "print";
                proc.Start();
                proc.Close();
            }
            catch (Exception ex)
            {
                LogMessageWrite.WriteMessage(ex.Message);
            }

至此 大功告成

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统