实现在线预览PDF的方法有哪些

  介绍

这篇文章将为大家详细讲解有关实现在线预览PDF的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

因客户需要实现PDF的预览处理,在网上找了一些PDF在线预览的解决方案,有的用PDFJS的在线预览方式,有的使用PDFObject的嵌入式显示,有的通过转换JPG和PNG方式实现间接显示的方式,开始是想通过简单的方式,能够使用JS插件实现预览最好,可是在线预览总是有一些不足,如不同浏览器的兼容问题,甚至不同的手机平台中展示的效果也不一样,不过最好还是采用了间接的方式,把PDF转换为图片展示效果,达到客户的要求。

<强> 1,在线实现预览的方式

一开始我还是很倾向使用这种方式,希望能采用一个较为好的JS插件的方式,实现PDF的在线预览(通过网络预览),因此在Github上找到排名比较高的PDF格式的插件

实现在线预览PDF的方法有哪些

一看排名还是很高的,那么采用它应该不错,查看自带的PDF文件,效果还是杠杠的。

实现在线预览PDF的方法有哪些

不过客户的要求是显示正常的发票PDF文件,换一下文件地址,有部分信息显示不了,找了一下没有看到解决方法,所以效果不达标。

实现在线预览PDF的方法有哪些

连基本的发票也显示不了,那我这个就不能用它来显示发票PDF文件了。

最后,测试了使用PDFObject (https://pdfobject.com/)的方式实现在线嵌入PDF显示的方式,这个JS插件也是不错的,同样可以在Github上可以找到。

它的使用也是很简单的,如下代码所示。

& lt;脚本https://www.yisu.com/zixun/src="/JS/pdfobject.js ">

& lt; script> PDFObject.embed (“/PDF/sample-3pp.pdf",“# example1"); & lt;/script>

如果需要设置预览窗口的大小,通过设置样式即可。

& lt; style>   .pdfobject-container{高度:500 px;}   .pdfobject{边界:1 px固体# 666;}   & lt;/style>

实现在线预览PDF的方法有哪些

显示的效果是正常的了,不过我在苹果手机打开Safari浏览器测试发现,不能正常显示。

实现在线预览PDF的方法有哪些

因此也不能使用来进行预览显示。

在实际的测试中,发现安卓手机的浏览器对于预览PDF也是支持不一,有些直接下载PDF,不支持预览显示。

为了避免这些问题,最好找了一个折中的方案,把PDF转换为图片进行显示,图片在不同的浏览器中显示可是没有问题的。

<强> 2,PDF转换图片进行显示

把PDF转换为图片也有很多控件处理,例如Aspose.Pdf,尖顶。Pdf, pdfiumviewer等等,不同的第三方类库使用的方法有所差异,不过思路都很类似。

本来倾向于使用Aspose.Pdf的,不过发现转换后的发票信息还是缺失了某些中文字符或者乱码,导致不能正常显示。

后来寻找尖顶。Pdf版本以及对应的绿色版本,终于能够转换为正确的格式了,因此也就使用这个第三方控件进行转换图片使用了。

至于在线预览,我们在第一次请求Pdf预览文件的时候,生成对应的图片文件,后面直接返回路径即可。

实现的预览效果如下所示。

实现在线预览Pdf的方法有哪些

由于我们是在asp.net MVC的项目上进行显示的,因此需要修改控制器的处理逻辑,对图片的生成进行判断处理即可。

控制器后台的实现代码如下所示。

//判断是否存在PDF生成的图片文件,//生成的jpg文件名为附件的ID   字符串pdfjpgPath=string.Format (“/GenerateFiles/pdf/{0} .jpg", info.ID);   字符串pdfjpg=Server.MapPath (pdfjpgPath);//PDF文件路径,相对目录即可   字符串pdfPath=@"/内容/模板/fapiao.pdf";   字符串pdfRealPath=Server.MapPath (pdfPath);//如果不存在,则生成,否则返回已生成的文件   如果(! FileUtil.IsExistFile (pdfjpg))   {//破解   ModifyInMemory_Spire.ActivateMemoryPatching ();   PdfDocument doc=new PdfDocument (pdfRealPath);   var=医生形象。Spire.Pdf.Graphics.PdfImageType SaveAsImage (0。位图、300、300);   FileUtil.BytesToFile (ImageHelper.ImageToBytes(图片)、pdfjpg);   }//存储一个路径   信息。SavePath=pdfjpgPath;//修改使用这个属性返回使用

实现在线预览PDF的方法有哪些