123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using ComPDFKit_Conversion.Converter;
- using System.Diagnostics;
- using System.IO;
- using Microsoft.AppCenter.Crashes.Ingestion.Models;
- using static Dropbox.Api.Sharing.ListFileMembersIndividualResult;
- using ComPDFKit_Conversion.Options;
- using PDF_Master.CustomControl;
- using Exception = System.Exception;
- using ImageMagick;
- using System.IO.Compression;
- using System.Windows;
- namespace PDF_Master.Helper
- {
- public static class ConverterHelper
- {
- public static CPDFConverterWord wordConverter = null;
- public static CPDFConverterExcel excelConverter = null;
- public static CPDFConverterPPT pptConverter = null;
- public static CPDFConverterTxt txtConverter = null;
- public static CPDFConverterCsv csvConverter = null;
- public static CPDFConverterImg imgConverter = null;
- public static CPDFConverterRTF rtfConverter = null;
- public static CPDFConverterHTML htmlConverter = null;
- public static async Task<bool> WordConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertWordOptions wordOptions = null, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- int[] pageArray = pageIndexLists.ToArray();
- wordConverter = new CPDFConverterWord(inputpath, pawssword);
- string outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- string outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- string filename = GetFileNameAddSuffix(outputFolder, outputFileName, ".docx");
- result = await Task.Run(() => wordConverter.Convert(outputFolder, ref outputFileName, wordOptions, pageArray, ref error, getProgress));
- if (result)
- {
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static async Task<bool> PPTConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertPPTOptions pptOptions = null, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- int[] pageArray = pageIndexLists.ToArray();
- pptConverter = new CPDFConverterPPT(inputpath, pawssword);
- string outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- string outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- string filename = GetFileNameAddSuffix(outputFolder, outputFileName, ".ppt");
- result = await Task.Run(() => pptConverter.Convert(outputFolder, ref outputFileName, pptOptions, pageArray, ref error, getProgress));
- if (result)
- {
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static async Task<bool> ExcelConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertExcelOptions ExcelOption, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- excelConverter = new CPDFConverterExcel(inputpath, pawssword);
- int[] pageArray = pageIndexLists.ToArray();
- string outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- string outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- result = await Task.Run(() => excelConverter.Convert(outputFolder, ref outputFileName, ExcelOption, pageArray, ref error, getProgress));
- if (result)
- {
- if (File.Exists(outputFileName))
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- else if (outputFileName == "NoTable")
- MessageBoxEx.Show("No Table");
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- //public static async Task<bool> TableConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword)
- //{
- // bool result = false;
- // try
- // {
- // int[] pageArray = pageIndexLists.ToArray();
- // tableConverter = new CPDFConverterTable(inputpath, pawssword);
- // string outputFolder = outputpath;
- // string outputFileName = Path.GetFileNameWithoutExtension(inputpath);
- // ConvertError error = ConvertError.ERR_UNKNOWN;
- // string filename = GetFileNameAddSuffix(outputFolder, outputFileName, ".xlsx");
- // result = await Task.Run(() => tableConverter.Convert(outputFolder, ref outputFileName, pageArray, ref error, getProgress));
- // }
- // catch (Exception ex)
- // {
- // }
- // return result;
- //}
- public static async Task<bool> CSVConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertCsvOptions csvOptions = null, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- int[] pageArray = pageIndexLists.ToArray();
- csvConverter = new CPDFConverterCsv(inputpath, pawssword);
- string outputFolder = "";
- string outputFileName = "";
- if (IsCustomFileName)
- {
- outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- }
- else
- {
- outputFolder = outputpath;
- outputFileName = Path.GetFileNameWithoutExtension(inputpath);
- }
- ConvertError error = ConvertError.ERR_UNKNOWN;
- string filename = GetFileNameAddSuffix(outputFolder, outputFileName, ".csv");
- result = await Task.Run(() => csvConverter.Convert(outputFolder, ref outputFileName, csvOptions, pageArray, ref error, getProgress));
- if (result)
- {
- if (File.Exists(outputFileName))
- {
- if (IsCustomFileName)
- {
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- }
- else
- {
- string FileName = CommonHelper.CreateFolder(outputFileName.Replace(".zip", ""));
- ZipFile.ExtractToDirectory(outputFileName, FileName);
- File.Delete(outputFileName);
- CommonHelper.ShowFileBrowser(FileName.Replace("/", "\\"));
- }
- }
- else
- MessageBox.Show("None CSV");
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static async Task<bool> TxtConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertTxtOptions txtOptions = null, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- int[] pageArray = pageIndexLists.ToArray();
- txtConverter = new CPDFConverterTxt(inputpath, pawssword);
- string outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- string outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- string filename = GetFileNameAddSuffix(outputFolder, outputFileName, ".txt");
- result = await Task.Run(() => txtConverter.Convert(outputFolder, ref outputFileName, txtOptions, pageArray, ref error, getProgress));
- if (result)
- {
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static void ImageMagickPDFToImage(string imageType, string filePath, string outputFolder, string outputFileName, ref string FileName)
- {
- FileName = CommonHelper.CreateFolder(outputFolder + "\\" + outputFileName);
- ZipFile.ExtractToDirectory(filePath, FileName);
- var files = Directory.GetFiles(FileName, "*.png");
- int i = 0;
- var images = new MagickImageCollection();
- foreach (var file in files)
- {
- //pdf整体转为gif,将.gifoff改为.gif
- Trace.WriteLine(file);
- if (imageType == ".gifoff")
- {
- images.Add(file);
- images[i].AnimationDelay = 100; // in this example delay is 1000ms/1sec
- images[i].Flip();
- }
- using (var image = new MagickImage(file))
- {
- if (imageType != ".gifoff")
- {
- //Save frame as jpg
- //image.Format = MagickFormat.Jp2;
- image.Write(file.Remove(file.LastIndexOf(".png"), 4) + imageType);
- }
- // 删除该文件
- System.IO.File.Delete(file);
- }
- }
- if (imageType == ".gifoff")
- {
- // Optionally reduce colors
- var settings = new QuantizeSettings();
- settings.Colors = 256;
- images.Quantize(settings);
- // Optionally optimize the images (images should have the same size).
- images.Optimize();
- // Save gif
- int fileIndex = 1;
- if (File.Exists(outputFolder + "\\" + outputFileName + ".gif"))
- {
- while (fileIndex >= 1)
- {
- if (!File.Exists(outputFolder + "\\" + outputFileName + "_" + fileIndex + ".gif"))
- {
- images.Write(outputFolder + "\\" + outputFileName + ".gif");
- fileIndex = -1;
- }
- fileIndex++;
- }
- }
- else { images.Write(outputFolder + "\\" + outputFileName + ".gif"); }
- }
- //else {
- // int fileIndex = 1;
- // if (File.Exists(outputFolder + "\\" + outputFileName + ".zip"))
- // {
- // while (fileIndex>=1) {
- // if (!File.Exists(outputFolder + "\\" + outputFileName + "_" + fileIndex + ".zip"))
- // {
- // ZipFile.CreateFromDirectory(outputFolder + "\\" + outputFileName, outputFolder + "\\" + outputFileName + "_" + fileIndex + ".zip");
- // fileIndex=-1;
- // }
- // fileIndex++;
- // }
- // }
- // else { ZipFile.CreateFromDirectory(outputFolder + "\\" + outputFileName, outputFolder + "\\" + outputFileName + ".zip"); }
- //}
- //DirectoryInfo di = new DirectoryInfo(outputFolder + "\\" + outputFileName);
- //di.Delete(true);
- }
- public static async Task<bool> ImgConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, string imageType = ".png", CPDFConvertImgOptions imgOptions = null)
- {
- string FileName = "";
- bool result = false;
- try
- {
- int[] pageArray = pageIndexLists.ToArray();
- imgConverter = new CPDFConverterImg(inputpath, pawssword);
- string outputFolder = outputpath;
- string outputFileName = Path.GetFileNameWithoutExtension(inputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- if (imageType == ".png" || imageType == ".jpg")
- {
- result = await Task.Run(() => imgConverter.Convert(outputFolder, ref outputFileName, imgOptions, pageArray, ref error, getProgress));
- FileName = CommonHelper.CreateFolder(outputFileName.Replace(".zip", ""));
- ZipFile.ExtractToDirectory(outputFileName, FileName);
- FileInfo file = new FileInfo(outputFileName);
- if (file.Exists) { file.Delete(); }
- }
- else
- { //创建缓存文件夹
- string folderPath = Path.Combine(App.CurrentPath, "ConverterImg");
- //有可能因为其他原因存在同名文件,导致创建文件夹失败,需要先删除同名文件
- //保险措施(猜测)
- if (File.Exists(folderPath))
- {
- File.Delete(folderPath);
- }
- DirectoryInfo tempfolder = new DirectoryInfo(folderPath);
- if (!tempfolder.Exists)
- {
- tempfolder.Create();
- }
- //预览图缓存
- string saveName = Guid.NewGuid().ToString();
- string savePath = Path.Combine(folderPath, saveName);
- result = await Task.Run(() => imgConverter.Convert(folderPath, ref saveName, imgOptions, pageArray, ref error, getProgress));
- ImageMagickPDFToImage(imageType, saveName, outputFolder, outputFileName, ref FileName);
- DirectoryInfo di = new DirectoryInfo(folderPath);
- di.Delete(true);
- }
- if (result)
- {
- //Process.Start(FileName.Replace("/", "\\"));
- CommonHelper.ShowFileBrowser(FileName.Replace("/", "\\"));
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static async Task<bool> RTFConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertRTFOptions rtfOptions = null, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- int[] pageArray = pageIndexLists.ToArray();
- rtfConverter = new CPDFConverterRTF(inputpath, pawssword);
- string outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- string outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- result = await Task.Run(() => rtfConverter.Convert(outputFolder, ref outputFileName, rtfOptions, pageArray, ref error, getProgress));
- if (result)
- {
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static async Task<bool> HTMLConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists, string pawssword, CPDFConvertHTMLOptions HtmlOption, bool IsCustomFileName = true)
- {
- bool result = false;
- try
- {
- htmlConverter = new CPDFConverterHTML(inputpath, pawssword);
- int[] pageArray = pageIndexLists.ToArray();
- string outputFolder = outputpath.Remove(outputpath.LastIndexOf("\\"));
- string outputFileName = Path.GetFileNameWithoutExtension(outputpath);
- ConvertError error = ConvertError.ERR_UNKNOWN;
- result = await Task.Run(() => htmlConverter.Convert(outputFolder, ref outputFileName, HtmlOption, pageArray, ref error, getProgress));
- if (result)
- {
- CommonHelper.ShowFileBrowser(outputFileName.Replace("/", "\\"));
- }
- }
- catch (Exception ex)
- {
- }
- return result;
- }
- public static void Clear()
- {
- if (wordConverter != null)
- {
- wordConverter.Cancel();
- }
- if (excelConverter != null)
- {
- excelConverter.Cancel();
- }
- if (pptConverter != null)
- {
- pptConverter.Cancel();
- }
- if (txtConverter != null)
- {
- txtConverter.Cancel();
- }
- if (csvConverter != null)
- {
- csvConverter.Cancel();
- }
- if (rtfConverter != null)
- {
- rtfConverter.Cancel();
- }
- if (htmlConverter != null)
- {
- htmlConverter.Cancel();
- }
- Console.WriteLine("killed");
- }
- private static void StartFile(string path)
- {
- //Process.Start(path);
- }
- public static string GetFileNameAddSuffix(string path, string filename, string suffix)
- {
- int i = 1;
- string outname = filename;
- while (File.Exists(path + @"\" + outname + suffix))
- {
- outname = filename + $"({i.ToString()})";
- i++;
- }
- return outname;
- }
- }
- }
|