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

本文介绍了一个使用pdftk工具在.NET环境下进行PDF文件处理的问题及其解决方案。作者在尝试调用pdftk工具进行PDF文件信息读取时遇到了阻塞问题,并最终发现需要设置RedirectStandardError属性才能成功获取输出。

今天调查一个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;

 

转载于:https://www.cnblogs.com/xiashengwang/p/5664003.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值