天天看点

pdf.js

task1, 模仿helloworld,把一个最简单的pdf居中显示出来

canvas是inline元素,所以如果要居中,请设置display: block;

注意要设置pdfjsLib.GlobalWorkerOptions.workerSrc,指向dist目录下面的worker

显示pdf步骤:

1. 用pdfjsLib获取document,得到一个task

2. 在promise里面获取pdf实例

3. 由pdf实例得到某一页

4. 

viewer.html 一万多行, 我无语。

1. 切换侧栏

1.1 显示缩略图 ---》有点用

1.2 显示文档大纲 (viewOutline)----》完全不需要

1.3 显示附件(viewAttachments) ---》完全不需要

2. 在文档中查找(findbar)  ---》暂时不需要

2.1 左右

2.2 全部高亮显示

2.3 区分大小写

2.4 字词匹配

3. 上下翻页(previous, next) ---》重要

4. 直接导航到某一页(pageNumber, numPages) ---》重要

5. 放大/缩小 ---》(zoomOut)不太重要, 可以有

6. 自动缩放 ---》(zoomIn)不太重要, 可以有

7. 切换到演示模式 (secondaryPresentationMode)---》完全不需要

8. 打开本地文件 (secondaryOpenFile)---》 重要

9. 打印文件 secondaryPrint---》可以有

10. 下载 secondaryDownload---》需要会员

11. 当前在看的内容 secondaryViewBookmark---》 完全不需要

12. 滚动 scrollVertical---》重要

13. 转到第一页 firstPage---》可以有

14. 转到最后一页 lastPage---》可以有

15. 顺时针,逆时针 pageRotateCw, pageRotateCcw---》完全不需要

16. 文本选择和手形工具 cursorSelectTool, cursorHandTool---》不怎么需要

17. 水平滚动 scrollHorizontal---》完全不需要

18. 单页视图, 双页视图, 书籍视图  spreadNone, spreadOdd, spreadEven---》 不太重要,默认单页就行

19. 文档属性 documentProperties---》完全不需要

20. 在pdf上绘制 ---》重要

https://github.com/mozilla/pdf.js/issues/5608

pdf.worker.js is main file that performs PDF parsing (outside page main thread). When disableWorker=true it will be loaded into main page automatically (from workerSrc location) and block UI for PDF parsing needs. See https://github.com/mozilla/pdf.js/blob/master/src/display/api.js#L65

pdf.worker.js这个文件主要负责在另外一个线程里面解析pdf文档。如果设置disableWorker=true, pdf文档将会被加载到主页面中,因此会造成UI卡住。

https://github.com/mozilla/pdf.js/issues/1231

Looks like you are using pdf.js from the published to the web viewer which requires PDFJS.workerSrc set. Please set the PDFJS.workerSrc variable same way as published viewer does https://github.com/mozilla/pdf.js/blob/gh-pages/web/viewer.html#L14, or set PDFJS.disableWorker = true.

However best approach will be to use non-published code from 

src/*

.

要么指定workerSrc变量,要么设置disableWorker = true. 否则使用non-published版本的代码(src/*下面的文件, 默认已经设置了workerSrc)

mozilla.github.io/pdf.js

github.com/mozilla/pdf.js

上面的wiki里面的链接

csdn

stackoverflow

坑爹:

pdf.js有两个版本, 一个是专门给web上的viewer用的,需要设定workerSrc才行。

另外一个是在src内部,已经设定好了workerSrc,不需要再次设定了

https://github.com/mozilla/pdf.js/issues/1231

pdfjsLib.getDocument打开pdf文档

pdfDoc.getPage(num).then(function(page) {

var viewport = page.getViewport({scale: scale});

由每一页的viewport决定canvas的大小

page.render(renderContext);

page.getTextContent, 抽取pdf的文本

如果同时绘制多页pdf, 需要特殊处理, 把它们一次链接起来.

https://stackoverflow.com/questions/31891907/prevent-simultanous-function-calls-when-using-pdf-js

在typescript中导入对象, 正确姿势参考链接:

https://stackoverflow.com/questions/45467843/importing-pdfjs-breaks-ts-application

pdf.js, 有一层canvas, canvas下面有一层textlayer, 颜色是透明的.

如何设置oss的Accept-Ranges

阿里云部分下载的文章: 

https://help.aliyun.com/knowledge_detail/39571.html?spm=5176.11065259.1996646101.searchclickresult.63861141oYl26T

https://stackoverflow.com/questions/40620638/how-to-set-range-header-from-client-with-pdf-js

在pdf上绘制红色四边形:

https://stackoverflow.com/questions/58590845/draw-rectangle-in-canvas-with-loaded-pdf-file-using-pdf-js

关于workerSrc以及disableWorker = true的帖子:

https://stackoverflow.com/questions/27724295/pdf-js-failing-on-getdocument

https://github.com/mozilla/pdf.js/issues/1231

如果使用的pdf.js是发布给web viewer使用的, 那就必须设置PDFJS.workerSrc, 如果不设置的话, 

就必须设置PDFJS.disableWorker = true;

如何阻止pdf里面的超链被点击

https://stackoverflow.com/questions/31053948/how-to-disable-hyperlinks-within-a-pdf-rendered-by-pdf-js

Hello World介绍:

https://mozilla.github.io/pdf.js/examples/

hello world代码:

https://mozilla.github.io/pdf.js/examples/

Getting Started介绍(重要!):

https://mozilla.github.io/pdf.js/getting_started/

pdf.js是显示层, pdf.worker.js是core层, viewer.js是viewer层.

一个完整例子的视频讲解:

https://www.youtube.com/watch?v=ydCSSgwZjzs&t=542s

https://www.youtube.com/watch?v=1ZNeP7cjADo

只要设置canvas的宽和高, 就等于清空canvas的内容了.