2013-04-28 18 views
5

Próbuję przekonwertować stronę PHP do formatu PDF przy pomocy dompdf, ale nie jestem pewien, jak najlepiej to zrobić. Ja napisałem moją stronę, jak chciałbym to być przedstawione w standardzie HTML/PHP, a chcieliby to być wyświetlane jak tak, to tylko jako PDF:Konwersja strony do formatu PDF przy użyciu dompdf

Desired output

Mój kod PHP jest poniżej. Wierzę, że muszę umieścić mój kod w zmiennej $html, aby parsować to w dompdf, ale jestem trochę początkującym PHP, więc doceniłbym jakąś pomoc, jak najlepiej to osiągnąć. Oczywiście, styl strony jest przenoszony z zewnętrznych plików CSS, więc nie jestem pewien, czy to problem, czy nie?

<?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");?> 

Aktualizacja

podstawie komentarzu Brians za (dziękuję!), Mój nowy kod wygląda jak poniżej, ale mam teraz coraz to zwykły pustą stronę podczas próby wyświetlenia listy obserwowanych. Przetestowałem to bez plików dompdf, a strona wygląda idealnie, pokazując wszystkie informacje, które chcę pokazać i poprawnie przedstawione. Wymieniłem też plik LESS na CSS i usunąłem wszystkie 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");?> 

Ponadto, jeśli to pomoże, włączając raportowanie błędów dostaje mi następujące:

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

Spróbuj tego: https://github.com/mreiferson/php-wkhtmltox – GBD

+1

Część ogólna rada: jeśli wysyłasz dane wyjściowe do przeglądarki, to nie zaszkodzi uruchomić kod i zobaczyć, co się stanie. W takim przypadku pojawi się błąd, którego możesz użyć do sprawdzenia, czego brakuje w Twoim kodzie. Błędy nie zawsze dokładnie informują o źródle problemu, ale w większości przypadków zawierają informacje potrzebne do rozwiązania problemów związanych z składnią. – BrianS

Odpowiedz

5

Istnieje wiele sposobów robienia tego, co chcesz. Twoja obecna logika powinna zadziałać, chociaż składnia nie jest właściwa. Jeśli jednak chcesz zachować obecną strukturę, możesz zamiast tego użyć buforowania wyjściowego.

<?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"); 
?> 

Połączone arkusze stylów są w porządku. JavaScript nie jest, dompdf nie obsługuje JS po stronie klienta. Więc jeśli Twój arkusz stylów LESS jest wymagany, musisz go przekonwertować na standardowy CSS.

+0

Cześć, dziękuję za pomoc! Doceniam pomoc. Wprowadziłem zmiany, które sugerujesz, jednak teraz próbuję pobrać plik PDF. Zaktualizowałem mój oryginalny wpis w/nowym kodzie, na podstawie Twojego komentarza. –

+0

Edytuj: Dodano również komunikaty o błędach do zaktualizowanego wpisu w celu uzyskania większej przejrzystości. –

+0

Większość tych ostrzeżeń/uwag nie ma nic wspólnego z dompdf. To, co widzisz, wydaje się być brakującą zmienną powodującą niepowodzenie zapytania MySQL. Zawsze sprawdzaj stan swojego zapytania. Na przykład: '$ query = mysql_query (...); if ($ query) {...} else {...} '. – BrianS

2

Użyj poniższego prostego kodu.

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)); 

można znaleźć kompletny przewodnik do korzystania Dompdf do konwersji strony WWW do pliku PDF w PHP stąd - Convert HTML to PDF in PHP with Dompdf

Powiązane problemy