Office转Pdf

2017-05-07 10:37:13  访问(2728) 赞(0) 踩(0)


相关下载:Aspose.Cells.zip  Aspose.Slides.zip  Aspose.Words.zip     

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Aspose.Cells;
    using Aspose.Words;
    // PPT 测试 //
    using Aspose.Slides;
    using System.IO;
    using System.Reflection;
    
    namespace eKing.ToPDF
    {
        /// <summary>
        /// 转成PDF在方法
        /// </summary>
        public class ToPdfHelper
        {
            /// <summary>
            /// 
            /// </summary>
            public ToPdfHelper()
            {
    
            }
    
            /// <summary>
            /// 获得指定目录下文件的名字(防止重名) == 比如返回:开发计划[1].txt - FileUploadToOnlyFileName
            /// </summary>
            /// <param name="dirName">目录名</param>
            /// <param name="fileName">文件名无后缀,比如:开发计划</param>
            /// <param name="fileExt">文件后缀,比如:.txt</param>
            /// <param name="preName">文件加上序号后的前缀标识,如:[</param>
            /// <param name="postName">文件加上序号后的前缀标识,如:]</param>
            /// <returns>比如:开发计划.txt 或 开发计划[1].txt</returns>
            protected static string FileUploadToOnlyFileName
                (
                    string dirName,
                    string fileName,
                    string fileExt,
                    string preName,
                    string postName
                )
            {
                if (fileName == null || fileName.Length == 0)
                {
                    throw new Exception
                        (
                            "方法:"
                            + MethodBase.GetCurrentMethod().ReflectedType.FullName
                            + " "
                            + MethodBase.GetCurrentMethod().ToString()
                            + " 发生异常:"
                            + "传入的字符串参数:"
                            + "fileName"
                            + "为null或trim后为空。"
                        );
                }
    
                if (dirName == null || dirName.Length == 0)
                {
                    throw new Exception
                        (
                            "方法:"
                            + MethodBase.GetCurrentMethod().ReflectedType.FullName
                            + " "
                            + MethodBase.GetCurrentMethod().ToString()
                            + " 发生异常:"
                            + "传入的字符串参数:"
                            + "dirName"
                            + "为null或trim后为空。"
                        );
                }
    
                dirName = dirName.Trim();
    
                if (dirName.Length == 0)
                {
                    throw new Exception
                        (
                            "方法:"
                            + MethodBase.GetCurrentMethod().ReflectedType.FullName
                            + " "
                            + MethodBase.GetCurrentMethod().ToString()
                            + " 发生异常:"
                            + "传入的字符串参数:"
                            + "dirName"
                            + "为null或trim后为空。"
                        );
                }
    
                // 判断和移除/或\\
                if (dirName.EndsWith("/") || dirName.EndsWith("\\"))
                {
                    dirName = dirName.Substring(0, dirName.Length - 1);
                }
    
                if (dirName.Length == 0)
                {
                    throw new Exception
                        (
                            "方法:"
                            + MethodBase.GetCurrentMethod().ReflectedType.FullName
                            + " "
                            + MethodBase.GetCurrentMethod().ToString()
                            + " 发生异常:"
                            + "传入的字符串参数:"
                            + "dirName"
                            + "为null或trim后为空。"
                        );
                }
    
                if (!Directory.Exists(dirName))
                {
                    return fileName + fileExt;
                }
    
                string saveFileName = fileName + fileExt;
                string fullFileName = dirName + "\\" + saveFileName;
    
                if (!File.Exists(fullFileName))
                {
                    return saveFileName;
                }
    
    
                for (int i = 0; i < 99999; ++i)
                {
                    saveFileName = fileName + preName + i.ToString() + postName + fileExt;
                    fullFileName = dirName + "\\" + saveFileName;
    
                    if (!File.Exists(fullFileName))
                    {
                        return saveFileName;
                    }
                }
    
                throw new Exception
                    (
                        "方法:"
                        + MethodBase.GetCurrentMethod().ReflectedType.FullName
                        + " "
                        + MethodBase.GetCurrentMethod().ToString()
                        + " 发生异常:"
                        + "传入的字符串参数:"
                        + "dirName = (" + dirName + ")"
                        + "目录下文件过多"
                    );
            }
    
    
    
            /// <summary>
            /// 
            /// </summary> 
            /// <param name="fileName"></param>
            /// <returns></returns>
            protected static string ToSubName
                (
                    string fileName
                )
            {
                if (fileName == null)
                    return "";
    
                if (fileName.Length == 0)
                    return "";
    
                if (fileName.StartsWith("~/"))
                {
                    return fileName.Substring(2);
                }
    
                for (int i = 0; i < 10000; ++i)
                {
                    if (!fileName.StartsWith("~" + i.ToString() + "/"))
                        continue;
    
                    return fileName.Substring(("~" + i.ToString() + "/").Length);
                }
    
                return "";
            }
    
            /// <summary>
            /// 转成PDF文件
            /// </summary>
            /// <param name="physicalApplicationPath"></param>
            /// <param name="fileName"></param>
            /// <returns></returns>
            public static string ToPdf
                (
                    string physicalApplicationPath,
                    string fileName
                )
            {
                string toFileName = ToSubName(fileName);
    
                if (toFileName == null || toFileName.Length == 0)
                    return "";
    
                int idx = toFileName.LastIndexOf('.');
    
                if (idx == -1)
                    return "";
    
                //文件扩展名
                string extName
                    =
                    toFileName.Substring(idx + 1).Trim().ToLower();
    
                switch (extName)
                {
                    case "doc":
                    case "docx":
                    case "ppt":
                    case "pptx":
                    case "xls":
                    case "xlsx":
                        break;
                    default:
                        return "";
                }
    
                // 获得文件的完整路径 //
                string fileFullName = physicalApplicationPath + toFileName;
    
                FileInfo fi = new FileInfo(fileFullName);
    
                // 文件不存在 //
                if (!fi.Exists)
                    return "";
    
                string pdfFile = FileUploadToOnlyFileName
                    (
                        fi.Directory.FullName,
                        "p",
                        ".pdf",
                        "",
                        ""
                    );
    
                toFileName = toFileName.Replace("/", "\\");
    
                idx = toFileName.LastIndexOf('\\');
    
                if (idx == -1)
                    return "";
    
                string dirName = toFileName.Substring(0, idx);
    
                string pdfFullName = fi.Directory.FullName + "\\"
                    +
                    pdfFile;
    
                // 破解语句
                // eKing.ToPDF.ModifyInMemory.ActivateMemoryPatching();
    
                switch (extName)
                {
                    case "doc":
                    case "docx":
                        Document doc = new Document(fi.FullName);
                        doc.Save(pdfFullName, Aspose.Words.SaveFormat.Pdf);
                        break;
    
                    case "ppt":
                    case "pptx":
                        Presentation ppt = new Presentation(fi.FullName);
                        ppt.Save(pdfFullName, Aspose.Slides.Export.SaveFormat.Pdf);
                        break;
    
                    case "xls":
                    case "xlsx":
                        Workbook xls = new Workbook(pdfFullName);
                        Worksheet sheet = xls.Worksheets[0];
                        xls.Save(pdfFullName, Aspose.Cells.SaveFormat.Pdf);
                        break;
                }
    
                return dirName + "\\" + pdfFile;
            }
    
        }
    }
    

  • using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Reflection;
    using System.Runtime.CompilerServices;
    using System.Text;
    using System.Xml;
    
    
    namespace LicenseHelper
    {
        public static class ModifyInMemory
        {
            private static string AsposeList = "Aspose.3D.dll, Aspose.BarCode.dll, Aspose.BarCode.Compact.dll, Aspose.BarCode.WPF.dll, Aspose.Cells.GridDesktop.dll, Aspose.Cells.GridWeb.dll, Aspose.CAD.dll, Aspose.Cells.dll, Aspose.Diagram.dll, Aspose.Email.dll, Aspose.Imaging.dll, Aspose.Note.dll, Aspose.OCR.dll, Aspose.Pdf.dll, Aspose.Slides.dll, Aspose.Tasks.dll, Aspose.Words.dll";
    
            public static void ActivateMemoryPatching()
            {
                Assembly[] arr = AppDomain.CurrentDomain.GetAssemblies();
                foreach (Assembly assembly in arr)
                {
                    if (AsposeList.IndexOf(assembly.FullName.Split(',')[0] + ".dll") != -1)
                        ActivateForAssembly(assembly);
                }
                AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(ActivateOnLoad);
            }
    
            private static void ActivateOnLoad(object sender, AssemblyLoadEventArgs e)
            {
                if (AsposeList.IndexOf(e.LoadedAssembly.FullName.Split(',')[0] + ".dll") != -1)
                    ActivateForAssembly(e.LoadedAssembly);
            }
    
            private static void ActivateForAssembly(Assembly assembly)
            {
                MethodInfo miLicensed1 = typeof(ModifyInMemory).GetMethod("InvokeMe1", BindingFlags.NonPublic | BindingFlags.Static);
                MethodInfo miLicensed2 = typeof(ModifyInMemory).GetMethod("InvokeMe2", BindingFlags.NonPublic | BindingFlags.Static);
                MethodInfo miEvaluation = null;
    
                Dictionary<string, MethodInfo> miDict = new Dictionary<string, MethodInfo>()
                {
                    {"System.DateTime"      , miLicensed1},
                    {"System.Xml.XmlElement", miLicensed2}
                };
    
                Type[] arrType = null;
                bool isFound = false;
                int nCount = 0;
    
                try
                {
                    arrType = assembly.GetTypes();
                }
                catch (ReflectionTypeLoadException err)
                {
                    arrType = err.Types;
                }
    
    
                foreach (Type type in arrType)
                {
                    if (isFound) break;
    
                    if (type == null) continue;
    
                    MethodInfo[] arrMInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Static);
    
                    foreach (MethodInfo info in arrMInfo)
                    {
                        if (isFound) break;
    
                        try
                        {
                            string strMethod = info.ToString();
                            if ((strMethod.IndexOf("(System.Xml.XmlElement, System.String)") > 0) && (miDict.ContainsKey(info.ReturnType.ToString())))
                            {
                                miEvaluation = info;
                                MemoryPatching(miEvaluation, miDict[miEvaluation.ReturnType.ToString()]);
                                nCount++;
    
                                if (((assembly.FullName.IndexOf("Aspose.Pdf") == -1) && (nCount == 2)) ||
                                    ((assembly.FullName.IndexOf("Aspose.Pdf") != -1) && (nCount == 6)))
                                {
                                    isFound = true;
                                    break;
                                }
                            }
                        }
                        catch
                        {
                            throw new InvalidOperationException("MemoryPatching for \"" + assembly.FullName + "\" failed !");
                        }
                    }
                }
    
                String[] aParts = assembly.FullName.Split(',');
                string fName = aParts[0];
                if (fName.IndexOf("Aspose.BarCode.") != -1)
                    fName = "Aspose.BarCode";
                else if (fName.IndexOf("Aspose.3D") != -1)
                    fName = "Aspose.ThreeD";
    
                try
                {
                    Type type2 = assembly.GetType(fName + ".License");
                    MethodInfo mi = type2.GetMethod("SetLicense", new Type[] { typeof(Stream) });
                    string LData = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5MaWNlbnNlZTwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPmxpY2Vuc2VlQGVtYWlsLmNvbTwvRW1haWxUbz4KICAgIDxMaWNlbnNlVHlwZT5EZXZlbG9wZXIgT0VNPC9MaWNlbnNlVHlwZT4KICAgIDxMaWNlbnNlTm90ZT5MaW1pdGVkIHRvIDEwMDAgZGV2ZWxvcGVyLCB1bmxpbWl0ZWQgcGh5c2ljYWwgbG9jYXRpb25zPC9MaWNlbnNlTm90ZT4KICAgIDxPcmRlcklEPjc4NDM3ODU3Nzg1PC9PcmRlcklEPgogICAgPFVzZXJJRD4xMTk3ODkyNDM3OTwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIFByb2R1Y3QgRmFtaWx5PC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+e0YyQjk3MDQ1LTFCMjktNEIzRi1CRDUzLTYwMUVGRkExNUFBOX08L1NlcmlhbE51bWJlcj4KICAgIDxTdWJzY3JpcHRpb25FeHBpcnk+MjA5OTEyMzE8L1N1YnNjcmlwdGlvbkV4cGlyeT4KICAgIDxMaWNlbnNlVmVyc2lvbj4zLjA8L0xpY2Vuc2VWZXJzaW9uPgogIDwvRGF0YT4KICA8U2lnbmF0dXJlPlFYTndiM05sTGxSdmRHRnNJRkJ5YjJSMVkzUWdSbUZ0YVd4NTwvU2lnbmF0dXJlPgo8L0xpY2Vuc2U+";
                    Stream stream = new MemoryStream(Convert.FromBase64String(LData));
                    stream.Seek(0, SeekOrigin.Begin);
                    mi.Invoke(Activator.CreateInstance(type2, null), new Stream[] { stream });
                }
                catch
                {
                    throw new InvalidOperationException("SetLicense for \"" + assembly.FullName + "\" failed !");
                }
    
            }
    
    
            private static DateTime InvokeMe1(XmlElement element, string name)
            {
                return DateTime.MaxValue;
            }
    
    
            private static XmlElement InvokeMe2(XmlElement element, string name)
            {
                if (element.LocalName == "License")
                {
                    string License64 = "PERhdGE+PExpY2Vuc2VkVG8+R3JvdXBEb2NzPC9MaWNlbnNlZFRvPjxMaWNlbnNlVHlwZT5TaXRlIE9FTTwvTGljZW5zZVR5cGU+PExpY2Vuc2VOb3RlPkxpbWl0ZWQgdG8gMTAgZGV2ZWxvcGVyczwvTGljZW5zZU5vdGU+PE9yZGVySUQ+MTMwNzI0MDQwODQ5PC9PcmRlcklEPjxPRU0+VGhpcyBpcyBhIHJlZGlzdHJpYnV0YWJsZSBsaWNlbnNlPC9PRU0+PFByb2R1Y3RzPjxQcm9kdWN0PkFzcG9zZS5Ub3RhbDwvUHJvZHVjdD48L1Byb2R1Y3RzPjxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT48U2VyaWFsTnVtYmVyPjliNTc5NTAxLTUyNjEtNDIyMC04NjcwLWZjMmQ4Y2NkZDkwYzwvU2VyaWFsTnVtYmVyPjxTdWJzY3JpcHRpb25FeHBpcnk+MjAxNDA3MjQ8L1N1YnNjcmlwdGlvbkV4cGlyeT48TGljZW5zZVZlcnNpb24+Mi4yPC9MaWNlbnNlVmVyc2lvbj48L0RhdGE+PFNpZ25hdHVyZT5udFpocmRoL3I0QS81ZFpsU2dWYnhac0hYSFBxSjZ5UVVYa0RvaW4vS2lVZWhUUWZET0lQdHdzUlR2NmRTUVplOVdXekNnV3RGdkdROWpmR2QySmF4YUQvbkx1ZEk2R0VVajhqeVhUMG4vbWRrMEF1WVZNYlBXRjJYd3dSTnFlTmRrblYyQjhrZVFwbDJ2RzZVbnhxS2J6VVFxS2Rhc1pzZ2w1Q0xqSFVEWms9PC9TaWduYXR1cmU+";
                    element.InnerXml = new UTF8Encoding().GetString(Convert.FromBase64String(License64));
                }
    
                if (element.LocalName == "BlackList")
                {
                    string BlackList64 = "PERhdGE+PC9EYXRhPjxTaWduYXR1cmU+cUJwMEx1cEVoM1ZnOWJjeS8vbUVXUk9KRWZmczRlY25iTHQxYlNhanU2NjY5RHlad09FakJ1eEdBdVBxS1hyd0x5bmZ5VWplYUNGQ0QxSkh2RVUxVUl5eXJOTnBSMXc2NXJIOUFyUCtFbE1lVCtIQkZ4NFMzckFVMnd6dkxPZnhGeU9DQ0dGQ2UraTdiSHlGQk44WHp6R1UwdGRPMGR1RTFoRTQ5M1RNY3pRPTwvU2lnbmF0dXJlPg==";
                    element.InnerXml = new UTF8Encoding().GetString(Convert.FromBase64String(BlackList64));
                }
    
                XmlNodeList elementsByTagName = element.GetElementsByTagName(name);
                if (elementsByTagName.Count <= 0)
                {
                    return null;
                }
    
                return (XmlElement)elementsByTagName[0];
            }
    
    
            private static unsafe void MemoryPatching(MethodBase miEvaluation, MethodBase miLicensed)
            {
                IntPtr IntPtrEval = GetMemoryAddress(miEvaluation);
                IntPtr IntPtrLicensed = GetMemoryAddress(miLicensed);
    
                if (IntPtr.Size == 8)
                    *((long*)IntPtrEval.ToPointer()) = *((long*)IntPtrLicensed.ToPointer());
                else
                    *((int*)IntPtrEval.ToPointer()) = *((int*)IntPtrLicensed.ToPointer());
    
            }
    
    
            private static unsafe IntPtr GetMemoryAddress(MethodBase mb)
            {
                RuntimeHelpers.PrepareMethod(mb.MethodHandle);
    
                if ((Environment.Version.Major >= 4) || ((Environment.Version.Major == 2) && (Environment.Version.MinorRevision >= 3053)))
                {
                    return new IntPtr(((int*)mb.MethodHandle.Value.ToPointer() + 2));
                }
    
                UInt64* location = (UInt64*)(mb.MethodHandle.Value.ToPointer());
                int index = (int)(((*location) >> 32) & 0xFF);
                if (IntPtr.Size == 8)
                {
                    ulong* classStart = (ulong*)mb.DeclaringType.TypeHandle.Value.ToPointer();
                    ulong* address = classStart + index + 10;
                    return new IntPtr(address);
                }
                else
                {
                    uint* classStart = (uint*)mb.DeclaringType.TypeHandle.Value.ToPointer();
                    uint* address = classStart + index + 10;
                    return new IntPtr(address);
                }
            }
        }
    }
    //End
    

标签:Office转Pdf 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)
 
  ┈全部┈  
 
(显示默认分类)