PDF报告网站是在后台转成图片上传保存然后前台显示,还是在前台显示时实时转化?
最近看了2个报告网站,发现都是通过图片懒加载,但是有一个问题,这个图片是PDF文档在后台上传时转化然后上传保存的,还是在前台实时转化的?
我自己通过PDFJS
测试了一下,PDF转Image,转的图片都是Base64位的,而且顺序随机
下面是代码:
$(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);
});
});
希望有做过的兄弟给个思路,查了很多资料,都没找到想要的
————————————分割线
已经解决,目前是通过PHP的扩展Imagick解决的,按照顺序生成图片,不过目前生成的图片是放在服务器上,其他图片和文档都是放在七牛云OSS上
$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().'页');
}
推荐文章: