2013-04-28 15 views
5

Sto provando a convertire una pagina PHP in PDF usando dompdf, ma non sono sicuro del modo migliore per farlo. Ho scritto la mia pagina come mi piacerebbe che fosse presentato in HTML standard/PHP, e vorrei per essere visualizzato in questo modo, proprio come un PDF:Converti la pagina in PDF usando dompdf

Desired output

Il mio codice PHP è al di sotto. Credo di aver bisogno di inserire il mio codice nella variabile $html per analizzarlo in dompdf, ma sono un po 'un principiante di PHP, quindi apprezzerei un po' di aiuto su quale sia il modo migliore per farlo. Ovviamente, lo stile della pagina viene portato da file CSS esterni, quindi non sono sicuro che sia un problema o no?

<?php 
    include("checklog.php"); 
    require_once("watchlist-controller.php"); 
    require_once("dompdf/dompdf_config.inc.php"); 
    $html = 
?> 
<!DOCTYPE html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <link rel="shortcut icon" href="img/fav.ico"> 
     <link rel="apple-touch-icon" href="img/apple-touch-icon.png"> 
     <title>Screening - Your ticket to your movies - <?php echo $watchlist_name; ?></title> 
     <meta name="description" content="Screening is a brand new take on the traditional movie database, fusing social networking and multimedia to provide a clear, concise experience allowing you to share your favourite movies, and discover new classics."> 
     <meta name="keywords" content="Movies, Films, Screening, Discover, Watch, Share, experience, database, movie database, film database, share film, share films, discover film, discover films, share movie, share movies, discover movie, discover movies"> 

     <!-- Bootstrap --> 
     <link href="css/bootstrap.css" rel="stylesheet" media="screen"> 
     <link href="css/bootstrap-responsive.css" rel="stylesheet"> 
     <link href="css/custom-bootstrap.css" rel="stylesheet"> 
     <link rel="stylesheet" href="fonts.css" type="text/css" /> 
     <link rel="stylesheet/less" type="text/css" href="css/stylesheet.less" /> 
     <script src="js/less-1.3.3.min.js" type="text/javascript"></script> 
     <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script> 
     <script src="js/bootstrap.min.js"></script> 
    </head> 

    <body> 
     <div class="container"><?php 
      require_once ("header.php");?> 
      <div id="main" class="well main-content"> 
       <p class="page-title"><?php echo $watchlist_name; ?></p> 
       <div class="row-fluid"> 
        <section class="span12 watchlist-holder film-list"><?php 
         if (count($films) == 0) {?> 
          <div class="alert alert-info">This Watchlist is empty! Why not visit a movie page to add something to it?</div><?php 
         } else {?> 
          <ul class="unstyled"><?php 
           foreach($films as $key => $film_item) { 
            include("watchlist-film-controller.php");?> 
            <li class="well list-item clearfix"> 
             <div class="row-fluid"> 
              <a href="movie.php?id=<?php echo $rt_id; ?>" class="span1 pull-left" title="<?php echo $title; ?>"><img src="<?php echo $poster_thumb; ?>" alt="<?php echo $title; ?> poster" title="<?php echo $title; ?> poster" /></a> 

              <div class="span11 movie-info"> 
               <p class="search-title"><a href="movie.php?id=<?php echo $film_item['film_id']; ?>" title="<?php echo $title; ?> (<?php echo $year; ?>)"><?php echo $title; ?></a> <small>(<?php echo $year; ?>)</small></p><?php 

               if ($critics_consensus == "") {?> 
                <p class="watchlist-synopsis">No overview available</p><?php 
               } else {?> 
                <p class="watchlist-synopsis"><?php echo $critics_consensus; ?></p><?php 
               }?> 
              </div> 
             </div> 
            </li><?php 
           }?> 
          </ul><?php 
         }?> 
        </section> 
       </div> 
      </div><?php 
      include 'footer.html'; ?> 
     </div> 
    </body> 
