赞
踩
使用场景
前几天公司管文件的想要一个本地TIF文件转换成PDF的功能,虽然我不明白为什么要转换成PDF(TIF文件是有图层的,可以使用其他软件进行重新编辑),其实是公司购买的致远OA系统不能支持TIF文件在线预览而只能下载,PDF文件可以预览而且有水印。
然后领导说让我从网上找企业问问这个功能(管文件的上传TIF之后,这个功能把TIF转换成PDF文件然后上传给OA)的价格,不问不知道,一问10w+(虽然是嵌套在其他WEB应用中的,但是我还是觉得离了个大谱)。
其实用Windows自带的图片浏览器直接打印选择导出PDF文件然后上传OA系统就可以了,但是怕用户需要转换的量太大,一个一个文件转换不知道得弄多久,我寻思自己开发一个小功能,让管文件的在他本地把TIF转换成PDF再上传OA系统就OK了。
结局
用自己开发的导出的感觉比用Windows自带的清晰一些(可能是错觉),最后领导怕我开发的软件用户会给别人用,一旦有问题用户可能首先往我头上怀疑,而且用户一年才有十几个TIF文件需要转换成PDF的,就让他们用Windows自带的功能自己转换去了,这玩意最后就太监了
代码
废话说完了,看看代码吧
这个是按钮点击,主要是调用“tifToPdf”方法,如果需要批量转换的话就遍历文件名称,每次都调用这个方法就行了。
private void button1_Click(object sender, EventArgs e)
{
try
{
tifToPdf(@"D:\test.tif", @"D:\test.pdf");
MessageBox.Show("转换成功!");
}
catch (Exception ex)
{
MessageBox.Show("转换失败!\r详细信息:" + ex.Message);
}
}
转换的方法
/// <summary> /// 将tif文件转换成pdf /// </summary> /// <param name="arr">需要导出为PDF格式的tif文件全路径</param> /// <param name="toFilePdf">导出PDF的文件权路径</param> private static void tifToPdf(string arr, string toFilePdf) { System.Drawing.Bitmap pic = new System.Drawing.Bitmap(arr); float width = pic.Size.Width; // TIF图片的宽度 float height = pic.Size.Height; // TIF图片的高度 FileInfo _toFile = new FileInfo(toFilePdf); // 创建一个文档对象 Document doc = new Document(); Rectangle rectangle = new Rectangle(0, 0, width, height); doc.SetPageSize(rectangle); int pages = 0; FileStream fs = new FileStream(toFilePdf, FileMode.OpenOrCreate); // 定义输出位置并把文档对象装入输出对象中 PdfWriter writer = PdfWriter.GetInstance(doc, fs); // 打开文档对象 doc.Open(); PdfContentByte cb = writer.DirectContent; RandomAccessFileOrArray ra = new RandomAccessFileOrArray(arr); int comps = TiffImage.GetNumberOfPages(ra); for (int c = 0; c < comps; ++c) { Image img = TiffImage.GetTiffImage(ra, c + 1); if (img != null) { doc.SetPageSize(new Rectangle(img.ScaledWidth, img.ScaledHeight)); img.SetAbsolutePosition(0, 0); cb.AddImage(img); doc.NewPage(); ++pages; } ra.Close();// 关闭 } // 关闭文档对象,释放资源 doc.Close(); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。