zoukankan      html  css  js  c++  java
  • C#实现PDF转SWF的操作

    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 ”参数。

    这样乱码的问题就解决了。

  • 相关阅读:
    软件破解系列之OD中断方法
    C#获取类名为Internet_Explorer_Server控件的内容
    C#重启网卡(支持xp和win7)
    软件开发专业技术名词的解释
    一些软件设计的原则
    AntlrWorks的Open没有反应,安装JDK6即可解决
    向大家推荐《思考中医》,这本书对我来说算是中医启蒙了 无为而为
    面对富裕对于贫穷的几乎是天生傲慢我们要呐喊: 我们并不笨,我们只是穷读新科诺贝尔文学奖得主,奥尔罕·帕慕克作品有感 无为而为
    推荐一本书《罗伯特议事规则(Robert's Rules of Order) 》,也许对于想要参与管理的技术人员来说是很有用的 无为而为
    再次发布一个工作地点在上海的Biztalk专家招聘 无为而为
  • 原文地址:https://www.cnblogs.com/cw_volcano/p/2579591.html
Copyright © 2011-2022 走看看