openresty+pdf.js 实现一个通用的pdf预览服务

摘要:
==“blob:”){thrownewError;}禁用上载预览功能webViewerInitialized(){appConfig.toolbar.openFile.setAttribute;添加签名支持pdf.worker.jsif{data.fieldValue=null;//_this3.setFlags;}使用描述请求格式描述因为我们需要获取url参数,所以查询字符串的参数是需要进行url编码的pdf文件代理格式http://localhost/pdf?

pdf.js 是日常使用比较多的一个web端pdf预览方案,因为默认有一些安全策略(同源,但是也可以基于cors 解决)
所以为了简单基于nginx 的代理集成pdf.js 这样可以比较灵活的解决跨域以及静态资源的问题,同时也集成了nginx的
cache 方便对于pdf文件cache加速pdf 的显示

环境准备

  • docker-compose 文件 
version: "3"
services: 
  pdf-proxy: 
    image: openresty/openresty:alpine
    volumes:
    - ./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf
    - ./pdf:/opt/pdf
    - ./cache:/opt/nginx/data/cache
    ports: 
    - "80:80"
  • nginx 配置
worker_processes  1;
user root;  
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    lua_need_request_body on;
    gzip  on;
   # 配置cache
    proxy_cache_path  /opt/nginx/data/cache keys_zone=pdf:300m;
    resolver 114.114.114.114 ipv6=off;          
    real_ip_header     X-Forwarded-For;
    real_ip_recursive on;   
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        default_type text/html;
        location /doc {
            root /opt/pdf;
        }
        location /pdf {
            proxy_redirect     off; 
            # 开启了跨域访问,实际可以不用
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods GET, POST, PUT, DELETE, OPTIONS;
            proxy_set_header Host $http_host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
            client_body_buffer_size 10M;
            client_max_body_size 10G;
            set $agent "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5";
            set_by_lua_block $oss_url { 
                local ossurl=  ngx.req.get_uri_args()["ossurl"];
                ngx.log(ngx.ERR, "error: ", ossurl)
                return ossurl
            }
            proxy_buffers 1024 4k;
            proxy_read_timeout 300;
            proxy_connect_timeout 80;
            proxy_set_header User-Agent $agent;
            proxy_pass $oss_url;
            # 配置cache
            proxy_cache pdf;
            proxy_cache_key $scheme$proxy_host$uri$is_args$args;
            proxy_cache_valid  200 304 302 24h;   
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }    
    }    
}
 
 if (origin !== viewerOrigin && protocol !== "blob:") {
         throw new Error("file origin does not match viewer's");
       }

禁用上传预览

function webViewerInitialized() {
 appConfig.toolbar.openFile.setAttribute("hidden", "true");

添加签章支持
pdf.worker.js

 
if (data.fieldType === "Sig") {
      data.fieldValue = null;
      //_this3.setFlags(_util.AnnotationFlag.HIDDEN);
    }

使用说明

  • 请求格式说明
    因为需要获取url参数 ,所以我们查询字符串的参数是需要进行url编码的
    pdf 文件proxy 格式
    http://localhost/pdf?ossurl=<thirdpart-pdf-url-with-url-encode>
    url 编码方法(js 端,或者直接使用代码):
    encodeURIComponent(ossurl)
    pdf 预览请求地址
    http://localhost/doc/web/viewer.html?file=<origin-nginx-proxy-url-with-url-encode>
  • 参考效果

openresty+pdf.js 实现一个通用的pdf预览服务第1张

说明

以上是一个比较简单的实践,我们可以不用写代码,直接基于openresty 的灵活的能力,实现一个高效稳定的pdf 文件预览方案,对于其他
需要预览ppt以及word的我们可以基于一些转换工具,同时集成openresty 的shell 操作能力也可以快速高效的搞定

参考资料

http://mozilla.github.io/pdf.js/getting_started/#download
https://github.com/rongfengliang/openresty-pdf-view

免责声明:文章转载自《openresty+pdf.js 实现一个通用的pdf预览服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转载)数据库表分割技术浅析(水平分割/垂直分割/库表散列)font-family 字体及各大主流网站对比下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IText简介及示例

一、iText简介    iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。          使用iText非常方便,引入jar包,程序中就可以使用iText类库了。iText.jar包下载地址:http:...

C# Parsing 类实现的 PDF 文件分析器

下载示例 下载源代码 1. 介绍 这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adobe便携文档格式1.7 2006年11月”. 它是一个恐怕有1310页的大部头. 本文提供了对这份文档的简洁概述. 与此相关的项目定义了用来读取和解析...

vscode调试openresty

一、快速上手 1、软件下载   官网地址:https://code.visualstudio.com/   安装视频:https://code.visualstudio.com/docs/getstarted/introvideos 2、配置插件   插件安装:https://blog.csdn.net/qq_38161040/article/detail...

Java中常用的操作PDF的类库

iText iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。 该项目主页:http://www.lowagie.com/iText/ JFreeReport...

Java 处理PDF图章(印章)——图片图章、动态图章

图章(印章)是一种在合同、票据、公文等文件中表明法律效应、部门机关权威的重要指示物,常见于各种格式的文件、文档中。对于纸质文档可以手动盖章,但对于电子文档,则需要通过特定的方法来实现。本篇文档分享通过Java代码在PDF文档中添加图章的方法。内容将分两部分介绍: 1. 添加图片图章。即通过加载现有的图章(以图片形式),添加到PDF指定页面位置 2. 添加动...

vue项目中导出PDF的两种方式

参考大家导出的方式,基本上是如下两种: 1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了。对要求好的pdf这种方式真是不行啊!2.调用浏览器自身的方法。window.print() 来打印(打印时可选下载),这种方式打印出来很清楚,但纯在浏览器兼容问题。 谷歌浏览器比较好用点。 两种导出pdf清晰...