프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / ConvertService / ConverterService / DZConverterLib / Copy (2) of DZConverter.cs @ a9e86f7a

이력 | 보기 | 이력해설 | 다운로드 (28 KB)

1 7ca218b3 KangIngu
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Collections.ObjectModel;
6
using System.Data.EntityClient;
7
using System.Data.SqlClient;
8
using DeepViewDataModel.DataModel;
9
using DeepViewDataModel.Common;
10
using System.Collections.Concurrent;
11
using System.IO;
12
using DZConverterLib.DAL;
13
using DZConverterLib.Auth;
14
using pdftron;
15
using System.Data.Objects.DataClasses;
16
using pdftron.PDF;
17
using System.Drawing;
18
using System.Drawing.Imaging;
19
using pdftron.SDF;
20
using Microsoft.DeepZoomTools;
21
using DeepView.Toolkit.GuidGenerator;
22
using System.Threading;
23
using System.Net.Cache;
24
using System.Net;
25
using LimitTaskScheduler;
26
using System.Threading.Tasks;
27
using System.Runtime.Caching;
28
29
namespace DZConverterLib
30
{
31
    public class DZConverter: IDisposable
32
    {
33
        //public const string ProjectRoot = @"D:\DeepViewConverter\";
34
        //public const string DownloadDir_PDF = ProjectRoot + @"\PDFPath";
35
        public string DownloadDir_PDF;
36
        private List<String> DeepZoopDest = null;
37
        private EntityCollection<DocPage> pageSet = null;
38
        public int pageCount = 0;
39
        public ConverterPDF ConverterItem;
40
        public event EventHandler<MakeConverterErrorArgs> ConverterMakeError;
41
        public event EventHandler<EndConverterEventArgs> EndConverter;
42
43
        public DZConverter()
44
        {
45
            pdftron.PDFNet.Initialize("daelim.co.kr(Doftech Corp):CPU:2::W:AMC(20120315):EF6E886F25A414FFB5F8C1F2999CF2DA33DC6C5164315BAF7011B87AF0FA");
46
            DeepZoopDest = new List<string>();
47
            pageSet = new EntityCollection<DocPage>();
48
        }
49
50
        private void SendError(int Level,string ErrorCode, string _Exception, bool ThreadStop)
51
        {
52
            if (ConverterMakeError != null)
53
                ConverterMakeError(this, new MakeConverterErrorArgs 
54
                                            {
55
                                                ThreadStop = ThreadStop, 
56
                                                ConverterID = ConverterItem.ID,
57
                                                _Exception = _Exception,
58
                                                ErrorCode = ErrorCode,
59
                                                Level = Level
60
                                            });
61
        }
62
63
        public void GetSingleFile(object obj)
64
        {
65
            try
66
            {
67
                ConverterItem = obj as ConverterPDF;
68
69
                using (DeepViewEntities _deepview = new DeepViewEntities(ConnectStringBuilder.DeepViewConnectionString().ToString()))
70
                {
71
                    var _property = _deepview.Properties.Where(pro => pro.Property == ConverterItem.ProjectNo);
72
73
                    if (_property.Count() > 0)
74
                    {
75
                        DownloadDir_PDF = _property.Where(t => t.Type == PropertiesType.PropertiesType.Const_TileSorceStorage).First().Value;
76
77
                        if (!Directory.Exists(DownloadDir_PDF)) // 폴더 없을 시 생성
78
                        {
79
                            Directory.CreateDirectory(DownloadDir_PDF);
80
                        }
81
                    }
82
                }
83
84
                DownloadFile();
85
            }
86
            catch (Exception e)
87
            {
88
                SendError(0, "Converter Error ", e.ToString(), true);
89
            }
90
        }
91
92
        private void SetState(IConverterPDF.ConverterStatus Status)
93
        {
94
            using (DeepViewEntities _entity = new DeepViewEntities(ConnectStringBuilder.DeepViewConnectionString().ToString()))
95
            {
96
                var _items = _entity.ConverterPDF.Where(converter => converter.ID == this.ConverterItem.ID);
97
                if (_items.Count() > 0)
98
                {
99
                    if (Status == IConverterPDF.ConverterStatus.Create)
100
                        _items.First().StartDateTime = DateTime.Now;
101
102
                    _items.First().Status = (int)Status;
103
                    _entity.SaveChanges();
104
                }
105
            }  
106
        }
107
108
        private void SetCurrentPage(int CurrentPage)
109
        {
110
            using (DeepViewEntities _entity = new DeepViewEntities(ConnectStringBuilder.DeepViewConnectionString().ToString()))
111
            {
112
                var _items = _entity.ConverterPDF.Where(converter => converter.ID == this.ConverterItem.ID);
113
                if (_items.Count() > 0)
114
                {
115
                    _items.First().CurrentPage = CurrentPage;
116
                    _entity.SaveChanges();
117
                }
118
            }
119
        }
120
121
        private static object _lock = new object();
122
     
123
        public void DownloadFile()
124
        {
125
            string DocUri = ConverterItem.PdfUrl; //PDF 전체 경로
126
            string FileName = DocUri.Remove(0, DocUri.LastIndexOf("/") + 1);
127
            string ProjectFolderPath = DownloadDir_PDF + "\\" + ConverterItem.ProjectNo + "_Tile"; //프로젝트 폴더
128
            string ItemListPath = ProjectFolderPath + "\\" + (System.Convert.ToInt64(ConverterItem.SharepointItemID) / 100).ToString();
129
            string ItemPath = ItemListPath + "\\" + ConverterItem.SharepointItemID;
130
            string DownloadFilePath = ItemPath + "\\" + FileName;
131
          
132
            #region 폴더 생성
133
            try
134
            {
135
                SetState(IConverterPDF.ConverterStatus.Create);
136
137
                DirectoryInfo _dir = new DirectoryInfo(ItemPath);
138
139
                if (_dir.Exists)
140
                {
141
                    _dir.Empty();
142
                }
143
                else
144
                {
145
                    Directory.CreateDirectory(ItemPath);
146
                }
147
148
            }
149
            catch (Exception ex)
150
            {
151
                //DeleteDirectoryDirs(ItemPath);
152
                SendError(1,"폴더삭제 에러",ex.ToString(), false);
153
            }
154
155
            #endregion
156
157
            #region 다운로드
158
159
            try
160
            {
161
                System.Net.WebClient _fileFactory = new System.Net.WebClient();
162
                _fileFactory.UseDefaultCredentials = true;
163
                _fileFactory.DownloadFile(new Uri(DocUri), DownloadFilePath);
164
165
            #endregion
166
            }
167
            catch (Exception ex)
168
            {
169
                SendError(1,"File Download Error : Url - " + DocUri + " Download Path : " + DownloadFilePath, ex.ToString(), true);
170
            }
171
           
172
173
            if (File.Exists(DownloadFilePath))
174
            {
175
                ConvertProcess(DownloadFilePath, ItemPath, FileName);
176
            }
177
            else
178
            {
179
                SendError(1,"File Not Found","if (File.Exists(DownloadFilePath))", true);
180
            }
181
182
        }
183
184
        public void ConvertProcess(string DownloadFilePath, string ItemPath, string FileName)
185
        {
186
            #region 기본 설정
187
188
            #endregion
189
190
            ResultSet Result_Check;
191
            #region PDF 체크
192
            try
193
            {
194
                Result_Check = Check_PDF(DownloadFilePath);
195
            }
196
            catch (Exception ex)
197
            {
198
                System.Diagnostics.Debug.WriteLine(ex.ToString());
199
                throw;
200
            }
201
            
202
            if (!Result_Check.result)
203
            {
204
                SendError(1, "PDF 체크 실패 : 보안설정으로 인한 PDF 체크 실패", Result_Check.Message, false);
205
            } 
206
            #endregion
207
208
            #region PDF에서 이미지로 변환
209
210
            try
211
            {
212
                if (!ConvertImage(ItemPath, FileName))
213
                {
214
                    SendError(0, "converter Check", "code if (!ConvertImage(ItemPath, FileName))", true);
215
                    return;
216
                } 
217
            }
218
            catch (Exception ex)
219
            {
220
                SendError(0, "converter Check ","if (!ConvertImage(ItemPath, FileName)) " + ex.ToString(), true);
221
                throw;
222
            }
223
224
            #endregion
225
226
            SetState(IConverterPDF.ConverterStatus.Crop);
227
228
            #region 이미지에서 딥줌 이미지로
229
            var _DeepZoomImageresult = ConvertDeepZoomImage(DeepZoopDest);
230
231
            int _resultCount = _DeepZoomImageresult.Where(f => f.Count() == 0).Count();
232
233
            if (_resultCount == DeepZoopDest.Count())
234
            {
235
                SetCurrentPage(_resultCount);
236
            }
237
            else
238
            {
239
                SendError(0, "converter Check Error", string.Join("\r\n", _DeepZoomImageresult), true);
240
                return;
241
            }
242
243
            #endregion
244
245
            #region 데이터베이스 입력
246
            var _infotoDBResult = SetPageInfoToDB();
247
            if (_infotoDBResult != null)
248
            {
249
                SendError(0, "SetPageInfoToDB()", _infotoDBResult, true);
250
                return;
251
            }
252
            #endregion
253
254
            //// virtual dir생성은 로컬에서만 가능
255
            //try
256
            //{
257
            //    VirtualDirCreate.CreateVirtualDir("comment.daelim.com", "MACHINE/WEBROOT/APPHOST/DeepView", prjNo + "_Tile", DownloadDir_PDF + "\\" + prjNo + "_Tile");
258
            //}
259
            //catch (Exception ex)
260
            //{
261
            //    SendError("VirtualDirCreate Error");
262
            //}
263
264
            if (EndConverter != null)
265
                EndConverter(this, new EndConverterEventArgs { ConverterPDF = ConverterItem});
266
        }
267
268
        public ResultSet Check_PDF(string filePath)
269
        {
270
            pdftron.PDF.PDFDoc doc = new pdftron.PDF.PDFDoc(filePath);
271
            #region 접근권한 체크
272
            if (!doc.InitSecurityHandler())
273
            {
274
                PDFNet.Terminate();
275
                return new ResultSet { result = false, Message = "Document authentication Error" };
276
            } 
277
            #endregion
278
279
            #region 암호화 여부
280
            if (doc.IsEncrypted())
281
            {
282
                PDFNet.Terminate();
283
                return new ResultSet { result = false, Message = "Document is Encrypted" };
284
            } 
285
            #endregion            
286
            return new ResultSet { result = true };
287
        }
288
289
290
        #region private Method
291
        private bool AuthUser2(Filefactory fileFactory, string PDFurl)
292
        {
293
            try
294
            {
295
                System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(PDFurl);
296
                System.Net.NetworkCredential credentials = Crediential.GetAdminCrediential(PDFurl.ToString());
297
                request.Credentials = credentials;
298
                System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
299
                response.Close();
300
                fileFactory.Credentials = credentials;
301
            }
302
            catch (Exception ex)
303
            {
304
                System.Diagnostics.Debug.WriteLine(ex.ToString());
305
                return false;
306
            }
307
308
            return true;
309
        }
310
        //private System.Net.ICredentials AuthUser(string PDFurl)
311
        //{
312
        //    //System.Net.NetworkCredential credentials = null;
313
        //    //try
314
        //    //{
315
        //    //    var _url = new UriBuilder(new Uri(PDFurl).AbsoluteUri.Replace(new Uri(PDFurl).PathAndQuery, "/"));
316
        //    //    var _dns = _url.Host.Split('.');
317
318
        //    //    if (_dns.Count() == 3)
319
        //    //        if (_dns[0].ToLower() != "www")
320
        //    //        {
321
        //    //            _dns[0] = "www";
322
        //    //            _url.Host = _dns[0] + "." + _dns[1] + "." + _dns[2];
323
        //    //        }
324
325
        //    //    System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(_url.Uri);
326
        //    //    credentials =
327
        //    //    //request.Credentials = CredentialCache.DefaultCredentials;
328
        //    //    System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();   
329
        //    //    response.Close();
330
        //    }
331
        //    catch (Exception ex)
332
        //    {
333
        //        return credentials;
334
        //    }
335
336
        //    return credentials;
337
        //}
338
339
        private ImageCodecInfo GetEncoderInfo(String mimeType)
340
        {
341
            int j;
342
            ImageCodecInfo[] encoders;
343
            encoders = ImageCodecInfo.GetImageEncoders();
344
            for (j = 0; j < encoders.Length; ++j)
345
            {
346
                if (encoders[j].MimeType == mimeType)
347
                    return encoders[j];
348
            }
349
            return null;
350
        }
351
352
        private bool ConvertImage(string FilePath, string fileName)
353
        {
354
            pageSet = new EntityCollection<DocPage>();
355
            using (PDFDoc doc = new PDFDoc(FilePath + "\\" + fileName))
356
            {
357
                pdftron.PDFNet.Initialize("daelim.co.kr(Doftech Corp):CPU:2::W:AMC(20120315):EF6E886F25A414FFB5F8C1F2999CF2DA33DC6C5164315BAF7011B87AF0FA");
358
                Bitmap newBmp_;
359
                ImageCodecInfo DefaultImageCodecInfo = GetEncoderInfo("image/png");
360
                EncoderParameters DefaultEncoderParameters = new EncoderParameters(2);
361
                System.Drawing.Imaging.Encoder QualityEncoder = System.Drawing.Imaging.Encoder.Quality;
362
                System.Drawing.Imaging.Encoder ColorDepthEncoder = System.Drawing.Imaging.Encoder.ColorDepth;
363
                DefaultEncoderParameters.Param[0] = new EncoderParameter(QualityEncoder, 100L);
364
                DefaultEncoderParameters.Param[1] = new EncoderParameter(ColorDepthEncoder, 8L);
365
                DeepZoopDest = new List<string>();
366
                pageCount = doc.GetPageCount();
367
368
                using (DeepViewEntities _entity = new DeepViewEntities(ConnectStringBuilder.DeepViewConnectionString().ToString()))
369
                {
370
                    var _items = _entity.ConverterPDF.Where(converter => converter.ID == this.ConverterItem.ID);
371
                    if (_items.Count() > 0)
372
                    {
373
                        _items.First().TotalPages = pageCount;
374
                        _entity.SaveChanges();
375
                    }
376
                }
377
378
                #region 이미지 만들기
379
380
                for (int i = 1; i < pageCount + 1; i++)
381
                {
382
                    try
383
                    {
384
                        //SetCurrentPage(i);
385
                        using (pdftron.PDF.PDFDraw draw = new pdftron.PDF.PDFDraw())
386
                        {
387
                            ElementBuilder bld = new ElementBuilder();
388
                            ElementWriter writer = new ElementWriter();
389
390
                            var widthData = (int)doc.GetPage(i).GetPageWidth();
391
                            int heightData = (int)doc.GetPage(i).GetPageHeight();
392
                            pageSet.Add(new DocPage 
393
                                        {
394
                                            Id=  GuidGenerator.GetUniqueGuid() , 
395
                                            PageWidth = (widthData*3).ToString(), 
396
                                            PageHeight = (heightData*3).ToString(), 
397
                                            PageNumber = i, 
398
                                            PageAngle = 0,
399
                                        });
400
401
                            var rotation = doc.GetPage(i).GetRotation();
402
                            draw.SetImageSize((int)(widthData * 3), (int)(heightData * 3), true);
403
                            //draw.SetImageSize((int)(widthData), (int)(heightData), true);
404
                            draw.SetAntiAliasing(true);
405
                            draw.SetImageSmoothing(true);
406
                            newBmp_ = draw.GetBitmap(doc.GetPage(i));
407
408
                            using (MemoryStream _savestream = new MemoryStream())
409
                            {
410
411
                                //newBmp_.Save(@"c:\test.jpg");
412
                                newBmp_.Save(_savestream, DefaultImageCodecInfo, DefaultEncoderParameters);
413
                                //newBmp_.Save(_savestream, ImageFormat.Png);
414
                                newBmp_ = new Bitmap(_savestream);
415
                                ObjSet objset = new ObjSet();
416
                                Obj jbig2_hint = objset.CreateName("png");
417
418
                                string pagePath = FilePath + "\\" + i;
419
420
                                Directory.CreateDirectory(pagePath);
421
                                DeepZoopDest.Add(pagePath + "\\" + i + ".jpg");
422
                                newBmp_.Save(pagePath + "\\" + i + ".jpg");
423
                                newBmp_.Dispose();
424
425
                            }
426
427
                            GC.Collect();
428
                            GC.WaitForPendingFinalizers();
429
                        }
430
431
                        if (i == pageCount || i % 10 == 0)
432
                        {
433
                            int _skipCount = 0;
434
435
                            if (pageCount < 10 || i < 10)
436
                                _skipCount = 0;
437
                            else
438
                                _skipCount = i - 9; // 1페이지부터 가져온다.
439
440
                            ConvertDeepZoomImage(DeepZoopDest.Skip(_skipCount).Take(i));
441
442
                        }
443
                    }
444
                    catch (Exception ex)
445
                    {
446
                        SendError(0,"ConverterImage Error : Page NO -" + i.ToString(), ex.ToString(), true);
447
                        return false;
448
                    }
449
                }
450
                #endregion
451
                return true;
452
            }
453
        }
454
455
        private List<Task> DeepTask = new List<Task>();
456
457
        private List<string> ConvertDeepZoomImage(IEnumerable<string> FileSet)
458
        {
459
            Task<List<string>> _task = new Task<List<string>>(() =>
460
            {
461
                var _re = (from file in FileSet.Select((s, i) => new { Inx = i, file = s }).AsParallel().WithDegreeOfParallelism(10)
462
                           let result = ConvertImgToDeep(file.file, file.Inx)
463
                           select result).ToList();
464
                
465
                return _re;
466
                //return string.Join(",", _result);
467
            });
468
            _task.Start();
469
            _task.Wait();
470
            
471
            return _task.Result;
472
        }
473
474
        private string ConvertImgToDeep(string convertFileName, int Index)
475
        {
476
            string _result = string.Empty;
477
478
            ImageCreator creator = new ImageCreator
479
            {
480
                TileSize = 256,
481
                TileFormat = Microsoft.DeepZoomTools.ImageFormat.AutoSelect,
482
                CopyMetadata = false,
483
                ConversionCopyMetadata = false,
484
            };
485
486
487
            try
488
            {
489
                FileInfo convertFile = new FileInfo(convertFileName);
490
491
                if (convertFile.Exists)
492
                {
493
494
                    //var _dir = convertFile.Directory.CreateSubdirectory(Index.ToString());
495
                    //convertFile = convertFile.CopyTo(_dir.FullName + "\\" + convertFile.Name, true);
496
                    creator.Create(convertFile.FullName, convertFile.FullName.ToString().Replace(".jpg", ".xml"));
497
                    File.Delete(convertFile.FullName.ToString().Replace(".jpg", ".xml"));
498
499
                    if(convertFile.Directory.GetDirectories().Count() > 0)
500
                        convertFile.Directory.GetDirectories().First().GetDirectories().Where(f => f.Name.Length == 1)
501
                            .Where(d => System.Convert.ToInt16(d.Name) <= 7)
502
                            .ToList().ForEach(sub =>
503
                            {
504
                                sub.Empty();
505
                                sub.Delete();
506
                            });
507
508
                    convertFile.Delete();
509
                    SetCurrentPage(Index+1);
510
                }
511
            }
512
            catch (Exception ex)
513
            {
514
                System.Diagnostics.Debug.WriteLine(ex.ToString());
515
516
                if (ex.GetType() == typeof(System.ArgumentException))
517
                    _result = "DPI Exception. Page No :" + Index.ToString();
518
                else
519
                    _result = ex.Message;
520
            }
521
522
            return _result;
523
        }
524
525
        private string ConvertDeepZoomImage_old(List<String> FileSet)
526
        {
527
            ImageCreator crator = new ImageCreator();
528
            crator.TileSize = 256;
529
            crator.TileFormat = Microsoft.DeepZoomTools.ImageFormat.AutoSelect;
530
            crator.CopyMetadata = false;
531
            crator.ConversionCopyMetadata = false;
532
            try
533
            {
534
                for (int i = 0; i < FileSet.Count; i++)
535
                {
536
                    SetCurrentPage(i + 1);
537
538
                    if (File.Exists(FileSet[i]))
539
                    {
540
                        crator.Create(FileSet[i], FileSet[i].ToString().Replace(".jpg", ".xml"));
541
                        File.Delete(FileSet[i]);
542
                    }
543
                }
544
            }
545
            catch (Exception ex)
546
            {
547
                System.Diagnostics.Debug.WriteLine(ex.ToString());
548
                return ex.ToString();
549
            }
550
              
551
            return null;
552
        }
553
554
        private string SetPageInfoToDB()
555
        {
556
            try
557
            {
558
                #region 다 쓴 이미지 삭제
559
                //foreach (var item in DeepZoopDest)
560
                //{
561
                //    try
562
                //    {
563
                //        if (File.Exists(item.ToString()))
564
                //        {
565
                //            File.Delete(item.ToString());
566
                //        }
567
                //    }
568
                //    catch (Exception e)
569
                //    {
570
                //        /// 서버로 보내는 에러메시지 필요
571
                //    }
572
573
                //} 
574
                #endregion
575
                #region DB에 페이지 정보 입력
576
           
577
578
                using (CI_Entities deepViewEntity = new CI_Entities(ConnectStringBuilder.ProjectCIConnectString(ConverterItem.ProjectNo).ToString()))
579
                {
580
                    var _docinfo = deepViewEntity
581
                                    .DocInfo.Where(info => info.OrginPDFUrl == ConverterItem.PdfUrl);
582
583
                    if (_docinfo.Count() > 0)
584
                    {
585
                        System.Diagnostics.Stopwatch _watch = new System.Diagnostics.Stopwatch();
586
                        _watch.Start();
587
                        var _doc = _docinfo.First();
588
                        _doc.SharepointItemID = ConverterItem.SharepointItemID;
589
                        _doc.PageCount = pageCount;
590
591
                        pageSet.AsParallel().ForAll(p => p.DocInfo_Id = _doc.Id);
592
593
                        var _exceptDocInfo = (from newinfo in pageSet
594
                                              select new { newinfo.PageNumber, newinfo.DocInfo_Id,newinfo.PageWidth,newinfo.PageHeight})
595
                                                  .Except
596
                                                        (from oldinfo in _doc.DocPage
597
                                                         select new { oldinfo.PageNumber, oldinfo.DocInfo_Id, oldinfo.PageWidth, oldinfo.PageHeight });
598
599
                        var _delDocInfo = (from oldinfo in _doc.DocPage
600
                                           select new { oldinfo.PageNumber, oldinfo.DocInfo_Id, oldinfo.PageWidth, oldinfo.PageHeight })
601
                                                  .Except
602
                                                        (from newinfo in pageSet
603
                                                         select new { newinfo.PageNumber, newinfo.DocInfo_Id, newinfo.PageWidth, newinfo.PageHeight })
604
                                                         .ToList(); /// 삭제되는 collection은 하나씩 제거 될때마다 수정되기 때문에
605
                                                                    ///  foreach가 안된다. 그러므로 tolist로 가져와서 작업한다.
606
                        
607
                        //using (DeepView_SystemEntities SystemEntity = new DeepView_SystemEntities(ConnectStringBuilder.DeepViewSystemConnectionString().ToString()))
608
                        //{
609
                        //    SystemEntity.RemoveBackup_DocInfo.AddObject(new RemoveBackup_DocInfo
610
                        //    {
611
                        //        BackupUserID = "ConvertStation",
612
                        //        BackupTime= DateTime.Now,
613
                        //        ID = GuidGenerator.GetUniqueGuid(),
614
                        //        OriginDocInfoID = _doc.Id,
615
                        //        SharepointItemID = _doc.SharepointItemID,
616
                        //        OriginPDFUrl= _doc.OrginPDFUrl,
617
                        //        PageCount= _doc.PageCount,
618
                        //        ProjectNo = ConverterItem.ProjectNo,
619
                        //        Status = true
620
                        //    });
621
622
623
                        //    foreach (var item in _delDocInfo)
624
                        //    {
625
                        //        var _delitem = _doc.DocPage.Where(p => p.PageNumber == item.PageNumber).First();
626
627
                        //        deepViewEntity.DocPage.DeleteObject(_delitem);
628
                        //        //deepViewEntity.DocPage.DeleteObject(item);
629
                        //    }
630
                        //}
631
                        foreach (var item in _delDocInfo)
632
                        {
633
                            var _delitem = _doc.DocPage.Where(p => p.PageNumber == item.PageNumber).First();
634
635
                            deepViewEntity.DocPage.DeleteObject(_delitem);
636
                            //deepViewEntity.DocPage.DeleteObject(item);
637
                        }
638
639
                        deepViewEntity.SaveChanges();
640
641
                        foreach (var exceptitem in _exceptDocInfo)
642
                        {
643
                            var _lstPage = deepViewEntity.DocPage.Where(page => page.PageNumber == exceptitem.PageNumber
644
                                                                                    && page.DocInfo_Id == exceptitem.DocInfo_Id);
645
646
                            if (_lstPage.Count() > 0)
647
                            {
648
                                var _page = _lstPage.First();
649
                                _page.PageHeight = exceptitem.PageHeight;
650
                                _page.PageWidth = exceptitem.PageWidth;
651
                            }
652
                            else
653
                            {
654
                                _doc.DocPage.Add(pageSet.Where(p=>p.PageNumber == exceptitem.PageNumber).First());
655
                            }
656
                        }
657
658
                        deepViewEntity.SaveChanges();
659
660
                        _watch.Stop();
661
                        System.Diagnostics.Debug.WriteLine(_watch.ElapsedMilliseconds);
662
                    }
663
                    else
664
                    {
665
666
                        Guid guid = GuidGenerator.GetUniqueGuid();
667
                        DocInfo instace = new DocInfo
668
                        {
669
                            Id = guid,
670
                            OrginPDFUrl = ConverterItem.PdfUrl,
671
                            SharepointItemID = ConverterItem.SharepointItemID,
672
                            PageCount = pageCount,
673
                            DocPage = pageSet
674
                        };
675
                        deepViewEntity.DocInfo.AddObject(instace);
676
                    }
677
678
                    deepViewEntity.SaveChanges();
679
                }
680
            }
681
            catch (Exception e)
682
            {
683
                return e.ToString();
684
            }
685
               
686
            #endregion
687
688
            return null;
689
        }
690
    #endregion
691
692
        public void Dispose()
693
        {
694
            pdftron.PDFNet.Terminate();
695
            GC.Collect();
696
            GC.SuppressFinalize(this);
697
        }
698
     
699
    }
700
701
    public enum FinalStatus
702
    {
703
        /// <summary>
704
        /// Final PDF를 만들기 위한 순서에 추가
705
        /// </summary>
706
        Insert = 0,
707
708
        /// <summary>
709
        /// 앞의 final이 처리중일때 대기
710
        /// </summary>
711
        Wait = 1,
712
713
        /// <summary>
714
        /// 만들고 있는중
715
        /// 이때 데이터베이스에 Current Page는 만들고 있는 페이지
716
        /// </summary>
717
        Create = 2,
718
719
        /// <summary>
720
        /// final pdf 완료시
721
        /// </summary>
722
        Seccess = 99,
723
724
        /// <summary>
725
        /// 에러
726
        /// </summary>
727
        Error = 88
728
    }
729
730
}
클립보드 이미지 추가 (최대 크기: 500 MB)