PHP дээрээс LaTeX баримт боловсруулах
PHP хэлээр бичиж хөгжүүлсэн веб сайтад LaTeX ашиглаж монгол кирилл бичгээр бичсэн PDF баримт боловсруулах боломж нэмэх
Өөрийн дураар тохируулж чадах сервер, үнэгүй сайхан LaTeX програм байхад PDF баримт боловсруулдаг төлбөртэй API ашиглаад яах билээ. Ингээд шууд бичье гэхэд санаанд багтах ч монгол кирилл бичгийн хувьд асуудал байна бас шийдэл ч байна.
PHP дээрх код
title = 'Гарчиг';
$document->text = 'Монгол кирилл үсгээр бичсэн текст болон $$\frac{(x-1)^2}{2}+\frac{(y+2)^2}{3}=4$$ томьёо бүхий ийм нэг бичвэр оршвой.';
// LaTeX темплэйт
ob_start();
include 'latex-template.tex';
$latex = ob_get_contents();
ob_end_clean();
// Түр зуур ашиглах файл, түүний нэр болон агуулагч хавтас
$fname = tempnam(sys_get_temp_dir(), 'latex-document-');
$base = basename($fname);
$dir = dirname(realpath($fname));
rename($fname, $fname.'.tex');
$fname .= '.tex';
// LaTeX темплейтээр хэлбэржүүлсэн баримтынхаа агуулгыг файлд бичих
file_put_contents($fname, $latex);
// Файлд хандах эрх нээх, агуулагч хавтас уруу чиглүүлэх
shell_exec("chmod 777 $fname");
chdir($dir);
// Баримт боловсруулах тушаал дамжуулах
$console = shell_exec("sudo -u galaa /usr/bin/pdflatex -synctex=1 -interaction=nonstopmode {$base}");
\\ echo '
'; print_r($console); echo '
'; exit; $latexfile = $dir.DIRECTORY_SEPARATOR.$base.'.pdf'; if (file_exists($latexfile)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="latex-document.pdf"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($latexfile)); readfile($latexfile); } exit; ?>
LaTeX темплэйт
\documentclass[12pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[mongolian]{babel}
\usepackage[a4paper,margin=2cm]{geometry}
\begin{document}
\begin{center}
\textbf{\large title; ?>}
\end{center}
text; ?>
\end{document}
Бусад зүйл
- LaTeX програм суулгах
sudo apt install texlive-full
- www-data хэрэглэгчийг TeX font metric уруу хандах боломжоор хангах
Терминалаасsudo visudo
командаар нээгдэх файлд дараах хоёр мөрийг нэмнэ.galaa ALL=(ALL) NOPASSWD: /usr/bin/pdflatex
www-data ALL=(ALL) NOPASSWD: /usr/bin/pdflatex
АНХААР: Дээр хоёр ч удаа galaa
(миний өөрийн үйлдлийн систем дэх хэрэглэгчийн нэр) гэснийг зохих хэрэглэгчийн нэрээр солино.
Төгсгөлд нь
Бэрхшээл юундаа байгаа вэ гэвэл монгол хэлний babel багц дуудах үед баримт дээр ямар ч текст гарахгүй болох, тодруулбал LaTeX програмын монгол хэл болон фонттой холбоотой хэсэг нь үйлдлийн системийн хэрэглэгчийн хувийн хавтас дотор сууснаас шалтгаалж www-data хэрэглэгч түүнд нь хандаж чадахгүй улмаар фонт олдоогүй тул LaTeX програм баримтыг бүрэн гүйцэд боловсруулахгүй байсан явдал юм. Үүнийг шийдэж болох хоёр янзын арга зам байснаас илүү хялбар бөгөөд дагавар асуудал гарахгүй гээд уг аргаар бэрхшээлээ шийдлээ.