我正在上传一份文档 (PDF),其中主要包含在 CamScanner(CS) 应用程序的帮助下从手机摄像头现场拍摄的图像。
我可以处理图像文件上传以减小图像的大小,但无法在上传之前减小 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');
});
Run Code Online (Sandbox Code Playgroud)
但是,我想清楚地区分上传图像和上传 PDF 文档,但除了几个在线 PDF 压缩器(例如此压缩器)之外,我找不到任何开源库或答案。
这样做可能吗?请建议并帮助我,谢谢。
当然,您可以使用许多开源 CLI 实用程序来压缩 PDF,例如用 Java 编写的:https: //github.com/pts/pdfsizeopt。您可以使用 WebAssembly 和 Service Worker 来获取这些 CLI 实用程序之一,以便在客户端浏览器中本机运行,正如 Google 最近通过sqoosh.app演示的那样。
以下是他们描述如何执行此操作的视频:https://www.youtube.com/watch ?v=ipNW6lJHVEs
或者,您可以将未压缩的 PDF 上传到服务器,然后使用开源 CLI 实用程序在服务器上对其进行压缩。我希望这有帮助!