Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中上载之前减少PDF文档大小?_Javascript_Pdf - Fatal编程技术网

在JavaScript中上载之前减少PDF文档大小?

在JavaScript中上载之前减少PDF文档大小?,javascript,pdf,Javascript,Pdf,在CamScanner(CS)应用程序的帮助下,我正在上传一份文档(PDF),其中大部分包含从手机摄像头现场拍摄的图像 我可以处理图像文件上载以减小图像的大小,但在上载之前我无法减小PDF文档的大小 正如多个来源所建议的,一种方法是调整图像文件的大小,使用生成PDF文件,然后开始上载PDF文件 // Compress image and convert to pdf function resizeBase64Img(base64, width, height) { var canvas

在CamScanner(CS)应用程序的帮助下,我正在上传一份文档(PDF),其中大部分包含从手机摄像头现场拍摄的图像

我可以处理图像文件上载以减小图像的大小,但在上载之前我无法减小PDF文档的大小

正如多个来源所建议的,一种方法是调整图像文件的大小,使用生成PDF文件,然后开始上载PDF文件

// Compress image and convert to pdf

function resizeBase64Img(base64, width, height) {
    var canvas = document.createElement("canvas");
    canvas.width = width;
    canvas.height = height;
    var context = canvas.getContext("2d");
    var deferred = $.Deferred();
    $("<img/>").attr("src", "data:image/gif;base64," + base64).on('load',function() {
        context.scale(width/this.width,  height/this.height);
        context.drawImage(this, 0, 0); 
        deferred.resolve($("<img/>").attr("src", canvas.toDataURL()));               
    });
    return deferred.promise();    
}

//select my image in base64
var imageStr64 = "/9j/4RiDRXhpZgAATU0AKgA...";
//resize image, add image and create the pdf
resizeBase64Img(imageStr64, 1000, 1000).then(function(newImg){
    var doc = new jsPDF();
    doc.addImage($(newImg).attr('src'), 15, 90, 180,180);
    doc.save('mypdf.pdf');
});
//压缩图像并转换为pdf
函数resizeBase64Img(base64、宽度、高度){
var canvas=document.createElement(“canvas”);
画布宽度=宽度;
canvas.height=高度;
var context=canvas.getContext(“2d”);
var deferred=$.deferred();
$(“”).attr(“src”,canvas.toDataURL());
});
延迟返回。承诺();
}
//在base64中选择我的图像
var imageStr64=“/9j/4RiDRXhpZgAATU0AKgA…”;
//调整图像大小、添加图像并创建pdf
调整Base64img(imagestr6410001000)。然后(函数(newImg){
var doc=new jsPDF();
addImage文件($(newImg).attr('src')、15、90、180180);
doc.save('mypdf.pdf');
});
然而,我想明确区分上传图像和上传PDF文档,但除了几个在线PDF压缩器(如)之外,我找不到任何开源库或答案


有可能这样做吗?请在这方面给我建议和帮助,谢谢。

当然有很多开源CLI实用程序可以用来压缩PDF,比如这个用Java编写的工具:。您可以使用WebAssembly和Service Worker使其中一个CLI实用程序在客户端浏览器中以本机方式运行,正如Google最近演示的那样

以下是他们描述如何做到这一点的视频:


或者,您可以将未压缩的PDF上载到服务器,然后使用开源CLI实用程序在服务器上对其进行压缩。我希望这有帮助

请注意,
.load()
事件侦听器快捷方式已被弃用。不确定您使用的是哪个jQuery版本,但是
(“加载”是preferred@charlietfl谢谢,我已经相应地更新了我的问题,@charlietfl,那么是否可以调整pdf文件的大小?我认为pdf文件中的压缩和图像与我们在图像文件中所做的一样,是可能的吗?我们如何做到这一点?谢谢,我将在我的本地PC上尝试一下,这对我来说是非常新的我的WebAssembly,但它似乎很难部署在我的用户的机器上。如果你能提供一个javascript包或插件来实现这一点会更好,更重要的是,我只想在发送到服务器端之前完成客户端脚本。谢谢。