Convertir la page en format PDF à l'aide de dompdf
Je suis en train de convertir une page PHP au format PDF à l'aide de dompdf, mais je ne suis pas sûr de la meilleure façon de le faire. J'ai écrit ma page comment je l'aime à être présentés dans la norme HTML/PHP, et souhaitez qu'il s'affiche comme ça, juste comme un PDF:
Mon code PHP ci-dessous. Je crois que j'ai besoin de mettre mon code dans le $html
variable à analyser que dans dompdf, mais je suis un peu de PHP débutant, donc apprécierais un peu d'aide à ce que le meilleur moyen d'y parvenir est. Évidemment, le style de la page est amené à partir des fichiers CSS externes, donc je ne sais pas si c'est un problème ou pas?
<?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");?>
Mise à jour
Basé sur BrianS commentaire (merci!), mon nouveau code se présente comme ci-dessous, cependant, je suis maintenant juste une simple page blanche lorsque j'essaie de visualiser la liste de surveillance. Je l'ai testé sans le dompdf choses, et la page s'affiche parfaitement, montrant toutes les informations que je veux montrer, et présenté correctement. J'ai aussi remplacé le MOINS de fichiers avec CSS et supprimé tous les 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");?>
Aussi, si elle le permet, en tournant sur les rapports d'erreur me met le suivant:
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
Quelques conseils: si vous êtes juste de l'envoi de la sortie vers le navigateur, alors il ne fait pas de mal à exécuter le code pour voir ce qui se passe. Dans ce cas, vous avez eu une erreur, que vous pouvez utiliser pour essayer de comprendre ce qu'il vous manque dans votre code. Les erreurs ne sont pas toujours correctement le rapport sur la source du problème, mais dans la plupart des cas, ils vous donnent les informations dont vous avez besoin pour corriger tous les problèmes de syntaxe.
OriginalL'auteur Alex Ryans | 2013-04-28
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de façons de faire ce que vous voulez. Votre logique de travail, même si la syntaxe n'est pas tout à fait droit. Si vous voulez coller avec votre structure actuelle, cependant, vous pouvez utiliser le tampon de sortie à la place.
Lié feuilles de style sont très bien. Le JavaScript n'est pas, dompdf ne prend pas en charge côté client JS. Donc, si votre MOINS de la feuille de style est requis, vous devrez le convertir à la norme CSS.
Edit: ajout Également d'erreur, les messages du rapport à la mise à jour du post pour plus de clarté.
La plupart de ces mises en garde/avis n'ont rien à voir avec dompdf. Ce que vous voyez semble être une variable manquante à l'origine de votre requête MySQL à l'échec. Toujours vérifier le statut de votre requête. Par exemple,
$query = mysql_query(...); if ($query) {...} else {...}
.Pour info, vous voudrez peut-être arrêter à l'aide de l'extension MySQL depuis il est déconseillé. Sûr que c'est plus facile à apprendre (si pour aucune autre raison que le volume des exemples), et il sera autour pendant un moment, mais c'est une bonne idée pour apprendre à utiliser une bibliothèque qui ne sera pas aller loin. Si vous voulez coller avec une bibliothèque MySQL MySQLi est recommandé. Ou essayez de PDO, ce qui rend plus facile de travailler sur une variété de bases de données grâce à la standardisation de l'API.
Normalement, l'exécution se poursuit à travers les avis et les mises en garde, mais il y a une erreur fatale et c'est lié à dompdf. Le dernier message est un message d'erreur indiquant que php-police-lib est manquant. Si vous avez téléchargé dompdf à partir de github, vous aurez à télécharger le php-font-lib bibliothèque séparément.
OriginalL'auteur BrianS
Utiliser le code simple suivant.
Vous pouvez trouver le guide complet sur l'utilisation Dompdf pour convertir la page web en format PDF en PHP à partir d'ici - Convertir HTML en PDF en PHP avec Dompdf
OriginalL'auteur JoyGuru
Je conseille WKHTMLTOPDF qui fournit beaucoup d'options
OriginalL'auteur werd