LaTeX 转 PDF | .NET
如何将 LaTeX 转换为 PDF
让我们详细了解 C# 代码,它提供了将 LaTeX 转换为 PDF 格式的最简方法。
1// Convert LaTeX to PDF - simplest approach
2
3// Create conversion options for Object LaTeX format upon Object TeX engine extension.
4TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
5
6// Specify a file system working directory for the output.
7options.OutputWorkingDirectory = new OutputFileSystemDirectory(OutputDir);
8
9// Initialize the options for saving in PDF format.
10options.SaveOptions = new PdfSaveOptions();
11
12// Run LaTeX to PDF conversion.
13new TeXJob(Path.Combine(DataDir, "hello-world.ltx"), new PdfDevice(), options).Run();因此,我们需要做的第一件事(有时不是最先的那件事)是创建一个 TeXOptions 类的实例。唯一能够完成此操作的静态方法是 ConsoleAppOptions(),因此不要被它的名字所困惑。该方法接受一个 TeXConfig 类的 实例,这正好适用于转换 LaTeX 文件。此配置告诉 Object TeX 引擎加载 Object LaTeX 格式并准备接受 LaTeX 文件。Object LaTeX 格式实际上就是 LaTeX 格式,只是它使用了特定于 Object TeX 的原语来设置页面度量。
首个必需的选项是 OutputWorkingDirectory,它定义了 TeX 输出将被写入的空间或区域。 这里 有关于 Aspose.TeX for .NET 中输出目录概念的详细说明。在本例中,我们使用 OutputFileSystemDirectory 类,它允许我们将输出写入指定的目录或文件夹。
第二个选项是 SaveOptions 类的实例,它将控制将 对象模型 转换为目标格式的方式。由于我们要将 LaTeX 转换为 PDF,使用的就是 PdfSaveOptions 类的实例。
接下来需要创建一个 TeXJob 类的实例。若要转换存储在文件系统中的 LaTeX 文件,我们使用该构造函数的 此 版本。必须指定文件的完整路径。否则,引擎会在当前目录(即 CurrentDirectory)中查找,通常找不到。即使文件没有 .tex 扩展名,也可以省略,引擎会自动追加。构造函数的第二个参数是一个 Device 类的实例。因为我们要将 LaTeX 转换为 PDF,所以这里使用的是 PdfDevice 类的实例。最后一个参数则是我们刚才准备好的转换选项。
剩下的唯一工作就是调用 run 方法启动任务。
无论任务是否成功,首先会在终端看到输出。成功时,它类似如下:
1This is ObjectTeX, Version 3.1415926-1.0 (Aspose.TeX 21.8)
2entering extended mode
3
4(<input_directory>\hello-world.ltx
5LaTeX2e <2011/06/27>
6(article.cls
7Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
8(size10.clo))
9No file hello-world.aux.
10[1]
11(<output_directory>\hello-world.aux) )
12Output written on hello-world.pdf (1 page).
13Transcript written on hello-world.log.我们可以在指定的输出目录中找到引擎工作的“成果”。其中包括转录文件以及 就在这里! 的主输出 PDF 文件。
以另一种方式写入主输出 PDF 文件
PdfDevice 类还有另一个构造函数,允许我们以另一种方式获取生成的 PDF 文件。
1// Convert LaTeX to PDF - alternative approach with stream
2
3// Create the stream to write the PDF file to.
4using (Stream pdfStream = File.Open(Path.Combine(OutputDir, "hello-world-alt.pdf"), FileMode.Create))
5{
6 // Create conversion options for Object LaTeX format upon Object TeX engine extension.
7 TeXOptions options = TeXOptions.ConsoleAppOptions(TeXConfig.ObjectLaTeX);
8
9 // Specify a file system working directory for the output.
10 options.OutputWorkingDirectory = new OutputFileSystemDirectory(OutputDir);
11
12 // Initialize the options for saving in PDF format.
13 options.SaveOptions = new PdfSaveOptions();
14
15 // Run LaTeX to PDF conversion.
16 new TeXJob(Path.Combine(DataDir, "hello-world.ltx"), new PdfDevice(pdfStream), options).Run();
17}指定目录中的 any-name.pdf 文件即为我们的主输出 PDF 文件。与此同时,与 图像输出 不同,我们在由转换选项定义的输出目录中不会找到任何 PDF 文件。例外情况是,any-name.pdf(通过其路径)位于与 OutputWorkingDirectory 选项相同的文件系统目录中,该目录是使用 OutputFileSystemDirectory 指定的。
关于输入选项
如果我们的主输入文件需要依赖项(例如未包含在基本 LaTeX 系统和支持的宏包中的宏包),我们必须像设置
OutputWorkingDirectory 那样设置
RequiredInputDirectory 选项,并将依赖项放入该目录。依赖项可以任意组织在子目录中。若我们有自己的文件需要在排版过程中一起包含(例如外部图形文件),还必须使用指向这些文件所在位置的路径来设置
InputWorkingDirectory。我们也可以将主输入文件放在输入目录的某个子目录下,并在 run() 方法中指定相对路径(如果主输入文件位于根目录,则可以不指定路径)。
这里 有关于 Aspose.TeX for .NET 中输入目录概念的详细说明以及提供的实现。
其他 TeX 作业选项请参阅 此处。
您还可以查看基于 Aspose.TeX for .NET API 构建的免费 LaTeX 转 PDF 转换 Web 应用。