`
flyfy1
  • 浏览: 74199 次
  • 性别: Icon_minigender_1
  • 来自: Singapore
社区版块
存档分类
最新评论

用PHP生成PDF文件及Label

阅读更多

最近在做的Drupal平台的Volunteer Management System有个需求,是生成Volunteer的Named Label,来打印成生日卡片。因为用户在Named Label上面显示的信息不确定,所以最好利用现有的组件(如图),根据搜索结果来生成卡片。

 

当前的VMS Search功能

最初有想过直接生成网页,并且有做了类似的CSS+div实现。效果很好,但发现了一个问题:用户在打印的时候,分页问题无法处理。

 

 

于是我利用一个现有的PDF library,来用PHP生成PDF。

用的PDF library是TCPDF(http://www.tcpdf.org/)。他的功能很齐全,支持把CSS formmated HTML文件转化成PDF。有很多现成的例子(http://www.tcpdf.org/examples.php)。

 

于是,我用Table的格式来生成卡片(因为tcpdf目前对于div的width支持还不是很好,所以只能用table的形式来生成)

 

关于向PDF文件中插入HTML的代码,可以参考example code 61(http://www.tcpdf.org/examples/example_059.phps)。注意到,如果需要自己换页(比如你有一个table,自动换页会把这个table切成两半),每次addPage()之后在插入HTML的时候,需要重新include一次css的内容(在<style></style>tag内的)

 

此外,动态生成table的逻辑有点点复杂。我这里的情况是,cell需要的内容保存在了一个array里面,在loop through这个array的时候,生成四格一行、6行一页的PDF文件。

 

代码如下:

 

 

    // define some HTML content with style
    $style = <<<EOF
    <style>
    table{
        text-align:center;
        vertical-align:top;
        border-spacing: 20px;
    }
    tr,td{
        margin: 2px;
        border: 2px solid black;
    }
    td{
        padding: 10px
    }
    </style>
EOF;

// Parts to generate tr and td -- make it 4 td per tr
    $cellPerRow = 4; $rowPerPage = 6;
    $counter = 1;
    
    $output = $style."<table>";
    foreach($tableCell as $cell){
        if((($counter - 1) % $cellPerRow) == 0) $output .= "<tr>";
        
        $output.= "<td>";
        foreach($cell as $line){
            $output .= "<p>".$line."</p>";
        }
        $output.= "</td>";
        
        if(($counter % $cellPerRow) == 0) $output .= "</tr>";
        
        if(($counter % ($rowPerPage * $cellPerRow)) == 0){
            $output .= "</table>";
            //drupal_set_message("<pre>".print_r($output,true)."</pre>");
            $pdf->AddPage();
            $pdf->writeHTML($output);
            $output = $style."<table>";
        }
        $counter++;
    }
    
    if($counter % $cellPerRow != 0) $output .= "</tr>";
    if($counter % ($cellPerRow * $rowPerPage) == 0){
        $output .= "</table>";
        //drupal_set_message("<pre>".print_r($output,true)."</pre>");
        $pdf->AddPage();
        $pdf->writeHTML($output);
    } 

    // output the HTML content

 

  • 大小: 34.9 KB
0
0
分享到:
评论

相关推荐

    web上传文件按钮及预览

    在上面的代码中,我们添加了`accept`属性来限制用户只能选择图片、Word文档和PDF文件。`label`元素用于提供可点击的区域,使得按钮更易于用户识别和操作。 接下来,我们要实现文件预览功能。当用户选择文件后,我们...

    Graphviz一个图形库

    4. 渲染与输出:生成的图形可以输出为多种格式,如PNG、SVG、PDF等,这取决于调用dot命令时指定的输出参数。例如,`dot -Tpng graph.dot -o graph.png` 将DOT文件转换为PNG图像。 5. PHP接口:虽然可以直接通过执行...

    VtigerCRM5.4 BUG修改记录20120702

    **问题描述**:在生成PDF格式的订单或报表时,中文字符出现乱码。 **解决方案**:此问题可能与PDF生成器对于字符集的支持有关,但文档中未明确提及具体的解决方案。一般情况下,可以考虑更新PDF生成库或调整其配置...

    kiwi-开源

    【kiwi开源项目】是一个基于PHP的开源软件,主要用于生成PDF标签。这个工具提供了一种高效的方法,使得开发者能够在PHP环境中轻松地创建高质量的PDF文档,尤其适合制作各种类型的标签。项目的官方网站为`...

    jpgraph文档

    - **导出图表**:支持将图表保存为 PNG、JPEG 或 PDF 文件。 通过以上介绍可以看出,JPGraph 不仅功能强大,而且易于使用。对于需要在网页中嵌入图表的应用程序来说,它是一个非常不错的选择。无论是简单的数据展示...

    批处理脚本学习笔记——程序员版.pdf

    程序流控制部分讲解了条件执行和循环控制的多种方式,例如使用组合命令、IF命令、goto、label等实现分支和循环结构。此外,for循环的多种用法,包括遍历命令行参数、处理文本文件、递归目录匹配文件等,也是批处理...

    MapServer帮助文档

    - 生成PDF格式的地图。 - 适用于打印。 8. **SVG**: - 生成SVG格式的地图。 - 适用于矢量图形编辑。 9. **Tile Mode**: - 使用瓦片模式生成地图。 - 优化大范围地图的加载速度。 #### 九、OGC支持与配置 ...

    Eclipse中文基础操作教程 pdf

    - **标签装饰(Label Decorations)**:在文件和项目的标签上添加额外的信息。 - **链接资源(Linked Resources)**:链接项目外部的资源。 - **历史纪录(Local History)**:管理文件的历史版本。 - **视景(Perspectives...

    JAVA上百实例源码以及开源项目源代码

    Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。...

    eclipse.pdf

    - **Workspace(工作空间)**:Eclipse的工作空间是指存放项目及相关配置文件的地方,每个Eclipse实例可以有多个工作空间。 - **Project(项目)**:在Eclipse中,项目是一组相关的源代码、资源文件及构建设置的集合...

    Linux操作系统基础教程

    关於通讯用的指令.........................................................................................................21 十. 编译器( Compiler ).......................................................

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics