1. 程式人生 > >laravel條形碼,PDF,TCPDF

laravel條形碼,PDF,TCPDF

1.composer require tecnickcom/tcpdf

2.介面檔案如下
use Illuminate\Http\Request;
use TCPDF;

class BarcodeController extends Controller
{
public function pdf(Request $request)
{
// http://192.168.22.234/index.php/pdf?fn_sku=X001Z2ZLCC&num=454661&type=C128A&title=Attooas Mesh Showesasasaddsfsfsdfsasdsadr...New


$name = ‘111’;
$fn_sku = $request->fn_sku;
t i t l e = s u
b s t r ( title = substr(
request->title, 0, 31) . ‘…New’; //擷取title長度
t
y p e = C 128 B ; i f ( type = 'C128B'; if (
request->type)
$type = $request->type;
$pdf = new TCPDF();
$pdf->SetAutoPageBreak(FALSE, PDF_MARGIN_BOTTOM); //是否開啟自動分頁功能
$pdf->setPrintHeader(false);
$pdf->addPage();
// p d f > u s e T e m p l a t e ( pdf->useTemplate( tplIdx, 0, -1.35, 210);

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

    $style = array(
        'position' => '',
        'align' => 'C',
        'stretch' => false,
        'fitwidth' => true,
        'cellfitalign' => '',
        'border' => false,   //邊框
        'hpadding' => 'auto',
        'vpadding' => 'auto',
        'fgcolor' => array(0, 0, 0),
        'bgcolor' => false, //array(255,255,255),
        'text' => false,    //是否顯示條碼下方文字
        'font' => 'helvetica',   //字型
        'fontsize' => 6,         //字型大小
        'stretchtext' => 6
    );
    //$pdf->Text($x+40,$y,"(QTY:$QTY)");
    $x = 10.1;
    $y = 11.3;
    $z = 22;
    for ($i = 0; $i < 11; $i++) {
        //條碼行
        $pdf->write1DBarcode($fn_sku, $type, $x, $y + $i * 25, 44.2, 14.4, 0.4, $style, 'N');
        $pdf->write1DBarcode($fn_sku, $type, $x + 48.7, $y + $i * 25, 44.2, 14.4, 0.4, $style, 'N');
        $pdf->write1DBarcode($fn_sku, $type, $x + 48.7 * 2, $y + $i * 25, 44.2, 14.4, 0.4, $style, 'N');
        $pdf->write1DBarcode($fn_sku, $type, $x + 48.7 * 3, $y + $i * 25, 44.2, 14.4, 0.4, $style, 'N');
        //第二行  fn_sku
        $pdf->Text($z, $y + $i * 25 + 13, '   ' . $fn_sku);
        $pdf->Text($z + 48.7, $y + $i * 25 + 13, '   ' . $fn_sku);
        $pdf->Text($z + 48.7 * 2, $y + $i * 25 + 13, '   ' . $fn_sku);
        $pdf->Text($z + 48.7 * 3, $y + $i * 25 + 13, '   ' . $fn_sku);
        //第三行  title
        $pdf->Text($x, $y + $i * 25 + 15, '   ' . $title);
        $pdf->Text($x + 48.7, $y + $i * 25 + 15, '   ' . $title);
        $pdf->Text($x + 48.7 * 2, $y + $i * 25 + 15, '   ' . $title);
        $pdf->Text($x + 48.7 * 3, $y + $i * 25 + 15, '   ' . $title);
        //第四行
        $pdf->Text($z, $y + $i * 25 + 17, "(MADE IN CHINA)");
        $pdf->Text($z + 48.7, $y + $i * 25 + 17, "(MADE IN CHINA)");
        $pdf->Text($z + 48.7 * 2, $y + $i * 25 + 17, "(MADE IN CHINA)");
        $pdf->Text($z + 48.7 * 3, $y + $i * 25 + 17, "(MADE IN CHINA)");
    }
    $pdf->Output($name . ".pdf", 'D');  //D下載  I展示
}

實現效果:
4*11

附上TCPDF個引數說明
PS: https://www.cnblogs.com/relix/p/4982919.html

functioncreatePdfFile($frontData)

{

   /*新建一個pdf檔案:

   Orientation:orientation屬性用來設定文件列印格式是“Portrait”還是“Landscape”。 Landscape為橫式列印,Portrait為縱向列印

   Unit:設定頁面的單位。pt:點為單位,mm:毫米為單位,cm:釐米為單位,in:英尺為單位

   Format:設定列印格式,一般設定為A4

   Unicode:為true,輸入的文字為Unicode字元文字

   Encoding:設定編碼格式,預設為utf-8

   Diskcache:為true,通過使用檔案系統的臨時快取資料減少RAM的記憶體使用。 */

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



   //設定檔案資訊

   $pdf->SetCreator(PDF_CREATOR);

   $pdf->SetAuthor("jmcx");

   $pdf->SetTitle("pdf test");

   $pdf->SetSubject('TCPDF Tutorial');

   $pdf->SetKeywords('TCPDF, PDF, example, test, guide');



   //刪除預定義的列印 頁首/頁尾

   $pdf->setPrintHeader(false);

   $pdf->setPrintFooter(false);



   //設定預設等寬字型

   $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);



   /*設定頁面邊幅:

   Left:左邊幅

   Top:頂部邊幅

   Right:右邊幅

   Keepmargins:為true時,覆蓋預設的PDF邊幅。 */

   $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP,PDF_MARGIN_RIGHT);



   /*設定單元格的邊距:

   Left:左邊距

   Top:頂部邊距

   Right:右邊距

   Bottom:底部邊距。*/

   $pdf->setCellPaddings(0, 0, 0, 0);



   //GetX獲得當前的橫座標,GetY獲得當前的縱座標。

// $pdf->GetX();

// $pdf->GetY();

   /*移動座標。SetX移動橫座標。 SetY,橫座標自動移動到左邊距的距離,然後移動縱座標。SetXY,移動橫座標跟縱座標:

   X:橫座標,可設為$pdf->GetX()+數字

   Y:縱座標,可設為$pdf->GetY()+數字

   Rtloff:true,左上角會一直作為座標軸的原點

   Resetx:true,重設橫座標。 */

// p d f &gt; S e t X ( pdf-&gt;SetX( x, $rtloff=false);

// p d f &gt; S e t Y ( pdf-&gt;SetY( y, $resetx=true, $rtloff=false);

// p d f &gt; S e t X Y ( pdf-&gt;SetXY( x, $y, $rtloff=false)

   /*設定線條的風格:

   Width:設定線條粗細

   Cap:設定線條的兩端形狀

   Join:設定線條連線的形狀

   Dash:設定虛線模式

   Color:設定線條顏色,一般設定為黑色,如:array(0, 0, 0)。*/

   $pdf->SetLineStyle(array('width' => 0.2, 'cap' => 'butt', 'join' => 'miter', 'dash' => '0', 'color' => array(0, 0,0)));



   /*畫一條線:

   x1:線條起點x座標

   y1:線條起點y座標

   x2:線條終點x座標

   y2:線條終點y座標

   style:SetLineStyle的效果一樣

   */

// p d f &gt; L i n e ( pdf-&gt;Line( x1, $y1, $x2, $y2, $style=array());

   /*執行一個換行符,橫座標自動移動到左邊距的距離,縱座標換到下一行:

   H:設定下行跟上一行的距離,預設的話,高度為最後一個單元格的高度

   Cell:true,新增左或右或上的間距到橫座標。 */

// p d f &gt; L n ( pdf-&gt;Ln( h=’’, $cell=false);

   //設定自動分頁符

   $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);



