我正在制作一个程序,用 ImageMagick 在文件夹中查找安全的 PDF 文件并将它们转换为 PNG 文件。以下是我的代码。
我在SO上查看了一下,有暗示我的变量中的空格可能会导致问题,但这些线程大多谈论硬编码参数名称,并且只讨论一个参数。我认为给每个变量添加双引号会解决问题,但事实并非如此。我还读到使用ProcessStartInfo可能会有所帮助,但仍然没有结果。我猜测是我格式化了两个参数以及调用命令的方式,或者我使用ProcessStartInto的方法不对。有什么想法吗?
编辑:根据下面的评论,我进行了额外的测试,等待命令窗口退出,我发现以下错误。
string WorkDir = @"C:\Users\rwong\Desktop\TestFiles";
Directory.SetCurrentDirectory(WorkDir);
String[] SubWorkDir = Directory.GetDirectories(WorkDir);
foreach (string subdir in SubWorkDir)
{
string[] filelist = Directory.GetFiles(subdir);
for(int f = 0; f < filelist.Length; f++)
{
if (filelist[f].ToLower().EndsWith(".pdf") || filelist[f].EndsWith(".PDF"))
{
PDFReader reader = new Pdfreader(filelist[f]);
bool PDFCheck = reader.IsOpenedWithFullPermissions;
reader.CLose();
if(PDFCheck)
{
//do nothing
}
else
{
string PNGPath = Path.ChangeExtension(filelistf], ".png");
string PDFfile = '"' + filelist[f] + '"';
string PNGfile = '"' + PNGPath + '"';
string arguments = string.Format("{0} {1}", PDFfile, PNGfile);
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\ImageMagick-6.9.2-Q16\convert.exe");
startInfo.Arguments = arguments;
Process.Start(startInfo);
}
}
}
我在命令提示符中运行了原始命令,并且它可以正常工作,因此命令不是问题。下面是示例命令:
"C:\Program Files\ImageMagick-6.9.2-Q16\convert.exe" "C:\Users\rwong\Desktop\TestFiles\Test_File File_10.PDF" "C:\Users\rwong\Desktop\TestFiles\Test_File File_10.png"
我在SO上查看了一下,有暗示我的变量中的空格可能会导致问题,但这些线程大多谈论硬编码参数名称,并且只讨论一个参数。我认为给每个变量添加双引号会解决问题,但事实并非如此。我还读到使用ProcessStartInfo可能会有所帮助,但仍然没有结果。我猜测是我格式化了两个参数以及调用命令的方式,或者我使用ProcessStartInto的方法不对。有什么想法吗?
编辑:根据下面的评论,我进行了额外的测试,等待命令窗口退出,我发现以下错误。
顺便提一下:我暂时不想使用GhostScript,因为我觉得使用ImageMagick就能很快得到答案。
string arguments
变量如下:"\"C:\\Users\\rwong\\Desktop\\RoundPoint\\1000965275\\1000965275_157_Credit File_10.PDF\" \"C:\\Users\\rwong\\Desktop\\RoundPoint\\1000965275\\1000965275_157_Credit File_10.png\""
- LampPost