我是靠谱客的博主 俏皮悟空,最近开发中收集的这篇文章主要介绍.net 4.0 Winform EMF转PDF格式(.aspose.pdf itextsharp),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

因为自己找各种教程时特别困难,所以全程会贴合代码与理解,使大家完全读懂且会用。别问为什么,为爱发电,也为正在为这么稀缺的转格式的代码人解忧。

可以转载,不过标明远处,两天才搞定这个东西,请体谅他人劳动成果,感谢各位,祝各位代码千万行,bug不沾身。

1.基本概况

因为病人的emf检查文件有10个左右,客户想合成一个pdf,一次性看一个病人的。

开发工具:VS2010

支持类库:.net 4.0支持的。

我找到了Aspose.pdf 18.11,网上下载的破解版,但是只支持.net 4.6.1以上的,我就去找了一个10.1的可用,也无水印。但是emf转pdf时右侧与下方会显示不全,但是png可以显示全,不过一次只能插入6张emf,多了会报内存不足的情况。遂,我就找了一个itextSharp的类库,可以将png转换为pdf文件。

链接:https://pan.baidu.com/s/1ntkmORsAwKeNB5oV0zFLRg 
提取码:xd66

2.引用

下载完毕后将文件插入根目录binDebug中

 


 顶部using加
using Aspose.Pdf;
using iTextSharp.text;
using iTextSharp.text.pdf;

 3.代码

我是建了一个panel,循环添加pictureBox。

 

 

             //实例化文件夹 并打开它
             OpenFileDialog file = new OpenFileDialog();
             file.Multiselect = true;
             file.ShowDialog();

             //将选中的图片路径 保存成string类型            
             string[] url = file.FileNames;

             //查看后缀是否为 .emf
             for (int i = 0; i < url.Length; i++)
             {
                 var type = Path.GetExtension(url[i]);
                 if (type != ".emf")
                 {
                     MessageBox.Show("请选择.emf文件!");
                     return;
                 }
             }
             //循环将 picturebox插入Panel
             for (int i = 0; i < file.FileNames.Length; i++)
             {
                 PictureBox pic = new PictureBox();
                 pic.Image = System.Drawing.Image.FromFile(file.FileNames[i]);
                 pic.Size = new Size(this.SideLength/2, this.SideLength/2);
                 pic.Visible = true;
                 pic.BorderStyle = BorderStyle.FixedSingle;
                 pic.ImageLocation = file.FileNames[i];  //图片根目录地址
                 pic.Tag = file.FileName;

                 this.panel1.Controls.Add(pic);
             }

        

注意:

        pic.Size = new Size(this.SideLength/2, this.SideLength/2); 这句需要加两个方法
        /// <summary>
        /// 每个方向上要切割成的块数
        /// </summary>
        private int ImgNumbers
        {
            get
            {
                return 3;
            }
        }
        /// <summary>
        /// 要切割成的正方形图片边长
        /// </summary>
        private int SideLength
        {
            get
            {
                return 300 / this.ImgNumbers; //300:panel容器大小
            }
        }

 

            List<string> Images = new List<string>();  //目录根目录
            foreach (Control ctl in panel1.Controls)
            {
                if (ctl is PictureBox)
                {
                    PictureBox tbName = ctl as PictureBox;

                    //将panel中ImageLocation存放的emf文件根目录地址循环添加进List
                    Images.Add(tbName.ImageLocation);  
                }
            }

            //实例化一个pdf页面
            var doc = new Aspose.Pdf.Document();
            var page = doc.Pages.Add();

            // url存放处
            List<string> url = new List<string>();

            string pngPath = Application.StartupPath + "\Png";
            //检查 Png文件是否存在
            if (!Directory.Exists(pngPath))
            {
                //创建Png文件夹
                Directory.CreateDirectory(pngPath);
            }

 

        for (int i = 0; i < Images.Count; i++) {
                string file = Images[i];

                using (FileStream filestream = new FileStream(file, FileMode.Open, FileAccess.Read)) {
                    using (BinaryReader reader = new BinaryReader(filestream)) {

                        long numBytes = new FileInfo(file).Length;
                        byte[] bytearray = reader.ReadBytes((int)numBytes);

                        //保存到指定位置
                        SaveFileDialog Savefile = new SaveFileDialog();
                        Savefile.Title = "保存文件";
                        Savefile.Filter = "PDF(*.png)|*.png";
                        Savefile.FilterIndex = 1;
                        Savefile.FileName = @"Png" + Path.GetFileNameWithoutExtension(Images[i]) + ".png";//这里是key(存放到DebugPng里面)

                        url.Add(Savefile.FileName);
                        using (System.Drawing.Image image = System.Drawing.Image.FromStream(new MemoryStream(bytearray)))
                        {
                            //转换为png
                            image.Save(url[i], System.Drawing.Imaging.ImageFormat.Png);
                            image.Dispose();
                        }
                        reader.Dispose();
                    }
                    filestream.Dispose();
                }
            }

 

 

System.Drawing.Image srcImage = System.Drawing.Image.FromFile(url[0]);
            int h = srcImage.Height; //页面高
            int w = srcImage.Width;  //页面宽

            //保存到指定位置
            SaveFileDialog SavefilePDF = new SaveFileDialog();
            SavefilePDF.Title = "保存文件";
            SavefilePDF.Filter = "PDF(*.pdf)|*.pdf";
            SavefilePDF.FilterIndex = 1;
            SavefilePDF.FileName = DateTime.Now.ToString("yyyy-MM-dd");//这里是key
            SavefilePDF.ShowDialog();

            string urlPDF = SavefilePDF.FileName;

            var type = Path.GetExtension(urlPDF);
            if (type == ".pdf")
            {
                if (url != null)
                {
                    iTextSharp.text.Document docSharp = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(w + 80, h + 80));
                    PdfWriter.GetInstance(docSharp, new FileStream(urlPDF, FileMode.Create));
                    docSharp.Open();
                    for (int i = 0; i < url.Count; i++)
                    {
                        iTextSharp.text.Image png = iTextSharp.text.Image.GetInstance(url[i]);
                        docSharp.Add(png);
                    }
                    srcImage.Dispose();
                    docSharp.Close();
                    try
                    {
                        if (System.IO.Directory.Exists(pngPath))
                        {
                            string[] strDirs = System.IO.Directory.GetDirectories(pngPath);
                            string[] strFiles = System.IO.Directory.GetFiles(pngPath);
                            foreach (string strFile in strFiles)
                            {
                                System.IO.File.Delete(strFile);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.Write(ex.Message.ToString());
                    }
                    MessageBox.Show("导入完成!");
                    panel1.Dispose();
                }
            }
            else
            {
                MessageBox.Show("请保存为PDF类型.");
            }

最后

以上就是俏皮悟空为你收集整理的.net 4.0 Winform EMF转PDF格式(.aspose.pdf itextsharp)的全部内容,希望文章能够帮你解决.net 4.0 Winform EMF转PDF格式(.aspose.pdf itextsharp)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部