public CreateMergedPDFAcrobat( List<CockleFilePdf> filesToCombine, TypeOfCombinedPdf typeOfCombinedPdf = TypeOfCombinedPdf.All, bool centerPdf = false) { if (filesToCombine.Count() < 1) { return; } var first_filename = filesToCombine.First(); var destination_folder = System.IO.Path.GetDirectoryName(first_filename.FullName); // collect non-foldout files var files_no_foldouts = filesToCombine.Where(f => f.Rank >= 0).OrderBy(f => f.Rank); // collect foldout files var files_foldouts = filesToCombine .Where(f => f.FileType == SourceFileTypeEnum.Brief_Foldout || f.FileType == SourceFileTypeEnum.Brief_ZFold || f.FileType == SourceFileTypeEnum.App_Foldout || f.FileType == SourceFileTypeEnum.App_ZFold) .OrderBy(f => f.PageRange.FirstPage); // create new filename if (typeOfCombinedPdf == TypeOfCombinedPdf.All) { CombinedPdfFilename = System.IO.Path.Combine(destination_folder, string.Format($"{first_filename.TicketNumber} pdf {first_filename.Attorney}.pdf")); } else { if (typeOfCombinedPdf == TypeOfCombinedPdf.Brief) { CombinedPdfFilename = System.IO.Path.Combine(destination_folder, string.Format($"{first_filename.TicketNumber} pdf {first_filename.Attorney} br.pdf")); } if (typeOfCombinedPdf == TypeOfCombinedPdf.Appendix) { CombinedPdfFilename = System.IO.Path.Combine(destination_folder, string.Format($"{first_filename.TicketNumber} pdf {first_filename.Attorney} app.pdf")); } } // adjust new filenames if foldouts if (files_foldouts.Count() > 0) { var temp_filename = CombinedPdfFilename; CombinedPdfFilename = temp_filename.Replace(".pdf", @" (without foldouts).pdf"); CombinedPdfFilenameWithFoldouts = temp_filename.Replace(".pdf", @" (with foldouts).pdf"); // combine files createCombinedPdf_noFoldouts(files_no_foldouts, typeOfCombinedPdf, centerPdf); createCombinedPdf_withFoldouts(files_no_foldouts, files_foldouts); } else { createCombinedPdf_noFoldouts(files_no_foldouts, typeOfCombinedPdf, centerPdf); } }
private void createCombinedPdf_noFoldouts( IOrderedEnumerable<CockleFilePdf> files_no_foldouts, TypeOfCombinedPdf typeOfCombinedPdf, bool centerPdf = false) { CAcroApp app = new AcroApp(); // Acrobat CAcroPDDoc doc = new AcroPDDoc(); // First document CAcroPDDoc docToAdd = new AcroPDDoc(); // Next documents try { int numPages = 0, numPagesToAdd = 0; foreach (var f in files_no_foldouts) { if (f.Rank == 0) // both 0 { doc.Open(f.FullName); numPages = doc.GetNumPages(); } else if (f.Rank != 0 && numPages == 0) { doc.Open(f.FullName); numPages = doc.GetNumPages(); } else { if (!docToAdd.Open(f.FullName)) { break; } numPagesToAdd = docToAdd.GetNumPages(); if (!doc.InsertPages(numPages - 1, docToAdd, 0, numPagesToAdd, 0)) { break; } if (!docToAdd.Close()) { break; } numPages = doc.GetNumPages(); } } doc.Save(1, CombinedPdfFilename); doc.Close(); // use reflection to center the pdf if (centerPdf) { var opened = doc.Open(CombinedPdfFilename); if (opened) { object js_object = doc.GetJSObject(); Type js_type = js_object.GetType(); object[] js_param = { }; string script_name = string.Empty; int? cover_length = null; if (typeOfCombinedPdf == TypeOfCombinedPdf.Appendix && files_no_foldouts.All(x => x.CoverLength == null)) { script_name = Models.Utilities.AcrobatJS.Javascripts [Models.Utilities.LocalJavascripts.center_letter_no_cover]; } else if (files_no_foldouts.All(x => x.CoverLength == null)) { script_name = Models.Utilities.AcrobatJS.Javascripts [Models.Utilities.LocalJavascripts.center_letter_no_cover]; } else { cover_length = files_no_foldouts.Where(x => x.FileType == SourceFileTypeEnum.Cover).FirstOrDefault().CoverLength; switch (cover_length) { case 48: default: script_name = Models.Utilities.AcrobatJS.Javascripts [Models.Utilities.LocalJavascripts.center_letter_48pica]; break; case 49: script_name = Models.Utilities.AcrobatJS.Javascripts [Models.Utilities.LocalJavascripts.center_letter_49pica]; break; case 50: script_name = Models.Utilities.AcrobatJS.Javascripts [Models.Utilities.LocalJavascripts.center_letter_50pica]; break; case 51: script_name = Models.Utilities.AcrobatJS.Javascripts [Models.Utilities.LocalJavascripts.center_letter_51pica]; break; } } js_type.InvokeMember(script_name, System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance, null, js_object, js_param); // test that the file exists doc.Save(1, CombinedPdfFilename); } else { throw new Exception("Could not center pdf."); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); } finally { doc.Close(); app.CloseAllDocs(); app.Exit(); doc = null; docToAdd = null; app = null; GC.Collect(); } }