Итак, я в основном хочу загрузить файл .pdf и получить обратно zip-файл с извлеченными изображениями .jpg. Я не знаю, где я ошибаюсь. Я вижу извлеченные изображения, но они повреждены.
Я тестировал это вживую. Ошибка, которую я получаю: Непойманная (в обещании) Ошибка: недопустимый ввод base64, это похоже на URL-адрес данных. в Object.exports.decode (jszip. js: 68) в jszip. js: 3497
Я использую pdf. js "https://mozilla.github.io/pdf.js/" и jszip для преобразования файлов изображений в zip https://github.com/Stuk/jszip
The Code
enter code here
function getInputValueById(e) {
return document.getElementById(e).value
}
function outputInfo(e) {
document.getElementById("outputArea").innerHTML = e
}
document.addEventListener("DOMContentLoaded", function() {
bReady()
}, !1);
function bReady() {
window.File && window.FileReader && window.FileList && window.Blob ||
outputInfo(str_browserNotSupport);
var e = document.getElementById("filedropzone");
e.addEventListener("dragover", function(e) {
e.stopPropagation(),
e.preventDefault(),
e.dataTransfer.dropEffect = "copy"
}),
e.addEventListener("drop", function(e) {
e.stopPropagation(),
e.preventDefault(),
document.getElementById("bfile").value = "";
for (var t, n = e.dataTransfer.files, o = 0; t = n[o]; o++)
document.getElementById("curFileInput").innerHTML = "<i class='fa fa-docs'></i>" + t.name,
inputFile = t
}),
document.getElementById("bfile").addEventListener("change", function(e) {
for (var t, n = e.target.files, o = 0; t = n[o]; o++)
document.getElementById("curFileInput").innerHTML = "<i class='fa fa-docs'></i>" + t.name,
inputFile = t
}, !1),
document.getElementById("convertBtn").addEventListener("click", function(e) {
if (document.getElementById("outputImages").innerHTML = "",
void 0 !== inputFile) {
outputInfo(str_readingFile);
var t = new FileReader;
t.onload = function() {
!function(t) {
outputInfo("<i class='fa fa-spin3 animate-spin'></i>" + str_process);
var n = new XMLHttpRequest
, e = "/convertParam.php?x1=" + getInputValueById("scale");
n.open("GET", e),
n.onload = function() {
if (200 === n.status) {
var e = n.responseText.split(",");
convertDo(t, inputFile.name, {
scale: e[0]
})
} else
console.log("Request failed. Returned status of " + n.status)
}
,
n.send()
}(t.result)
}
,
t.readAsDataURL(inputFile)
} else
outputInfo(str_pleaseLoadFile)
})
}
function AddPageImage(e) {
var t = new Image(100,parseInt(100 * e.height / e.width))
, n = getInputValueById("outformat");
"jpg" == n ? t.src = e.toDataURL("image/jpeg") : "png" == n && (t.src = e.toDataURL("image/png")),
t.addEventListener("click", function(e) {
var t = document.createElement("");
t.download = "page." + n,
t.href = this.src,
t.click()
});
var o = t.src.replace(/^data:image\/(png|jpg|jpeg);base64,/, "");
jszipob.file("page" + currPage + "." + n, o, {
base64: !0
}),
document.getElementById("outputImages").appendChild(t)}
function handlePages(e) {
var t = parseFloat(options.scale)
, n = e.getViewport({
scale: t
})
, o = document.createElement("canvas")
, a = o.getContext("2d");
o.height = n.height,
o.width = n.width;
var i = {
canvasContext: a,
viewport: n
};
e.render(i).promise.then(function() {
console.log("Page rendered"),
AddPageImage(o),
++currPage <= numPages ? thePDF.getPage(currPage).then(handlePages) : convertDone()
})
}
function convertDone() {
console.log("Render finish!"),
jszipob.generateAsync({
type: "blob"
}).then(function(e) {
if (e) {
var t = new Blob([e])
, n = window.URL.createObjectURL(t)
, o = (t.size / 1024 / 1024).toFixed(2).toString();
outputInfo("<i class='fa fa-ok fa-2x'></i><br>" + str_converSuccess + "<a download='" +
outputfile + "' href='" + n + "'>" + str_clicktoSave + "(" + outputfile + "," + o + "M)</a>"),
"undefined" != typeof pplike_manualshowlike && pplike_manualshowlike()
} else
outputInfo(str_convertFailed)
})
}
var inputFile, currPage = 1, numPages = 0,
thePDF = null, options = null, jszipob = null, outputfile = "";
function convertDo(e, t, n) {
var o = atob(e.replace(/^data:application\/pdf;base64,/, ""))
, a = window["pdfjs-dist/build/pdf"];
a.GlobalWorkerOptions.workerSrc = "/js/pdf.worker.js",
a.getDocument({
data: o
}).promise.then(function(e) {
console.log("PDF loaded"),
outputfile = t.replace(".pdf", "").replace(".PDF", "") + ".zip",
jszipob = new JSZip,
options = n,
currPage = 1,
numPages = (thePDF = e).numPages,
e.getPage(1).then(handlePages)
}, function(e) {
outputInfo(str_convertFailed + " -- reason"),
console.error(e)
})
}
END