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