2013-04-28 7 views
5

Я пытаюсь преобразовать страницу PHP в PDF, используя dompdf, но я не уверен, что это лучший способ сделать это. Я написал мою страницу, как я хотел бы, чтобы это было представлено в стандарте HTML/PHP, и хотел бы, чтобы это будет отображаться как так, так же, как PDF:Преобразование страницы в PDF с использованием dompdf

Desired output

Мой PHP код ниже. Я считаю, что мне нужно поместить мой код в переменную $html, чтобы разобрать это на dompdf, но я немного новичок в PHP, поэтому я бы очень хотел помочь в том, что лучший способ достичь этого. Очевидно, что стилизация страницы происходит из внешних файлов CSS, поэтому я не уверен, что это проблема или нет?

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

Update

Основываясь на комментарий Brians в (спасибо!), Мой новый код выглядит, как показано ниже, но я теперь получаю только обычную пустую страницу при попытке просмотреть список наблюдения. Я протестировал его без материалов dompdf, и страница отображается отлично, показывая всю информацию, которую я хочу, чтобы она отображалась, и была представлена ​​правильно. Я также заменил файл LESS на CSS и удалил все 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");?> 

Кроме того, если это помогает, поворачиваясь на сообщения об ошибках получает мне следующее:

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

Попробуйте это: https://github.com/mreiferson/php-wkhtmltox – GBD

+1

Некоторые общие совет: если вы просто отправляете вывод в браузер, тогда не помешает запустить код и посмотреть, что произойдет. В этом случае вы получили бы ошибку, которую вы можете использовать, чтобы попытаться выяснить, чего вам не хватает в коде. Ошибки не всегда точно сообщают об источнике проблемы, но в большинстве случаев они дают вам информацию, необходимую для исправления любых синтаксических проблем. – BrianS

ответ

0

Я хотел бы предложить использовать WKHTMLTOPDF, который обеспечивает возможности довольно много

5

Есть несколько способов делать то, что вы хотите. Ваша текущая логика должна работать, хотя синтаксис не совсем прав. Если вы хотите придерживаться своей текущей структуры, вы можете вместо этого использовать буферизацию вывода.

Связанные таблицы стилей в порядке. JavaScript не является, dompdf не поддерживает клиентскую JS. Поэтому, если требуется таблица стилей LESS, вам придется преобразовать ее в стандартный CSS.

+0

Привет, спасибо за помощь! Я ценю помощь. Я внес изменения, которые вы предлагаете, но теперь я получаю чистую пустую страницу при попытке загрузить PDF-файл. Я обновил свое оригинальное сообщение с новым кодом на основе вашего комментария. –

+0

Редактировать: Также добавлены сообщения об ошибках сообщения в обновленное сообщение для большей ясности. –

+0

Большинство этих предупреждений/уведомлений не имеют ничего общего с dompdf. То, что вы видите, кажется, является отсутствующей переменной, из-за которой ваш запрос MySQL терпит неудачу. Всегда проверяйте состояние своего запроса. Например, '$ query = mysql_query (...); if ($ query) {...} else {...} '. – BrianS

2

Используйте следующий простой код.

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

Вы можете найти полное руководство к использованию DOMPDF для веб-страницы, конвертировать в PDF в PHP здесь - Convert HTML to PDF in PHP with Dompdf

Смежные вопросы