7

Is there anyway where pdf/image file can auto preview/shown in iframe before uploading without need click on preview button?

function PreviewImage() {
    pdffile=document.getElementById("uploadPDF").files[0];
    pdffile_url=URL.createObjectURL(pdffile);
    $('#viewer').attr('src',pdffile_url);
}
<form name=f1 method=post enctype="multipart/form-data">
    <input id="uploadPDF" type="file" name="file"/>&nbsp;
    <input type="button" value="Preview" onclick="PreviewImage();" />

    <div style="clear:both">
       <iframe id="viewer" frameborder="0" scrolling="no" width="300" height="200"></iframe>
    </div>
    <button type="submit" name="submit" class="btn btn-success btn-sm">
      <i class="fa fa-dot-circle-o"></i> Add
    </button>&emsp;
</form>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
Ichida
  • 139
  • 1
  • 2
  • 9

3 Answers3

13

you can use javascript pdf library like this one (i'm using pdf.js) from this link : https://mozilla.github.io/pdf.js/examples/index.html#interactive-examples

// Loaded via <script> tag, create shortcut to access PDF.js exports.
var pdfjsLib = window['pdfjs-dist/build/pdf'];
// The workerSrc property shall be specified.
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://mozilla.github.io/pdf.js/build/pdf.worker.js';

$("#myPdf").on("change", function(e){
 var file = e.target.files[0]
 if(file.type == "application/pdf"){
  var fileReader = new FileReader();  
  fileReader.onload = function() {
   var pdfData = new Uint8Array(this.result);
   // Using DocumentInitParameters object to load binary data.
   var loadingTask = pdfjsLib.getDocument({data: pdfData});
   loadingTask.promise.then(function(pdf) {
     console.log('PDF loaded');
     
     // Fetch the first page
     var pageNumber = 1;
     pdf.getPage(pageNumber).then(function(page) {
    console.log('Page loaded');
    
    var scale = 1.5;
    var viewport = page.getViewport({scale: scale});

    // Prepare canvas using PDF page dimensions
    var canvas = $("#pdfViewer")[0];
    var context = canvas.getContext('2d');
    canvas.height = viewport.height;
    canvas.width = viewport.width;

    // Render PDF page into canvas context
    var renderContext = {
      canvasContext: context,
      viewport: viewport
    };
    var renderTask = page.render(renderContext);
    renderTask.promise.then(function () {
      console.log('Page rendered');
    });
     });
   }, function (reason) {
     // PDF loading error
     console.error(reason);
   });
  };
  fileReader.readAsArrayBuffer(file);
 }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://mozilla.github.io/pdf.js/build/pdf.js"></script>

<input type="file" id="myPdf" /><br>
<canvas id="pdfViewer"></canvas>
scott6
  • 647
  • 6
  • 8
12

You have an input, check the onChange and then make a

 src= URL.createObjectURL(event.target.files[0])

to create URL: and then use it to preview with embed

<embed  
       src=src
       width="250"
       height="200">

Read more here https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed

Steve Phuc
  • 601
  • 8
  • 12
0

pdf.js & pdf.worker.js is free to use. or any restriction. i want to use for commercial purpose