Как настроить линеаризованный PDF(свойство быстрого просмотра в Интернете) с помощью qpdf в приложении asp.net
QPDF может конвертировать PDF в линеаризованный PDF (свойство быстрого просмотра в Интернете). Я мог бы использовать командную строку: qpdf --linearize input.pdf output.pdf, чтобы передать PDF в линеаризованный PDF.
Как я могу использовать его в программе asp.net?
Мой код такой
private void LaunchCommandLineApp()
{
// For the example
string ex4 = @"C:\Program Files\qpdf-7.0.b1\bin\qpdf.exe";
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
startInfo.FileName = ex4;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = " --linearize input.pdf output.pdf";
try
{
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
if (exeProcess != null)
{
string op = exeProcess.StandardOutput.ReadToEnd();
exeProcess.WaitForExit();
Console.WriteLine(op);
}
}
}
catch (Exception ex)
{
// Log error.
}
}
Есть ли другое решение использовать Qpdf в asp.net? Большое спасибо!
1 ответ
Наконец, я использую qpdf.exe, чтобы он работал как следующий код.
private void RunQpdfExe(string output)
{
string QPDFPath = @"C:\Program Files\qpdf-5.1.2\bin\";
string newfile = ExportFilePath + "Lin.pdf";
try
{
// Use ProcessStartInfo class
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
startInfo.FileName = QPDFPath + "qpdf.exe";
startInfo.Verb = "runas";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
//startInfo.Arguments = " --check " + output;
startInfo.WorkingDirectory = Path.GetDirectoryName(QPDFPath);
startInfo.Arguments = " --linearize " + output + " " + newfile;
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
if (exeProcess != null)
{
string op = exeProcess.StandardOutput.ReadToEnd();
exeProcess.WaitForExit();
}
}
//Rename the output file back
File.Delete(output);
File.Copy(newfile, output);
File.Delete(newfile);
}
catch (Exception)
{
// Log error.
}
}
Также я добавил разрешение "запись" для роли пользователя asp.net в моей выходной папке. Надеюсь, поможет.