使用TP5将数据生成为PDF文件

使用TP5将数据生成为PDF文件

2016-08-03 14:34:28
一:引入tcpdf

/ThinkPHP/Library/Vendor/Tcpdf

把tcpdf文件整个目录拷到自己的项目中;

二:函数

创建 /Application/Common/Common/function.php

/**

  • 生成pdf
  • @param string h t m l 需 要 生 成 的 内 容 ∗ / f u n c t i o n p d f ( html 需要生成的内容 */ function pdf( html/functionpdf(html=‘

    hello word

    ’){
    vendor(‘Tcpdf.tcpdf’);
    $pdf = new \Tcpdf(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, ‘UTF-8’, false);
    // 设置打印模式
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor(‘Nicola Asuni’);
    $pdf->SetTitle(‘TCPDF Example 001’);
    $pdf->SetSubject(‘TCPDF Tutorial’);
    $pdf->SetKeywords(‘TCPDF, PDF, example, test, guide’);
    // 是否显示页眉
    $pdf->setPrintHeader(false);
    // 设置页眉显示的内容
    $pdf->SetHeaderData(‘logo.png’, 60, ‘baijunyao.com’, ‘高山博客’, array(0,64,255), array(0,64,128));
    // 设置页眉字体
    $pdf->setHeaderFont(Array(‘dejavusans’, ‘’, ‘12’));
    // 页眉距离顶部的距离
    $pdf->SetHeaderMargin(‘5’);
    // 是否显示页脚
    $pdf->setPrintFooter(true);
    // 设置页脚显示的内容
    $pdf->setFooterData(array(0,64,0), array(0,64,128));
    // 设置页脚的字体
    $pdf->setFooterFont(Array(‘dejavusans’, ‘’, ‘10’));
    // 设置页脚距离底部的距离
    $pdf->SetFooterMargin(‘10’);
    // 设置默认等宽字体
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    // 设置行高
    $pdf->setCellHeightRatio(1);
    // 设置左、上、右的间距
    $pdf->SetMargins(‘10’, ‘10’, ‘10’);
    // 设置是否自动分页 距离底部多少距离时分页
    $pdf->SetAutoPageBreak(TRUE, ‘15’);
    // 设置图像比例因子
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    if (@file_exists(dirname(FILE).’/lang/eng.php’)) {
    require_once(dirname(FILE).’/lang/eng.php’);
    p d f − > s e t L a n g u a g e A r r a y ( pdf->setLanguageArray( pdf>setLanguageArray(l);
    }
    $pdf->setFontSubsetting(true);
    $pdf->AddPage();
    // 设置字体
    $pdf->SetFont(‘stsongstdlight’, ‘’, 14, ‘’, true);
    $pdf->writeHTMLCell(0, 0, ‘’, ‘’, $html, 0, 1, 0, true, ‘’, true);
    $pdf->Output(‘example_001.pdf’, ‘I’);
    }
    三 控制器代码
    namespace app\index\controller;

use app\model\Admin;
use think\Controller;

class Index extends Controller
{
public function pdfTest()
{
$res = db(‘admin’)->select();
$pdfHtml = ‘’;
foreach ($res as $k=>$v){
$pdfHtml.=implode(’.’,$v);
}
pdf($pdfHtml);die();
return $this->fetch();
}
}

你可以使用Java的开源库iText来实现生成带表格的PNG图片。以下是一个简单的示例代码: ```java import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.itextpdf.awt.DefaultFontMapper; import com.itextpdf.awt.FontMapper; import com.itextpdf.awt.geom.Rectangle2D; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.codec.PngEncoder; public class TableToPNG { public static void main(String[] args) throws IOException, DocumentException { int width = 500; int height = 300; int marginLeft = 50; int marginTop = 50; int cellPadding = 5; int borderWidth = 1; int fontSize = 12; List<String[]> data = new ArrayList<String[]>(); data.add(new String[] { "Name", "Age", "Gender" }); data.add(new String[] { "John", "25", "Male" }); data.add(new String[] { "Jane", "30", "Female" }); data.add(new String[] { "Bob", "40", "Male" }); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = image.createGraphics(); g2d.setPaint(Color.WHITE); g2d.fillRect(0, 0, width, height); PdfWriter writer = PdfWriter.getInstance(null, new FileOutputStream("temp.pdf")); writer.setStrictImageSequence(true); writer.open(); PdfContentByte cb = writer.getDirectContent(); PdfTemplate tp = cb.createTemplate(width, height); FontMapper fontMapper = new DefaultFontMapper(); BaseFont bf = BaseFont.createFont("Helvetica", BaseFont.WINANSI, BaseFont.EMBEDDED); fontMapper.putName("Helvetica", bf.getPostscriptFontName()); cb.setFontAndSize(bf, fontSize); int numCols = data.get(0).length; float[] colWidths = new float[numCols]; for (int i = 0; i < numCols; i++) { colWidths[i] = (width - 2 * marginLeft) / (float) numCols; } float yPos = height - marginTop - fontSize; for (String[] row : data) { float xPos = marginLeft; for (int i = 0; i < numCols; i++) { String cellText = row[i]; Rectangle2D cellBounds = bf.getStringBounds(cellText, g2d.getFontRenderContext()); float cellWidth = colWidths[i] - 2 * cellPadding - 2 * borderWidth; float cellHeight = (float) cellBounds.getHeight() + 2 * cellPadding + 2 * borderWidth; cb.roundRectangle(xPos, yPos - cellHeight, cellWidth, cellHeight, borderWidth); cb.stroke(); cb.beginText(); cb.showTextAligned(PdfContentByte.ALIGN_LEFT, cellText, xPos + cellPadding, yPos - cellPadding, 0); cb.endText(); xPos += colWidths[i]; } yPos -= fontSize + 2 * cellPadding + 2 * borderWidth; } tp.addImage(PngEncoder.encode(image)); cb.addTemplate(tp, 0, 0); writer.flush(); writer.close(); File pngFile = new File("table.png"); PngEncoder encoder = new PngEncoder(); encoder.encode(tp.createGraphics(width, height), pngFile); } } ``` 这个示例代码将生成一个带有表格的PNG图片,并且保存为temp.pdf和table.png两个文件。你可以根据自己的需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值