实时搜索: pdf如何预览

pdf如何预览

443条评论 2774人喜欢 4605次阅读 604人点赞
如图,之前用win7一样的软件,知网 的CAJ阅读器,就可以预览,现在就没有预览图片 , rt,这样的话,被我下载的福昕pdf打开了,ri了,那样怎么使用的了反向搜索啊!
简直伤不起的,太烦了! ...

Web系统PDF无预览打印如何实现: WEB软件打印功能实现方式:
1、浏览器本身的打印功能,效果最差。
2、在web服务器上产生好PDF或Excel文件,下载到本地打印。很多在服务器端运行的报表软件采用这样的方式。因为就是下载文件,所以各种浏览器都支持。缺点就用户操作麻烦,服务器附载大。
3、报表插件方式,可以做到与桌面软件一样的打印功能,这种方式实现的效果最好。缺点就是插件是针对特定浏览器的,不能做到支持各种浏览器,报表插件一般是支持IE浏览器。

有没有什么兼容性好的pdf在线预览方式: 代码如下:
public void getDownFile() throws FileNotFoundException, Exception {
try {
HttpServletRequest request= ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
HttpSession session = request.getSession();
// String uploadPath = session.getServletContext().getRealPath("/")+"upload";
downLoadFileName= URLDecoder.decode(downLoadFileName, "UTF-8");
response.setHeader("Content-type", "text/html;charset=UTF-8");
if(downLoadFileName.contains("../")){
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.write("无法下载此文件");
writer.close();
return;
}
File file = new File(EmpHomeFolderUtil.getKnowledgeFolder()+File.separator+downLoadFileName);
logger.info("filePath========"+EmpHomeFolderUtil.getKnowledgeFolder()+File.separator+downLoadFileName);
if(!file.exists()) {
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.write("下载文件失败或文件已经丢失");
writer.close();
}else{
FileInputStream fileInputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
OutputStream outputStream = response.getOutputStream();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
response.reset();
if(downLoadFileName.endsWith(".pdf")){//pdf文件下载
response.setContentType("application/pdf");
}else{
response.setContentType("multipart/form-data");
}
response.setHeader("Content-Disposition", "attachment;fileName=\"" + new String(downLoadFileName.getBytes("GBK"), "iso8859-1") + "\"");
response.addHeader("Content-Length", "" + file.length());
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = bufferedInputStream.read(buffer, 0, 8192)) != -1) {
bufferedOutputStream.write(buffer, 0, bytesRead);
}
bufferedOutputStream.flush();
fileInputStream.close();
bufferedInputStream.close();
outputStream.close();
bufferedOutputStream.close();
}
}catch (Exception e ) {
logger.error("下载附件失败:" + e, e);
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
writer.write("下载文件失败或文件已经丢失");
writer.close();
}
}

如何创建pdf的buffer,让pdf.js实现预览pdf文件: PDF.js 是基于开放的 HTML5 及 JavaScript 技术实现的开源产品。简单说就是一个 PDF 解析器。运用HTML5JavaScript(即pdf.js仅使用安全的web语言,不包含任何攻击者可以用的本地代码块)的PDF阅读器pdf.js,直接在标准的HTML页面上载入和渲染PDF文件, 还可以提高安全性(不需要安装第三方插件,安全性由浏览器保证),浏览器所做的安全措施已经为pdf.js提供了安全的运行环境。其对IE和 FireFox浏览器的要求是IE9+, FireFox19+。
在线示例: http://jsbin.com/pdfjs-helloworld-v2/1/edit , http://jsbin.com/pdfjs-prevnext-v2/1/edit
源码:https://github.com/mozilla/pdf.js
官网:http://mozilla.github.io/pdf.js/

pdf.js VS 传统浏览器读取pdf

一般来说,PDF档案格式都是在浏览器中由外挂程式来描绘,通常是Adobe自己的PDF reader或来自其他供应商的描绘工具,但这些外挂通常无法充分运用PDF的特点,而且由于含有大量的受信任代码,使得Google Chrome浏览器必须运用SandBox沙箱原理,来检查PDF描绘工具是否遭到未知病毒感染。
使用adobe,必须在本地安装软件才能使用,而pdf.js不依赖环境、渲染速度快(测试过,确实很快)、安全性高。

pdf.js渲染PDF文件
pdf.js渲染PDF文件的流程:Fetch pdf (url / buffer) ——> canvas ——> 渲染
如果要深入pdf的渲染,需要去研究pdf.js源代码。pdf.js可通过pdf文件的地址或pdf数据流获取pdf,具体实现是调用接口函数 PDFJs.getDoc(url/buffer)将pdf载入html,通过canvas处理, 然后渲染pdf文件。网上给出的都是通过url来获取pdf的例子,而我在做项目的时候,后台(python)要求是发pdf的数据流给前台,前台接收pdf的buffer,然后通过pdf.js来渲染。当然最初尝试buffer出现了很多问题,具体问题总结如下:
1)如何通过$.ajax接收后台发给前台的buffer数据;
2)如何将buffer传给pdf.js来处理(这里我使用了viewer.js, 所以需要考虑的是如何将buffer传给viewer.js来处理);
3)如何将pdf.js转换成pdf.js可以接收的buffer格式;
(对应问题解决见代码注释)
注:viewer.js是pdf.js的扩展,其将打印、翻页、缩放等功能进行了实现,且界面非常好看。也就是说如果你引入了viewer.js,pdf的渲染和渲染之后的功能界面都已经帮你实现了,你不用自己去写界面。