   //設定影象比例因子

   $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);



   //設定一些語言相關的字串

// $pdf->setLanguageArray(“xx”);

   /*設定字型:

字型型別(如helvetica(Helvetica)黑體,times (Times-Roman)羅馬字型)、風格(B粗體,I斜體,underline下劃線等)、字型大小 */

   $pdf->SetFont('times', 'I', 20);



   /*增加一個頁面:

   Orientation:orientation屬性用來設定文件列印格式。 Landscape為橫式列印,Portrait為縱向列印。

   Format:設定此頁面的列印格式。

   Keepmargins:true,以當前的邊幅代替預設邊幅來重寫頁面邊幅。

   Tocpage:true,所新增的頁面將被用來顯示內容表。*/

   $pdf->AddPage();



   /*設定單行單元格:

   W:設定單元格的寬

   H:設定單元格的高

   Text:單元格文字

   Border:設定單元格的邊框。0,無邊框,1,一個框,L,左邊框,R,右邊框,B, 底邊框,T,頂邊框,LTRB指四個邊都顯示

   Ln:0,單元格後的內容插到表格右邊或左邊,1,單元格的下一行,2,在單元格下面

   Align:文字位置。L,左對齊,R,右對齊,C,居中,J,自動對齊

   Fill:填充。false,單元格的背景為透明,true,單元格必需被填充

   Link:設定單元格文字的連結。*/

   $pdf->Cell(0, 10, 'test', 1, 1, 'C');



   /*設定多行單元格。注意跟Cell的引數位置有些差別,Cell是用來輸出單行文字的,MultiCell就能用來輸出多行文字

   W:設定多行單元格的寬

   H: 設定多行單元格的單行的高

   Text:文字

   Border:邊框

   Align:文字位置

   Fill:填充

   Ln:0,單元格後的內容插到表格右邊或左邊,1,單元格的下一行,2,在單元格下面

   X:設定多行單元格的行座標

   Y:設定多行單元格的縱座標

   Reseth:true,重新設定最後一行的高度

   Stretch:調整文字寬度適應單元格的寬度

   Ishtml:true,可以輸出html文字,有時很有用的

   Autopadding:true,自動調整文字與單元格之間的距離

   Maxh:設定單元格最大的高度

   Valign:設定文字在縱座標中的位置,T,偏上,M,居中,B,偏下

   Fillcell:自動調整文字字型大小來適應單元格大小。 */

