Javascript Данные изображения Base64 сгенерированы поврежденными / недействительными! Скрипт jszip выдает ошибку INVALID base64 base input - PullRequest
0 голосов
/ 29 мая 2020

Итак, я в основном хочу загрузить файл .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

...