概述
因为自己找各种教程时特别困难,所以全程会贴合代码与理解,使大家完全读懂且会用。别问为什么,为爱发电,也为正在为这么稀缺的转格式的代码人解忧。
可以转载,不过标明远处,两天才搞定这个东西,请体谅他人劳动成果,感谢各位,祝各位代码千万行,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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复