private void BtnGenerate_Click(object sender, RoutedEventArgs e) { //try //{//17-July-2018 // string[] existingPdfFiles = Directory.GetFiles(_pdfLocation, "*.pdf"); // if (existingPdfFiles != null) // if (existingPdfFiles.Count() > 0) // { // MessageBox.Show("Please delete all existing files in "+ _pdfLocation +" before generating PDF", Title, MessageBoxButton.OK, MessageBoxImage.Warning); // return; // } //} //catch { } string docName = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Name; try {//10-05-2018 Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; acDoc.Database.SaveAs(acDoc.Name, true, DwgVersion.Current, acDoc.Database.SecurityParameters); //Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.Save(); } catch (Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.ToString()); } if (AcadFunctions.AcadLayersList.Count > 0) { if (Layerlisodwg.Any(x => x.Include)) { InitializeLayouts(); //Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.Open(docName); Document docPublish = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; //Layerlisodwg.Where(x => x.LayerName.Equals("TITLE_1", StringComparison.InvariantCultureIgnoreCase) || // x.LayerName.Equals("BORDER", StringComparison.InvariantCultureIgnoreCase)).ToList().ForEach(a => a.Include = true); var lstLayers = Layerlisodwg.Where(x => x.Include && x.EntityAvail).Select(x => x).ToList(); gridProcess.Visibility = System.Windows.Visibility.Visible; ProgressHeaderPublisher.PublishData("Processing..."); txtPercentage.Text = string.Empty; ProgressStatusPublisher.PublishData(""); ProgressBarMaximumPublisher.PublishData(lstLayers.Count + 1); pbStatus.Visibility = System.Windows.Visibility.Visible; txtPercentage.Visibility = System.Windows.Visibility.Visible; int cnt = 0; lstLayers.ToList().ForEach(x => { cnt++; ProgressHeaderPublisher.PublishData("Processing " + cnt + " of " + lstLayers.Count); ProgressStatusPublisher.PublishData("Publishing " + x.LayerName + "..."); if (x.Include)// && x.EntityAvail) { var layerName = x.LayerName; OnOrOffParticularLayer(true, layerName); docPublish.SendStringToExecute("zoom e ", true, false, true); Thread.Sleep(1000); //new SingleSheetPdf(_pdfLocation, GetLayoutIdList(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database)).Publish(x.LayerName); new SingleSheetPdf(_pdfLocation, GetLayoutIdList(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database)).PublishNew(_pdfLocation, x.LayerName); OnOrOffParticularLayer(false, layerName); } ProgressValuePublisher.PublishData(1); }); SetDefaultLayout(docPublish); OffAllLayers(true); ProgressHeaderPublisher.PublishData("Processing...."); ProgressStatusPublisher.PublishData("Merging pdf"); try { string path = _pdfLocation; string[] pdfFiles = Directory.GetFiles(path, "*.pdf"); var completedFiles = new List <string>(); docName = System.IO.Path.GetFileNameWithoutExtension(docName); foreach (var item in pdfFiles) { if (System.IO.Path.GetFileNameWithoutExtension(item).StartsWith(docName)) { var layer = Layerlisodwg.Where(y => y.Include && item.Contains(y.LayerName)).Select(y => y).FirstOrDefault(); if (layer != null) { completedFiles.Add(item); } } } // step 1: creation of a document-object iTextSharp.text.Document document = new iTextSharp.text.Document(); if (File.Exists(System.IO.Path.Combine(path, docName + ".pdf"))) { File.Delete(System.IO.Path.Combine(path, docName + ".pdf")); } if (completedFiles.Count > 0) { // step 2: we create a writer that listens to the document PdfCopy writer = new PdfCopy(document, new FileStream(System.IO.Path.Combine(path, docName + ".pdf"), FileMode.Create)); if (writer == null) { return; } // step 3: we open the document document.Open(); foreach (string fileName in completedFiles) { // we create a reader for a certain document PdfReader reader = new PdfReader(fileName); reader.ConsolidateNamedDestinations(); // step 4: we add content for (int i = 1; i <= reader.NumberOfPages; i++) { PdfImportedPage page = writer.GetImportedPage(reader, i); writer.AddPage(page); } PRAcroForm form = reader.AcroForm; if (form != null) { writer.CopyAcroForm(reader); } reader.Close(); } // step 5: we close the document and writer writer.Close(); document.Close(); foreach (var item in completedFiles) { try { if (System.IO.File.Exists(item)) { System.IO.File.Delete(item); } } catch { } } ProgressValuePublisher.PublishData(1); ProgressHeaderPublisher.PublishData("Processed " + cnt + " of " + lstLayers.Count); ProgressStatusPublisher.PublishData("Completed"); MessageBox.Show("PDF Generation Completed", Title, MessageBoxButton.OK, MessageBoxImage.Information); gridProcess.Visibility = System.Windows.Visibility.Collapsed; pbStatus.Visibility = System.Windows.Visibility.Collapsed; txtPercentage.Visibility = System.Windows.Visibility.Collapsed; //10-05-2018 if (System.IO.File.Exists(System.IO.Path.Combine(path, docName + ".pdf"))) { System.Diagnostics.Process.Start(System.IO.Path.Combine(path, docName + ".pdf")); //System.IO.File.Open(System.IO.Path.Combine(path, docName + ".pdf"), FileMode.Open); } } else { ProgressValuePublisher.PublishData(1); ProgressHeaderPublisher.PublishData("Processed " + cnt + " of " + lstLayers.Count); ProgressStatusPublisher.PublishData("Failed"); MessageBox.Show("Failed to merge pdf.", Title, MessageBoxButton.OK, MessageBoxImage.Information); gridProcess.Visibility = System.Windows.Visibility.Collapsed; pbStatus.Visibility = System.Windows.Visibility.Collapsed; txtPercentage.Visibility = System.Windows.Visibility.Collapsed; } } catch (Exception ex) { } } else { MessageBox.Show("Atleast one layer should be selected.", Title, MessageBoxButton.OK, MessageBoxImage.Warning); } } }
private void generatePDF(string BOMExcel) { string docName = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Name; try { Document acDoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; acDoc.Database.SaveAs(acDoc.Name, true, DwgVersion.Current, acDoc.Database.SecurityParameters); } catch (Exception ex) { Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.ToString()); } if (AcadFunctions.AcadLayersList.Count > 0) { if (Layerlisodwg.Any(x => x.Include)) { InitializeLayouts(); Document docPublish = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; var lstLayers = Layerlisodwg.Where(x => x.Include && x.EntityAvail).Select(x => x).ToList(); ProgressHeaderPublisher.PublishData("Processing..."); ProgressStatusPublisher.PublishData(""); ProgressBarMaximumPublisher.PublishData(lstLayers.Count + 1); int cnt = 0; bool Page_1Available = false; if (lstLayers.ToList().Count > 0) { Page_1Available = lstLayers.Where(a => a.Include == true && (a.LayerName.Equals("PAGE_1", StringComparison.InvariantCultureIgnoreCase) || a.LayerName.Equals("PAGE1", StringComparison.InvariantCultureIgnoreCase))).Any(); } lstLayers.ToList().ForEach(x => { cnt++; ProgressHeaderPublisher.PublishData("Processing " + cnt + " of " + lstLayers.Count); ProgressStatusPublisher.PublishData("Publishing " + x.LayerName + "..."); if (x.Include) { var layerName = x.LayerName; OnOrOffParticularLayer(true, layerName, Page_1Available); docPublish.SendStringToExecute("zoom e ", true, false, true); Thread.Sleep(1000); new SingleSheetPdf(_pdfLocation, GetLayoutIdList(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database)).PublishNew(_pdfLocation, x.LayerName); OnOrOffParticularLayer(false, layerName, Page_1Available); } ProgressValuePublisher.PublishData(1); }); SetDefaultLayout(docPublish); OffAllLayers(true); ProgressHeaderPublisher.PublishData("Processing...."); ProgressStatusPublisher.PublishData("Merging pdf"); try { string path = _pdfLocation; string[] pdfFiles = Directory.GetFiles(path, "*.pdf").Select(f => new FileInfo(f)).OrderBy(f => f.CreationTime).Select(d => d.FullName).ToArray(); var completedFiles = new List <string>(); docName = System.IO.Path.GetFileNameWithoutExtension(docName); foreach (var item in pdfFiles) { if (System.IO.Path.GetFileNameWithoutExtension(item).StartsWith(docName)) { var layer = Layerlisodwg.Where(y => y.Include && item.Contains(y.LayerName)).Select(y => y).FirstOrDefault(); if (layer != null) { completedFiles.Add(item); } } } statusText = "Appending BOM Spreadsheet to PDF... (Task 6 of 6)"; lblpbBarContent.Content = statusText; pbBar.Value = pbBar.Value + 10; DoEventsHandler.DoEvents(); // step 1: creation of a document-object iTextSharp.text.Document document = new iTextSharp.text.Document(); if (File.Exists(System.IO.Path.Combine(path, docName + ".pdf"))) { File.Delete(System.IO.Path.Combine(path, docName + ".pdf")); } if (completedFiles.Count > 0) { // step 2: we create a writer that listens to the document PdfCopy writer = new PdfCopy(document, new FileStream(System.IO.Path.Combine(path, docName + ".pdf"), FileMode.Create)); if (writer == null) { return; } // step 3: we open the document document.Open(); foreach (string fileName in completedFiles) { // we create a reader for a certain document PdfReader reader = new PdfReader(fileName); reader.ConsolidateNamedDestinations(); // step 4: we add content for (int i = 1; i <= reader.NumberOfPages; i++) { PdfImportedPage page = writer.GetImportedPage(reader, i); writer.AddPage(page); } PRAcroForm form = reader.AcroForm; if (form != null) { writer.CopyAcroForm(reader); } reader.Close(); } // step 5: we close the document and writer writer.Close(); document.Close(); if (System.IO.File.Exists(BOMExcel)) { String strDwgPDF = System.IO.Path.Combine(path, docName + ".pdf"); string strBOMPDF = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(BOMExcel), System.IO.Path.GetFileNameWithoutExtension(BOMExcel) + ".pdf"); string strResultPDF = System.IO.Path.Combine(path, docName + "_PROD.pdf"); string shellCommand = "C:\\ACAD2018_LivaNova\\Interface\\PDFTK.exe " + strDwgPDF + " " + strBOMPDF + " cat output " + strResultPDF; AcadCommands oAcad = new AcadCommands(); oAcad.ExecuteCommandSync(shellCommand); } foreach (var item in completedFiles) { try { if (System.IO.File.Exists(item)) { System.IO.File.Delete(item); } } catch { } } ProgressValuePublisher.PublishData(1); ProgressHeaderPublisher.PublishData("Processed " + cnt + " of " + lstLayers.Count); ProgressStatusPublisher.PublishData("Completed"); //MessageBox.Show("PDF Generation Completed", Title, MessageBoxButton.OK, MessageBoxImage.Information); //10-05-2018 if (System.IO.File.Exists(System.IO.Path.Combine(path, docName + "_PROD.pdf"))) { System.Diagnostics.Process.Start(System.IO.Path.Combine(path, docName + "_PROD.pdf")); //System.IO.File.Open(System.IO.Path.Combine(path, docName + ".pdf"), FileMode.Open); } } else { ProgressValuePublisher.PublishData(1); ProgressHeaderPublisher.PublishData("Processed " + cnt + " of " + lstLayers.Count); ProgressStatusPublisher.PublishData("Failed"); MessageBox.Show("Failed to merge pdf.", Title, MessageBoxButton.OK, MessageBoxImage.Information); } } catch (Exception ex) { } } else { MessageBox.Show("Atleast one layer should be selected.", Title, MessageBoxButton.OK, MessageBoxImage.Warning); } } }