[Laravel] Hướng dẫn sử dụng Latex trong Laravel

Đăng bởi: Admin | Lượt xem: 1605 | Chuyên mục: Laravel

LaTex là một hệ thống sắp chữ đặc biệt, sử dụng tài liệu này rất chuyên nghiệp và rõ dàng. Lý do để chọn LaTex là vì nó có các tính năng mở rộng có tiêu đề, chân trang, chỉ mục sách, số trang, hình mờ, v.v ... Trong bài viết này vncoder.vn sẽ hướng dẫn các bạn sử dụng Latex trong Laravel


1. Điều kiện tiên quyết

Chúng ta cần phải cài đặt texlive-full trên máy chủ của bạn. Chương trình này có các gói tex và thư viện ngôn ngữ giúp bạn tạo tài liệu.

2. Cài đặt

composer require techsemicolon/laravel-php-latex

Dry Run :

Trước khi sử dụng trực tiếp, điều quan trọng là đảm bảo các chương trình cần thiết được cài đặt đúng trên máy chủ. Gói đi kèm với phương pháp Dryrun mà bạn có thể sử dụng đặt bên trong bất kỳ bộ điều khiển hoặc tuyến đường nào. Nó sẽ tự động tạo dryrun.pdf nếu mọi thứ được thiết lập tốt trên máy chủ. Nếu không, nó sẽ báo LatexException với lỗi chi tiết trên máy chủ.

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Techsemicolon\Latex;

class TestController extends Controller
{
    /**
     * Download PDF generated from latex
     * 
     * @return Illuminate\Http\Response
     */
    public function download(){

        return (new Latex)->dryRun();
    }
}

Dryrun sẽ tải xuống bản pdf như dưới đây:

3. Sử dụng

Tạo một tập tin xem bên trong resources/views/lates/tex.blade.php:

\documentclass[a4paper,9pt,landscape]{article}

\usepackage{adjustbox}
\usepackage[english]{babel}
\usepackage[scaled=.92]{helvet}
\usepackage{fancyhdr}
\usepackage[svgnames,table]{xcolor}
\usepackage[a4paper,inner=1.5cm,outer=1.5cm,top=1cm,bottom=1cm,bindingoffset=0cm]{geometry}
\usepackage{blindtext}
\geometry{textwidth=\paperwidth, textheight=\paperheight, noheadfoot, nomarginpar}

\renewcommand{\familydefault}{\sfdefault}

\pagestyle{fancy}
\fancyhead{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot{}
\fancyfoot[LE,RO]{\thepage}

\fancyfoot[C]{\fontsize{8pt}{8pt}\selectfont Above document is auto-generated.}
\renewcommand{\footrulewidth}{0.2pt}


\begin{document}

\section*{\centering{Test Document}}

\begin{center}
    \item[Name :] {{ $name }}
    \item[Date of Birth :] {{ $dob }}
\end{center}

\blindtext

\begin{table}[ht]
\centering
\begin{adjustbox}{center}
\renewcommand{\arraystretch}{2}
\begin{tabular}{|l|l|}

\hline

\rowcolor[HTML]{E3E3E3}
\textbf{Sr. No} 
& \textbf{Addresses}\\
\hline

@foreach($addresses as $key => $address)

    \renewcommand{\arraystretch}{1.5}
    {{ $key }} & {{ $address }} \\
    \hline

@endforeach

\end{tabular}
\end{adjustbox}
\caption{Address Summmary}
\end{table}

\blindtext

\vfill
\centering

\end{document}

Xử lý download bên controller

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Techsemicolon\Latex;

class TestController extends Controller
{
    /**
     * Download PDF generated from LaTex
     * 
     * @return Illuminate\Http\Response
     */
    public function download(){

        return (new Latex('latex.tex'))->with([
            'name' => 'John Doe',
            'dob' => '01/01/1994',
            'addresses' => [
                '20 Pumpkin Hill Drive Satellite Beach, FL 32937',
                '7408 South San Juan Ave. Beaver Falls, PA 15010'
            ]
        ])->download('test.pdf');
    }
}

Bạn có thể lưu pdf vào vị trí bạn muốn sử dụng sau:

(new Latex('latex.tex'))->with([
    'name' => 'John Doe',
    'dob' => '01/01/1994',
    'addresses' => [
        '20 Pumpkin Hill Drive Satellite Beach, FL 32937',
        '7408 South San Juan Ave. Beaver Falls, PA 15010'
    ]
])->savePdf(storage_path('exports/pdf/test.pdf'));

Nếu bạn không muốn download file pdf

$tex = new Latex('latex.tex'))->with([
    'name' => 'John Doe',
    'dob' => '01/01/1994',
    'addresses' => [
        '20 Pumpkin Hill Drive Satellite Beach, FL 32937',
        '7408 South San Juan Ave. Beaver Falls, PA 15010'
    ]
])->render();

Thiết lập bin path :

Nếu máy chủ của bạn không có pdflatex trong môi trường $PATH, bạn có thể cần cung cấp đường dẫn đầy đủ để thực thi lệnh. Để tìm đường dẫn bạn có thể làm:

which pdflatex

Sau đó sử dụng binPath trong function

return (new Latex('latex.tex'))->with([
    'name' => 'John Doe',
    'dob' => '01/01/1994',
    'addresses' => [
        '20 Pumpkin Hill Drive Satellite Beach, FL 32937',
        '7408 South San Juan Ave. Beaver Falls, PA 15010'
    ]
])->binPath('/usr/bin/pdflatex')->download('test.pdf');

Using Raw Tex :

$tex = new RawTex('your_raw_tex_content_string.....');

return (new Latex($tex))->with([
    'name' => 'John Doe',
    'dob' => '01/01/1994',
    'addresses' => [
        '20 Pumpkin Hill Drive Satellite Beach, FL 32937',
        '7408 South San Juan Ave. Beaver Falls, PA 15010'
    ]
])->download('test.pdf');

Bulk download in a zip archive :

$latexCollection = (new LatexCollection());
$users = User::limit(10)->get();
foreach ($users as $user) {
            
    $pdfName = $user->first_name.'-'.$user->last_name.'-'.$user->id.'.pdf';

    // Create latex instance
    $latex = (new Latex('latex.patientsummary'))->with([
        'user' => $user
    ])->setName($pdfName);

    // Add it to latex collection
    $latexCollection->add($latex);
}

// Download the zip
return $latexCollection->downloadZip('bulk.zip');

// OR you can also save it 
$latexCollection->saveZip(storage_path('exports/zips/users.zip'));

3. Kết luận

Vậy là vncoder.vn đã hoàn thành bài hướng dẫn sử dụng Latex bằng gói techsemicolon/laravel-php-latex trong Laravel. Hy vọng bài viết sẽ có ích cho bạn. Chúc bạn thành công!.

4. Xem thêm

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Laravel

Xây dựng ứng dụng với Laravel và Vuejs
Số bài học:
Lượt xem: 15875
Đăng bởi: Admin
Chuyên mục: Laravel

Học lập trình Laravel
Số bài học:
Lượt xem: 22865
Đăng bởi: Admin
Chuyên mục: Laravel