简介

功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档。

经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当前的方法就是出现水印标签,最终在各位大佬的帮助下终于完成一个相对完整的代码(主要的是能满足需求)。

背景

之前在项目中遇到一个需求:将多页的PDF上传并转成图片展示要求一页一页的排列开看(例如图1),并要求在传送到服务中心平台看到的时候是PDF文档(服务中心平台只提供下载)。

点击下载需要使用到的dll文件

O2S.Components.PDFRender4NET.dll 版本:4.7.4.0

itextsharp.dll 版本:5.5.10.0

主要的代码如下

        /// <summary>/// 将PDF文档转换为图片的方法/// </summary>/// <param name="pdfInputPath"></param>/// <param name="desPath">输出相对路径</param>/// <param name="definition">设置图片的清晰度,数字越大越清晰</param>/// <returns></returns>public static List<string> ConvertPDF2Image(string pdfInputPath, string desPath, Definition definition, string title){List<string> imgList = new List<string>();PDFFile pdfFile = PDFFile.Open(pdfInputPath);int startPageNum = 1, endPageNum = pdfFile.PageCount;int number = 1;for (int i = startPageNum; i <= endPageNum; i++){Bitmap pageImage = pdfFile.GetPageImage(i - 1, 56 * (int)definition);string filePath = desPath + title + "-" + number + ".jpg";imgList.Add(filePath);pageImage.Save(System.Web.HttpContext.Current.Server.MapPath(filePath));number++;}pdfFile.Dispose();return imgList;}public enum Definition{One = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10}/// <summary>/// 合并PDF/// </summary>/// <param name="fileList">绝对路径集合</param>/// <param name="outMergeFile">合并后的文件存在地址绝对路径</param>public static void mergePdfFiles(List<string> fileList, string outMergeFile){PdfReader reader;//此处将内容从文本提取至文件流中的目的是避免文件被占用,无法删除FileStream fs1 = new FileStream(fileList[0], FileMode.Open);byte[] bytes1 = new byte[(int)fs1.Length];fs1.Read(bytes1, 0, bytes1.Length);fs1.Close();reader = new PdfReader(bytes1);reader.GetPageSize(1);// iTextSharp.text.Rectangle rec = new iTextSharp.text.Rectangle(1000,800);//设置样式iTextSharp.text.Rectangle rec = reader.GetPageSize(1);float width = rec.Width;float height = rec.Height;//创建一个文档变量iTextSharp.text.Document document = new iTextSharp.text.Document(rec, 50, 50, 50, 50);//创建该文档PdfWriter pdfWrite = PdfWriter.GetInstance(document, new FileStream(outMergeFile, FileMode.Create));//打开文档
            document.Open();//添加内容PdfContentByte contentByte = pdfWrite.DirectContent;PdfImportedPage newPage;for (int i = 0; i < fileList.Count; i++){FileStream fs = new FileStream(fileList[i], FileMode.Open);byte[] bytes = new byte[(int)fs.Length];fs.Read(bytes, 0, bytes.Length);fs.Close();reader = new PdfReader(bytes);int pageNum = reader.NumberOfPages;//获取文档页数for (int j = 1; j <= pageNum; j++){document.NewPage();newPage = pdfWrite.GetImportedPage(reader, j);contentByte.AddTemplate(newPage, 0, 0);}}document.Close();}

        /// <summary>/// 图片转PDF/// </summary>/// <param name="imagepath">图片位置(绝地路径)</param>/// <param name="pdfpath">存放PDF地址(绝地路径)</param>public static void iTextSharpCreatPDF(string imagepath, string pdfpath){iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(imagepath);float percentage = 1;//这里都是图片最原始的宽度与高度float resizedWidht = image.Width;float resizedHeight = image.Height;Document doc = new Document(new iTextSharp.text.Rectangle(resizedWidht, resizedHeight), 0, 0, 0, 0); //new Rectangle(1000,1000)//指定文件预设开档时的缩放为100%//PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f);try{PdfWriter.GetInstance(doc, new FileStream(pdfpath, FileMode.Create));doc.Open();#region 下面对图片进行操作////这时判断图片宽度是否大于页面宽度减去也边距,如果是,那么缩小,如果还大,继续缩小,////这样这个缩小的百分比percentage会越来越小while (resizedWidht > (doc.PageSize.Width - doc.LeftMargin - doc.RightMargin)){percentage = percentage * 0.9f;resizedHeight = image.Height * percentage;resizedWidht = image.Width * percentage;}#region 注释////There is a 0.8 here. If the height of the image is too close to the page size height,////the image will seem so big//while (resizedHeight > (doc.PageSize.Height - doc.TopMargin - doc.BottomMargin) * 0.8)//{//    percentage = percentage * 0.9f;//    resizedHeight = image.Height * percentage;//    resizedWidht = image.Width * percentage;//}#endregion////这里用计算出来的百分比来缩小图片image.ScalePercent(percentage * 100);//让图片的中心点与页面的中心点进行重合image.SetAbsolutePosition(doc.PageSize.Width / 2 - resizedWidht / 2, doc.PageSize.Height / 2 - resizedHeight / 2);doc.Add(image);#endregion}catch (DocumentException dex){System.Web.HttpContext.Current.Response.Write(dex.Message);}catch (IOException ioex){System.Web.HttpContext.Current.Response.Write(ioex.Message);}catch (Exception ex){System.Web.HttpContext.Current.Response.Write(ex.Message);}finally{doc.Close();}}

