Создать изображение bloburl из canvas.toDataURL () - PullRequest
0 голосов
/ 08 января 2020

У меня есть вывод PDF в виде строки base64. Я хочу создать bloburl для каждой страницы из этого формата. Итак, я создаю bloburl для всего PDF, используя эту строку base64. Затем я использую pdf js и отображаю первую страницу во вновь созданном холсте. Теперь я пытаюсь получить отображаемую картинку в виде изображения.

  1. У меня ошибка (Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.) при создании большого двоичного объекта с помощью кода выполнения b64toBlob(pag1.toDataURL('image/png',1.0),'image/png').
  2. Затем я попытался b64toBlob(window.btoa(pag1.toDataURL('image/png',1.0)),'image/png') Отображается пустое изображение из URL, созданного для этого большого двоичного объекта. .
  3. var b2 =pag1.toBlob(function(blob) {}, 'image/png') вывод не определен.

    <?php
    ob_start();
    require_once('plugin/tcpdf/tcpdf.php');
    $pdf    =new TCPDF();
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->AddPage();
    $html_p1='Text messaging, or texting, is the act of composing and sending electronic messages, typically consisting of alphabetic and numeric characters, between two or more users of mobile devices, desktops/laptops, or other type of compatible computer. Text messages may be sent over a cellular network, or may also be sent via an Internet connection';
    $pdf->writeHTML($html_p1, true, 0, true, 0);
    $pdf->AddPage();
    $html_p2='A telephone call is a connection over a telephone network between the called party and the calling party.';
    $pdf->writeHTML($html_p2, true, 0, true, 0);
    $base64PdfString = $pdf->Output('', 'E');
    $base64PdfArray = explode("\r\n", $base64PdfString);
    $base64 = '';
    for($i = 5; $i < count($base64PdfArray); $i++) 
    {
        $base64 .= $base64PdfArray[$i];
    }
     ?>
    
     <!doctype html>
      <head>
      <meta name="viewport" content="width = 1050, user-scalable = no" />
        <script type="text/javascript" src="plugin/turnjs4/extras/jquery.min.1.7.js"></script>
       <script type="text/javascript" src="plugin/turnjs4/extras/modernizr.2.5.3.min.js"></script>
       <script type="text/javascript" src="plugin/pdfjs_ex/pdf.js"></script>    
       <script>     
    
       const b64toBlob = (b64Data, contentType='', sliceSize=512) =>
      {
        const byteCharacters = atob(b64Data);
        const byteArrays = [];
    
        for (let offset = 0; offset < byteCharacters.length; offset += sliceSize)
        {
            const slice = byteCharacters.slice(offset, offset + sliceSize);
            const byteNumbers = new Array(slice.length);
            for (let i = 0; i < slice.length; i++)
            {
                byteNumbers[i] = slice.charCodeAt(i);
            }
            const byteArray = new Uint8Array(byteNumbers);
            byteArrays.push(byteArray);
        }
    
        const blob = new Blob(byteArrays, {type: contentType});
        return blob;
    }
    
    
    
    $( document ).ready(function() {
    
        const contentType   ='application/pdf';
        const b64Data       ='<?php echo $base64;?>';
        const blob          =b64toBlob(b64Data, contentType);
    
        const blobUrl       =URL.createObjectURL(blob);
    
    
        PDFJS.getDocument({ url: blobUrl }).then(function(pdf_doc) 
        {
                __PDF_DOC = pdf_doc;
                __TOTAL_PAGES = __PDF_DOC.numPages;
                var div_container = document.querySelector('#flipbook');
                pdf_doc.getPage(1).then(function(page) 
                {
                    var scale = 1;
                    var viewport = page.getViewport(scale);
    
                    // Prepare canvas using PDF page dimensions
                   var pag1 = document.createElement('canvas');
                    pag1.id ='Pg_1';
                    var context1 = pag1.getContext('2d');
                    pag1.height = viewport.height;
                    pag1.width = viewport.width;
                    var renderContext = 
                   {
                        canvasContext: context1,
                        viewport: viewport
                    };
                 page.render(renderContext).then(function()
                {
                    div_container.appendChild(pag1);
                    var dataUrl =pag1.toDataURL(); 
    
                //const b   =b64toBlob(dataUrl,'image/png');
                //const b   =b64toBlob(window.btoa(dataUrl),'image/png');
                //const burl =URL.createObjectURL(b); 
                //console.log(b);
    
                //var b2 =pag1.toBlob(function(blob) {}, 'image/png');
    
            var element                     = document.createElement("div");
            element.style.backgroundImage   = "url(" + dataUrl + ")";
            div_container.appendChild(element);
             $("#Pg_1").remove(); 
    
              });
                });
    
        })
    
    })
     </script>
    </head>
    
    <body>
     <!--<div id="magazine">
        <canvas id="pdf"></canvas>
     </div>-->
    
     <div class="flipbook-viewport">
      <div class="container">
          <div class="flipbook" id="flipbook">
              <!--<canvas id="pdf"></canvas>-->
          </div>
      </div>
    </div>
    
    
    <script type="text/javascript">
    
    function loadApp() {
    
    // Create the flipbook
    
    $('.flipbook').turn({
            // Width
    
            width:922,
    
            // Height
    
            height:600,
    
            // Elevation
    
            elevation: 50,
    
            // Enable gradients
    
            gradients: true,
    
            // Auto center this flipbook
    
            autoCenter: true
    
    });
     }
    
      // Load the HTML4 version if there's not CSS transform
    
       yepnope({
        test : Modernizr.csstransforms,
        yep: ['plugin/turnjs4/lib/turn.js'],
        nope: ['plugin/turnjs4/lib/turn.html4.min.js'],
        both: ['plugin/turnjs4/samples/basic/css/basic.css'],
        complete: loadApp
       });
    
      </script>
    
     </body>
    

Когда я выполняю console.log(dataURL), он начинается с data:image/png;base64 , Итак, я подумал, что это кодировка Base-64. Но, говоря ошибочно, неправильно расшифрован. Почему так и how to create imagebloburl from canvas displaying pdf page?

Заранее спасибо.

1 Ответ

0 голосов
/ 08 января 2020

Это способно создать изображение bloburl. Но показывать undefined при доступе к переменной burl из функции.

  pag1.toBlob(function(blob) 
    {
       var burl =URL.createObjectURL(blob); 

    }, 'image/png');

С нетерпением ждем лучшего решения.

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