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

 

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

posted on 2012-07-06 15:56  cw_volcano  阅读(2805)  评论(0编辑  收藏  举报