我正在使用PHP API构建一个Angular 4应用程序。在应用程序内,用户可以生成某种“杂志”。这允许他们对页面进行排序,编辑内容和添加图像,但不是以所见即所得的方式,而是逐步“我选择的这个选项是我想要的”方式。
所以我最终将大量存储在MySQL数据库中的数据“描述”最终PDF应该是什么样子。
问题是我完全不知道如何生成PDF。我知道像pdfmake或jsPDF这样的客户端解决方案或者tcpdf(它似乎永远都是版本转换?!)作为服务器端解决方案。但所有这些都是有限的。
我认为最好的解决方案是生成一些LaTeX代码并从中生成一些PDF,因为能够使用各种LaTeX命令而不是jsPDF或pdfmake的有限命令。
使用angular管理编译LaTeX代码是否有任何标准或最佳方法?
走哪条路?服务器端还是客户端?将要创建的LaTeX和PDF包含大量图像,大约100-200页......
答案 0 :(得分:0)
为其他人搜索
CLSI似乎是一种管理它的方式。还有一个用于编译LaTeX文件的开源API:CLSI ShareLaTeX
感谢mike42
使用PHP编译LaTeX的另一个非常有趣的example ...实际上是我的方法...是生成一个.tex
文件,它是一个有效的LaTeX文件和一个有效的PHP文件这样代码最终就是这样:
% This file is a valid PHP file and also a valid LaTeX file
% When processed with LaTeX, it will generate a blank template
% Loading with PHP will fill it with details
\documentclass{article}
% Required for proper escaping
\usepackage{textcomp} % Symbols
\usepackage[T1]{fontenc} % Input format
% Because Unicode etc.
\usepackage{fontspec} % For loading fonts
\setmainfont{Liberation Serif} % Has a lot more symbols than Computer Modern
% Make placeholders visible
\newcommand{\placeholder}[1]{\textbf{$<$ #1 $>$}}
% Defaults for each variable
\newcommand{\test}{\placeholder{Data here}}
% Fill in
% <?php echo "\n" . "\\renewcommand{\\test}{" . LatexTemplate::escape($data['test']) . "}\n"; ?>
\begin{document}
\section{Data From PHP}
\test{}
\end{document}
如果禁用了PHP安全模式并且服务器安装了xelatex / pdflatex,则直接在文件上执行命令...
首先,填写 LaTeX代码需要通过以下方式存储在临时文件中:
/**
* Generate a PDF file using xelatex and pass it to the user
*/
public static function download($data, $template_file, $outp_file) {
// Pre-flight checks
if(!file_exists($template_file)) {
throw new Exception("Could not open template");
}
if(($f = tempnam(sys_get_temp_dir(), 'tex-')) === false) {
throw new Exception("Failed to create temporary file");
}
$tex_f = $f . ".tex";
$aux_f = $f . ".aux";
$log_f = $f . ".log";
$pdf_f = $f . ".pdf";
// Perform substitution of variables
ob_start();
include($template_file);
file_put_contents($tex_f, ob_get_clean());
}
之后,应执行选择的引擎以生成输出文件:
// Run xelatex (Used because of native unicode and TTF font support)
$cmd = sprintf("xelatex -interaction nonstopmode -halt-on-error %s",
escapeshellarg($tex_f));
chdir(sys_get_temp_dir());
exec($cmd, $foo, $ret);
// No need for these files anymore
@unlink($tex_f);
@unlink($aux_f);
@unlink($log_f);
// Test here
if(!file_exists($pdf_f)) {
@unlink($f);
throw new Exception("Output was not generated and latex returned: $ret.");
}