HTML 2 PDF

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
kpraman
Forum Contributor
Posts: 172
Joined: Fri Oct 13, 2006 10:54 am

HTML 2 PDF

Post by kpraman »

This script works fine when given URL. If i give html, its not working.
file name 'html_to_pdf.inc.php'

Code: Select all

<?php

    /**
     * Genereate PDF from HTML
     * @author Harish Chauhan
     * @version 1.0.0
     * @name HTML_TO_PDF
     */
    
    define ("HKC_USE_ABC",1);
    define ("HKC_USE_EASYW",2);

    class HTML_TO_PDF
    {
        var $html     = "";
        var $htmlurl= "";
        var $error     = "";
        var $host    = "";
        var $port    = 80;
        var $url    = "";
        var $_useurl  = "";
        
        var $saveFile = "";
        var $downloadFile = "";    
        var $_cookie = "";
        
        function HTML_TO_PDF($html="",$useurl = HKC_USE_ABC)
        {
            $this->html = $html;
            $this->_useurl=$useurl;
        }
        
        function useURL($useurl)
        {
            $this->_useurl = $useurl;
        }
        
        function saveFile($file="")
        {
            if(empty($file))
                $this->saveFile = time().".pdf";
            else 
                $this->saveFile =$file;
        }
        
        function downloadFile($file="")
        {
            if(empty($file))
                $this->downloadFile = time().".pdf";
            else 
                $this->downloadFile =$file;
        }
        
        function error()
        {
            return  $this->error;
        }
        
        function convertHTML($html="")
        {
            if(!empty($html))
                $this->html=$html;
            $htmlfile = time().".html";
            $url = "http://".$_SERVER['SERVER_NAME'].dirname($_SERVER['PHP_SELF'])."/".$htmlfile;
            
            $this->write_file($htmlfile,$this->html);

            $return = $this->convertURL($url);
            if(is_file($htmlfile))
                @unlink($htmlfile);
            return $return;
        }
        
        function convertURL($url)
        {
            $this->htmlurl = $url;
            if($this->_useurl == HKC_USE_ABC)
                return $this->_convertABC();
            elseif ($this->_useurl == HKC_USE_EASYW)
                return $this->_convertEASYW();
        }
        
        function _convertABC()
        {
            $this->host = "64.39.14.230";

            $this->url = "/pdf-net/cleardoc.aspx";
            $this->_sendRequest($s_POST_DATA);
            $s_POST_DATA = "url=".urlencode($this->htmlurl);
            $s_POST_DATA.= "&PagedOutput=on";
            $s_POST_DATA.= "&AddLinks=on";
            $s_POST_DATA.= "&x=30";
            $s_POST_DATA.= "&y=30";
            $s_POST_DATA.= "&w=550";
            $s_POST_DATA.= "&h=704";
            $s_POST_DATA.= "&UserName=";
            $s_POST_DATA.= "&Password=";
            $s_POST_DATA.= "&Timeout=15550";
            $s_POST_DATA.= "&Submit=Add URL";

            $this->url = "/pdf-net/addurl.aspx";
            $this->_sendRequest($s_POST_DATA);
            $this->url = "/pdf-net/showdoc.aspx";
            $s_POST_DATA = "";
            
            $pdfdata = $this->_sendRequest($s_POST_DATA);
            if($pdfdata===false) return false;

            if(!empty($this->saveFile))        
                $this->write_file($this->saveFile,$pdfdata);
            if(!empty($this->downloadFile))
                $this->download_file($pdfdata);
            return $pdfdata;
        }
        
        function _convertEASYW()
        {
            //http://www.easysw.com/htmldoc/pdf-o-matic.php
            $this->url= "/htmldoc/pdf-o-matic.php";
            $this->host="www.easysw.com";
            $s_POST_DATA = "URL=".urlencode($this->htmlurl);
            $s_POST_DATA .= "&FORMAT=.pdf";
            $pdfdata = @file_get_contents("http://".$this->host.$this->url."?".$s_POST_DATA);
            if(!empty($pdfdata))
            {
                if(!empty($this->saveFile))        
                    $this->write_file($this->saveFile,$pdfdata);
                if(!empty($this->downloadFile))
                    $this->download_file($pdfdata);
                return true;
            }
            
            $pdfdata = $this->_sendRequest($s_POST_DATA);
            if($pdfdata===false) return false;
            
            if(!empty($this->saveFile))        
                $this->write_file($this->saveFile,$pdfdata);
            if(!empty($this->downloadFile))
                $this->download_file($pdfdata);

            return $pdfdata;            
        }
        
        function _sendRequest($s_POST_DATA)
        {
            if(function_exists("curl_init"))
                return $this->_sendCRequest($s_POST_DATA);
            else
                return $this->_sendSRequest($s_POST_DATA);
        }

        function _sendSRequest($s_POST_DATA)
        {
            $s_Request = "POST ".$this->url." HTTP/1.0\n";
            $s_Request .="Host: ".$this->host.":".$this->port."\n";
            $s_Request .="Content-Type: application/x-www-form-urlencoded\n";
            $s_Request .="Content-Length: ".strlen($s_POST_DATA)."\n";
            if($this->_useurl == HKC_USE_ABC && !empty($this->_cookie))
                $s_Request .="Cookie: ".$this->_cookie."\n";
            $s_Request .="\n".$s_POST_DATA."\n\n";
            
            $fp = fsockopen ($this->host, $this->port, $errno, $errstr, 30);
            if(!$fp)
            {
                $this->error = "ERROR: $errno - $errstr<br />\n";
                return false;
            }
            fputs ($fp, $s_Request);
            while (!feof($fp)) {
                $this->GatewayResponse .= fgets ($fp, 128);
            }
            fclose ($fp);

            if(empty($this->_cookie))
            {
                @preg_match("/ASP.NET_SessionId[^;]*/s", $this->GatewayResponse, $match);
                $this->_cookie = $match[0];
            }

            @preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $this->GatewayResponse, $match);
            if($this->_useurl == HKC_USE_ABC)
                @preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $match[2], $match);
            $this->GatewayResponse =$match[2];

            return $this->GatewayResponse;
        }
        
        function _sendCRequest($s_POST_DATA)
        {
            $ch = curl_init();
            //"http://".$this->host.":".$this->port.$this->url;
            curl_setopt( $ch, CURLOPT_URL, "http://".$this->host.":".$this->port.$this->url );
            curl_setopt( $ch, CURLOPT_POST, 1 );
            curl_setopt( $ch, CURLOPT_POSTFIELDS,$s_POST_DATA);
            if($this->_useurl == HKC_USE_ABC && !empty($this->_cookie))
                curl_setopt( $ch, CURLOPT_COOKIE,$this->_cookie);
            curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
            curl_setopt( $ch, CURLOPT_TIMEOUT,30 );
            curl_setopt($ch, CURLOPT_HEADER, 1);
            $this->GatewayResponse=curl_exec( $ch );
            if(curl_error($ch)!="")
            {
                $this->error = "ERROR: ".curl_error($ch)."<br />\n";
                return false;
            }
            curl_close($ch);
            
            if(empty($this->_cookie))
            {
                @preg_match("/ASP.NET_SessionId[^;]*/s", $this->GatewayResponse, $match);
                $this->_cookie = $match[0];
            }

            @preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $this->GatewayResponse, $match);
            if($this->_useurl == HKC_USE_ABC)
                @preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $match[2], $match);
            $this->GatewayResponse =$match[2];

            return $this->GatewayResponse;
        }

        function write_file($file,$content,$mode="w")
        {
            $fp=@fopen($file,$mode);
            if(!is_resource($fp))
                return false;
            fwrite($fp,$content);
            fclose($fp);
            return true;
        }

        function download_file($pdfdata)
        {
            @header("Cache-Control: ");// leave blank to avoid IE errors
            @header("Pragma: ");// leave blank to avoid IE errors
            @header("Content-type: application/octet-stream");
            @header("Content-Disposition: attachment; filename=".$this->downloadFile);
            echo $pdfdata;
        }

    }
?>

usage

[php]

<?php
	
	require('html_to_pdf.inc.php');
	$htmltopdf = new HTML_TO_PDF();
	
	//$htmltopdf->useURL(HKC_USE_EASYW);  // default HKC_USE_ABC other HKC_USE_EASYW
	$htmltopdf->saveFile("abc.pdf");
	$htmltopdf->downloadFile("abc.pdf");
	$result = $htmltopdf->convertHTML("<b>MY TEST</b>");
	//$result = $htmltopdf->convertURL("http://test.ultraglobal.info/govazo/");
	if($result==false)
		echo $htmltopdf->error();
?>
[/php]
ossweb
Forum Newbie
Posts: 1
Joined: Sun Jun 15, 2008 1:44 am

Re: HTML 2 PDF

Post by ossweb »

You can use the html to pdf converter for .net html to pdf from http://www.winnovative-software.com to perform the html to pdf conversion with only 2 lines of code:

PdfConverter pdfConverter = new PdfConverter();
byte[] downloadBytes = pdfConverter.GetPdfFromUrlBytes(MyURL);
Post Reply