http://www.cpbcw.com/codetree1365/PSD2swfHelper.cs.html
http://tangshuo.iteye.com/blog/538361
1.
using System.Web; using System.Text; public static class PSD2swfHelper { /// <summary> /// 转换所有的页,图片质量80% /// </summary> /// <param name="pdfPath">PDF文件地址</param> /// <param name="swfPath">生成后的SWF文件地址</param> public static bool PDF2SWF(string pdfPath, string swfPath) { return PDF2SWF(pdfPath, swfPath, 1, GetPageCount(HttpContext.Current.Server.MapPath(pdfPath)), 80); } /// <summary> /// 转换前N页,图片质量80% /// </summary> /// <param name="pdfPath">PDF文件地址</param> /// <param name="swfPath">生成后的SWF文件地址</param> /// <param name="page">页数</param> public static bool PDF2SWF(string pdfPath, string swfPath, int page) { return PDF2SWF(pdfPath, swfPath, 1, page, 80); } /// <summary> /// PDF格式转为SWF /// </summary> /// <param name="pdfPath">PDF文件地址</param> /// <param name="swfPath">生成后的SWF文件地址</param> /// <param name="beginpage">转换开始页</param> /// <param name="endpage">转换结束页</param> private static bool PDF2SWF(string pdfPath, string swfPath, int beginpage, int endpage, int photoQuality) { string exe = HttpContext.Current.Server.MapPath("~/Bin/tools/pdf2swf-0.9.1.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 + "\""); sb.Append(" -o \"" + swfPath + "\""); sb.Append(" -s flashversion=9"); if (endpage > GetPageCount(pdfPath)) endpage = GetPageCount(pdfPath); sb.Append(" -p " + "\"" + beginpage + "" + "-" + endpage + "\""); sb.Append(" -j " + photoQuality); 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.RedirectStandardError = true; p.StartInfo.CreateNoWindow = false; p.Start(); p.BeginErrorReadLine(); p.WaitForExit(); p.Close(); p.Dispose(); return true; } /// <summary> /// 返回页数 /// </summary> /// <param name="pdfPath">PDF文件地址</param> private static int GetPageCount(string pdfPath) { 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; } }
2.
通过代码将PDF转换成SWF来说,现在比较常用的一种方式就是利用SWFTools工具中的pdf2swf(http://www.swftools.org/)。这个工具还是比较好用的。转换成的SWF文件质量也不错。
/**
public class Converter { public static int convertPDF2SWF(String sourcePath, String destPath, String fileName) throws IOException { //目标路径不存在则建立目标路径 File dest = new File(destPath); if (!dest.exists()) dest.mkdirs(); //源文件不存在则返回 File source = new File(sourcePath); if (!source.exists()) return 0; //调用pdf2swf命令进行转换 String command = "D:\\Program Files\\SWFTools\\pdf2swf.exe" + " -o \"" + destPath + "\\" + fileName + "\" <span style="color: #ff0000;">-s languagedir=D:\\xpdf\\xpdf-chinese-simplified</span> -s flashversion=9 \"" + sourcePath + "\""; Process pro = Runtime.getRuntime().exec(command); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(pro.getInputStream())); while (bufferedReader.readLine() != null); try { pro.waitFor(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return pro.exitValue(); } public static void main(String []args) throws IOException { String sourcePath = "c:\\test.pdf"; String destPath = "c:\\"; String fileName = "test.swf"; Converter.convertPDF2SWF(sourcePath, destPath, fileName); } }
就这么简单的几行代码就可以了。但是在程序中遇到中文就会出现意想不到的情况,这个也不例外。在转换中,我发现有些中文PDF文件转换后会出现乱码的现象,因此这里还要处理一下乱码的问题。看到上面代码中红色的一段了吗?这就是解决乱码的方法。这个方法是参考了http://hi.baidu.com/xwx520/blog/item/1d0c423885b392fab311c72e.html这篇文章,感谢作者。
1.下载XPDF:ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz,并解压到xpdf-chinese-simplified目录下。
2.下载字体:http://blog.pjoke.com/wp-content/uploads/2009/02/font.zip,并解压到xpdf-chinese-simplified/CMap目录下。
3.修改xpdf-chinese-simplified目录下的add-to-xpdfrc文件。将里面的路径设为自己的路径:
4.参照上面的代码,在调用pdf2swf命令中加入“ -s languagedir=D:\\xpdf\\xpdf-chinese-simplified ”参数。
这样乱码的问题就解决了。