Инструмент для экспорта html в формате pdf
У меня есть html-документ, который помещает отчет. У меня есть кнопка на этой странице "Экспорт в формате pdf". Однако я не уверен, как экспортировать html в pdf. Существуют ли там какие-либо инструменты, которые кто-либо рекомендует для такой задачи.
EDIT: Подробнее:
У меня есть следующий php:
<?php
function connect() {
$dbh = mysql_connect ("localhost", "user", "password") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db("PDS", $dbh);
return $dbh;
}
session_start();
if(isset($_SESSION['username'])){
if(isset($_POST['entryId'])){
//do something
$dbh = connect();
$ide = $_POST['entryId'];
$usertab = $_POST['usertable'];
$answertable = $usertab . "Answers";
$entrytable = $usertab . "Entries";
$query = mysql_query("SELECT e.date, q.questionNumber, q.question, q.sectionId, a.answer FROM $answertable a, Questions q, $entrytable e WHERE a.entryId = '$ide' AND a.questionId = q.questionId AND e.entryId = '$ide' ORDER BY q.questionNumber ASC;") or die("Error: " . mysql_error());
if($query){
//set variables
$sectionOne = array();
$sectionTwo = array();
$sectionThree = array();
$sectionFour = array();
$sectionFive = array();
while($row=mysql_fetch_assoc($query)){
$date = $row['date'];
$section = $row['sectionId'];
switch($section){
case '1':
$sectionOne[] = $row;
break;
case '2':
$sectionTwo[] = $row;
break;
case '3':
$sectionThree[] = $row;
break;
case '4':
$sectionFour[] = $row;
break;
case '5':
$sectionFive[] = $row;
break;
default:
break;
}
}
}else{
//error - sql failed
}
}
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src = "jQuery.js"></script>
<script>
$(document).ready(function(){
});
</script>
<title>Personal Diary System - Entry Report - <?php echo($date); ?></title>
</head>
<body>
<h1>Entry Report - <?php echo($date); ?></h1>
<div id = "buttons">
<a href = "http://dev.speechlink.co.uk">Export as PDF</a>
</div>
<h3>Biological Information</h3>
<?php
$i = 0;
foreach($sectionOne as &$value){
if($i == 1 || $i == 3){
$image = "assets/urine".$i.".png";
echo("<br/>");
echo($value['question']." <br/> "."<img src = \"$image\"/>");
echo("<br/>");
}else{
echo($value['question'].' : '.$value['answer']);
}
echo("<br/>");
$i++;
}
?>
<h3>Fatigue and Recovery</h3>
<?php
foreach($sectionTwo as &$value){
echo($value['question'].' : '.$value['answer']);
echo("<br/>");
}
?>
<h3>Illness and Injury</h3>
<?php
foreach($sectionThree as &$value){
echo($value['question'].' : '.$value['answer']);
echo("<br/>");
}
?>
<h3>Training Sessions</h3>
<?php
foreach($sectionFour as &$value){
echo($value['question'].' : '.$value['answer']);
echo("<br/>");
}
?>
<h3>General Feedback</h3>
<?php
if(count($sectionFive)>0){
foreach($sectionFive as &$value){
echo($value['question'].' : '.$value['answer']);
}
}else{
echo("User didn't leave any feedback");
}
echo("<br/>");
?>
</body>
</html>
<?php
}
?>
Отображается следующее:
Итак, если я использую fpdf, какой лучший способ экспортировать в качестве pdf? Должен ли я писать функцию fpdf в том же php файле или лучше написать отдельный файл php, который создает и отображает pdf (это означает, что мне нужно будет опубликовать все соответствующие данные в этот файл)...
Ответы
Ответ 1
Использовать библиотеку FPDF для php
проверьте здесь
Первой и основной базой для преобразования этого файла является библиотека FPDF. FPDF - это чистый класс PHP для генерации PDF файлов на лету. Давайте начнем создание PDF с помощью простого дисплея Hello World.
<?php
require('fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
Чтобы сгенерировать pdf файл, сначала нужно включить библиотечный файл fpdf.php. Затем нам нужно создать объект FPDF, используя конструктор по умолчанию FPDF(). Этот конструктор можно передать тремя значениями, а именно ориентацией страницы (портретной или альбомной), единиц измерения и размера страницы (A4, A5 и т.д.). По умолчанию страницы находятся в формате A4, а единица измерения - миллиметровая. Он мог быть явно указан с помощью:
$pdf=new FPDF('P','mm','A4');
Можно использовать ландшафт (L), другие форматы страниц (например, Letter и Legal) и единицы измерения (pt, cm, in).
Затем мы добавили страницу в наш pdf-документ с помощью AddPage(). Происхождение находится в верхнем левом углу, и текущая позиция по умолчанию помещается на расстоянии 1 см от границ; поля могут быть изменены с помощью функции SetMargins().
Чтобы напечатать текст, нам нужно сначала выбрать шрифт с помощью SetFont(). Выберем Arial жирным шрифтом 16:
$pdf->SetFont('Arial','B',16);
Мы используем функцию Cell() для вывода текста. Ячейка представляет собой прямоугольную область, возможно обрамленную, которая содержит некоторый текст. Он выводится в текущем положении. Мы указываем его размеры, текст (центрированный или выровненный), если границы должны быть нарисованы и где текущая позиция перемещается после нее (справа, внизу или в начале следующей строки). Чтобы добавить фрейм, мы сделаем следующее:
$pdf->Cell(40,10,'Hello World !',1);
Наконец, документ закрыт и отправлен в браузер с помощью Output(). Мы могли бы сохранить его в файле, передав нужное имя файла.
Ответ 2
Я нашел это программное обеспечение весьма полезным: http://code.google.com/p/wkhtmltopdf/
Это правда, что вам придется выполнить exec() из вашего кода, но он работает очень хорошо и использует webkit в качестве внутреннего сервера (позволяя javascript также и многие другие функции для настройки создания PDF файлов), сохраняя много кода.
Надеюсь, что это поможет, мы используем его здесь, и это работает как шарм.
EDIT: попробуйте статические двоичные файлы. untar и готов к работе:)
Ответ 3
Вы также можете использовать онлайн-инструмент Pdfcrowd API
Его легко интегрировать и обеспечивает многое в бесплатной версии. Вы можете проверить
Официальный сайт PDFCrowd
require 'pdfcrowd.php';
// create an API client instance
$client = new Pdfcrowd("username", "apikey");
// convert a web page and store the generated PDF into a variable
$pdf = $client->convertURI('http://www.google.com/');
//You can also convert raw HTML code, just use the convertHtml() method instead of convertURI()
$pdf = $client->convertHtml("<body>My HTML Layout</body>");
//Or use convertFile() to convert a local HTML file
$pdf = $client->convertFile("/path/to/MyLayout.html");
// set HTTP response headers
header("Content-Type: application/pdf");
header("Cache-Control: no-cache");
header("Accept-Ranges: none");
header("Content-Disposition: attachment; filename=\"google_com.pdf\"");
// send the generated PDF
echo $pdf;
Ответ 4
Еще один гораздо более простой способ - с HTML2FPDF.
HTML2FPDF - это библиотека классов PHP, которая использует библиотеку классов FPDF для преобразования файлов HTML в файлы PDF. Эта библиотека состоит из трех классов: PDF, HTML2FPDF и FPDF (модифицированный класс FPDF). Класс PDF расширяет класс HTML2FPDF, который расширяет класс FPDF.
Теперь посмотрим, как преобразовать образец html-страницы в файл PDF, используя библиотеку HTML2FPDF. На странице html содержится таблица, в которой перечислены несколько стран с соответствующими национальными флагами. Ниже приведен код для преобразования.
<?
require('html2fpdf.php');
$pdf=new HTML2FPDF();
$pdf->AddPage();
$fp = fopen("sample.html","r");
$strContent = fread($fp, filesize("sample.html"));
fclose($fp);
$pdf->WriteHTML($strContent);
$pdf->Output("sample.pdf");
echo "PDF file is generated successfully!";
?>
Во-первых, нам нужно включить файл html2fpdf.php, содержащий класс HTML2FPDF, и объект создается с помощью конструктора HTML2FPDF(). Затем в PDF-документ добавляется новая страница с помощью функции AddPage(). Содержимое html считывается из файла sample.html с использованием функций файла. Затем содержимое html записывается в формат pdf с использованием функции WriteHTML(). Чтобы просмотреть файл html, нажмите здесь и, чтобы просмотреть сгенерированный PDF файл, нажмите здесь. Вышеприведенный пример кода с образцом html файла и изображений и библиотеки классов html2fpdf можно загрузить здесь.
Библиотека классов HTML2FPDF будет лучше работать с XHTML 1.0. Также класс не поддерживает все функции, доступные в HTML. Чтобы узнать поддерживаемые теги HTML и другие функции, обратитесь http://html2fpdf.sourceforge.net.
Я рекомендую вам использовать это, поскольку он намного проще и дружелюбно.