8

here is my code to print a pdf file. here while printing time iam getting one page only i need a solution for that

  function printPdf(){
     var ifr = document.getElementById("frame1");
         //PDF is completely loaded. (.load() wasn't working properly with PDFs)
     ifr.onreadystatechange = function () {
        if (ifr.readyState == 'complete') {
              ifr.contentWindow.focus();
              ifr.contentWindow.print();
           }
       }
 }
1

2 Answers 2

6

I suspect that's because the whole window gets printed (which has the current view of the iframe with the 1st page of the PDF rendered). Use <object> instead:

<!DOCTYPE html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>

    <script>
    function PrintPdf() {
        idPrint.disabled = 0;
        idPdf.Print();
    }

    function idPdf_onreadystatechange() {
        if (idPdf.readyState === 4)
            setTimeout(PrintPdf, 1000);
    }
    </script>

</head>

<body>
    <button id="idPrint" disabled=1 onclick="PrintPdf()">Print</button>
    <br>
    <object id="idPdf" onreadystatechange="idPdf_onreadystatechange()"
        width="300" height="400" type="application/pdf"
        data="test.pdf?#view=Fit&scrollbar=0&toolbar=0&navpanes=0">
        <span>PDF plugin is not available.</span>
    </object>
</body>

This code is verified with IE. Other browsers will still render the PDF, but may not print it.

[UPDATE] If you need dynamic loading and printing, the changes to the above code are minimal:

<!DOCTYPE html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>

    <script>
    function PrintPdf() {
        idPdf.Print();
    }

    function idPdf_onreadystatechange() {
        if (idPdf.readyState === 4)
            setTimeout(PrintPdf, 1000);
    }

    function LoadAndPrint(url)
    {
        idContainer.innerHTML = 
            '<object id="idPdf" onreadystatechange="idPdf_onreadystatechange()"'+
                'width="300" height="400" type="application/pdf"' +
                'data="' + url + '?#view=Fit&scrollbar=0&toolbar=0&navpanes=0">' +
                '<span>PDF plugin is not available.</span>'+
            '</object>';
    }
    </script>
</head>

<body>
    <button id="idPrint" onclick="LoadAndPrint('http://localhost/example.pdf')">Load and Print</button>
    <br>
    <div id="idContainer"></div>
</body>
Sign up to request clarification or add additional context in comments.

11 Comments

thank you for your reply. actually before i was using object then i changed to iframe because maybe IE9 will create problem use of object can you try for iframe..
I don't think it's possible. The best you can print is the whole window, not a specific <iframe> when it has a PDF inside. The <object> approach works for IE9 though. Maybe you should make sure Acrobat Reader is up-to-date.
but its not working for me.. i want to print after loading the object
Some ideas: try idPdf.gotoLastPage, idPdf.printAll(), or increase the timeout: setTimeout(PrintPdf, 2000) (this is a delay to get the initial PDF view rendered after the file has been loaded). Here is a related post which lists all methods available on the PDF <object>.
No problem. Which one of the above options has helped, exactly?
|
1
<iframe src="teste.pdf" id="meupdf" width="800" height="600" />

function printPdf) {

    var PDF = document.getElementById("meupdf");
    PDF.focus();
    PDF.contentWindow.print();
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.