转载于:https://www.cnblogs.com/junoCode/p/10341782.html

PDF文档转换为图片、图片转成PDF 及PDF合并相关推荐

  1. HTML 文档可以映射为,将PDF文档转换为可通过URL访问的HTML文档的最佳方法

    许多人想了解如何将PDF文档转换为可通过URL访问的HTML文档.毕竟,在线发布PDF文档是与他人共享文档的最佳方法,但是,许多程序都不能完成此操作.因此,本文提出万兴PDF这款出色的解决工具,该程序 ...

  2. 快速无损原样提取PDF文档中的图片

    网上已经有很多提取PDF文档图片的工具了,但是这些工具要么就是非常庞大,要么就是速度很慢,要么就是导出的图片失真,我对这些工具均不满意,因此为PDF补丁丁开发了快速.无损地提取PDF文档图片的功能. ...

  3. java imageio删除图片_Java 提取、替换、删除PDF文档中的图片

    在一篇文章里,配有与文本信息相得益彰的图片,不仅能够活跃与美化版面,同时也有利于提高文章的可读性和阅读效果,从而增强其吸引力.同时,对文档中已存在图片的处理也尤为重要.本文将通过使用Java程序来演示 ...

  4. 如何将PDF文档中的图片提取出来?

    如何将PDF文档中的图片提取出来? PDF是我们经常接触的一种文档,但对于它的一些编辑操作却并不熟悉,比如有时需要将文档中的图片提取出来,应该如何处理呢? 一.普通文档 常见的PDF文档一般由Word ...

  5. 转换工具推荐:如何将PDF文档转换为PPT演示文稿

    随着科技的不断进步和发展,许多人们对于电子文档的使用和需求也日益增长.其中,PDF文档是一种非常常见的文档格式,由于其方便易用和可靠性,得到了广泛的应用.但是,在某些情况下,我们可能需要将PDF文档转 ...

  6. 如何使用ABBYY将PDF文档转换为演示使用的PPT

    PDF文档具有良好的兼容性,可以在不同系统中稳定使用,不会由于系统的不同而出现格式错误.乱码等现象.但另一方面来说,PDF文档本身无动画效果,如果作为演示使用的话,会比较欠缺. 在这种情况下,很多人会 ...

  7. pdf文档编辑(pdf编辑器)、pdf文档转换为word文档(pdf转换为word转换器)——Adobe Acrobat DC软件的下载与安装

    一.前言 很多时候需要用到一些文档中的一些内容信息,像word这种文档是很好编辑的,可以直接复制里面的内容也可以直接对文档进行编辑,但是由于pdf文档格式美观,并能保持手机电脑文档格式一致,不乱码,所 ...

  8. 【方法】PDF文档可以转图片吗?如何操作?

    需要把PDF文档转换成图片,你会怎么做呢? 有些小伙伴可能会直接截图保存,确实是一个快捷的方法,但这种方法容易造成图片质量的损失,也可能遇到无法截图整个页面的情况,或者文档页面多,截图耗费很多时间. ...

  9. [PDF文件怎么编辑]如何在PDF文档中插入图片

    收到一份PDF格式文档需要进行编辑,文件中只有文本内容,需要在页面中为对应的配图,也就是在PDF中添加图片,作为一个只懂得用阅读器来查看文档人来说,编辑PDF文件可谓是一件难事,这种格式的文件是如何编 ...

最新文章

  1. *LeetCode--Add Two Numbers
  2. Python的集合set
  3. BOOST_SCOPE_EXIT宏相关的测试程序
  4. python copy函数用法_Python深浅拷贝
  5. java传参数的方法_java中方法的参数传递机制
  6. 关于webpack4的14个知识点,童叟无欺
  7. (五):ionic 命令详解
  8. vuforia for unity 注意事项
  9. MSF(Metaspolit)复现MS12-020蓝屏漏洞
  10. cpolar——安全的内网穿透工具
  11. Spring AOP切面实现:参数传递
  12. 华中科技大学计算机学院陈迪,华中科技大学2011届“优秀毕业生”公示名单
  13. 关于CSS媒体查询--电脑尺寸大全
  14. phpstorm官方下载地址
  15. 【Android】模拟返回键、菜单键、Home键
  16. upupoo启动不了 mysql_【upupoo动态桌面壁纸和MySQL API 中文手册哪个好用】upupoo动态桌面壁纸和MySQL API 中文手册对比-ZOL下载...
  17. 管不住嘴、挪不动腿?
  18. flash插件+linux,Linux下的flash插件
  19. input输入框按照字符数限制输入
  20. 【国产化系列】银河麒麟V10系统上升级gcc版本

热门文章

  1. 编译提示“/usr/bin/ld: cannot find -lgflags-shared“错误的解决办法
  2. 用好销冠话术库,业绩增长十倍
  3. android 高德拖拽地图定位,拖拽选址-拖拽选址-示例中心-JS API UI 组件示例 | 高德地图API...
  4. bilibili学习
  5. Origin绘图后导出图片的方法
  6. 喧喧发布 2.5.3 版本,主要提升系统稳定性,优化交互体验
  7. CSS基础————千本樱滑落的瞬间
  8. 面经:阿里二面自我剖析---Java岗(50分钟)
  9. 信号完整性之眼图(eye)理解(二)
  10. 决策树(手写代码+隐形眼镜项目)