function GetStringWidth($s) { // Get width of a string in the current font if ($this->isUnicode) { $txt = mb_convert_encoding ( $s, FPDF_UNICODE_ENCODING, $this->charset ); $oEnc = mb_internal_encoding (); mb_internal_encoding ( FPDF_UNICODE_ENCODING ); $w = $this->GetUniStringWidth ( $txt ); mb_internal_encoding ( $oEnc ); return $w; } else return parent::GetStringWidth ( $s ); }
/** * 导出Pdf * @param request 请求对象 * @param response 响应对象 * @param pager dtGrid对象 * @param exportDatas 导出的数据 * @param fileName 文件名 * @throws Exception */ static function exportPdf($pager, $exportDatas, $fileName) { // 定义PDF文件 $pdf = new PDF_Chinese("L"); $pdf->AddGBFont(); $pdf->AddPage(); $pdf->SetFont('GB', '', 9); $pdf->SetFillColor(47, 151, 210); $pdf->SetDrawColor(33, 33, 33); $pdf->SetTextColor(255, 255, 255); // 循环一次获取出宽度 $widths = array(); if ($pager["exportColumns"] != null && count($pager["exportColumns"]) > 0) { // 循环写入表头 foreach ($pager["exportColumns"] as $column) { array_push($widths, $pdf->GetStringWidth(iconv("UTF-8", "GBK", $column["title"])) + 6); } // 判断表中是否有数据 if ($exportDatas != null && count($exportDatas) > 0) { // 循环写入表中数据 foreach ($exportDatas as $record) { $i = 0; foreach ($pager["exportColumns"] as $column) { $content = $record[$column["id"]]; // 如果内容未被处理则进行格式化 if (!$pager["exportDataIsProcessed"]) { $content = DtGridUtils::formatContent($column, $content); } $width = $pdf->GetStringWidth(iconv("UTF-8", "GBK", $content)) + 6; if ($widths[$i] < $width) { $widths[$i] = $width; } $i++; } } } } // 判断一下表头数组是否有数据 if ($pager["exportColumns"] != null && count($pager["exportColumns"]) > 0) { // 循环写入表头 $i = 0; foreach ($pager["exportColumns"] as $column) { $pdf->Cell($widths[$i], 6, iconv("UTF-8", "GBK", $column["title"]), 1, 0, "C", 1); $i++; } $pdf->SetTextColor(44, 44, 44); $pdf->Ln(); // 判断表中是否有数据 if ($exportDatas != null && count($exportDatas) > 0) { // 循环写入表中数据 foreach ($exportDatas as $record) { $i = 0; foreach ($pager["exportColumns"] as $column) { $content = $record[$column["id"]]; // 如果内容未被处理则进行格式化 if (!$pager["exportDataIsProcessed"]) { $content = DtGridUtils::formatContent($column, $content); } $pdf->Cell($widths[$i], 6, iconv("UTF-8", "GBK", $content), 1, 0, "C", 0); $i++; } $pdf->Ln(); } } } $pdf->Output($fileName . ".pdf", "D"); }