我有一个标记报告的html文档。我在这个页面上有一个按钮“Export as pdf”。但是我不知道如何将html导出为pdf ..那里有任何人推荐用于此类任务的工具..
编辑:更详细:
我有以下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的最佳方式是什么?我应该在同一个php文件中写一个fpdf函数,还是最好写一个单独的php文件来创建和显示pdf(这意味着我必须将所有相关数据发布到这个文件中)......
答案 0 :(得分:5)
使用FPDF库进行php check here
此文件转换的第一个和主要基础是FPDF库。 FPDF是一个纯PHP类,可以动态生成PDF文件。让我们用简单的Hello world显示开始PDF生成。
<?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)。
然后我们使用AddPage()为我们的pdf文档添加了一个页面。原点位于左上角,默认情况下,当前位置距离边界1厘米;可以使用SetMargins()函数更改边距。
要打印文本,我们需要先使用SetFont()选择一种字体。让我们选择Arial粗体16:
$pdf->SetFont('Arial','B',16);
我们使用Cell()函数输出文本。单元格是一个矩形区域,可能是框架,包含一些文本。它在当前位置输出。我们指定其尺寸,文本(居中或对齐),是否应绘制边框,以及当前位置在其后移动的位置(向下,向下或向下一行的开头)。要添加框架,我们会这样做:
$pdf->Cell(40,10,'Hello World !',1);
最后,关闭文档并使用Output()将其发送到浏览器。我们可以通过传递所需的文件名将其保存在文件中。
答案 1 :(得分:1)
我发现这个软件非常有用:http://code.google.com/p/wkhtmltopdf/
确实你必须从你的代码中执行exec(),但它工作得很好,并使用webkit作为后端引擎(允许javascript,以及许多其他功能来自定义pdf创建),节省了很多代码。
希望它有所帮助,我们在这里使用它,它就像一个魅力。
编辑:尝试静态二进制文件。解开并准备好去:)
答案 2 :(得分:1)
您也可以使用在线工具 Pdfcrowd API
易于集成,并提供免费版本。你可以检查一下 PDFCrowd Official Site
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;
答案 3 :(得分:0)
另一种更简单的方法是使用HTML2FPDF。 HTML2FPDF是一个PHP类库,它使用FPDF类库将HTML文件转换为PDF文件。该库由三个类组成,即PDF,HTML2FPDF和FPDF(修改后的FPDF类)。 PDF类扩展了扩展FPDF类的HTML2FPD类。
现在让我们看看,如何使用HTML2FPDF库将示例html页面转换为PDF文件。 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类的html2fpdf.php文件,并使用构造函数HTML2FPDF()创建一个对象。然后使用AddPage()函数将新页面添加到pdf文档中。使用文件函数从sample.html文件中读取html内容。然后使用WriteHTML()函数将html内容写入pdf格式。要查看html文件,请单击此处并查看生成的pdf,单击此处。上面的示例代码包含示例html文件和图像以及html2fpdf类库,可以在这里下载。
HTML2FPDF类库将与XHTML 1.0配合使用。此类也不支持HTML提供的所有功能。要了解支持的HTML标记和其他功能,请参阅http://html2fpdf.sourceforge.net。
我建议你使用它,因为它更容易和友好。