Я попробовал это:
(.php файл)
<?php
$texscript = "\documentclass[12pt,a4paper]{article}
\usepackage{helvet}
\usepackage{times}
\usepackage{multido}
\usepackage{fancyhdr}
\usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}
\renewcommand{\familydefault}{\sfdefault}
\begin{document}
\fancyhf{} % clear all header and footer fields
\renewcommand{\headrulewidth}{0pt}
\pagestyle{fancy}
%\rhead{{\large\bfseries\thepage}}
\rhead{{\fbox{\large\bfseries\thepage}}}
\setcounter{page}{1}
\multido{}{1383}{\vphantom{x}\newpage}
\end{document}
";
$pdflatex = shell_exec("echo \$PATH > myenv; pdflatex ".$texscript." ");
?>
и получаю ошибку:
pdflatex: это pdfTeX, версия 3.14159265-2.6-1.40.16 (TeX Live 2015 / Debian) (предварительно загруженный формат = pdflatex), ограничено \ write18 включено. **! Конец файла на терминале …
Зачем?
Является ли приведенный выше код правильным способом написания LaTeX в переменных PHP и передачи его pdflatex
Команда ??
Если нет, то предложите поправки!
Я не хочу звонить внешнему .tex
файл, но написать код LaTeX в самом файле PHP и запустить оттуда.
Побег может быть одна часть, другая вызывает команду pdflatex
; Я обошел (во-первых), написав файл до и (во-вторых), заменив комментарии и новую строку на переменную так pdflatex
больше не имеет проблем с этим…
<?php
error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
$texscript = '\documentclass[12pt,a4paper]{article}
\usepackage{helvet}
\usepackage{times}
\usepackage{multido}
\usepackage{fancyhdr}
\usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}
\renewcommand{\familydefault}{\sfdefault}
\begin{document}
\fancyhf{} % clear all header and footer fields
\renewcommand{\headrulewidth}{0pt}
\pagestyle{fancy}
%\rhead{{\large\bfseries\thepage}}
\rhead{{\fbox{\large\bfseries\thepage}}}
\setcounter{page}{1}
\multido{}{1383}{\vphantom{x}\newpage}
\end{document}
';
//write code to file
$fn="texfile.tex";
$myfile = fopen($fn, "w");
fwrite($myfile, $texscript);
fclose($myfile);
//then execute pdflatex with parameter
//didnt need
//echo $PATH > myenv;
$pdflatex = shell_exec('pdflatex ' .$fn .'' );
//var_dump( $pdflatex );
//test for success
if (!file_exists("texfile.pdf")){
print_r( file_get_contents("texfile.log") );
} else {
echo "PDF crated from file\n";
}
//trying same without file
//removed comments and newlines
$texscript = preg_replace('/[ \t]*\%.*[ \t]*[\r\n]+/', '', $texscript);
$texscript = preg_replace('/[\r\n]+/', '', $texscript);
//ahve a look on the variable
//var_dump($texscript);
$pdflatex = shell_exec('pdflatex "' .$texscript.'"' );
if (!file_exists("article.pdf")){
print_r( file_get_contents("article.log") );
} else {
echo "PDF created from String\n";
}
?>
не должно иметь значения писать tex-файл, так как pdflatex будет записывать файлы помимо желаемого PDF.
также добавлено регулярное выражение для замены комментариев / новой строки.
Я называю скрипт с: php test.php
на кли с GNU / Linux Debian 8
это производит вывод:
PDF crated from file
string(405) "\documentclass[12pt,a4paper]{article}\usepackage{helvet}\usepackage{times}\usepackage{multido}\usepackage{fancyhdr}\usepackage[hmargin=.8cm,vmargin=1.5cm,nohead,nofoot]{geometry}\renewcommand{\familydefault}{\sfdefault}\begin{document}\fancyhf{}\renewcommand{\headrulewidth}{0pt}\pagestyle{fancy}\rhead{{\fbox{\large\bfseries\thepage}}}\setcounter{page}{1}\multido{}{1}{\vphantom{x}\newpage}\end{document}"PDF created from String
и файлы PDF работают и имеют одинаковый размер файла:
-rw-r--r-- 1 vv01f vv01f 3360 Mai 5 article.pdf
-rw-r--r-- 1 vv01f vv01f 3360 Mai 5 texfile.pdf
Других решений пока нет …