实现在线预览PDF的几种解决方案伍华聪

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//判断是否存在PDF生成的图片文件,//生成的jpg文件名为附件的IDstringpdfjpgPath=string.Format("/GenerateFiles/pdf/{0}.jpg",info.ID);stringpdfjpg=Server.MapPath(pdfjpgPath);//PDF文件路径,相对目录即可stringpdfPath=@"/Content/Template/fapiao.pdf";stringpdfRealPath=Server.MapPath(pdfPath);//如果不存在,则生成,否则返回已生成的文件if(!FileUtil.IsExistFile(pdfjpg)){//破解ModifyInMemory_Spire.ActivateMemoryPatching();PdfDocumentdoc=newPdfDocument(pdfRealPath);varimage=doc.SaveAsImage(0,Spire.Pdf.Graphics.PdfImageType.Bitmap,300,300);FileUtil.BytesToFile(ImageHelper.ImageToBytes(image),pdfjpg);}//存储一个路径info.SavePath=pdfjpgPath;//修改使用这个属性返回使用最后返回对应的Json信息即可

//序列号返回对象信息stringresult=JsonConvert.SerializeObject(info,Formatting.Indented);returnContent(result);我们在页面视图中,通过ajax请求处理即可实现图片的动态显示了。

//刷新列表varID='';functionRefresh(){varfilename=$("#WHC_FileName").val();//获取或生成对应的PDF文件,根据路径显示$.getJSON("/PdfView/FindByFileNamer="+Math.random()+"&name="+filename,function(info){if(info!=''){//获取图片路径,设置显示$("#imgfapiao").attr("src",info.SavePath);}});}最后实现了图片的预览展示。

上面就是我的一个解决思路,如果您有更好的方式解决PDF在线预览问题,欢迎彼此交流。

