Использование pdflatex.exe для преобразования TeX в PDF в приложении C # / WPF - PullRequest
4 голосов
/ 04 мая 2011

Кто-нибудь когда-нибудь создавал документ PDF из документа TeX, используя pdflatex.exe в своем приложении C # / WPF?У меня есть документ TeX, и я хочу преобразовать его в PDF и отобразить в приложении, однако я не уверен, как это сделать, и практически ничего не могу найти в Интернете, чтобы сделать что-то подобное.Кто-нибудь знает, каков наилучший способ сделать что-то подобное (преобразовать документ TeX в PDF через pdflatex.exe в приложении C #)?

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 24 мая 2011

Вот код, который я использовал.Предполагается, что источник находится в той же папке, что и исполняемый файл, и включает запуск BibTeX, если вам это нужно (просто исключите второй процесс, если это необходимо).

string filename = "<your LaTeX source file>.tex";
Process p1 = new Process();
p1.StartInfo.FileName = "<your path to>\pdflatex.exe";
p1.StartInfo.Arguments = filename;
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p1.StartInfo.RedirectStandardOutput = true;
p1.StartInfo.UseShellExecute = false;

Process p2 = new Process();
p2.StartInfo.FileName = "<your path to>\bibtex.exe";
p2.StartInfo.Arguments = Path.GetFileNameWithoutExtension(filename);
p2.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p2.StartInfo.RedirectStandardOutput = true;
p2.StartInfo.UseShellExecute = false;

p1.Start();
var output = p1.StandardOutput.ReadToEnd();
p1.WaitForExit();

p2.Start();
output = p2.StandardOutput.ReadToEnd();
p2.WaitForExit();

p1.Start();
output = p1.StandardOutput.ReadToEnd();
p1.WaitForExit();

p1.Start();
output = p1.StandardOutput.ReadToEnd();
p1.WaitForExit();

Да, это можно немного очистить,и, конечно, без вызова BibTeX можно было бы просто вызываться в цикле (3 раза - это рекомендуемое число, чтобы убедиться, что все ссылки верны).Также нет обработки исключений, поэтому вы можете добавить блоки try / catch вокруг вызовов процесса и т. Д.

0 голосов
/ 04 мая 2011

Я никогда этого не делал, но это вполне возможно. Для запуска pdflatex.exe

вам понадобится класс System.Diagnostics.Process .

Остальное - выбрать способ, которым он должен работать. У вас, вероятно, есть несколько вариантов здесь:

Если pdflatex поддерживает запись вывода в «стандартный вывод», вы можете перехватить это и делать с содержимым все, что захотите.

Другим вариантом является использование некоторой временной папки для записи файла и подписка на уведомления об изменениях папок (асинхронный, вы можете запустить несколько экземпляров pdflatex) или просто ожидание завершения процесса (синхронно, вы можете запустить только один экземпляр) pdflatex одновременно).

...