在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)之外,我找不到任何开源库或答案。
可以这样做吗?请在此方面提出建议并帮助我,谢谢。
答案 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可以完成的压缩的工具。