Ankündigung

Einklappen
Keine Ankündigung bisher.

html2ps: url als pdf rendern und datei speichern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • html2ps: url als pdf rendern und datei speichern

    Hallo,

    ich benutze html2ps html2ps and html2pdf - Convert HTML to PostScript or PDF. Supports over 500 HTML and CSS tags and properties. um pdfs on the fly zu generieren. Mit untenstehemdem Code ist es mir möglich ein URL als PDF zu rendern und im Browser anzuzeigen. Hier funktionieren relative Pfade der CSS-Dateien und Bilder ohne Probleme. Nun würde ich dieses PDF aber lieber auf dem Server speichern. Weiß jemand wie ich untenstehenden Code dahingehend erweitern muss, ich war bisher ohne Erfolg.

    Vielen Dank



    C O D E
    PHP-Code:
    <?php

    $url2render
    =$_GET['url2render']; // URL OF PAGE TO RENDER
    $pName=$_GET['pName']; // Name of PDF




    require_once(dirname(__FILE__).'/../config.inc.php');
    require_once(
    HTML2PS_DIR.'pipeline.factory.class.php');
    parse_config_file(HTML2PS_DIR.'html2ps.config');

    global 
    $g_config;
    $g_config = array(
                      
    'cssmedia'     => 'screen',
                      
    'renderimages' => true,
                      
    'renderforms'  => false,
                      
    'renderlinks'  => true,
                      
    'mode'         => 'html',
                      
    'debugbox'     => false,
                      
    'draw_page_border' => false
                      
    );

    $media Media::predefined('A4');
    $media->set_landscape(false);
    $media->set_margins(array('left'   => 0,
                              
    'right'  => 0,
                              
    'top'    => 5,
                              
    'bottom' => 5));
    $media->set_pixels(1024);

    global 
    $g_px_scale;
    $g_px_scale mm2pt($media->width() - $media->margins['left'] - $media->margins['right']) / $media->pixels;

    global 
    $g_pt_scale;
    $g_pt_scale $g_px_scale 1.43

    $pipeline PipelineFactory::create_default_pipeline("",$pName);
    $pipeline->configure($g_config);
    $pipeline->process($url2render$media); 

    ?>

  • #2
    Pack den Code bitte ma ins [PHP] Tag damit das ganze etwas übersichtlicher wird

    Kommentar


    • #3
      Zitat von sharp Beitrag anzeigen
      Pack den Code bitte ma ins [PHP] Tag damit das ganze etwas übersichtlicher wird
      stimmt ist viel übersichtlicher...

      Kommentar


      • #4
        Ich würde mal im Support-Forum zum Produkt nachfragen.

        Kommentar


        • #5
          Kannst du ma bitte per var_dump() den Inhalt von $pipeline ausgeben lassen und hier Posten vllt ist das da schon irgendwo drin ansonsten wie David schon sagt in deren Forum sich schlau machen.
          PHP-Code:
          $pipeline->process($url2render$media); 
          echo 
          "<pre>";
          var_dump($pipeline);
          echo 
          "</pre>"
          </span></span>

          Kommentar


          • #6
            Code:
            object(Pipeline)#177 (20) {
              ["fetchers"]=>
              array(1) {
                [0]=>
                object(FetcherUrl)#174 (14) {
                  ["_connections"]=>
                  array(0) {
                  }
                  ["protocol"]=>
                  NULL
                  ["host"]=>
                  NULL
                  ["port"]=>
                  int(80)
                  ["path"]=>
                  NULL
                  ["url"]=>
                  NULL
                  ["headers"]=>
                  NULL
                  ["content"]=>
                  NULL
                  ["code"]=>
                  NULL
                  ["redirects"]=>
                  int(0)
                  ["user"]=>
                  NULL
                  ["pass"]=>
                  NULL
                  ["error_message"]=>
                  string(0) ""
                  ["user_agent"]=>
                  string(77) "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7) Gecko/20040803 Firefox/0.9.3"
                }
              }
              ["data_filters"]=>
              array(3) {
                [0]=>
                object(DataFilterDoctype)#168 (0) {
                }
                [1]=>
                object(DataFilterUTF8)#181 (1) {
                  ["encoding"]=>
                  string(0) ""
                }
                [2]=>
                object(DataFilterHTML2XHTML)#182 (0) {
                }
              }
              ["error_message"]=>
              NULL
              ["parser"]=>
              object(ParserXHTML)#183 (0) {
              }
              ["pre_tree_filters"]=>
              array(0) {
              }
              ["layout_engine"]=>
              object(LayoutEngineDefault)#184 (0) {
              }
              ["post_tree_filters"]=>
              array(0) {
              }
              ["output_driver"]=>
              object(OutputDriverFPDF)#185 (23) {
                ["pdf"]=>
                NULL
                ["locallinks"]=>
                NULL
                ["cx"]=>
                NULL
                ["cy"]=>
                NULL
                ["pdf_version"]=>
                string(3) "1.3"
                ["media"]=>
                NULL
                ["bottom"]=>
                NULL
                ["left"]=>
                NULL
                ["width"]=>
                NULL
                ["height"]=>
                NULL
                ["_watermark"]=>
                NULL
                ["offset"]=>
                NULL
                ["expected_pages"]=>
                NULL
                ["current_page"]=>
                NULL
                ["filename"]=>
                string(95) "/srv/www/vhosts/evolution-luftwerbung.de/httpdocs/a/plugins/html2pdf/public_html/temp/PS_eOmtRw"
                ["debug_boxes"]=>
                bool(false)
                ["show_page_border"]=>
                bool(false)
                ["error_message"]=>
                NULL
                ["_footnote_area_height"]=>
                int(0)
                ["_footnote_count"]=>
                int(0)
                ["_page_height"]=>
                NULL
                ["_postponed"]=>
                array(0) {
                }
                ["anchors"]=>
                array(0) {
                }
              }
              ["output_filters"]=>
              array(0) {
              }
              ["destination"]=>
              object(DestinationDownload)#186 (1) {
                ["filename"]=>
                NULL
              }
              ["_base_url"]=>
              array(1) {
                [0]=>
                string(0) ""
              }
              ["_page_at_rules"]=>
              array(5) {
                [0]=>
                array(0) {
                }
                [1]=>
                array(0) {
                }
                [2]=>
                array(0) {
                }
                [3]=>
                array(0) {
                }
                [4]=>
                array(0) {
                }
              }
              ["_counters"]=>
              array(0) {
              }
              ["_footnotes"]=>
              array(0) {
              }
              ["_cssState"]=>
              NULL
              ["_css"]=>
              array(0) {
              }
              ["_defaultCSS"]=>
              NULL
              ["_dispatcher"]=>
              object(Dispatcher)#176 (1) {
                ["_callbacks"]=>
                array(10) {
                  ["before-page-heights"]=>
                  array(0) {
                  }
                  ["before-page"]=>
                  array(0) {
                  }
                  ["after-page"]=>
                  array(0) {
                  }
                  ["before-batch-item"]=>
                  array(0) {
                  }
                  ["after-batch-item"]=>
                  array(0) {
                  }
                  ["after-parse"]=>
                  array(0) {
                  }
                  ["before-document"]=>
                  array(0) {
                  }
                  ["after-document"]=>
                  array(0) {
                  }
                  ["before-batch"]=>
                  array(0) {
                  }
                  ["after-batch"]=>
                  array(0) {
                  }
                }
              }
              ["_current_page_name"]=>
              NULL
              ["_page_break_strategy"]=>
              object(StrategyPageBreakSmart)#187 (0) {
              }
            }

            Kommentar


            • #7
              PHP-Code:
              <?php

              /**
               * Thanks for JensE for providing the code of fetcher class
               */

              require_once(dirname(__FILE__).'/../config.inc.php');
              require_once(
              HTML2PS_DIR.'pipeline.factory.class.php');

              error_reporting(E_ALL);
              ini_set("display_errors","1");
              @
              set_time_limit(10000);
              parse_config_file(HTML2PS_DIR.'html2ps.config');

              /**
               * Handles the saving generated PDF to user-defined output file on server
               */
              class MyDestinationFile extends Destination {
                
              /**
                 * @var String result file name / path
                 * @access private
                 */
                
              var $_dest_filename;

                function 
              MyDestinationFile($dest_filename) {
                  
              $this->_dest_filename $dest_filename;
                }

                function 
              process($tmp_filename$content_type) {
                  
              copy($tmp_filename$this->_dest_filename);
                }
              }

              class 
              MyFetcherMemory extends Fetcher {
                var 
              $base_path;
                var 
              $content;

                function 
              MyFetcherMemory($content$base_path) {
                  
              $this->content   $content;
                  
              $this->base_path $base_path;
                }

                function 
              get_data($url) {
                  if (!
              $url) {
                    return new 
              FetchedDataURL($this->content, array(), "");
                  } else {
                    
              // remove the "file:///" protocol
                    
              if (substr($url,0,8)=='file:///') {
                      
              $url=substr($url,8);
                      
              // remove the additional '/' that is currently inserted by utils_url.php
                      
              if (PHP_OS == "WINNT"$url=substr($url,1);
                    }
                    return new 
              FetchedDataURL(@file_get_contents($url), array(), "");
                  }
                }

                function 
              get_base_url() {
                  return 
              'file:///'.$this->base_path.'/dummy.html';
                }
              }

              /**
               * Runs the HTML->PDF conversion with default settings
               *
               * Warning: if you have any files (like CSS stylesheets and/or images referenced by this file,
               * use absolute links (like http://my.host/image.gif).
               *
               * @param $path_to_html String HTML code to be converted
               * @param $path_to_pdf  String path to file to save generated PDF to.
               * @param $base_path    String base path to use when resolving relative links in HTML code.
               */
              function convert_to_pdf($html$path_to_pdf$base_path='http://www.google.de') {
                
              $pipeline PipelineFactory::create_default_pipeline(''// Attempt to auto-detect encoding
                                                                     
              '');

                
              // Override HTML source 
                // @TODO: default http fetcher will return null on incorrect images 
                // Bug submitted by 'imatronix' (tufat.com forum).
                
              $pipeline->fetchers[] = new MyFetcherMemory($html$base_path);

                
              // Override destination to local file
                
              $pipeline->destination = new MyDestinationFile($path_to_pdf);

                
              $baseurl '';
                
              $media =& Media::predefined('A4');
                
              $media->set_landscape(false);
                
              $media->set_margins(array('left'   => 0,
                                          
              'right'  => 0,
                                          
              'top'    => 0,
                                          
              'bottom' => 0));
                
              $media->set_pixels(1024); 

                global 
              $g_config;
                
              $g_config = array(
                                  
              'cssmedia'     => 'screen',
                                  
              'scalepoints'  => '1',
                                  
              'renderimages' => true,
                                  
              'renderlinks'  => true,
                                  
              'renderfields' => true,
                                  
              'renderforms'  => false,
                                  
              'mode'         => 'html',
                                  
              'encoding'     => '',
                                  
              'debugbox'     => false,
                                  
              'pdfversion'    => '1.4',
                                  
              'draw_page_border' => false
                                  
              );

                
              $pipeline->configure($g_config);
                
              $pipeline->process_batch(array($baseurl), $media);
              }

              convert_to_pdf(file_get_contents('ausgangsDatei.php'), 'ausgabe.pdf');

              ?>
              Mit diesem Code ist es mir möglich ein URL als PDF zu rendern und als Datei auf dem Server zu speichern ABER hier gibt es Probleme mit den relativen Pfaden von Bildern + CSS, aus diesem Grund würde ich gerne das PDF speichern dass ich mit dem als erstes geposteten Code erzeugen kann.

              Kommentar


              • #8
                Versuch ma den Parameter $base_path in die Url zuändern von wo du die Daten herbeiziehst
                PHP-Code:
                function convert_to_pdf($html$path_to_pdf$base_path='>>HIER DIE ZIEL URL<<') { 
                Und noch ma zum "altem" Code versuch doch ma $pipeline["fetchers"]["output_driver"]["filename"] weg zuspeichern da es mir so scheint als wenn der Script die Datei tempörar hinterlegt:
                "
                /srv/www/vhosts/evolution-luftwerbung.de/httpdocs/a/plugins/html2pdf/public_html/temp/PS_eOmtRw"

                Kommentar


                • #9
                  Vielen Dank schobnmal für die Vorschläge.

                  Also obwohl bei $base_path ja steht dass diese variable dazu dient relative pfade aufzulösen funktioniert das weder mit "http://www.meineDomain.de"; "http://www.meineDomain.de/";"http://www.meineDomain.de/ordnerDerZuRenderndenDatei";

                  @param $base_path String base path to use when resolving relative links in HTML code.


                  Werd jetzt mal noch $pipeline["fetchers"]["output_driver"]["filename"] im alten code checken.

                  Kommentar


                  • #10
                    Hallihallo.

                    Ich bin über Onkel Google auf dieses Thema gestoßen, und ich habe ein ähnliches Problem.
                    Ich möchte eine Seite als PDF speichern, jedoch funktioniert der erste Code bei mir gar nicht, also habe ich erstmal den zweiten ausprobiert. Der funktioniert auch soweit ganz gut, nur habe ich ein Problem: Die zu rendernde Page ist durch einen Login geschützt (inkl. Session-ID). Nun macht mir das Script immer ein PDF mit der entsprechenden Login-Seite als Inhalt. Wie bekomme ich das Script durch diesen Login geschleust?
                    Hat da jemand eine Idee?

                    Kommentar


                    • #11
                      Soweit ich weiss kommst du um einen Login der mit SESSION_VARIABLEN geschützt ist nur dann herum wenn du die zu rendernde datei von deinem Server aus mit einem relativen pfad angibst.

                      $url2render="../meinOrdner/meineDatei.php"; <- hier bleiben deine session variablen erhalten


                      wenn du dagegegen einen absoluten pfad angibst
                      $url2render="http://deinserver.de/deineDatei.php" //<- hier kommt der aufruf ja von "aussen" und somit hast du keinen Zugriff mehr auf deine Session variablen und deshalb wird dein Login Screen gerendert

                      Kommentar


                      • #12
                        Danke für die fixe Antwort.

                        Leider sind die Pfade bereits relativ angegeben. Allerdings arbeite ich mit includes, vielleicht liegt es daran?
                        ( convert_to_pdf(file_get_contents('index.php?p=viewstat&id='.$ID), 'ausgabe.pdf'); )

                        Hmmm... ich habe schon versucht ein "Schlupfloch" zu bauen, indem ich die Nachfrage des Logins einfach übergehe, wenn das ausgewählte Format "pdf" ist (man kann auf der Seite auswählen, ob man die Datei als html, csv oder pdf haben möchte), aber ich bleibe dennoch jedesmal am Login hängen. Und eine PDF vom Login kann ich nicht gebrauchen *gg*

                        Kommentar


                        • #13
                          Was ist denn die Bedingung dafür dass die sEite zum login springt.

                          Vermutlich sowas wie:
                          if(empty($_SESSION['id'])){
                          header('Location: login.php'); // REDIRECT ZUR ANMELDUNG
                          }

                          dass wäre interessant zu wissen.

                          Kommentar


                          • #14
                            die ist eigentlich relativ simpel:

                            am anfang der seite werden die sessions abgefragt und dadurch die variable logged_in auf false oder true gesetzt.


                            später folgt dann:

                            if(!$logged_in){
                            //Falls der Benutzer nicht eingeloggt ist, soll das Login-Formular angezeigt werden
                            include('login_form.php');

                            }elseif($_POST['format']!='pdf'){


                            switch($_GET['p'])
                            {
                            case 'viewstat':{
                            //Zeigt das ConfigMenu sowie die Statistik an
                            include('view_stat.php');
                            }break;
                            case 'logout':{
                            //den Benutzer ausloggen
                            unset($_SESSION['username']);
                            unset($_SESSIOn['password']);
                            Header('Location: index.php');
                            }break;
                            default:{
                            //Listet die Stats auf
                            include('list_stats.php');
                            }break;
                            }
                            }elseif($_GET['p']='viewstat'){
                            include('html2pdf.php');
                            $logged_in = true;
                            include('view_stat.php');
                            convert_to_pdf(file_get_contents('index.php?p=view stat&id='.$ID), 'ausgabe.pdf');
                            }


                            wobei ich die abfrage oben bereits auch schon umgebaut habe, indem ich das logged_in nur auf false setze, falls das format !=pdf ist...
                            die seite selber heißt index.php, dh. beim convert_to_pdf rufe ich sie selbst nocheinmal auf. nach meinem verständnis müsste das in einer endlosschleife enden, aber es funktioniert ja soweit (bis auf die tatsache, dass in dem pdf nicht das richtige drin ist =/ )

                            Kommentar

                            Lädt...
                            X