Сохраните новый PDF-файл на сервер с помощью Adobe Pdf Embed API

Я получил этот код здесь https://codepen.io/practicalPDF/pen/eYBOpEm По сути, после аннотирования или комментирования PDF-файла он помогает вам загрузить новый PDF-файл. Я попытался изменить его так, чтобы при сохранении закомментированного PDF-файла он отправлялся на мой сервер, а не загружался на мой компьютер. Не работает

      <script type="text/javascript">
var path = "<?php echo $last_file ?>"
var urlToPDF =
"https://docsdemedard.com/"+path;
const clientId = "dbd96f4342ab4e92b822ac5fd166d737";
const viewerOptions = {
embedMode: "FULL_WINDOW",
showDownloadPDF: false,
showPrintPDF: false,
showAnnotationTools: true
};

const saveOptions = {
autoSaveFrequency: 0,
enableFocusPolling: false,
showSaveButton: true
}

function fetchPDF(urlToPDF) {
return new Promise((resolve) => {
    fetch(urlToPDF)
        .then((resolve) => resolve.blob())
        .then((blob) => {
            resolve(blob.arrayBuffer());
        })
})
}

function hideLink() {
document.getElementById("getFile").style.display = "none";
}

function updateSaveUI(zipFileName) {



document.getElementById("getFileText").innerHTML = "You can retrieve your saved file from: <a onclick='hideLink(); return true;'' href='https://practicalpdf.com/code-pens/reflect/uploads/" + zipFileName + "'>here.</a>";
document.getElementById("getFile").style.display = "flex";
}

document.addEventListener("adobe_dc_view_sdk.ready", function () {
// Create embedded view
var adobeDCView = new AdobeDC.View({
    clientId: clientId,
    locale: "fr-FR",
    divId: "adobe-dc-view"
});


adobeDCView.registerCallback(
AdobeDC.View.Enum.CallbackType.SAVE_API,
function (metaData, content, options) {
    var uint8Array = new Uint8Array(content);
    var blob = new Blob([uint8Array], { type: 'application/pdf' });
    formData = new FormData();
    var pdfFilename = urlToPDF.split("/").slice(-1)[0];
    pdfFilename = pdfFilename.split(".")[0] + "-" + uuidv4() + ".pdf";
    formData.append('pdfFile', blob, pdfFilename);

    //var zipFileName = pdfFilename.replace(".pdf", ".zip");


    fetch("https://practicalpdf.com/code-pens/reflect/", {
        method: 'POST',
        body: formData,
    })
        .then(
            function (response) {
                if (response.status == 200) {
                    updateSaveUI(pdfFilename);
                    //alert(pdfFilename);

                }
            }

            

        )

    return new Promise((resolve, reject) => {
        resolve({
            code: AdobeDC.View.Enum.ApiResponseCode.SUCCESS,
            data: {
                metaData: { fileName: urlToPDF.split("/").slice(-1)[0] }
            }
        });
    });
},
saveOptions
);


// Show the file
var previewFilePromise = adobeDCView.previewFile(
    {
        content: { promise: fetchPDF(urlToPDF) },
        metaData: { fileName: urlToPDF.split("/").slice(-1)[0] }
        ,  

    },
    viewerOptions
);


});

// Пытался избавиться от этого с помощью ajax

      $.post('newfile.php', {pdfFile: formData});

// Вспомогательные функции:

      function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
    var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
});
}

(function () {
if (Blob.arrayBuffer != "function") {
    Blob.prototype.arrayBuffer = myArrayBuffer;
}

function myArrayBuffer() {
    return new Promise((resolve) => {
        let fileReader = new FileReader();
        fileReader.onload = () => {
            resolve(fileReader.result);
        };
        fileReader.readAsArrayBuffer(this);
    });
}
})();
// Это мой серверный файл
      require_once "conn.php";
$file = $_POST['pdfFile'];
$target_dir = "uploads/";
move_uploaded_file($file,$target_dir);

Может ли кто-нибудь сказать мне, что я делаю не так и как это исправить?

1 ответ

2 строка должна быть...

      $file = $_FILES["pdfFile"]["tmp_name"];

Мой серверный PHP для этого CodePen выглядит так...

      <?php
header('Access-Control-Allow-Origin: *'); 
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["pdfFile"]["name"]);

$target_zip = str_replace(".pdf", ".zip", $target_file);

if (move_uploaded_file($_FILES["pdfFile"]["tmp_name"], $target_file)) {
    $zip = new ZipArchive;
    if ($zip->open($target_zip, ZipArchive::CREATE) === true) {
        $zip->addFile($target_file, basename($_FILES["pdfFile"]["name"]));
        $zip->close();
    }
}
?>
Другие вопросы по тегам