Получите странный синтаксис при открытии автоматически созданного pdf php javascript - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь сделать сайт, где пользователи могут сделать PDF. Я хочу показать PDF непосредственно рядом с кнопкой, когда я нажимаю «создать рабочий лист». Я пытался сделать это с помощью JavaScript и PHP, но я получаю странный синтаксис в моем iframe вместо реального PDF. Кто-нибудь знает правильный способ сделать это?

<?php    
    $titel = "TITLE";
      require_once('tcpdf/tcpdf.php');  
      $obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);  
      $obj_pdf->SetCreator(PDF_CREATOR);  
      $obj_pdf->SetTitle("educationworksheet.com");  
      $obj_pdf->SetHeaderData('', '', PDF_HEADER_TITLE, PDF_HEADER_STRING);  
      $obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));  
      $obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));  
      $obj_pdf->SetDefaultMonospacedFont('helvetica');  
      $obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);  
      $obj_pdf->SetMargins(PDF_MARGIN_LEFT, '5', PDF_MARGIN_RIGHT);  
      $obj_pdf->setPrintHeader(false);  
      $obj_pdf->setPrintFooter(false);  
      $obj_pdf->SetAutoPageBreak(TRUE, 10);  
      $obj_pdf->SetFont('helvetica', '', 12);  
      $obj_pdf->AddPage();  
      $content .= '  
      <h3 align="center">TITLE</h3><br /><br />
      <h4 align="left">This is what we are gonne do '.$titel.'</h4><br /><br /><h4 align = "left">Name:____________________________</h4>
      ';      
      $obj_pdf->writeHTML($content); 
      $obj_pdf->Output('sample.pdf', 'I');  
?>
<!DOCTYPE html>  
<html>  
    <head> 
        <script>
            function loadDoc() {
                var xhttp = new XMLHttpRequest();
                xhttp.onreadystatechange = function() {
                    if (this.readyState == 4 && this.status == 200) {
                      document.getElementById("pdf_viewer").srcdoc = this.responseText;
                    }
                };
                xhttp.open("GET", "/test2.php", true);
                xhttp.send();
            }
        </script>
      </head>  
      <body>                 
        <button height="10px" width="30px" onclick="loadDoc()" name="create_pdf" value="create worksheet">create worksheet</button>                 
        <iframe id="pdf_viewer"></iframe>
      </body>  
 </html>

1 Ответ

0 голосов
/ 13 октября 2019

Во-первых, проблема в том, что браузер не будет интерпретировать данные PDF как PDF таким образом. srcdoc обрабатывается как необработанный HTML.

Существует несколько различных способов реализовать функцию «генерировать по клику»:

1) Вы можете просто полностью отбросить AJAX и просто использоватьHTML-разметка формы для достижения этой цели. Используя атрибут target в элементе формы для нацеливания на iframe вашего средства просмотра PDF.

  <body>
    <!-- Set up our form to target the PDF viewer iframe.-->
    <!-- Note: This will work with both GET and POST methods -->
    <form action="/test2.php" method="get" target="pdf_viewer">
      <input type="text" name="titel">
      <button height="10px" width="30px" type="submit" name="create_pdf_btn" value="create worksheet">create worksheet</button>
    </form>
    <!-- Initially, frame is blank, will update to PDF generation URL on form submit. 
  I created a special empty HTML file for this purpose. -->
    <iframe name="pdf_viewer" id="pdf_viewer" src="blank.html"></iframe>
  </body>

, а затем в test2.php вы просто создаете свой PDF-файл как он есть.

2) Создайте файл на своем сервере и используйте ответ AJAX, чтобы передать, где находится сохраненный PDF. Этот ответ ниже открывает новое окно с window.open, но вы можете просто заменить эту строку window.open на строку, которая обновляет document.getElementById('pdf_viewer').src новым URL .

https://stackoverflow.com/a/46529459/395384

3) Верните Base64 и используйте длинный URL-адрес данных. Пример этого см. Здесь:

https://stackoverflow.com/a/35197585/395384

...