Сохраните pdf (из window.print) в js var - PullRequest
0 голосов
/ 11 февраля 2019

Мы можем сгенерировать и сохранить локально страницу в формате pdf с помощью window.print(), но я хочу знать, могу ли я сохранить страницу в формате pdf в переменной, точно так же, как window.print() создает файл pdf, потому что я хочу отправить егочерез Аякс после.Спасибо.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Поскольку я могу понять вашу точную потребность, это может быть вашей помощью.

HTML

<button onclick="document.getElementById('opepdf').click();">Read PDF</button>
<input id="opepdf" type="file" name="name" style="display: none;" onchange="PDFReader(event);"/>

Javascript

function PDFReader(e){
   var file = e.target.files[0]; 

   var pdfReader = new FileReader();// Create a File Reader
   pdfReader.readAsText(file,'UTF-8');

   pdfReader.onload = readerEvent => {
      var PDFContent = readerEvent.target.result;
      console.log( PDFContent );//PDF content in variable
   }
}

Не знаю, если это крестбраузер или нет, но он не нуждается в плагине JS.Более подробное объяснение того, как вы будете использовать это, может улучшить ответы.Если вы хотите загрузить файл через ajax, вы можете использовать другие способы.

РЕДАКТИРОВАТЬ: Если вы хотите отправить PDF через ajax на ваш сервер, используйте:

HTML:

<form>
Select PDF
<input id="opepdf" name="opepdf" type="file" /><br>
<div id="upload"></div><br>
<input type="submit" value="submit"/> 
</form>

JAVA-SCRIPT: нужен jquery

//form Submit
   $("form").submit(function(evt){   
      evt.preventDefault();
      $("#upload").html("<img src='http://crabsheet.com/cs/wp-content/uploads/2012/08/capture-1.gif'>");
      var formData = new FormData($(this)[0]);
   $.ajax({
       url: 'upload.php',
       type: 'POST',
       data: formData,
       async: true,
       cache: false,
       contentType: false,
       enctype: 'multipart/form-data',
       processData: false,
       success: function (response) {
         $("#upload").html(response);
       }
   });
   return false;
 });

PHP-Serverside: должна быть папка «uploads» относительно скрипта dir

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["opepdf"]["name"]);

$fileName = $_FILES['opepdf']['name'];
$fileType = $_FILES['opepdf']['type'];
$fileError = $_FILES['opepdf']['error'];
$fileContent = file_get_contents($_FILES['opepdf']['tmp_name']);

if($fileError == UPLOAD_ERR_OK){
   //Processes your file here
    if (move_uploaded_file($_FILES["opepdf"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["opepdf"]["name"]). " has been uploaded.";
    } else {
        echo "Error uploading your file.";
    }
}else{
   switch($fileError){
     case UPLOAD_ERR_INI_SIZE:   
          $message = 'MAX UPLOAD SIZE Reached';
          break;
     case UPLOAD_ERR_FORM_SIZE:  
          $message = 'MAX FORM Upload Size Reached';
          break;
     case UPLOAD_ERR_PARTIAL:    
          $message = 'Could not finish Upload';
          break;
     case UPLOAD_ERR_NO_FILE:    
          $message = 'NO upload File';
          break;
     case UPLOAD_ERR_NO_TMP_DIR: 
          $message = 'Servernot configured for file upload';
          break;
     case UPLOAD_ERR_CANT_WRITE: 
          $message= 'CANT WRITE';
          break;
     case  UPLOAD_ERR_EXTENSION: 
          $message = 'Could not finish Upload.';
          break;
     default: $message = 'Could not finish Upload';
              break;
    }
      echo json_encode(array(
               'error' => true,
               'message' => $message
            ));
}
?>
0 голосов
/ 15 февраля 2019

Вы знаете, что можете сохранить веб-страницу в формате pdf с помощью window.print(), поэтому вы хотите поймать вывод window.print () как var в javascript.Но это не твоя цель, верно?Ваша цель - сохранить HTML-страницу в формате PDF и отправить ее через ajax.Итак, вам нужно спросить, есть ли другой способ сохранить мою HTML-страницу в формате PDF, кроме использования window.print()?Теперь вы на правильном пути.Чтобы конвертировать HTML в PDF, вы можете использовать jsPDF .html() PlugIn и html2canvas 1.0.0-alpha.12.

<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" 
        integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/"
        crossorigin="anonymous"></script>
<script src="~/lib/html2canvas/html2canvas.min.js"></script></script>
<!-- html2canvas 1.0.0-alpha.11 up to v1.0.0-rc.1 works, current version may not work -->
<script>
    function emailHtml() {
        let pdf = new jsPDF('p', 'pt', 'a4');
        pdf.html(document.body, {
            callback: function () {
                let obj = {};
                obj.pdfContent = pdf.output('datauristring');
                var jsonData = JSON.stringify(obj);
                $.ajax({
                    url: '/api/yourapi',
                    type: 'POST',
                    contentType: 'application/json',
                    data: jsonData
                });
            }
        });
    }
</script>
0 голосов
/ 11 февраля 2019

Вы не можете получить значение из window.print ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...