2017-05-05 2 views
0

Ich versuchte dies: (Php-Datei)Wie kann LaTeX-Code über eine Variable an pdflatex in PHP übergeben werden?

<?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." "); 
?> 

und eine Störung erhalte:

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...

warum?

Ist der oben angegebene Code der richtige Weg, LaTeX in PHP-Variablen zu schreiben und es an pdflatex Befehl ?? Wenn nicht, dann schlagen Sie bitte Korrekturen vor! Ich möchte keine externe .tex Datei aufrufen, sondern schreibe den LaTeX-Code in die PHP-Datei selbst und starte von dort.

+0

1. der Code in '" "' (couble zitieren) muss maskiert werden oder Sie verwenden stattdessen '' '' (einfache Anführungszeichen). 2. pdflatex erwartet entweder eine Datei oder eine Eingabe per Pipe wie 'cat t.tex | pdflatex' 3. Versuchen Sie, den Ausgang in ein anderes Verzeichnis zu lenken, in dem Sie die Berechtigung zum Schreiben mit der Option -output-directory für den Befehl 'pdflatex' haben. oder geben Sie Recht, auf er sehr gleichen Verzeichnis schreiben die – vv01f

+0

auch in Betracht ziehen, wenn möglich zu aktualisieren, da Ihre Version mehr als ein Jahr alt bereits ist – vv01f

+0

ich probierte einzelne Anführungsstriche..still gibt den gleichen Fehler – mira

Antwort

0

Escape kann ein Teil sein, ein anderer ruft den Befehl pdflatex; Ich umgangen (ersten) durch Schreiben der Datei vor und (zweiten) durch Kommentare und Newline auf der Variable so pdflatex ersetzt hat kein Problem damit nicht mehr ...

<?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"; 
}  

?> 

es soll nicht die tex-Datei zu schreiben, egal, pdflatex schreibt neben dem gewünschten PDF auch Dateien.

auch hinzugefügt Regex zum Ersetzen von Kommentaren/Newline.

Ich nenne das Skript mit: php test.php auf cli mit GNU/Linux Debian 8

dies erzeugt die Ausgabe:

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 

und die PDF-Dateien arbeiten beide und haben die gleiche Dateigröße:

-rw-r--r-- 1 vv01f vv01f 3360 Mai 5 article.pdf 
-rw-r--r-- 1 vv01f vv01f 3360 Mai 5 texfile.pdf 
+0

Nun, danke .. es funktioniert .. aber ich möchte es nicht in eine .tex-Datei schreiben, sondern direkt den Latex-Code durch eine php var .. – mira

+0

funktioniert - auch ohne vorherige Datei zu schreiben - nach dem Entfernen von Kommentaren und Zeilenumbrüchen sowie das Hinzufügen von Anführungszeichen für den Aufruf von 'shell_exec' – vv01f

+0

hat nicht funktioniert .. habe das Ergebnis unter .. – mira

Verwandte Themen