// p d f &gt; M u l t i C e l l ( pdf-&gt;MultiCell( w, $h, $txt, $border=0, a l i g n = J , align=&#x27;J&#x27;, fill=false, $ln=1, $x=’’, $y=’’, $reseth=true, s t r e t c h = 0 , stretch=0, ishtml=false, $autopadding=true, $maxh=0, $valign=‘T’, $fitcell=false);

   // setCellHeightRatio設定單元格行高,可以引用此函式調整行與行的間距。SetLineWidth設定線條寬度。

// p d f &gt; s e t C e l l H e i g h t R a t i o ( pdf-&gt;setCellHeightRatio( h);

// p d f &gt; S e t L i n e W i d t h ( pdf-&gt;SetLineWidth( width);

   /*在PDF中,插入圖片,引數列表如下;

   File:圖片路徑。

   X:左上角或右上角的橫座標。

   Y:左上角或右上角的縱座標。

   W:設定圖片的寬度,為空或為0,則自動計算。

   H:設定圖片的高度,為空或為0,則自動計算。

   Type:圖片的格式,支援JPGE,PNG,BMP,GIF等,如果沒有值,則從檔案的副檔名中自動找到檔案的格式。

   Link:圖片連結。

   Align:圖片位置。

   Resize:true,調整圖片的大小來適應寬跟高;false,不調整圖片大小;2,強制調整。

   Dpi:以多少點每英寸來調整圖片大小。

   Palign:圖片位置,L,偏左,C,居中,R,偏右

   Imgmask:true,返回影象物件。

   Border:邊框。

   Fitbox:調整適合大小。

   Hidden:true,隱藏圖片。

   Fitonpage:如果為true,影象調整為不超過頁面尺寸。 */

   $pdf->Image('../img/test.png');



   /*輸出HTML文字:

   Html:html文字

   Ln:true,在文字的下一行插入新行

   Fill:填充。false,單元格的背景為透明,true,單元格必需被填充

   Reseth:true,重新設定最後一行的高度

   Cell:true,就調整間距為當前的間距

   Align:調整文字位置。 */

  $pdf->writeHTML("<div><label>hah<strong>aha</strong></label><br/></div>");



   /*用此函式可以設定可選邊框,背景顏色和HTML文字字串來輸出單元格(矩形區域)

   W:設定單元格寬度。0,伸展到右邊幅的距離

   H:設定單元格最小的高度

   X:以左上角為原點的橫座標

   Y:以左上角為原點的縱座標

   Html:html文字

   Border:邊框

   Ln:0,單元格後的內容插到表格右邊或左邊,1,單元格的下一行,2,在單元格下面

   Fill:填充

   Reseth:true,重新設定最後一行的高度

   Align:文字的位置

   Autopadding:true,自動調整文字到邊框的距離。 */

   $pdf->writeHTMLCell();



   /*輸入PDF文件 :

   Name:PDF儲存的名字

   Dest:PDF輸出的方式。I,預設值,在瀏覽器中開啟;D,點選下載按鈕, PDF檔案會被下載下來;F,檔案會被儲存在伺服器中;S,PDF會以字串形式輸出;E:PDF以郵件的附件輸出。 */

   return $pdf->Output("test001.pdf", "F");

}