THE END
1.html中在线预览pdf文件之pdf在线预览插件html中在线预览pdf文件之pdf在线预览插件 最近遇到一个需求,要在html页面查看pdf生成的pdf文件! 翻来覆去找到两种办法 ,最后采用了jquery.media.js插件 方式一 将pdf转为图片保存,然后再把图片的地址发到页面进行显示。 遇到的困难,pdf转为图片时中文可能会乱码! https://www.jianshu.com/p/9d400d1574af
2.超强PDF在线预览插件插件描述:该插件利用HTM5技术实现了对PDF文件的在线预览功能 注意本地查看会有跨域问题,上传服务正常! 使用方法 解压压缩包,然后将自己要查看的PDF文件放入根目录下,编辑“/web/viewer.js”文件中的 “var DEFAULT_URL = 'test.pdf';”将PDF文件的路径改成自己的路径即可。 https://www.jq22.com/jquery-info782
3.PDF预览插件pdfobject.js,参数设置预览打印下载及特效全攻略pdfobject.js是一款在线PDF预览插件,支持设置参数实现个性化预览。使用该插件,用户可轻松预览、打印、下载PDF文件,并享受其他特效功能,提升使用体验。简洁高效,是网页中展示PDF文件的理想选择。 5.00点 演示地址查看 后台程序无后台 技术支持无 发布者AllTooWell https://www.moyublog.com/codes/11388.html
4.jQuery网页PDF预览插件在线预览jQuery网页PDF预览插件在线预览,HTML+CSS+JS前端代码,下载jQuery网页PDF预览插件源码尽在Bootstrap模板库https://www.bootstrapmb.com/item/3446/preview
5.Javascriptpdf预览插件mob64ca1404ed65的技术博客Javascript pdf预览插件 因我的项目开发须要在线展现 PDF文件,为解决 PDF文件 在浏览器关上后电子签章、电子签名等展现不全且局部浏览器兼容问题特利用pdf.js解决该问题; pdf.js框架为HTML5,无需任何本地反对,兼容性极好只有浏览器反对 HTML5 即可(据说 IE9 以上都是能够的);https://blog.51cto.com/u_16213636/12467950
6.uniapp在线预览pdf文件的方法教程vue.js这篇文章主要介绍了uni-app在线预览pdf文件的相关资料,本文主要介绍了如何在Vue项目中使用PDF.js插件进行PDF文件的预览,包括插件的下载、版本兼容问题的处理,以及在static文件夹下新建pdf文件夹存放解压文件,需要的朋友可以参考下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个https://www.jb51.net/javascript/329474mti.htm
7.在线PDF浏览JS插件PDF.JS让你轻松在浏览器上浏览PDF文件,PDF.JS有时候网站上会放一些文件,其中有个文件确实比较难办,就是传说中的pdf文件,今天给大家介绍一款PDF在线预览插件PDF.JS。这个JS是国外的团队开发的(http://mozilla.github.io/pdf.js/),英文比较好的可以去看看,这个插件的使用的协议是Apache协议,我们只要有版权说明就可以使用,具体的可以自行百度吧。 http://cenggel.com/chajian/19.html
8.pdf.js使用(在线预览pdf文件)pdf.js使用(在线预览pdf文件)最近公司需要pdf在线预览,于是找到pdf.js这个插件 , 好处就在于 pc端和移动端 不需要花过多的精力去调。 1:需要到官网下载源码:https://mozilla.github.io/pdf.js/ 2:将源码加入到项目中目录如下: 在web下有如下: 这里我们需要改动viewer.js ,打开其中有一段:https://blog.csdn.net/chen_3010/article/details/64126273
9.如何在网页中实现pdf在线预览?第3 部分:如何在网页中实现pdf在线预览? 第1 部分:实现pdf文件在线预览功能有哪些? 方式一、pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面。在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 方式二、通过jquery插件jquery.media.js实现 https://pdf.wondershare.cn/zhishi/310845.html
10.金格iWebPDF在线预览插件API4、 实现了通过网络在线浏览和保存服务器文档的功能。用户通过中间件打开、保存服务器上的文档,就像操作本地的文档一样简单。 5、 实现了客户端软件自动升级的功能。本中间件采用插件技术,能够通过版本号的更新,实现客户端软件自动更新功能。 在线预览 PDF在线预览2018-07-16 上传大小:778KB https://www.iteye.com/resource/weimingdexin-10544464
11.Office在线预览及PDF在线预览实现方式大集合一、服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPDFandXPS.exe可以导出PDF文件,然后再利用免费的swftools.exe工具生成swf格式的Flash文件,网页中加载flexpaper免费开源工具(有广告)实现Flash文件的预览。 https://www.officeweb365.com/officetoview.html
12.在线签名协议在线签名协议可导出pdf 在线签名协议在线签名协议可导出pdf 预览截图 功能介绍 此插件是一款基于ThinkPHP+FastAdmin开发的在线签名协议辅助插件,可用于前台用户授权协议的签订。 功能特性 1.可进行在线签名 2.支持富文本编辑器配置协议内容 3.提交完成可直接展示pdf https://www.fastadmin.net/store/treaty.html
13.Office(WordExcelPPT)文档在线预览,无需插件直接调用接口实现利用微软官方的Office Online在线预览(Word、Excel、PPT)文档,完美实现文档在线预览。我们在一般情况下的网站或系统开发需求会用到文档在线预览需要,但用户所要求的预览文档莫过于Office(Word、Excel、PPT)系列的或者PDF或者图片,后两者其实很简单,一般不需要费多大力气就能完美解决,基本上可以通过浏览器自身功能实现预览需http://www.kesunet.com/news/show.php?id=325
14.PDF在线浏览pdf.js 是一个主要用于HTML5 平台上在线阅读PDF文档的小插件,基于JavaScript技术编写而成,无需任何本地技术支持。 pdf.js是由Mozilla Labs发布的。他们的目标是创建一个通用的,基于标准的网络平台,能够解析和渲染PDF文件. 在网站上部署pdf.js 非常快捷容易. 可以直接引入pdf的链接或者将pdf转化为2进制码进行阅读.https://pdf.maitube.com/read/viewonline.html
15.pdf.js预览pdf腾讯云开发者社区1、前言: 新接手一个老项目,需要改造pdf文件的预览效果,接口直接返回的pdf文件的文件流base64字符串,前端只能拿到base64来进行预览。pdf.js是一款非常优秀的pdf解析工具,但不支持直接预览文件流,这里需要对pdf.js稍微改造。2、下载pdf.js 下载地址:https://mohttps://cloud.tencent.com/developer/information/pdf.js%20%E9%A2%84%E8%A7%88pdf
16.uniuni-app在线预览PDF 需求 文件不可以通过文件地址直接访问,要通过文件流的形式在线预览 工具 基于pdfjs封装的组件(别人封装的),用webview访问本地网页 遇到的问题 开始的时候以为他可以自己获取文件流并处理,所以直接将请求地址传进去了 意识到他不能处理blob,手动处理,将blob转为url https://easyremember.cn/post/ffbad4c7.html
17.usdoc文档在线预览Office在线预览word预览usdoc是一个文档在线服务,支持office在线预览及PDF在线预览,支持Word在线预览,ofd在线预览。不需要安装任何插件,直接在浏览器预览文件,支持手机端word预览,手机端excel预览http://www.usdoc.cn/
18.在线预览金格插件的话,需要安装多浏览器插件。此在线演示功能中没有提供。在线演示的话只能用IE来体验。IE版本:从IE6到IE11都可以。打开本地文 档:保存文档:数据是从数据库中获取的,不能为空根据上下代码无需变动//以下属性必须设置,实始化iWebPDFwebform.We bPDF.WebUrl="<%=mServerUrl%>";//WebUrl:系统服务器路径,与服http://www.360doc.com/document/16/1018/17/14036292_599402564.shtml