码迷,mamicode.com
首页 > 其他好文 > 详细

调用cmd.exe执行pdf的合并(pdftk.exe)

时间:2016-07-12 17:12:25      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

今天调查一个pdf文件的抽取,合并功能,用到下面这个工具(pdftk):

https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/

在cmd.exe里执行的很好,但在.net环境下,用程序调用就出问题,调用代码如下:

            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            //p.StandardInput.WriteLine(@"pdftk E:\Temp\pdf\11.pdf E:\Temp\pdf\222.pdf cat output E:\Temp\pdf\3.pdf " + "&exit");
            p.StandardInput.WriteLine(@"pdftk E:\Temp\pdf\11.pdf dump_data|findstr NumberOfPages " + "&exit");
            p.StandardInput.AutoFlush = true;

            string result = p.StandardOutput.ReadToEnd();
            MessageBox.Show("ExitCode:" + p.ExitCode + " result:" + result);
            p.WaitForExit(10000);

不管怎么调试,代码就卡在p.StandardOutput.ReadToEnd()这里,如果我的命令换成类似“ping 127.0.0.1 -n 5” 则可以通过,

ping.exe同样是外部程序,可以正常通过,但pdftk就不行,整了一天,终于解决了。

原来少了这一句:

p.StartInfo.RedirectStandardError = true;

按道理说,我们没有用到错误流,比如:p.StandardError.ReadToEnd(),可以不设置这个属性,但pdftk就是这么怪异,

推测可能是输出流里面使用了错误流?唉,原因就不再细找了,解决问题就好,一般情况下,最好将这三个属性一起设为true,买个教训吧。

            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;

 

调用cmd.exe执行pdf的合并(pdftk.exe)

标签:

原文地址:http://www.cnblogs.com/xiashengwang/p/5664003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!