先从官网:http://mozilla.github.io/pdf.js/ 下载代码,然后使用文件viewer.html , 我的html就是在viewer.html 的基础上修改的,下面我给出buffer的例子:
<!DOCTYPE html>
<html dir="ltr" mozdisallowselectionprint moznomarginboxes>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="google" content="notranslate">
<title>在线预览</title>
{% load static %}{% get_static_prefix as STATIC_URL %}
<link href="{{STATIC_URL}}css/preview.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="{{STATIC_URL}}pdfjs/web/viewer.css"/>
<script type="text/javascript" src="/img/e3tTVEFUSUNfVVJMfX1wZGZqcy93ZWIvY29tcGF0aWJpbGl0eS5qcw=="></script>
<link rel="resource" type="application/l10n" href="{{STATIC_URL}}pdfjs/web/locale/locale.properties"/>
<script type="text/javascript" src="/img/e3tTVEFUSUNfVVJMfX1wZGZqcy93ZWIvbDEwbi5qcw=="></script>
<script type="text/javascript" src="/img/e3tTVEFUSUNfVVJMfX1wZGZqcy9idWlsZC9wZGYuanM="></script>
<script type="text/javascript" src="/img/e3tTVEFUSUNfVVJMfX1wZGZqcy93ZWIvZGVidWdnZXIuanM="></script>
<script src="/img/e3tTVEFUSUNfVVJMfX1qcy9qcXVlcnktMS44LjMuanM=" type="text/javascript"></script>
<script type="text/javascript">

//convertDataURIToBinary()
//不知道什么原因如果后台直接将pdf的数据流发给前台,得到的是乱码,将数据转换成 Uint8Array始终不成功
//所以就让后台将发送之前的数据流做 了base64编码发给前台,前台再解码得到的数据就不是乱码了。
var BASE64_MARKER = ';base64,';

var preFileId = {{mark}};

//viewer.js全局变量,传入buffer,回答问题2
var DEFAULT_URL

$(document).ready(function(){
$.ajax({
type:"post",
async: false,
//ajax接收pdf数据流,注意dataType值的设置是否有错,如果不指定,jQuery将自动根据HTTP包MIME信息返回
//responseXML或responseText . 回答问题1
contentType:"application/pdf;charset=utf-8",
url:"{% url netPan.File.views.browserFuf%}",
data:{
id: preFileId
},
success:function(data){
var pdfAsDataUri = data;
//如果引入了viewer.js , 处理方法
var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
DEFAULT_URL = pdfAsArray;
// 只引入了pdf.js, 未引入viewer.js, 处理方法
// var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
// PDFJS.getDocument(pdfAsArray).then(); 自己写pdf的处理函数
}
});
});

function convertDataURIToBinary(dataURI) { //编码转换,回答问题3
var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
var base64 = dataURI.substring(base64Index);
var raw = window.atob(base64);
var rawLength = raw.length;

//转换成pdf.js能直接解析的Uint8Array类型,见pdf.js-4068
var array = new Uint8Array(new ArrayBuffer(rawLength));

for(i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}
</script>

<!--先设置全局变量DEFAULT_URL 的值,所以要后调入viewer.js -->
<script type="text/javascript" src="/img/e3tTVEFUSUNfVVJMfX1wZGZqcy93ZWIvdmlld2VyLmpz"></script>
</head>

<body>
省略内容
</body>
</html>

win10如何在预览窗口预览pdf文件:

如果是Win10系统,下载PDF Reader,Adobe Reader Touch,都不好使显示不出来。那就下载:Adobe Acrobat Reader DC  网页链接

点击“编辑”-“首选项”

勾选-"在 Windows资源管理器中启用PDF缩略图“-确认,就可以了。

希望能帮到大家

我的电脑打开PDF文档时显示没有预览,该怎么解决?: 用AI(Adobe Illustrator)打开试试。

winedt 如何设置预览的pdf被自带的Texworks打开: 具体错误是什么? 这样描述问题,没有人知道怎么解决你的问题。

JS如何做网页预览PDF,WORD等格式文件的功能?类似于百度文库那样子: http jq ajax请求后台 返回一个文件 直接就可以下载了 下载地址为浏览器设置的默认下载地址

inventor三维如何转成PDF三维,能够在PDF中三维预览: 用Autodesk Inventor Publisher 可以直接打开inventor的文件,导出为3D的PDF

  • 15全国口腔医师分如何查

    count upon是什么意思: count upon仰赖,指望, 依靠, 准备(得到) ...

    229条评论 3450人喜欢 4894次阅读 323人点赞
  • nas怎么读

    合同协议里 upon the earliest of:(a)...., (b)......是什么意思: 一般a,b 是两个条件,以早到达的条件为准 ...

    798条评论 1829人喜欢 2829次阅读 286人点赞
  • ppt绘图工具栏在哪

    lay eyes upon是什么意思: 把眼睛放在;意思是指把精力放在。。。的意思祝学习进步,天天快乐! ...

    206条评论 2496人喜欢 5298次阅读 765人点赞
  • oppor9s哪个卡是主卡

    it is still pause upon什么意思: it is still pause upon它仍然停留在it is still pause upon它仍然停留在 ...

    235条评论 2854人喜欢 2905次阅读 286人点赞
  • m3怎么拆

    俄罗斯“和平号”空间站第一批碎片坠落在44.4度S、150度W: 有参考答案的:此地是海洋,安全,无危险,损失较少。亲,喜欢的请点个“赞”哦! ...

    885条评论 4771人喜欢 5970次阅读 858人点赞
  • gm面膜多少钱一贴

    燃气管道全碳钢2寸150磅阀门多少钱一个: 您好,目前只是知道阀门的口径的大小,但是阀门选用的材质还需要知道,才能准确的确定阀门到底多少钱一个,这样的报价才会准确,您可以给生产阀门的厂家打电话咨询一下。 ...

    280条评论 4145人喜欢 6547次阅读 561人点赞