Я создал надстройку Excel, где пользователи могут открывать изображение (PNG) при вводе изображения в формате html.Я открываю картинки, нажимая HTML-кнопку с именем «OpenImgUpload», которая вызывает функцию с именем «imgload».Он также запускает ввод html-файла с именем «imgupload», эффективно загружая файл и устанавливая атрибут src для ввода изображения с именем «pic».Как добавленный перк, я добавил код в функцию «imgload», которая изменяет размеры загружаемых изображений до соответствующего размера.Моя главная проблема заключается в том, что большинство моих пользователей хранят PDF-файлы, а не только изображения.Чтобы добиться этого, я попытался использовать библиотеку PDF JS от Mozilla, но без особого успеха.
Чтобы упростить работу для пользователя, я хочу преобразовать одностраничные PDF-файлы моих пользователей в изображения png, когда они нажимают кнопку «OpenImgUpload» (и, таким образом, вызывают функцию «imgload»).Как бы я сделал преобразование таким образом?
вот функция "imgload":
function imgload() {
$('#imgupload').trigger('click');
var pdf = document.getElementById('imgupload');
var selectedFile = document.getElementById('imgupload').files[0];
var nombre = selectedFile.name;
var ext = nombre.split('.').pop();
if (ext == 'png' || ext == 'jpg' || ext == 'jpeg' || ext == 'gif')
{
var img = document.createElement("img");
// Create a file reader
var reader = new FileReader();
// Set the image once loaded into file reader
reader.onload = function (e) {
img.src = e.target.result;
var canvas = document.createElement("canvas");
//var canvas = $("<canvas>", {"id":"testing"})[0];
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var MAX_WIDTH = 1800;
var MAX_HEIGHT = 1200;
var width = img.width;
var height = img.height;
if (width > height) {
if (width > MAX_WIDTH) {
height *= MAX_WIDTH / width;
width = MAX_WIDTH;
}
}
else {
if (height > MAX_HEIGHT) {
width *= MAX_HEIGHT / height;
height = MAX_HEIGHT;
}
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);
var dataurl = canvas.toDataURL("image/png");
document.getElementById("pic").src = dataurl;
}
// Load files into file reader
reader.readAsDataURL(selectedFile);
}
}
Я попытался добавить этот код в функцию "imgload":
else if (ext == 'pdf')
{
var url1 = window.URL.createObjectURL(selectedFile);
pdfjsLib.getDocument(url1).then(function (pdf) {
pdf.getPage(1).then(function (page) {
var viewport = page.getViewport(1);
var canvas = document.getElementById('pdf-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
$('#openImgUpload').attr('href', $('#pdf-canvas').get(0).toDataURL());
var nom = nombre.replace(/\.[^/.]+$/, "");
var newfile = nom + ".png";
// Specfify download option with name
$('#OpenImgUpload').attr('download', newfile);
}
Я построил этот второй цикл if, ссылаясь на документацию по pdfjs.Это не вызвало ошибки, но, похоже, ничего не произошло.Я думаю, это связано с атрибутом «скачать».В любом случае я пытаюсь избежать загрузки.