【问题标题】:Whitelist PDF Embed白名单 PDF 嵌入
【发布时间】:2012-11-12 16:49:40
【问题描述】:

是否有方法或服务允许只读(不保存或下载)PDF 仅嵌入到一个域中?我知道有像 Scribd 和 Slideshare 这样的服务,但问题是虽然它们确实有私人选项,但据我所知,没有任何服务允许将嵌入列入白名单(例如,只允许在某些域上嵌入。)Vimeo 可以做到这一点视频,我也不介意为此服务付费。有什么想法吗?

我也研究了 PDFJS,似乎他们有一个 NodeJS 实现,所以我想 PDFJS 可能可以从服务器端的服务器获取 PDF,然后将其流式传输到客户端而不暴露原始 PDF url。但是我找不到好的 PDFJS 文档。

任何帮助将不胜感激。

【问题讨论】:

  • 什么是 PDF 嵌入?请澄清。
  • 只是一种将 PDF 文档作为内联内容嵌入网站的方法。像 YouTube 或 Vimeo 嵌入一样。
  • 所以您希望将 PDF 简单地构建成 HTML 文档,而最终用户无法在本地下载?
  • 是的。 Slideshare 和 Scribd 可以使用,但它们不允许限制允许文档嵌入的域,因此任何人都可以复制嵌入代码并将其嵌入到自己的站点中。
  • 我在下面发布的答案是用于白名单,而不是用于阻止下载...我认为您可以使用 PDFObject.js 之类的东西来阻止下载,但据我了解,一旦 PDF 被提供给客户端,没有办法阻止下载。

标签: javascript node.js pdf


【解决方案1】:

这可以通过任何 HTTP 服务器实现,但由于您在问题中提到了 Node,我们将使用该技术解决问题。我也假设 Express 框架。

首先,您只需将 PDF 作为静态文件托管在您的服务器上。然后,您将注册一些检测 PDF 请求的中间件。如果请求的主机名与“已批准”域列表不匹配,则您将错误返回给客户端。如果域获得批准,您将提供 PDF。这与 Apache 中限制域/IP 访问的 .htaccess 文件或 Nginx 配置中的“允许”块没有什么不同。这里快速浏览一下中间件功能...

var approved = []; // Add your approved domains here.

// Make sure this middleware comes before app.use(express.static)
app.use(function(req, res, next){
    if(req.url == '/path/to/PDF') {
        if(approved.indexOf(req.headers.host) {
            next();
        } else {
            next(new Error('Nu uh uh!')); 
        }
    } else {
        next();
    }
});

这样即使他们复制嵌入代码,他们也会从服务器收到错误(可能应该是 403,但这些是您可以自行决定的语义)

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2017-01-21
    • 2013-10-02
    • 1970-01-01
    • 2019-02-20
    • 2016-07-02
    • 2012-02-21
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多