using PDF_Master.Model.PDFTool;
using PDF_Master.Properties;
using PDFSettings;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PDF_Master.Helper
{
///
/// 预设需求:远程控制对PDF工具进行排序
///
public enum PDFToolType
{
///
/// 普通工具
///
Normal,
///
/// 常用工具
///
Common,
///
///付费工具
///
Payment,
///
/// 优势工具
///
Advantage,
///
/// 无需打开文档
///
NoNeedToOpenDoc
}
public enum PDFFnType
{
Split,
Extract,
Insert,
Compress,
Merge,
Print,
Security,
ConvertPDF,
PDFToWord,
PDFToExcel,
PDFToPPT,
ImageToPDF,
OCR,
WaterMark,
HeaderFooter,
BatesNumbers,
Batch,
Background,
CompareDoc,
Redact,
PageEdit,
BatchRemove,
FormFiledRecognition,
PDFToImage,
}
///
/// PDF工具初始化类型
///
internal class PDFToolsInit
{
public ToolItem toolItem { get; private set; }
public PDFToolsInit()
{
toolItem = new ToolItem();
}
///
/// 图标
///
public void SetImagePath(string path)
{
toolItem.FnImg = path;
}
///
/// 初始化UI显示内容
///
public void SetContent(string fnName,string fnInfo)
{
toolItem.FnName = fnName;
toolItem.FnInfo = fnInfo;
}
///
/// 初始化功能
///
public void SetFnType(PDFFnType fnType)
{
toolItem.FnType = fnType;
}
}
public class PDFToolsHelper
{
public List AllTools = null;
public List QuickTools = null;
public List MoreTools = null;
private static PDFToolsHelper pDFToolsHelper;
public const int QuickToolCount = 8;//快捷工具显示的个数
public static PDFToolsHelper GetInstance()
{
if (pDFToolsHelper == null)
pDFToolsHelper = new PDFToolsHelper();
return pDFToolsHelper;
}
private PDFToolsHelper()
{
InitPDFTools();
}
private void InitPDFTools()
{
AllTools = new List();
QuickTools = new List();
MoreTools = new List();
//测试代码
//Settings.Default.AllPDFToolsList.Clear();
//Settings.Default.QuickPDFToolsList.Clear();
//Settings.Default.Save();
InitAllTools();
InitQuickTools();
InitMoreTools();
// ContianNewTools();
}
//用来测试的
public void ClearData()
{
Settings.Default.AllPDFToolsList.Clear();
Settings.Default.QuickPDFToolsList.Clear();
Settings.Default.Save();
AllTools.Clear();
QuickTools.Clear();
MoreTools.Clear();
InitAllTools();
InitQuickTools();
InitMoreTools();
}
private void InitAllTools()
{
//批量处理
var batch = new PDFToolsInit();
batch.SetFnType(PDFFnType.Batch);
batch.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/batch.png");
batch.SetContent("批量处理", "Batch convert, compress, secure, watermark PDFs.");
//OCR
var oCR = new PDFToolsInit();
oCR.SetFnType(PDFFnType.OCR);
oCR.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/ocr.png");
oCR.SetContent("OCR", "Batch convert, compress, secure, watermark PDFs.");
//转档PDF
var convertPDF = new PDFToolsInit();
convertPDF.SetFnType(PDFFnType.ConvertPDF);
convertPDF.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/convert.png");
convertPDF.SetContent("转档PDF", "Convert PDFs to Word/Excel/PPT/HTML/Text/RTF/CSV/Image files");
//图片转PDF
var imageToPDF = new PDFToolsInit();
imageToPDF.SetFnType(PDFFnType.ImageToPDF);
imageToPDF.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/image.png");
imageToPDF.SetContent("Image To PDF", "Convert JPEG/JPG/PNG/TIFF/BMP files to PDF");
//合并
var merge = new PDFToolsInit();
merge.SetFnType(PDFFnType.Merge);
merge.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/merge.png");
merge.SetContent("Merge", "Combine multiple documents into a new PDF file");
//压缩
var compress = new PDFToolsInit();
compress.SetFnType(PDFFnType.Compress);
compress.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/compress.png");
compress.SetContent("Compress", "Reduce files size to make sure you can easily send them by mail");
//安全
var security = new PDFToolsInit();
security.SetFnType(PDFFnType.Security);
security.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/security.png");
security.SetContent("Security", "Limit access to PDFs, restrict copying and printing permission with passwords");
//文件对比
var compareDoc = new PDFToolsInit();
compareDoc.SetFnType(PDFFnType.CompareDoc);
compareDoc.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/compress.png");
compareDoc.SetContent("文件对比", "Batch convert, compress, secure, watermark PDFs.");
//PDF转PPT
var pDFToPPT = new PDFToolsInit();
pDFToPPT.SetFnType(PDFFnType.PDFToPPT);
pDFToPPT.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-ppt.png");
pDFToPPT.SetContent("To PPT", "Turn your PDF into a formatted PPT file that you can edit");
//PDF转Excel
var pDFToExcel = new PDFToolsInit();
pDFToExcel.SetFnType(PDFFnType.PDFToExcel);
pDFToExcel.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-excel.png");
pDFToExcel.SetContent("To Excel", "Turn PDF table into a formatted Excel file");
//PDF转Word
var pDFToWord = new PDFToolsInit();
pDFToWord.SetFnType(PDFFnType.PDFToWord);
pDFToWord.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-word.png");
pDFToWord.SetContent("To Word", "Convert PDF to Word, Fonts&formatting get converted");
//PDF转图片
var pDFToImage = new PDFToolsInit();
pDFToImage.SetFnType(PDFFnType.PDFToImage);
pDFToImage.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/pdf-to-image.png");
pDFToImage.SetContent("To Image", "Convert PDF to image, such as JPEG, JPG, PNG, GIF, TIFF, TGA,BMP.");
//水印
var waterMark = new PDFToolsInit();
waterMark.SetFnType(PDFFnType.WaterMark);
waterMark.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/watermark.png");
waterMark.SetContent("水印", "Batch convert, compress, secure, watermark PDFs.");
//背景
var background = new PDFToolsInit();
background.SetFnType(PDFFnType.Background);
background.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/background.png");
background.SetContent("背景", "Batch convert, compress, secure, watermark PDFs.");
//页眉页脚
var headerFooter = new PDFToolsInit();
headerFooter.SetFnType(PDFFnType.HeaderFooter);
headerFooter.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/header&footer.png");
headerFooter.SetContent("页眉页脚", "Batch convert, compress, secure, watermark PDFs.");
//贝茨Bates码
var batesNumbers = new PDFToolsInit();
batesNumbers.SetFnType(PDFFnType.BatesNumbers);
batesNumbers.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/batesnumbers.png");
batesNumbers.SetContent("贝茨Bates码", "Batch convert, compress, secure, watermark PDFs.");
//批量移除
var batchRemove = new PDFToolsInit();
batchRemove.SetFnType(PDFFnType.BatchRemove);
batchRemove.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/batch-remove.png");
batchRemove.SetContent("批量移除", "Batch convert, compress, secure, watermark PDFs.");
//编辑
var redact = new PDFToolsInit();
redact.SetFnType(PDFFnType.Redact);
redact.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/reduct.png");
redact.SetContent("编辑", "Batch convert, compress, secure, watermark PDFs.");
//表单存档识别
var formFiledRecognition = new PDFToolsInit();
formFiledRecognition.SetFnType(PDFFnType.FormFiledRecognition);
formFiledRecognition.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/form-filed-recognition.png");
formFiledRecognition.SetContent("表单存档识别", "Batch convert, compress, secure, watermark PDFs.");
//打印
var print = new PDFToolsInit();
print.SetFnType(PDFFnType.Print);
print.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/print.png");
print.SetContent("打印", "Batch convert, compress, secure, watermark PDFs.");
//页面编辑
var pageEdit = new PDFToolsInit();
pageEdit.SetFnType(PDFFnType.PageEdit);
pageEdit.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/page-edit.png");
pageEdit.SetContent("页面编辑", "Batch convert, compress, secure, watermark PDFs.");
//插入
var insert = new PDFToolsInit();
insert.SetFnType(PDFFnType.Insert);
insert.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/insert.png");
insert.SetContent("插入", "Batch convert, compress, secure, watermark PDFs.");
//拆分
var split = new PDFToolsInit();
split.SetFnType(PDFFnType.Split);
split.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/split.png");
split.SetContent("拆分", "Batch convert, compress, secure, watermark PDFs.");
//提取
var extract = new PDFToolsInit();
extract.SetFnType(PDFFnType.Extract);
extract.SetImagePath(@"pack://application:,,,/Resources/HomeIcon/PDFTools/extract.png");
extract.SetContent("提取", "Batch convert, compress, secure, watermark PDFs.");
///设置快捷工具默认初始顺序
AllTools.Add(pDFToWord.toolItem);
AllTools.Add(pDFToExcel.toolItem);
AllTools.Add(pDFToPPT.toolItem);
AllTools.Add(pDFToImage.toolItem);
AllTools.Add(imageToPDF.toolItem);
AllTools.Add(merge.toolItem);
AllTools.Add(compress.toolItem);
AllTools.Add(security.toolItem);
//更多工具默认初始顺序
//AllTools.Add(split.toolItem);
//AllTools.Add(extract.toolItem);
//AllTools.Add(insert.toolItem);
//AllTools.Add(merge.toolItem);
//AllTools.Add(print.toolItem);
//AllTools.Add(convertPDF.toolItem);
//AllTools.Add(imageToPDF.toolItem);
//AllTools.Add(oCR.toolItem);
//AllTools.Add(waterMark.toolItem);
//AllTools.Add(headerFooter.toolItem);
//AllTools.Add(batesNumbers.toolItem);
//AllTools.Add(batch.toolItem);
//AllTools.Add(background.toolItem);
//AllTools.Add(compareDoc.toolItem);
//AllTools.Add(redact.toolItem);
//AllTools.Add(pageEdit.toolItem);
//AllTools.Add(batchRemove.toolItem);
//AllTools.Add(formFiledRecognition.toolItem);
//AllTools.Add(pDFToImage.toolItem);
}
///
/// 检查是否为新增工具
///
private void ContianNewTools()
{
var cacheList = Settings.Default.AllPDFToolsList;
foreach (var item in AllTools)
{
ToolItem toolItem = null;
foreach (var cacheItem in cacheList)
{
var strFnTye = Enum.GetName(typeof(PDFFnType), item.FnType);
if (cacheItem.FnTypeStr != strFnTye && cacheItem.IsNewTool == true)
{
toolItem = item;
break;
}
}
if(toolItem != null && toolItem.IsNewTool == true)
{
CacheToolItem cacheTool = new CacheToolItem();
cacheTool.IsNewTool = true;
cacheTool.ToolTypeId = toolItem.ToolTypeId;
cacheTool.ToolTypeStr = Enum.GetName(typeof(PDFToolType), toolItem.ToolType);
cacheTool.FnTypeStr = Enum.GetName(typeof(PDFFnType), toolItem.FnType);
Settings.Default.AllPDFToolsList.Add(cacheTool);
}
}
Settings.Default.Save();
}
///
/// 快捷工具
///
private void InitQuickTools()
{
//读取缓存的形式
//var cacheList = Settings.Default.AllPDFToolsList;
//if (cacheList == null)
//暂时不用支持记录到缓存,且原方案有一定bug,先采用简单的形式加载处理
var cacheList = new AllPDFToolsList();
if(cacheList.Count > 0)
{
int currentCount = 0;
foreach (var cacheItem in cacheList)
{
if (cacheItem.ToolLayOutType == 1 && currentCount <= QuickToolCount)
{
foreach (var allItem in AllTools)
{
if (cacheItem.FnTypeStr == Enum.GetName(typeof(PDFFnType), allItem.FnType))
{
allItem.IsQuickTool = true;
var index = QuickTools.FindIndex(t => t.ToolTypeId > allItem.ToolTypeId);
if (index == -1)
{
allItem.ToolTypeId = cacheItem.ToolTypeId;
QuickTools.Add(allItem);
}
else
{
allItem.ToolTypeId = index;
QuickTools.Insert(index, allItem);
}
currentCount++;
break;
}
}
}
}
}
else
{
//当所有工具大于等于快捷工具显示的个数时
if (AllTools.Count >= QuickToolCount)
{
for (int i = 0; i < QuickToolCount; i++)
{
AllTools[i].ToolTypeId = i;
AllTools[i].IsQuickTool = true;
QuickTools.Add(AllTools[i]);
}
}
else
{
for (int i = 0; i < AllTools.Count; i++)
{
AllTools[i].ToolTypeId = i;
AllTools[i].IsQuickTool = true;
QuickTools.Add(AllTools[i]);
}
}
SaveAllTools();
}
}
private void SaveAllTools()
{
var cacheList = Settings.Default.AllPDFToolsList;
foreach (var item in AllTools)
{
CacheToolItem cacheItem = new CacheToolItem();
cacheItem.ToolLayOutType = (item.IsQuickTool == true ? 1 : 0);
cacheItem.IsNewTool = item.IsNewTool;
cacheItem.ToolTypeId = item.ToolTypeId;
cacheItem.ToolTypeStr = Enum.GetName(typeof(PDFToolType), item.ToolType);
cacheItem.FnTypeStr = Enum.GetName(typeof(PDFFnType), item.FnType);
cacheList.Add(cacheItem);
}
Settings.Default.Save();
}
private void InitMoreTools()
{
int currentCount = 0;
foreach (var allItem in AllTools)
{
if (allItem.IsQuickTool == false)
{
allItem.ToolTypeId = currentCount;
MoreTools.Add(allItem);
currentCount++;
}
}
}
public void SaveCacheList()
{
var cacheLists = Settings.Default.AllPDFToolsList;
CacheToolItem cacheItem = null;
foreach (var item in AllTools)
{
cacheItem = cacheLists.Find(t => t.FnTypeStr == Enum.GetName(typeof(PDFFnType), item.FnType));
if (cacheItem != null)
{
cacheItem.ToolTypeId = item.ToolTypeId;
cacheItem.ToolLayOutType = (item.IsQuickTool == true ? 1 : 0);
}
}
Settings.Default.Save();
}
}
}