在使用JavaScript上传之前减小PDF文档的大小?

时间:2018-11-29 16:31:56

标签: javascript pdf

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

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

正如一些消息来源所建议的那样,一种方法是调整图像文件的大小,使用jspdf生成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文档,但是除了几个在线PDF压缩程序(例如this one)之外,我找不到任何开源库或答案。

可以这样做吗?请在此方面提出建议并帮助我,谢谢。

2 个答案:

答案 0 :(得分:0)

肯定有许多开源CLI实用程序可用于压缩PDF,例如用Java编写的https://github.com/pts/pdfsizeopt。您可以使用WebAssembly和Service Worker来使这些CLI实用程序之一在客户端浏览器中本地运行,如Google最近在squoosh.app上展示的那样。

以下是他们介绍如何执行此操作的视频:https://www.youtube.com/watch?v=ipNW6lJHVEs

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

答案 1 :(得分:0)

人们有一个理由在服务器端而不是客户端实现PDF压缩方案。虽然减少PDF文件大小的方法有很多复杂性,但是如果您认为它与图像压缩类似(这是PDF压缩中非常典型的一件事,并且由于它是(直接从扫描的图像创建),您可以阅读here,为什么在服务器端执行此操作通常是一个更好的主意。

我的公司提供了用于实现PDF压缩的SDK,但是您可能会发现,您所需要的只是可以在服务器上运行以执行PDF Optimizer可以完成的压缩的工具。