Сохранить сгенерированный PDF на FTP-сервере - PullRequest
1 голос
/ 08 ноября 2019

Я сгенерировал PDF с помощью Html2Pdf, но я понятия не имею, как я могу сохранить этот файл на моем FTP-сервере, а не локально.

Я уже пробовал его с JSPDF, но проблема с этой библиотекой заключалась в том, что я не могсохранить элемент CSS. Поэтому я пытаюсь заставить его работать с html2pdf.

  $("#printer").on("click", function(e) {

  var element = document.getElementById('qrcode');
  var worker = html2pdf().from(element).save();
  var saver = html2pdf().from(element).output();

    var data = new FormData();
        data.append("data" , saver);

    var xhr = new XMLHttpRequest();
        xhr.open( 'post', 'upload.php', true ); //Post to php Script to save to server
        xhr.send(data);

    });

Я знаю, что можно передать эти данные в файл «upload.php», но я не знаю, как этого добиться.

Я был бы очень признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Это немного зависит от удаленного FTP-сервера, поэтому, возможно, вам понадобится немного Try & Error, чтобы установить соединение

Ваш код JS:

var data = new FormData();
data.append("data" , saver);

var xhr = new XMLHttpRequest();
    xhr.open( 'post', 'upload.php', true ); //Post to php Script to save to server
    xhr.send(data);

});

Я не тестировалэто с помощью Html2Pdf, но сейчас я предполагаю, что заставка содержит полный сгенерированный файл pdf-bibary

. JS отправит файл Content в файл upload.php на сервере

Ваш upload.php

if(isset($_POST['data'])){

    //$_POST['data'] will contain everything sent by ajax
    $pdfContent = $_POST['data'];

    //tmpFile to store the pdf - will be removed automatically
    $tmpFile = tmpfile();
    fwrite($tmpFile, $pdfContent);

    //connect and login to a ftp server
    $ftp_server = "ftp.xx.com";
    $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");

    //probably login with user/pw
    $login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);


    //upload tmp-file - choose filename on server
    if (ftp_put($ftp_conn, "fileNameOnServer.pdf", $tmpFile, FTP_ASCII)){
      echo "Successfully uploaded file";
    }
    else {
      echo "Error uploading file";
    }

    //close connection
    ftp_close($ftp_conn);
}
?>

Смотрите встроенные комментарии, надеюсь, понятно, что происходит, в целом вы должны выполнить следующие шаги:

  • Извлечь опубликованные данные из запроса Ajax
  • Запись содержимого во временный файл (= pdf-файл)
  • подключение к ftp-серверу
  • загрузка этого файла

В случае, если ваш ftp-сервертребует ssl посмотреть в ftp_ssl_connect. В случае возникновения ошибок при подключении / авторизации php должен выдавать предупреждения, поэтому, вероятно, проверьте ваш журнал ошибок

0 голосов
/ 08 ноября 2019

это для html2pdfrocket.com

Вы можете попробовать следующий способ

Назначить следующее значение $ value и затем использовать

<!DOCTYPE html>
<html>
<head>
        <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
      <title>Title</title>
      <style type='text/css'>
        body{
            width: 96%;
            margin:1% 2%;
            line-height: 2em;
            letter-spacing: 0.26mm !important;
            padding:0;
            font-family:helvetica,sans serif;
            word-wrap: break-word;
        }
         SOME CSS CODE
    </style>
</head>
<body>
SOME HTML CODE

$postdata = http_build_query (массив ('apikey' => $ apikey, 'value' => $ value, 'MarginBottom' => '30', 'MarginTop' => '15'));

            $opts = array('http' =>
                array(
                    'method'  => 'POST',
                    'header'  => 'Content-type: application/x-www-form-urlencoded',
                    'content' => $postdata
                )
            );

            $context  = stream_context_create($opts);

            // Convert the HTML string to a PDF using those parameters
            $result = file_get_contents('http://api.html2pdfrocket.com/pdf', false, $context);
            file_put_contents('url_to_save/agreement.pdf', $result);
...