PDF报告网站是在后台转成图片上传保存然后前台显示,还是在前台显示时实时转化?

最近看了2个报告网站,发现都是通过图片懒加载,但是有一个问题,这个图片是PDF文档在后台上传时转化然后上传保存的,还是在前台实时转化的?

PDF报告网站是在后台转成图片上传保存然后前台显示,还是在前台显示实时转化?

我自己通过PDFJS测试了一下,PDF转Image,转的图片都是Base64位的,而且顺序随机

PDF报告网站是在后台转成图片上传保存然后前台显示,还是在前台显示实时转化?

下面是代码:

$(document).ready(function() {
      const url = '../file/git.pdf';
      pdfjsLib.GlobalWorkerOptions.workerSrc = "{{ asset('js/pdf.worker.min.js') }}";
      //创建canvas元素
      var loadingTask = pdfjsLib.getDocument(url);
      loadingTask.promise.then(function (pdf) {
        var canvasdiv = document.getElementById('canvas');
        var totalPage = pdf.numPages;

        for(let pageNumber = 1;pageNumber <= totalPage; pageNumber++) {
          pdf.getPage(pageNumber).then(function(page) {
            var scale = 1.5;
            var viewport = page.getViewport({ scale: scale });
            var canvas = document.createElement('canvas');
            canvasdiv.appendChild(canvas);

            var context = canvas.getContext('2d');
            canvas.height = viewport.height;
            canvas.width = viewport.width;

            $("#canvas canvas").css("display", "none"); //canvas展示宽度

            var renderContext = { canvasContext: context, viewport: viewport };

            var renderTask = page.render(renderContext);

            renderTask.promise.then(function () {
              let url = canvas.toDataURL('image/png');
              $('#content').append('<img src="'+url+'" height="100%" alt="'+pageNumber+'" />');
            });
          });
        }
      }, function(err) {
        console.error(err);
      });
    });

希望有做过的兄弟给个思路,查了很多资料,都没找到想要的:joy:

————————————分割线
已经解决,目前是通过PHP的扩展Imagick解决的,按照顺序生成图片,不过目前生成的图片是放在服务器上,其他图片和文档都是放在七牛云OSS上

file

$imagick = new \Imagick();
$pdf = './file/git.pdf';
$imagick->setResolution(150, 150);
$imagick->readImage($pdf);
$bool = $imagick->writeImages('git.jpg', false);
if($bool) {
    dd('已转完,总共'.$imagick->getNumberImages().'页');
}
pdf
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

把PDF每页转成图片。 ppt和word文件先转成pdf然后继续还是转图片。

顺序问题无需考虑,是保证顺序的。

php有mpdf/imagick, go有imagick。等等。

1年前 评论
ljheisenberg (楼主) 1年前
讨论数量: 7

一般这种耗时操作,都会上传成功后通过队列异步去做

1年前 评论
ljheisenberg (楼主) 1年前

把PDF每页转成图片。 ppt和word文件先转成pdf然后继续还是转图片。

顺序问题无需考虑,是保证顺序的。

php有mpdf/imagick, go有imagick。等等。

1年前 评论
ljheisenberg (楼主) 1年前

浏览器是可以识别pdf的,之前的做法是嵌套 iframe ,让浏览器自己加载

1年前 评论
ljheisenberg (楼主) 1年前
看上隔壁小花了啦 (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!