一开始我只复制了pdf2swf.exe,结果死活不运行。起初怀疑是权限问题,但查了半天也查不到。后来我就直接调用cmd去运行一下,发现报错,原因是没找到C:\swftools\Fonts下的某个文件,这是才恍然大悟,原来但靠pdf2swf.exe是不运行的(PS:那是否意味着虚拟主机下用这个工具彻底没戏???)
幸好我是自己服务器,下面说说完整步骤:
1、将swftools原安装包解压后全部放置在C:\swftools(其实只需要fonts目录就行了,反正也不占多大空间,就都放上去吧)
2、对C:\swftools目录设置NETWORK SERVICE的访问权限。
3、pdf2swf.exe复制到应用程序响应的目录下,如bin。
这样就可以了。顺便贴出转换代码:
using System;
using System.Web;
using System.Text;
namespace JumbotCms.Utils
{
///
/// pdf2swf.exe调用
///
public static class swftoolsHelp
{
///
/// PDF格式转为SWF
///
///
原视频文件地址,如/a/b/c.pdf
///
生成后的FLV文件地址,如/a/b/c.swf
///
转换的前N页
///
public static bool PDF2SWF(string pdfPath, string swfPath, int page)
{
string exe = HttpContext.Current.Server.MapPath("~/Bin/pdf2swf.exe");
pdfPath = HttpContext.Current.Server.MapPath(pdfPath);
swfPath = HttpContext.Current.Server.MapPath(swfPath);
if (!System.IO.File.Exists(exe) || !System.IO.File.Exists(pdfPath) || System.IO.File.Exists(swfPath))
{
return false;
}
StringBuilder sb = new StringBuilder();
sb.Append(" \"" + pdfPath + "\"");//input
sb.Append(" -o \"" + swfPath + "\"");//output
//sb.Append(" -z");
sb.Append(" -s flashversion=9");//flash version
//sb.Append(" -s disablelinks");//禁止PDF里面的链接
sb.Append(" -p " + "\"1" + "-" + page + "\"");//page range
sb.Append(" -j 100");//SWF中的图片质量
string Command = sb.ToString();
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = exe;
p.StartInfo.Arguments = Command;
p.StartInfo.WorkingDirectory = HttpContext.Current.Server.MapPath("~/Bin/");
p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序 启动 线程
//p.StartInfo.RedirectStandardInput = true;
//p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中(这个一定要注意,pdf2swf.exe的所有输出信息,都为错误输出流,用 StandardOutput是捕获不到任何消息的...
p.StartInfo.CreateNoWindow = false;//不创建进程窗口
p.Start();//启动线程
p.BeginErrorReadLine();//开始异步读取
p.WaitForExit();//等待完成
//p.StandardError.ReadToEnd();//开始同步读取
p.Close();//关闭进程
p.Dispose();//释放资源
return true;
}
public static bool PDF2SWF(string pdfPath, string swfPath)
{
return PDF2SWF(pdfPath, swfPath, GetPageCount(HttpContext.Current.Server.MapPath(pdfPath)));
}
public static int GetPageCount(string pdfPath)
{
//try
//{
byte[] buffer = System.IO.File.ReadAllBytes(pdfPath);
int length = buffer.Length;
if (buffer == null)
return -1;
if (buffer.Length <= 0)
return -1;
string pdfText = Encoding.Default.GetString(buffer);
System.Text.RegularExpressions.Regex rx1 = new System.Text.RegularExpressions.Regex(@"/Type\s*/Page[^s]");
System.Text.RegularExpressions.MatchCollection matches = rx1.Matches(pdfText);
return matches.Count;
//}
//catch (Exception ex)
//{
// throw ex;
//}
}
}
}
[责任编辑:jumbot]