</html><?php 
$dompdf = new DOMPDF(); 
$dompdf->load_html($html); 
$dompdf->render(); 
$dompdf->stream("sample.pdf");?> 

Aggiornamento

Basato sul commento di BrianS (grazie!), Il mio nuovo codice è simile di seguito, però ora sto ricevendo solo una pagina vuota normale quando si cerca di visualizzare l'Elenco dei preferiti. L'ho provato senza la roba di dompdf e la pagina appare perfettamente, mostrando tutte le informazioni che voglio mostrare e presentate correttamente. Ho anche sostituito il file LESS con CSS e rimosso tutto il JS.

<?php 
    include("checklog.php"); 
    require_once("watchlist-controller.php"); 
    require_once("dompdf/dompdf_config.inc.php"); 
    ob_start(); 
?> 
<!DOCTYPE html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <link rel="shortcut icon" href="img/fav.ico"> 
     <link rel="apple-touch-icon" href="img/apple-touch-icon.png"> 
     <title>Screening - Your ticket to your movies - <?php echo $watchlist_name; ?></title> 
     <meta name="description" content="Screening is a brand new take on the traditional movie database, fusing social networking and multimedia to provide a clear, concise experience allowing you to share your favourite movies, and discover new classics."> 
     <meta name="keywords" content="Movies, Films, Screening, Discover, Watch, Share, experience, database, movie database, film database, share film, share films, discover film, discover films, share movie, share movies, discover movie, discover movies"> 

     <!-- Bootstrap --> 
     <link href="css/bootstrap.css" rel="stylesheet" media="screen"> 
     <link href="css/bootstrap-responsive.css" rel="stylesheet"> 
     <link href="css/custom-bootstrap.css" rel="stylesheet"> 
     <link rel="stylesheet" href="fonts.css" type="text/css" /> 
     <link href="css/stylesheet.css" rel="stylesheet"> 
    </head> 

    <body> 
     <div class="container"> 
      <header> 
       <div class="navbar navbar-inverse"> 
        <div class="navbar-inner"> 
         <div class="container"> 
          <a href="index.php" title="Screening"><img src="img/blue_logo.png" class="pull-left" title="Screening - Your ticket to your movies" alt="Screening - Your ticket to your movies" /></a> 
          <a class="brand" href="index.php">Screening</a> 
         </div> 
        </div> 
       </div> 
      </header> 
      <div id="main" class="well main-content"> 
       <p class="page-title">"<?php echo $watchlist_name; ?>" Watchlist by <?php echo $first_name; ?> <?php echo $last_name; ?></p> 
       <div class="row-fluid"> 
        <section class="span12 watchlist-holder film-list"> 
         <ul class="unstyled"><?php 
          foreach($films as $key => $film_item) { 
           include("watchlist-film-controller.php");?> 
           <li class="well list-item clearfix"> 
            <div class="row-fluid"> 
             <a href="movie.php?id=<?php echo $rt_id; ?>" class="span1 pull-left" title="<?php echo $title; ?>"><img src="<?php echo $poster_thumb; ?>" alt="<?php echo $title; ?> poster" title="<?php echo $title; ?> poster" /></a> 

             <div class="span11 movie-info"> 
              <p class="search-title"><a href="movie.php?id=<?php echo $film_item['film_id']; ?>" title="<?php echo $title; ?> (<?php echo $year; ?>)"><?php echo $title; ?></a> <small>(<?php echo $year; ?>)</small></p><?php 
              if ($critics_consensus == "") {?> 
               <p class="watchlist-synopsis">No overview available</p><?php 
              } else {?> 
               <p class="watchlist-synopsis"><?php echo $critics_consensus; ?></p><?php 
              }?> 
             </div> 
            </div> 
           </li><?php 
          }?> 
         </ul> 
        </section> 
       </div> 
       <p>This Watchlist was generated by <span class="bold">Screening</span>.</p> 
      </div> 
     </div> 
    </body> 
</html><?php 
$html = ob_get_clean(); 
$dompdf = new DOMPDF(); 
$dompdf->load_html($html); 
$dompdf->render(); 
$dompdf->stream("watchlist.pdf");?> 

