【问题标题】:View pdf instead of download using PDF js查看pdf而不是使用PDF js下载
【发布时间】:2016-07-23 10:07:18
【问题描述】:

在我的页面中,我正在尝试使用 PDF JS 显示我的 pdf 的缩略图,它可以在本地运行,但是当我在我的网络服务器中上传我的代码时,pdf 文件会自动下载。

在我的本地:

代码:

$(function() {  

        var filePath = "http://example.com/public/uploads/docs/Document_One_1.pdf";

        function Num(num) {
            var num = num;

            return function () {
                return num;
            }
        };

        function renderPDF(url, canvasContainer, options) {
            var options = options || {
                    scale: 1.1
                },          
                func,
                pdfDoc,
                def = $.Deferred(),
                promise = $.Deferred().resolve().promise(),         
                width, 
                height,
                makeRunner = function(func, args) {
                    return function() {
                        return func.call(null, args);
                    };
                };

            function renderPage(num) {          
                var def = $.Deferred(),
                    currPageNum = new Num(num);
                pdfDoc.getPage(currPageNum()).then(function(page) {
                    var viewport = page.getViewport(options.scale);
                    var canvas = document.createElement("canvas");
                    canvas.setAttribute("id","pdfCanvas"+num);
                    canvas.setAttribute("onclick","popCanvas('{{url('/dashboard/showcanvas')}}','"+document.getElementById('pdfPath').innerHTML+"','"+num+"');");
                    var ctx = canvas.getContext('2d');
                    var renderContext = {
                        canvasContext: ctx,
                        viewport: viewport
                    };

                    if(currPageNum() === 1) {                   
                        height = viewport.height;
                        width = viewport.width;
                    }

                    canvas.height = height;
                    canvas.width = width;

                    canvasContainer.appendChild(canvas);

                    page.render(renderContext).then(function() {                                        
                        def.resolve();
                    });
                })

                return def.promise();
            }

            function renderPages(data) {
                pdfDoc = data;

                var pagesCount = pdfDoc.numPages;
                for (var i = 1; i <= pagesCount; i++) { 
                    func = renderPage;
                    promise = promise.then(makeRunner(func, i));
                }
            }

            PDFJS.disableWorker = true;
            PDFJS.getDocument(url).then(renderPages);       
        };

        var body = document.getElementById("bodyofpdf");
        renderPDF(filePath, body);
    });

当我更改文件路径 url 时,例如:“https://www.tutorialspoint.com/bootstrap/bootstrap_tutorial.pdf”,它可以工作。

谁能帮帮我??

对不起,我的英语不好。

【问题讨论】:

  • 定义“有效”(和无效)是什么意思?
  • P.S.不要使用“PDFJS.disableWorker = true;”
  • @async5 我的意思是有效(缩略图出现/生成).. 但是在我更改 PHP 版本并告诉浏览器使用此代码“'Content-Disposition'打开 PDF”之后它现在完成了=>“内联; $filename"" 在我的控制器中..
  • 但我遇到了另一个问题。我上传的pdf文件是荷兰语的,在它生成pdf到画布后,每个单词都会变成盒子,像这样[][][][] [][][] [][]..

标签: laravel pdf laravel-5.2 pdfjs


【解决方案1】:

如果你使用 Laravel,你可以控制 路由 的行为,包括到 .pdf 的路由。对于本地文件,浏览器的默认行为与没有本地文件的行为不同。

我使用了很多 PDF.js,但我不知道你为什么将用户直接链接到文件,你可以创建一个视图页面,它获取一个参数,如 id 或书名然后你用 pdf.js 加载它。如果您使用带有文件扩展名的 url,您可能会混淆浏览器。

yourpage.com/books/view/{id_book}

【讨论】:

  • 我这样做了,在我的 javascript 中我更改了路径: var filePath = "{{url('/dashboard/pdfthumbs')}}" + "/" + document.getElementById('pdfPath' ).innerHTML;在我的路线中: Route::get('/dashboard/pdfthumbs/{filename}', function($filename) { $file_path = 'public/uploads/docs/'.$filename; if (file_exists($file_path)) { return url($file_path); } else { exit('请求的文件在我们的服务器上不存在!'); } })->where('filename', '[A-Za-z0-9\-_\ .]+');
  • 好吧,我不能为你调试代码,但应该检查生成的源代码,看看哪个是最终的filePath,可以手动检查它是否存在或有错误。错误可能出现在很多地方,尤其是当您结合使用 JavaScript 和 PHP 时。
  • 文件路径是正确的,可能javascript无法从路由生成缩略图..
猜你喜欢
  • 2019-10-08
  • 2019-04-03
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多