2017-05-05 94 views
0

我嘗試這樣做: (PHP文件)如何將LaTeX代碼通過變量傳遞給PHP中的pdflatex?

<?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 : This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=pdflatex) restricted \write18 enabled. ** ! End of file on the terminal...

爲什麼呢?

是上面給出的代碼正確的方式寫在PHP變量中的LaTeX並將其傳遞給pdflatex命令? 如果不是,那麼PLZ建議更正! 我不想調用外部文件.tex,而是將LaTeX代碼寫入PHP文件本身並從那裏運行。

+0

1.''「'(couble quotes)中的代碼需要轉義或者使用''''(單引號)代替。 2. pdflatex需要一個文件或通過管道輸入,如'cat t.tex | pdflatex' 3.嘗試將輸出轉向另一個目錄,您可以使用'pdflatex'命令的'-output-directory'選項來寫入其他目錄。或給權寫在他非常相同的目錄 – vv01f

+0

也考慮更新,如果可能,因爲你的版本已經超過一年已經 – vv01f

+0

我試過單引號..still給出了相同的錯誤 – mira

回答

0

轉義可能是一個部分,另一個是調用命令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以外的文件。

還添加了正則表達式來替換comments/newline。

我打電話的腳本:php test.php與GNU/Linux的Debian的8

CLI這將產生輸出:

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 
+0

嗯,謝謝..它的工作原理..但我不想將它寫入.tex文件,但直接通過乳膠代碼通過php var .. – mira

+0

作品 - 即使沒有寫入文件之前 - 刪除註釋和換行符後,加上對'shell_exec調用的雙引號' – vv01f

+0

沒有爲我工作..已發佈的結果如下.. – mira

相關問題