Inoltre, se aiuta, accendendo la segnalazione degli errori di me ottiene il seguente:

Notice: Undefined variable: submit in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 20 
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 107 
Notice: Undefined index: name in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 111 
Notice: Undefined index: category in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 112 
Notice: Undefined index: description in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 113 
Notice: Undefined index: hash in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 114 
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\watchlist-controller.php on line 119 
Warning: require_once(//ICS-FILESHARE/WWW/newmedia.leeds.ac.uk/ug10/cs10aer/screening/dompdf/lib/php-font-lib/classes/font.cls.php): failed to open stream: No such file or directory in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\dompdf\dompdf_config.inc.php on line 335 
Fatal error: require_once(): Failed opening required '//ICS-FILESHARE/WWW/newmedia.leeds.ac.uk/ug10/cs10aer/screening/dompdf/lib/php-font-lib/classes/font.cls.php' (include_path='.;C:\php\pear') in \\ICS-FILESHARE\WWW\newmedia.leeds.ac.uk\ug10\cs10aer\screening\dompdf\dompdf_config.inc.php on line 335 
+0

Prova questo: https://github.com/mreiferson/php-wkhtmltox – GBD

+1

Alcuni generale consiglio: se si sta inviando l'output al browser, non fa male eseguire il codice e vedere cosa succede. In questo caso avresti ricevuto un errore, che puoi usare per cercare di capire cosa ti manca nel tuo codice. Gli errori non sempre riportano accuratamente l'origine del problema, ma nella maggior parte dei casi forniscono le informazioni necessarie per correggere eventuali problemi di sintassi. – BrianS

risposta

0

Io suggerirei di usare WKHTMLTOPDF che fornisce opzioni di un bel po '

5

Ci sono un certo numero di modi di fare ciò che vuoi La tua logica attuale dovrebbe funzionare, sebbene la sintassi non sia corretta. Tuttavia, se si desidera mantenere la struttura attuale, è possibile utilizzare il buffering di output.

<?php 
include("checklog.php"); 
require_once("watchlist-controller.php"); 
require_once("dompdf/dompdf_config.inc.php"); 
ob_start(); 
?> 

<html>...</html> 

<?php 
$html = ob_get_clean(); 
$dompdf = new DOMPDF(); 
$dompdf->load_html($html); 
$dompdf->render(); 
$dompdf->stream("sample.pdf"); 
?> 

I fogli di stile collegati vanno bene. JavaScript non lo è, dompdf non supporta JS lato client. Quindi, se è necessario il tuo foglio di stile MENO, dovrai convertirlo in CSS standard.

+0

Ciao, grazie per il tuo aiuto! Apprezzo l'aiuto. Ho apportato le modifiche che suggerisci, tuttavia ora sto ottenendo una semplice pagina vuota quando provo a scaricare il PDF. Ho aggiornato il mio post originale con il nuovo codice, in base al tuo commento. –

+0

Modifica: aggiunto anche messaggi di segnalazione degli errori al post aggiornato per maggiore chiarezza. –

+0

La maggior parte di questi avvisi/notifiche non ha nulla a che fare con dompdf. Quello che vedi sembra essere una variabile mancante che causa il fallimento della tua query MySQL. Controlla sempre lo stato della tua richiesta. Ad esempio, '$ query = mysql_query (...); if ($ query) {...} else {...} '. – BrianS

2

Utilizzare il seguente codice semplice.

require_once 'dompdf/autoload.inc.php'; 
use Dompdf\Dompdf; 
$dompdf = new Dompdf(); 

$html = 'Insert full HTML content'; 
$dompdf->loadHtml($html); 
$dompdf->setPaper('A4', 'landscape'); 
$dompdf->render(); 
$dompdf->stream("codexworld",array("Attachment"=>0)); 

È possibile trovare la guida completa all'utilizzo dompdf per la pagina web convertire in PDF in PHP da qui - Convert HTML to PDF in PHP with Dompdf

Problemi correlati