最近由于工作需要,需要一个功能在线浏览pdf。经过初步筛选,选定了pdf.js.可以满足我们所有的功能需求。
一:先简要概括一下优缺点
优点总结:
-
免费,开源的。这点很重要
-
纯js实现,客户不需要安装额外的插件
-
功能强大,缩放,打印,查找功能应有尽有
-
兼容主流浏览器,火狐,谷歌,ie9+都支持
缺点总结
1:js 文件偏大,加载一起3m 多,即便压缩后,两个核心js 文件也在1m左右。会影响加载速度
2:引文使用H5 技术,ie8 以及ie8 以下的浏览器不支持。
二:下载和安装
1:进入官网下载地址:
http://mozilla.github.io/pdf.js/getting_started/#download
建议下载最新版,目前最新版本为1.9,建议下载正式版
ps:1.8版本以及以上可以兼容,目前的qq浏览器,低版本qq浏览器可能会不能显示。
官网是国外的,打开可能比较满,也可以从下面的国内镜像站下载
http://download.csdn.net/download/amu0521/10107388?web=web
2:下载后,解压文件,进入build 目录
复制pdf.js 和pdf.worker.js,这两个文件到我们的网站目录
3:编辑文件,显示签名。本步骤非必须。
打开pdf.worker.js ,搜索 data.fieldType === ‘Sig’ ,定位到大约28728行,注释掉下面的一行代码,如图
保存即可。
4:编写测试网页,显示pdf
<
title
>
pdf.js展示1,上一页,下一页
</
title
>
</
head
>
<
h1
>
PDF.js Previous/Next example
</
h1
>
<
button
id
=
"prev"
>
Previous
</
button
>
<
button
id
=
"next"
>
Next
</
button
>
<
span
>
Page:
<
span
id
=
"page_num"
>
</
span
>
/
<
span
id
=
"page_count"
>
</
span
>
</
span
>
</
div
>
<
canvas
id
=
"the-canvas"
>
</
canvas
>
<
script
src
=
"js/pdf.js"
>
</
script
>
<
script
src
=
"js/pdf.worker.js"
>
</
script
>
<
script
>
var
url =
'/pdf/doc/demo1.pdf'
;
var
pdfDoc =
null
,
pageNum =
1
,
pageRendering =
false
,
pageNumPending =
null
,
scale =
0.8
,
canvas = document.getElementById(
'the-canvas'
),
ctx = canvas.getContext(
'2d'
);
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
function
renderPage
(num)
{
pageRendering =
true
;
pdfDoc.getPage(num).then(
function
(page)
{
var
viewport = page.getViewport(scale);
canvas.height = viewport.height;
canvas.width = viewport.width;
var
renderContext = {
canvasContext: ctx,
viewport: viewport
var
renderTask = page.render(renderContext);
renderTask.promise.then(
function
()
{
pageRendering =
false
;
if
(pageNumPending !==
null
) {
renderPage(pageNumPending);
pageNumPending =
null
;
document.getElementById(
'page_num'
).textContent = num;
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
function
queueRenderPage
(num)
{
if
(pageRendering) {
pageNumPending = num;
}
else
{
renderPage(num);
* Displays previous page.
function
onPrevPage
()
{
if
(pageNum <=
1
) {
return
;
pageNum--;
queueRenderPage(pageNum);
document.getElementById(
'prev'
).addEventListener(
'click'
, onPrevPage);
* Displays next page.
function
onNextPage
()
{
if
(pageNum >= pdfDoc.numPages) {
return
;
pageNum++;
queueRenderPage(pageNum);
document.getElementById(
'next'
).addEventListener(
'click'
, onNextPage);
* Asynchronously downloads PDF.
PDFJS.getDocument(url).then(
function
(pdfDoc_)
{
pdfDoc = pdfDoc_;
document.getElementById(
'page_count'
).textContent = pdfDoc.numPages;
renderPage(pageNum);
</
script
>
</
html
>
运行效果如下图
代码来自官方实例,进行了整理
http://mozilla.github.io/pdf.js/examples/
提示:
1:请运行在虚拟服务器上,比如apache或iis等,否则可能会显示不出来效果。
2:pdf 文件为任何pdf文件即可,网站演示的pdf文件从网上下载的,如果侵权,请留言。
附上demo 目录结构
最近由于工作需要,需要一个功能在线浏览pdf。经过初步筛选,选定了pdf.js.可以满足我们所有的功能需求。一:先简要概括一下优缺点 优点总结:免费,开源的。这点很重要纯js实现,客户不需要安装额外的插件功能强大,缩放,打印,查找功能应有尽有兼容主流浏览器,火狐,谷歌,ie9+都支持 缺点总结 1:js 文件偏大,加载一起3m 多,即便压缩后,两个核心js 文件也在1m左右。会影响
在Web项目中,经常需要在浏览器端展示
PDF
文档,本文通过一个简单的小例子,简述
pdf.js
【一个通用的、基于web标准的、用于解析和呈现
pdf
的平台】的简单使用,仅供学习分享使用,如有不足之处,还请指正。
在Web项目中,经常需要在浏览器端展示
PDF
文档,本文通过一个简单的小例子,简述
pdf.js
的简单使用,仅供学习分享使用,如有不足之处,还请指正。
pdf.js
下载
pdf.js
是一个通用的、基于web标准的、用于解析和呈现
pdf
的平台。用户可以通过
pdf.js
的官方网站,进行下载,如下图所示:
小程序中预览下载
PDF
文件
由于小程序是在手机端使用,微信小程序的api有时候不满足我们的需求. 所以就自己自定义实现一个下载预览
PDF
的功能
1.小程序端使用web-view组件,在其中打开一个网页,在网页中实现我们需要的功能
<web-view src="{{url}}"></web-view>
其中url就是打开我们网页的地址
2.在网页中添加
pdf.js
js
...
最近有这样一个需求,需要在线预览
pdf
文件,于是就去找这方面的插件。最后筛选了一下,选择了
pdf.js
这个插件。
我们先看一下
pdf.js
定义:
pdf.js
可以实现在html下直接浏览
pdf
文档,是一款开源的
pdf
文档读取解析插件
pdf.js
主要包含两个库文件,一个
pdf.js
和一个
pdf
.
worker
.
js
,,一个负责API解析,一个负责核心解析
pdf.js
本质上是用canvas渲染的,p...
pdf
js
.Global
Worker
Options.
worker
Src = `//cdn
js
.cloudflare.com/ajax/libs/
pdf.js
/${
pdf
js
.version}/
pdf
.
worker
.
js
`;
pdf
js
.Global
Worker
Options.
worker
Src = `...
官网提供的示例
import {
pdf
js
} from 'react-
pdf
';
pdf
js
.Global
Worker
Options.
worker
Src = `//unpkg.com/
pdf
js
-dist@${
pdf
js
.version}/build/
pdf
.
worker
.min.
js
`;
使用官方提供的的链接引入
worker
可能会存在加载错误的问题,可能由于服务器的问题导致,所以使用本地引入可以很好的避免这类问题;
本地引入示例代码
import { Document, Page } from 'r
mozilla
pdf
js
介绍moziila
pdf
js
是一款优秀的
pdf
在线预览、导出、打印插件,但在使用中遇到了跨域问题。mozilla
pdf
js
跨域设置在
pdf.js
/web/app.
js
中,1420行,找到let viewerOrigin = new URL(window.location.href).origin || 'null';//添加这一行
//修改,将当前工程的orig
### 回答1:
《RabbitMQ实战指南.
pdf
》是一本关于RabbitMQ消息队列系统的实践指南。RabbitMQ是一个开源的消息中间件,用于在应用程序之间传递消息。这本指南涵盖了RabbitMQ的基本概念、架构以及如何在实际项目中使用它。
指南开始介绍了RabbitMQ的基本概念,如交换器、队列、生产者和消费者。它解释了这些概念之间的关系,以及如何使用它们来实现灵活的消息传递模式。然后,指南深入探讨了RabbitMQ的高级概念,如持久化、事务和发布/订阅模式。
除了概念介绍,指南还提供了具体的实战示例。它讲解了如何使用RabbitMQ在分布式系统中实现任务队列、发布/订阅和RPC等常见消息模式。每个示例都提供了详细的代码和步骤,让读者能够更好地理解如何实现这些模式。
此外,《RabbitMQ实战指南.
pdf
》还介绍了RabbitMQ的高可用性和可扩展性。它讲解了如何配置集群和镜像队列,以实现高可用性。同时,它还分享了一些实践经验和性能调优技巧,以帮助读者更好地运行和管理RabbitMQ。
总之,《RabbitMQ实战指南.
pdf
》是一本关于RabbitMQ的实用指南,适合那些想要了解和应用RabbitMQ的开发者和架构师。通过学习这本指南,读者将能够掌握RabbitMQ的基本概念和高级特性,并在实际项目中充分发挥其优势。
### 回答2:
《RabbitMQ实战指南》是一本介绍RabbitMQ消息队列中间件的实际应用的指南。RabbitMQ是一个基于AMQP(高级消息队列协议)的开源消息代理,被广泛应用于构建可靠、高效的分布式系统。
该书从RabbitMQ的基本概念开始介绍,包括队列、交换机、绑定等概念的解释和使用方法。然后,通过实例演示了如何使用RabbitMQ在不同的应用场景下解决问题。例如,如何使用RabbitMQ实现任务分发、日志收集、消息广播等功能。
书中还详细说明了如何配置和管理RabbitMQ服务器,包括如何设置虚拟主机、用户和权限管理等。同时,也介绍了如何监控和调试RabbitMQ实例,以及如何通过集群来提高可靠性和性能。
此外,本书还涵盖了与RabbitMQ相关的高级主题,如消息确认、消息持久化、事务、RPC等。这些主题对于构建可靠的分布式系统非常重要,而本书提供了实际的指导和示例供读者参考。
总之,《RabbitMQ实战指南》是一本全面介绍RabbitMQ的实际应用的实战指南。通过本书的学习,读者可以深入了解RabbitMQ的原理和应用场景,掌握使用RabbitMQ构建可靠、高效的分布式系统的技巧。这对于从事分布式系统开发和架构设计的工程师来说,是一本非常有价值的参考书。
### 回答3:
《rabbitmq实战指南.
pdf
》是一本关于RabbitMQ的实战指南的电子书。RabbitMQ是一种功能强大的开源消息中间件,用于在分布式系统之间进行消息传递。本书通过实践案例和详细的代码示例,介绍了RabbitMQ的基本概念、工作原理以及如何在实际项目中应用。
该书首先讲解了RabbitMQ的基本概念,包括消息队列、交换机、绑定和路由等,帮助读者了解RabbitMQ的核心组件以及它们之间的关系。然后,书中介绍了如何使用RabbitMQ进行消息的生产和消费,包括如何创建消息生产者和消费者、如何发送和接收消息等。同时,还详细介绍了如何使用各种常见的编程语言(如Java、Python和Node.
js
)进行RabbitMQ的集成。
此外,《rabbitmq实战指南.
pdf
》还介绍了 RabbitMQ的高级特性和应用场景。例如,如何使用RabbitMQ实现消息的优先级排序、如何实现发布/订阅模式、如何进行消息持久化等。书中通过实例讲解了如何应对高并发和大数据量的情况,以及如何处理消息的确认和错误处理。同时,还介绍了如何使用RabbitMQ来实现分布式系统之间的解耦和异步通信。
总之,《rabbitmq实战指南.
pdf
》是一本内容丰富、实用性强的RabbitMQ
入门
指南,通过详细的介绍和实践案例,帮助读者快速上手并掌握RabbitMQ的基本原理和应用技巧。无论是初学者还是有一定经验的开发人员,都可以从中获得启发和实用的知识。