arshia
3 سال پیش توسط arshia مطرح شد
1 پاسخ

ساخت pdf با php

سلام دوستان .
من میخام با php از یک فایل php دیگه که دیتای اون از دیتابیس میاد خرووجی pdf بگیرم چکار کنم ؟؟
لایبرری های dompdf , fpdf , tcpdf و ... چک کردم ولی اونا همشون از فایل html میان pdf میگیرن


ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 3 سال پیش مطرح شد
1

سلام
شما برای استفاده از pdf حتما میخوایید یک چیزی رو ب نمایش بزارید دیگه
html که شما میگید خروجی و view شما هست
شما توی همون صفحه ی php ای که دارید باید یک خروجی برای نمایش ایجاد کنید که توی pdf نمایش داده بشه
چه چیزی توی اون صفحه هست مگر که نمیشه خروجی html کنیش؟
شما اگر فایل php که مد نظ دارید برای نمایش در pdf نشون بدید چه خروجی ای داره بهتر میتونن دوستان راهنمایی کنن
(ریز اشاره کنم که اگر فقط تصمیم بر خروجی گرفتن هست فایل excel هم راحت میتونید خروجی بگیرید و کمتر اذیت میشید spreadsheet رو سرچ کن)
من دو مورد مثال میزارم فقط جهت دید و اشنایی
اول کد tcpdf

<?php
require_once 'vendor/autoload.php';

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 048');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 048', PDF_HEADER_STRING);

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
    require_once(dirname(__FILE__).'/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set font
//$pdf->SetFont('helvetica', 'B', 20);

// add a page

// -----------------------------------------------------------------------------
// Table with rowspans and THEAD
$tbl = '<style>
            table{
                color:red;
            }
        </style>
<table class="table text-center table-bordered table-hover ">
                <thead>
                <tr>
                    <th>ردیف</th>
                    <th>نام</th>
                    <th>نام خانوادگی</th>
                    <th>سن</th>
                    <th>شماره ملی</th>
                </tr>
                </thead>
                <tbody>

                <tr>
                    <td>7</td>
                    <td>محسن</td>
                    <td>خمر</td>
                    <td>23</td>
                    <td>32321897</td>
                </tr>

                <tr>
                    <td>8</td>
                    <td>احمد</td>
                    <td>سارانی</td>
                    <td>21</td>
                    <td>98987987</td>
                </tr>

                <tr>
                    <td>11</td>
                    <td>رسول</td>
                    <td>پاسبان</td>
                    <td>18</td>
                    <td>65454</td>
                </tr>

                </tbody>
            </table>';

$pdf->AddPage();
//$fontname = TCPDF_FONTS::addTTFfont('fonts/BARSHIA.TTF', 'TrueTypeUnicode', '', 96);
$pdf->SetFont('BArshia', '', 18);

$pdf->writeHTML($tbl, true, false, false, false, '');

$pdf->SetFont('helvetica', '', 12);

//$pdf->Write(0, 'Example of HTML tables', '', 0, 'L', true, 0, false, false, 0);
//$pdf->SetFont('BArshia', '', 18);

// -----------------------------------------------------------------------------

//Close and output PDF document
$pdf->Output('example_048.pdf', 'I');

دوم dompdf که با متون فارسی مشکل داره و پیشنهاد نمیشه اگر متن فارسی دارید اما کار باهاش خیلی راحت تره چون کلاس ها رو برای css کار میشناسه خودش و کمتر اذیت میشی

<?php
require_once 'vendor/autoload.php';
use Dompdf\Dompdf;
use Dompdf\Options;
use Dompdf\FontMetrics;
$options=new Options();
$options->set('isPhpEnabled','true');
$dompdf=new Dompdf($options);
$html='
<!DOCTYPE html>
<html>
<head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
      <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
<style>
#customers {
  font-family: Arial, Helvetica, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

#customers td, #customers th {
  border: 1px solid #ddd;
  padding: 8px;
}

#customers tr:nth-child(even){background-color: #f2f2f2;}

#customers tr:hover {background-color: #ddd;}

#customers th {
  padding-top: 12px;
  padding-bottom: 12px;
  text-align: left;
  background-color: #4CAF50;
  color: white;
}
*{ font-family: "dejavu sans", serif; !important;}
body{
    direction: rtl;
    }
</style>
</head>
<body>

<table id="customers">

                <tr>
                    <th>ردیف</th>
                    <th>نام</th>
                    <th>نام خانوادگی</th>
                    <th>سن</th>
                    <th>شماره ملی</th>
                </tr>

                <tr>
                    <td>1</td>
                    <td>علی</td>
                    <td>رضایی</td>
                    <td>15</td>
                    <td>123456</td>
                </tr>

                <tr>
                    <td>6</td>
                    <td>میلاد</td>
                    <td>خدری</td>
                    <td>65</td>
                    <td>66532</td>
                </tr>

                <tr>
                    <td>12</td>
                    <td>مصی</td>
                    <td>نادری</td>
                    <td>30</td>
                    <td>96365987</td>
                </tr>
</table>

</body>
</html>

';
$dompdf->loadHtml($html);
$dompdf->setPaper('A4','landscape');
$dompdf->render();
$convas=$dompdf->getCanvas();
$fontMetrics=new FontMetrics($convas,$options);
$w=$convas->get_width();
$w=$convas->get_height();
$font=$fontMetrics->getFont('b nazanin');
$text='confidential';
$textHeight=$fontMetrics->getFontHeight($font,75);
$textWidth=$fontMetrics->getTextWidth($text,$font,75);
$convas->set_opacity(.2);
$x=(($w-$textWidth)/2);
$y=(($w-$textHeight)/2);
$convas->text($x,$y,$text,$font,75);
$dompdf->stream('document.pdf',array('Attachment'=>0));

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام