通过命令行将 LaTeX 编译为 base64 PDF

通过命令行将 LaTeX 编译为 base64 PDF

在我的 Web 应用程序中,客户端使用的是 base64 编码的 PDF。这些 PDF 是从 LaTeX 即时生成的。目前,它们通过 pdflatex 编译为 Web 服务器文件系统上的文件,从中读取,编码为 base64 字符串并发送到客户端。

由于各种原因,这似乎不是最好的解决方案。那么:是否可以将 LaTeX 直接编译为 base64 字符串(或任何可转换/“可管道化”为 base64 的内容),而无需“绕道文件系统”?

当然,我需要一个命令行解决方案(或者更好的是:一个本机 Node.js 库,它不仅仅是 pdflatex 的包装器。好吧,人总是有梦想的......)

答案1

不是 Base64,而是使用 PdfTeX 的内置功能可以对 PDF 输出进行纯 HEX 编码\pdffiledump。不幸的是,PdfTeX 中没有可用的 Base64 文件转储,但也许有人可以在 Lua 中编写一个用于 LuaTeX 的程序?

下面的示例将十六进制编码的输出写入终端和文件。在将终端输出管道传输到某处之前,必须删除\jobname.pdf.hex正常输出,因为它无法被抑制。以下几行pdftex

#### \jobname.pdf.hex begin ####

#### \jobname.pdf.hex end ####

写在终端(STDOUT)上可能会帮助您编写用于剥离的过滤器。

要恢复 PDF,请xxd在 HEX 输出上运行命令行工具:

xxd -r -p myDocument.pdf.hex  myDocument.pdf.hex.pdf

示例(pdflatex至少运行两次):

\documentclass{article}
\usepackage{ifthen} %\whiledo

\edef\fileName{\jobname.pdf}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% writes hex encoded \jobname.pdf to the terminal and 
% into the file \jobname.pdf.hex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\IfFileExists{\fileName}{
  \typeout{#### \jobname.pdf.hex begin ####}%
  \newwrite\OutFile%
  \immediate\openout\OutFile=\fileName.hex%
  \def\fileoffset{0}%
  \edef\filesize{\pdffilesize{\fileName}}%
  \whiledo{\fileoffset<\filesize}{%
    \edef\ouputLine{\pdffiledump offset \fileoffset\space length 30 {\fileName}}%
    \immediate\write\OutFile{\ouputLine}%
    \typeout{\ouputLine}%
    \edef\fileoffset{\the\numexpr\fileoffset+30\relax}%
  }%
  \immediate\closeout\OutFile%
  \typeout{#### \jobname.pdf.hex end ####}%
}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{kantlipsum}

\begin{document}
\kant[1-20]
\end{document}

相关内容