【问题标题】:Basic table creation fpdf基本表创建 fpdf
【发布时间】:2013-05-23 02:59:58
【问题描述】:

我找不到一个像样的教程来使用 fpdf 制作表格并从 mysql 数据库中获取数据。我只想知道如何创建一个。我在网上尝试样本时遇到了很多错误。

例如,我有列、名字、中间名、姓氏、年龄和电子邮件。

如何使用 fpdf 创建表并回显数据库中的条目?

【问题讨论】:

    标签: php mysql fpdf


    【解决方案1】:

    阅读并关注 FPDF 网站上的 tutorial 可能是一个好的开始。

    假设您有一个表格(我们称之为people)并像这样采样数据

    CREATE TABLE People
        (id int, 
         first_name varchar(5), 
         middle_name varchar(4), 
         last_name varchar(5), 
         age int, 
         email varchar(15));
    
    INSERT INTO People
        (id, first_name, middle_name, last_name, age, email)
    VALUES
        (1, 'Jhon', NULL, 'Doe', 27, 'jhon@email.com'),
        (2, 'Mark', 'J', 'Lee', 35, 'mark@email.com'),
        (3, 'Helen', 'P', 'Smith', 30, 'helen@email.com');
    

    这是一个基本的 php 脚本,可以做你想做的事。 注意:为简洁起见,代码缺少任何错误处理。

    <?php
    require('fpdf.php');
    
    class People {
        public function all() {
            try {
                $db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', 'user', 'password');
                $query = $db->prepare("SELECT first_name, middle_name, last_name, age, email FROM people ");
                $query->execute();
                $people = $query->fetchAll(PDO::FETCH_ASSOC);
            } catch (PDOException $e) {
                //echo "Exeption: " .$e->getMessage();
                $result = false;
            }
            $query = null;
            $db = null;
            return $people;        
        }
    }
    
    class PeoplePDF extends FPDF {
        // Create basic table
        public function CreateTable($header, $data)
        {
            // Header
            $this->SetFillColor(0);
            $this->SetTextColor(255);
            $this->SetFont('','B');
            foreach ($header as $col) {
                //Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])
                $this->Cell($col[1], 10, $col[0], 1, 0, 'L', true);
            }
            $this->Ln();
            // Data
            $this->SetFillColor(255);
            $this->SetTextColor(0);
            $this->SetFont('');
            foreach ($data as $row)
            {
                $i = 0;
                foreach ($row as $field) {
                    $this->Cell($header[$i][1], 6, $field, 1, 0, 'L', true);
                    $i++;
                }
                $this->Ln();
            }
        }
    }
    
    // Column headings
    $header = array(
                 array('First Name',  30), 
                 array('Middle Name', 30), 
                 array('Last Name',   30),
                 array('Age',         12),
                 array('Email',       47)
              );
    // Get data
    $people = new People();
    $data = $people->all();
    
    $pdf = new PeoplePDF();
    $pdf->SetFont('Arial', '', 12);
    $pdf->AddPage();
    $pdf->CreateTable($header,$data);
    $pdf->Output();
    

    确保更改连接字符串

    $db = new PDO('mysql:host=localhost;dbname=test;charset=UTF-8', 'user', 'password');
                              ^^^^^^^^^        ^^^^                  ^^^^    ^^^^^^^^
    

    【讨论】:

    • tnx mate,最后一件事,如何在当前 People 表正下方的同一 fpdf 页面中添加辅助表?例如地址表。
    • @reggel 不客气。你这样做的方式完全相同。按照我的示例实现一个类Address 与检索数据的方法,修改PeoplePDF 类以适应用于生成地址表的新方法(例如CreateAddressTable),定义数组来保存新表的标题信息,最后使用这些新的方法。
    • 完美。我搜索这个脚本。需要带有 PDO 的 fpdf
    【解决方案2】:

    楼上的答案对你的问题的主要原因是好的,但我建议你采用TCPDF而不是fpdf,因为第一个比第二个快,如果你要创建一个非常大的文件(考虑到您将从数据库中找到的行数)TCPDF 性能非常好。 还可以考虑使用Zend_PDF 模块,它在第一次影响时比其他模块更难使用,但它是目前最快的库。我的意见是 tha ,如果你是我提到的情况,你可以创建一个更大的类(在 OOP 编程中)使用 zend_pdf 和 Zend_DB 并轻松完成所有工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      相关资源
      最近更新 更多