public static string GetInternalId(string fullFileName)
        {
            string internalId = null;
            ApprenticeServerComponent apprentice = null;

            try
            {
                apprentice = new ApprenticeServerComponent();
                var document = apprentice.Open(fullFileName);

                internalId = (string)document.GetType().InvokeMember(
                    "InternalName",
                    System.Reflection.BindingFlags.GetProperty,
                    null,
                    document,
                    null);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                if (apprentice != null)
                {
                    apprentice.Close();
                }
            }
            return(internalId);
        }
        public Form1()
        {
            // Try to create an instance of apprentice server
            try
            {
                m_oserver = new ApprenticeServerComponent();
                AddInventorPath();
            }
            catch (SystemException exception)
            {
                MessageBox.Show(this,
                                "Failed to create an instance of Apprentice server.",
                                "CSharpFileDisplaySample",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            m_odocument  = null;
            m_oview      = null;
            m_ocamera    = null;
            m_bmouseDown = false;

            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
        }
예제 #3
0
        private void Form1_Load(object sender, EventArgs e)
        {
            mApprenticeServer    = new ApprenticeServerComponent();
            ViewerButton.Enabled = false;

            PreviewPic.SizeMode = PictureBoxSizeMode.StretchImage;

            mCurrentDoc = null;
        }
        public static DocumentInfo GetDocumentInfo(string fullFileName)
        {
            var documentInfo = new DocumentInfo();
            ApprenticeServerComponent apprentice = null;

            try
            {
                apprentice = new ApprenticeServerComponent();
                var document = apprentice.Open(fullFileName);

                documentInfo.InternalName = (string)document.GetType().InvokeMember(
                    "InternalName",
                    System.Reflection.BindingFlags.GetProperty,
                    null,
                    document,
                    null);

                var propertySets = (PropertySets)document.GetType().InvokeMember(
                    "PropertySets",
                    System.Reflection.BindingFlags.GetProperty,
                    null,
                    document,
                    null);

                if (propertySets != null)
                {
                    foreach (PropertySet propertySet in propertySets)
                    {
                        if (propertySet.DisplayName == "User Defined Properties")
                        {
                            foreach (Property property in propertySet)
                            {
                                if (property.Name != "Class")
                                {
                                    continue;
                                }
                                documentInfo.Class = property.Value;
                                break;
                            }
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                if (apprentice != null)
                {
                    apprentice.Close();
                }
            }
            return(documentInfo);
        }
예제 #5
0
 public InvMonitorViewModel(string filePath)
 {
     _oserver = new ApprenticeServerComponent();
     AddInventorPath();
     _odocument        = null;
     _oview            = null;
     _ocamera          = null;
     _odrawingDocument = null;
     this._filePath    = filePath;
     this._fileName    = System.IO.Path.GetFileName(filePath);
 }
        private void ReplaceReferencesMethod(string oldFilePath, string newFilePath)
        {
            try
            {
                // Open document with specific filepath
                ApprenticeServerComponent oApprentice = new ApprenticeServerComponent();
                Document oDoc = (Document)oApprentice.Open(oldFilePath);

                // Find where file was used before renaming
                DocumentsEnumerator oDocsEnum = oDoc.ReferencingDocuments;

                // Save file with new name
                oDoc.SaveAs(newFilePath, false);

                // Look through referencing documents
                foreach (Document locDoc in oDocsEnum)
                {
                    foreach (ReferencedFileDescriptor oRefFileDesc in locDoc.ReferencedFileDescriptors)
                    {
                        if (oRefFileDesc.FullFileName == oldFilePath)
                        {
                            // Replace the reference
                            oRefFileDesc.PutLogicalFileNameUsingFull(newFilePath);
                        }
                    }
                }
                oApprentice = null;

                // Define file name
                string filename = System.IO.Path.GetFileName(oldFilePath);
                // Find IDW files and export PDF
                InventorPlugins.ExportPDF exportPDF = new InventorPlugins.ExportPDF(inventorApp, oDoc, oldFilePath, newFilePath);
                exportPDF = null;
                // Export to DXF
                InventorPlugins.ExportDXF exportDXF = new InventorPlugins.ExportDXF(inventorApp, oDoc, filename);
                exportDXF = null;
                // Close document
                oDoc.Close(true);
                oDoc = null;
                // Delete old files
                if (System.IO.File.Exists(oldFilePath))
                {
                    System.IO.File.Delete(oldFilePath);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, System.Reflection.MethodBase.GetCurrentMethod().Name, MessageBoxButton.OK);
            }
        }
예제 #7
0
        void watcher_Created(object sender, FileSystemEventArgs e)
        {
            // A file got created. Let's check its iProperties
            string iProperties = "File path: " + e.FullPath + "\r\n";

            // We might not always be able to open a document, e.g.
            // maybe if the writer locked it, so let's catch any errors
            try
            {
                ApprenticeServerComponent app = new ApprenticeServerComponent();
                ApprenticeServerDocument  doc = app.Open(e.FullPath);

                // Gather "Summary Information" properties
                PropertySet ps = doc.PropertySets["{F29F85E0-4FF9-1068-AB91-08002B27B3D9}"];
                foreach (Property p in ps)
                {
                    // e.g. the Thumbnail property cannot be converted to string
                    // so that would throw an error we need to catch
                    try
                    {
                        iProperties += p.DisplayName + ": " + p.Value.ToString() + "\r\n";
                    }
                    catch { }
                }

                app.Close();
                app = null;
            }
            catch (Exception ex)
            {
                iProperties += "Exception occurred: " + ex.Message + "\r\n";
            }

            // Write it to the file
            using (StreamWriter sw = System.IO.File.AppendText(logFile))
            {
                sw.Write(iProperties);
            }
        }
예제 #8
0
        static void Main(string[] args)
        {
            try
            {
                var filePath = args[0];

                if (!System.IO.File.Exists(filePath))
                {
                    System.Console.Write(
                        string.Format("File ({0}) does not exist.", filePath));

                    return;
                }

                ApprenticeServerComponent asc = new ApprenticeServerComponent();
                ApprenticeServerDocument  asd = asc.Open(filePath);

                // "Inventor Summary Information"
                PropertySet ps = asd
                                 .PropertySets["{F29F85E0-4FF9-1068-AB91-08002B27B3D9}"];

                foreach (Property p in ps)
                {
                    System.Console.Write(
                        string.Format("{0}={1};",
                                      p.DisplayName,
                                      p.Value)
                        );
                }

                asd.Close();
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }
        }
        //  use ERP names instead of file names.
        private Boolean PDFfileUpdate(VDF.Vault.Currency.Entities.FileIteration fileIter, VDF.Vault.Currency.Connections.Connection connection, ref string logMessage, ref string errMessage)
        {
            try
            {
                // download the file
                System.IO.DirectoryInfo targetDir = new System.IO.DirectoryInfo(m_TargetFolder);
                if (!targetDir.Exists)
                {
                    targetDir.Create();
                }

                VDF.Vault.Settings.AcquireFilesSettings downloadSettings = new VDF.Vault.Settings.AcquireFilesSettings(connection)
                {
                    LocalPath = new VDF.Currency.FolderPathAbsolute(targetDir.FullName),
                };
                downloadSettings.AddFileToAcquire(fileIter, VDF.Vault.Settings.AcquireFilesSettings.AcquisitionOption.Download);

                VDF.Vault.Results.AcquireFilesResults results =
                    connection.FileManager.AcquireFiles(downloadSettings);

                string fileName = downloadSettings.LocalPath.ToString() + @"\" + fileIter.ToString();

                // ipts and iams are easier to deal with than idws
                if (fileName.EndsWith(".ipt") || fileName.EndsWith(".iam"))
                {
                    PrintObject printOb = new PrintObject();

                    if (printOb.deletePDF(fileName, m_PDFPath, ref logMessage, ref errMessage))
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else if (fileName.EndsWith(".idw")) // for idws we have to loop through each drawing sheet
                {
                    try
                    {
                        string modelName = "";

                        // set up lists for storing the actual model names the sheets are referencing
                        List <string> modelNames = new List <string>();
                        List <VDF.Vault.Currency.Entities.FileIteration> fIterations = new List <VDF.Vault.Currency.Entities.FileIteration>();

                        VDF.Vault.Currency.Properties.PropertyDefinitionDictionary propDefs =
                            new VDF.Vault.Currency.Properties.PropertyDefinitionDictionary();
                        Inventor.ApprenticeServerComponent       oApprentice = new ApprenticeServerComponent();
                        Inventor.ApprenticeServerDrawingDocument drgDoc;
                        drgDoc = (Inventor.ApprenticeServerDrawingDocument)oApprentice.Document;
                        oApprentice.Open(fileName);
                        drgDoc = (Inventor.ApprenticeServerDrawingDocument)oApprentice.Document;
                        ACW.PropDef[] filePropDefs =
                            connection.WebServiceManager.PropertyService.GetPropertyDefinitionsByEntityClassId("FILE");
                        ACW.PropDef vaultNamePropDef = filePropDefs.Single(n => n.SysName == "Name");

                        // for each sheet in the idw, search the vault for the sheet's corresponding ipt or iam
                        foreach (Sheet sh in drgDoc.Sheets)
                        {
                            if (sh.DrawingViews.Count > 0)  // I added this line because one pdf with a BOM only sheet
                                                            // kept failing.  This line fixed the problemf or that file
                                                            // but it is definitely not well tested...
                            {
                                errMessage += " " + sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName + "found";
                                if (sh.DrawingViews.Count > 0)
                                {
                                    modelName = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;

                                    PrintObject printOb = new PrintObject();
                                    if (printOb.deletePDF(modelName, m_PDFPath, ref logMessage, ref errMessage))
                                    {
                                        //logMessage += "Deleted PDF: " + pair.Value.Value.ToString() + "\r\n";
                                        //we already logged a message in the deletePDF function
                                    }
                                    else
                                    {
                                        logMessage += logMessage;
                                        errMessage += "Can not delete PDF Error1 in function FileUpdate\r\n";
                                        return(false);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        logMessage += logMessage;
                        errMessage += "Can not delete PDF Error2 in function FileUpdate\r\n" + ex.Message + "\r\n";
                        return(false);
                    }
                }
                return(true);
            }

            catch (Exception)
            {
                logMessage += logMessage;
                errMessage += errMessage;
                return(false);
            }
        }
예제 #10
0
        // this routine was coded to use the ERP names instead of the part names
        // it needs to have a list of ERP names passed to it, each one matching its corresponding sheet in the IDW.
        //  the routine actually doesn't care whether it gets passed Vault Names or Epicor Numbers,
        //  it'll just name the pdfs accordingly

        // as of November 1 2017, it is no longer being used.
        public Boolean printToPDFNew(string idw, System.Collections.Generic.Dictionary <VDF.Vault.Currency.Entities.IEntity,
                                                                                        Autodesk.DataManagement.Client.Framework.Vault.Currency.Properties.PropertyValue>
                                     propDict, string outputFolder, ref string errMessage, ref string logMessage)
        {
            {
                try
                {
                    InventorApprentice.ApprenticeServerComponent       oApprentice = new ApprenticeServerComponent();
                    InventorApprentice.ApprenticeServerDrawingDocument drgDoc;
                    drgDoc = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                    oApprentice.Open(idw);
                    drgDoc = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                    int           pageCount            = 1;
                    List <string> assemblyFileNameList = new List <string>();

                    idwFile idwObject = new idwFile();
                    idwObject.sheetNames = new List <string>();
                    idwObject.idwName    = idw;
                    idwObject.pageCount  = drgDoc.Sheets.Count;

                    foreach (Sheet sh in drgDoc.Sheets)
                    {
                        if (sh.DrawingViews.Count > 0)
                        {
                            string modelName;
                            string modelExtension;
                            modelName      = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;
                            modelExtension = System.IO.Path.GetExtension(modelName);

                            bool matchFound = false;
                            foreach (KeyValuePair <VDF.Vault.Currency.Entities.IEntity,
                                                   VDF.Vault.Currency.Properties.PropertyValue> pair in propDict)
                            {
                                if (pair.Key.EntityMasterId != 0)
                                {
                                    if (pair.Key.EntityName.ToString() == modelName)
                                    {
                                        modelName = System.IO.Path.GetFileNameWithoutExtension(pair.Value.Value.ToString());
                                        //logMessage+= "\nModel Name: " + modelName + "\n\r";
                                        matchFound = true;
                                        idwObject.sheetNames.Add(modelName);
                                        break;
                                    }
                                }
                            }

                            if (!matchFound)
                            {
                                logMessage += @" " + "\r\n" + @" " + "No corresponding model found for " + modelName + @" " + "\r\n" + @" ";
                                idwObject.sheetNames.Add("unmatchedfile");
                                pageCount++;
                                //continue;
                            }
                            else
                            {
                                pageCount++;
                            }
                        }
                    }

                    string debugFileName = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\PrintPDFCommandLine\debug.txt";
                    using (StreamWriter writetext = new StreamWriter(debugFileName))
                    {
                        writetext.WriteLine(AppSettings.Get("PrintPDFWorkingFolder").ToString());
                    }

                    Process myProcess = new Process();
                    myProcess.StartInfo.UseShellExecute  = false;
                    myProcess.StartInfo.WorkingDirectory = AppSettings.Get("PrintPDFWorkingFolder").ToString();
                    myProcess.StartInfo.FileName         = AppSettings.Get("PrintPDFExecutable").ToString();
                    myProcess.StartInfo.Arguments        = @"""" + AppSettings.Get("PrintPDFPrinter").ToString() + @"""" + " " +
                                                           @"""" + outputFolder + @"""" + " " +
                                                           @"""" + AppSettings.Get("PrintPDFPS2PDF").ToString() + @"""" + " " +
                                                           @"""" + AppSettings.Get("GhostScriptWorkingFolder").ToString() + @"""" + " " +
                                                           @"""" + idw + @"""" + " " +
                                                           (pageCount - 1) + " ";
                    foreach (string sheetName in idwObject.sheetNames)
                    {
                        myProcess.StartInfo.Arguments += " " + @"""" + sheetName + @"""";
                    }
                    myProcess.StartInfo.CreateNoWindow = true;
                    myProcess.Start();
                    myProcess.WaitForExit();

                    string argumentsFileName = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\PrintPDFCommandLine\arguments.txt";

                    using (StreamWriter writetext = new StreamWriter(argumentsFileName))
                    {
                        writetext.WriteLine(myProcess.StartInfo.Arguments);
                    }

                    string returnFileName = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\PrintPDFCommandLine\" + AppSettings.Get("PrintPDFreturnFile").ToString();
                    int    lineCount      = System.IO.File.ReadLines(returnFileName).Count();

                    // after a successful run of PrintPDF, the file 'return.txt' should contain a
                    // list of files printed, the number of lines matching the number of sheets in the idw

                    if (!(lineCount == pageCount))
                    // if the drawing set has a sheet with no drawing views on it, for example if a sheet has only a BOM
                    // this test will not be accurate.  The routine will return an error even though the pages all printed ok
                    // but because the page count does not equal the sheet count it will return a false error.

                    // so I decided for now I will still log the error, but we won't return a fail status.
                    {
                        errMessage = System.IO.File.ReadAllText(returnFileName);
                    }
                    else
                    {
                        logMessage += idw + " printed successfully";
                    }

                    errMessage = logMessage;
                    return(true);
                }
                catch (Exception ex)
                {
                    errMessage += "Unknown Error in printToPDF\r\n";
                    errMessage += ex.Message + "\r\n";
                    return(false);
                }
            }
        }
예제 #11
0
        // this is an attempt to get rid of the extra command line step for printing pdfs.
        // it also uses the display names inside the idw for the pdf names rather than getting it from a Vault property.
        public Boolean printToPDF(string idw, string outputFolder, string pdfPrinterName, string psToPdfProgName, string ghostScriptWorkingFolder, ref string errMessage, ref string logMessage)
        {
            {
                try
                {
                    // set log file location
                    XmlConfigurator.Configure();
                    log4net.Repository.Hierarchy.Hierarchy h =
                        (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
                    foreach (IAppender a in h.Root.Appenders)
                    {
                        if (a is FileAppender)
                        {
                            FileAppender fa = (FileAppender)a;
                            // Programmatically set this to the desired location here
                            string logFileLocation = outputFolder + "PDFPrint.log";

                            // Uncomment the lines below if you want to retain the base file name
                            // and change the folder name...
                            //FileInfo fileInfo = new FileInfo(fa.File);
                            //logFileLocation = string.Format(@"C:\MySpecialFolder\{0}", fileInfo.Name);

                            fa.File = logFileLocation;
                            fa.ActivateOptions();
                            break;
                        }
                    }

                    InventorApprentice.ApprenticeServerComponent       oApprentice = new ApprenticeServerComponent();
                    InventorApprentice.ApprenticeServerDrawingDocument drgDoc;
                    oApprentice.Open(idw);
                    drgDoc = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                    int           pageCount            = 1;
                    List <string> assemblyFileNameList = new List <string>();

                    idwFile idwFileToPrint = new idwFile();
                    idwFileToPrint.sheetNames = new List <string>();
                    idwFileToPrint.idwName    = idw;
                    idwFileToPrint.pageCount  = drgDoc.Sheets.Count;

                    foreach (Sheet sh in drgDoc.Sheets)
                    {
                        if (sh.DrawingViews.Count > 0)
                        {
                            string modelName;
                            modelName = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;
                            // this doesn't work right on files with special characters.
                            //modelName = Path.GetFileNameWithoutExtension(modelName);

                            if (modelName.EndsWith(".ipt") || modelName.EndsWith(".iam"))
                            {
                                int index = modelName.LastIndexOf('.');
                                modelName = index == -1 ? modelName: modelName.Substring(0, index);
                            }

                            idwFileToPrint.sheetNames.Add(modelName);
                            pageCount++;
                        }
                    }

                    log.Info("Sheet Names All Read When Printing " + idwFileToPrint.idwName);

                    string printer      = pdfPrinterName;
                    string pdfConverter = psToPdfProgName;
                    string workingDir   = ghostScriptWorkingFolder;

                    string psFileName  = "";
                    string pdfFileName = "";

                    try
                    {
                        InventorApprentice.ApprenticeDrawingPrintManager pMgr;
                        drgDoc       = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                        pMgr         = (InventorApprentice.ApprenticeDrawingPrintManager)drgDoc.PrintManager;
                        pMgr.Printer = printer;
                        int actualSheetIndex   = 1;
                        int modifiedSheetIndex = 1;

                        foreach (Sheet sh in drgDoc.Sheets)
                        {
                            string modelName;
                            //string modelExtension;
                            if (sh.DrawingViews.Count > 0)  // added to make sure sheet has at least one drawing view
                            {
                                modelName = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;

                                // this doesn't work right on files with special characters.
                                //modelName = Path.GetFileNameWithoutExtension(modelName);

                                if (modelName.EndsWith(".ipt") || modelName.EndsWith(".iam"))
                                {
                                    int index = modelName.LastIndexOf('.');
                                    modelName = index == -1 ? modelName : modelName.Substring(0, index);
                                }

                                string newName = "";

                                switch (sh.Orientation)
                                {
                                case PageOrientationTypeEnum.kLandscapePageOrientation:
                                    pMgr.Orientation = PrintOrientationEnum.kLandscapeOrientation;
                                    break;

                                case PageOrientationTypeEnum.kDefaultPageOrientation:
                                    pMgr.Orientation = PrintOrientationEnum.kDefaultOrientation;
                                    break;

                                case PageOrientationTypeEnum.kPortraitPageOrientation:
                                    pMgr.Orientation = PrintOrientationEnum.kPortraitOrientation;
                                    break;
                                }
                                pMgr.SetSheetRange(actualSheetIndex, actualSheetIndex);
                                pMgr.PrintRange = PrintRangeEnum.kPrintSheetRange;
                                pMgr.ScaleMode  = InventorApprentice.PrintScaleModeEnum.kPrintBestFitScale;


                                //if (more than one matching pdf name)
                                if (idwFileToPrint.sheetNames.Where(x => x.Equals(idwFileToPrint.sheetNames[modifiedSheetIndex - 1])).Count() > 1)
                                {
                                    newName = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf";

                                    if (System.IO.File.Exists(outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf"))
                                    {
                                        assemblyFileNameList.Add(newName);
                                        newName = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + "~" + 1 + ".pdf";
                                        if (System.IO.File.Exists(newName))
                                        {
                                            System.IO.File.Delete(newName);
                                        }
                                        System.IO.File.Move(outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf", newName);
                                        assemblyFileNameList.Add(newName);
                                    }
                                }

                                psFileName  = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".ps";
                                pdfFileName = outputFolder + idwFileToPrint.sheetNames[modifiedSheetIndex - 1] + ".pdf";

                                // for some reason if a ps filename contains a comma it doesn't want to print.
                                // we'll replace it with a tilde.
                                if (psFileName.Contains(","))
                                {
                                    psFileName = psFileName.Replace(',', '~');
                                    log.Warn("One or more characters replaced with '~' in " + pdfFileName);
                                    //logMessage += "One or more characters replaced with '~' in " + pdfFileName + "\r\n";
                                }

                                if (psFileName.Contains("°"))
                                {
                                    psFileName = psFileName.Replace('°', '~');
                                    log.Warn("One or more characters replaced with '°' in " + pdfFileName);
                                    //logMessage += "One or more characters replaced with '°' in " + pdfFileName + "\r\n";
                                }

                                pMgr.PrintToFile(psFileName);

                                if (System.IO.File.Exists(psFileName))
                                {
                                    log.Info("PS file generated for " + psFileName);
                                }
                                else
                                {
                                    log.Warn("PS file for " + psFileName + "could not be generated.");
                                    continue;   // skip trying to create a pdf if we couldn't generate a ps
                                }

                                // notice:
                                // gs doesn't seem to be able to handle the degree symbol
                                // all filenames with a degree symbol will lose it when run through this script

                                Process oProc = new Process();
                                // need the full path to the program if we want to set UseShellExecute to false
                                ProcessStartInfo startInfo = new ProcessStartInfo(pdfConverter);
                                startInfo.WorkingDirectory      = workingDir;
                                startInfo.Arguments             = @"""" + psFileName + @"""" + " " + @"""" + pdfFileName + @"""";
                                startInfo.CreateNoWindow        = true;
                                oProc.StartInfo                 = startInfo;
                                oProc.StartInfo.UseShellExecute = false;
                                oProc.Start();
                                oProc.WaitForExit();


                                if (assemblyFileNameList != null)
                                {
                                    if (assemblyFileNameList.Count > 1)   // combine multiple assembly drawings into one pdf file
                                    {
                                        // Open the input files
                                        PdfDocument inputDocument1 = new PdfDocument();
                                        PdfDocument inputDocument2 = new PdfDocument();

                                        if (System.IO.File.Exists(assemblyFileNameList[0]))
                                        {
                                            inputDocument1 = PdfReader.Open(assemblyFileNameList[0], PdfDocumentOpenMode.Import);
                                        }

                                        if (System.IO.File.Exists(assemblyFileNameList[1]))
                                        {
                                            inputDocument2 = PdfReader.Open(assemblyFileNameList[1], PdfDocumentOpenMode.Import);
                                        }

                                        // Create the output document
                                        PdfDocument outputDocument = new PdfDocument();

                                        // Show consecutive pages facing. Requires Acrobat 5 or higher.
                                        outputDocument.PageLayout = inputDocument1.PageLayout;

                                        int count = Math.Max(inputDocument1.PageCount, inputDocument2.PageCount);
                                        for (int idx = 0; idx < count; idx++)
                                        {
                                            PdfPage page1 = new PdfPage();
                                            PdfPage page2 = new PdfPage();

                                            if (inputDocument1.PageCount > idx)
                                            {
                                                page1 = inputDocument1.Pages[idx];
                                                page1 = outputDocument.AddPage(page1);
                                            }

                                            if (inputDocument2.PageCount > idx)
                                            {
                                                page2 = inputDocument2.Pages[idx];
                                                page2 = outputDocument.AddPage(page2);
                                            }
                                        }

                                        if (System.IO.File.Exists(assemblyFileNameList[0]))
                                        {
                                            System.IO.File.Delete(assemblyFileNameList[0]);
                                        }

                                        // Save the document...
                                        while (!(System.IO.File.Exists(assemblyFileNameList[0])))
                                        {
                                            string filename = assemblyFileNameList[0];
                                            outputDocument.Save(filename);
                                        }

                                        // delete the temp file and clear the list
                                        if (System.IO.File.Exists(assemblyFileNameList[1]))
                                        {
                                            System.IO.File.Delete(assemblyFileNameList[1]);
                                        }

                                        assemblyFileNameList.Clear();
                                    }
                                }

                                System.IO.File.Delete(psFileName);
                                actualSheetIndex++;
                                modifiedSheetIndex++;
                            }
                            else
                            {
                                actualSheetIndex++;   // still need to increment sheet index, even if no drawing view was found
                                                      // on current sheet...
                            }

                            // double check to make sure file got generated and saved properly.
                            if (!System.IO.File.Exists(pdfFileName))
                            {
                                log.Warn("No PDF Generated for " + pdfFileName);
                                //logMessage += "No PDF Generated for " + pdfFileName + "\r\n";
                            }
                            else
                            {
                                log.Info("PDF Generated for " + pdfFileName);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        //errMessage += "PDF Generation Error in printToPDF\r\n";
                        //errMessage += ex.Message + "\r\n";
                        log.Error("PDF Generation Error in printToPDF");
                        log.Error(ex.Message);
                        return(false);
                    }
                }

                catch (Exception ex)
                {
                    //errMessage += "IDW File Read Error in printToPDF\r\n";
                    //errMessage += ex.Message + "\r\n";
                    log.Error("IDW File Read Error in printToPDF");
                    log.Error(ex.Message);
                    return(false);
                }
                return(true);
            }
        }
예제 #12
0
        static int Main(string[] args)
        {
            // the first parameter passed to this program needs to be the name of the printer to print to.
            // the second one is the path to the folder to print the pdfs to
            // the third one is the path and name of the executable of the postscript to pdf converter
            // the rest of the parameters need to be in sets as follows:
            // 1.  the full path to the idw file
            // 2.  the number of pages in the idw file
            // 3.  a list of filenames (the count matching the number of pages), one for each page in the idw

            // this program writes to a text file called return.txt that is created in the %appdata%\PrintPDFCommandLine directory.
            // it outputs each pdf filename on a line by itself as soon as it has successfully written it.

            string printer               = "";
            string outputFolder          = "";
            string pdfConverter          = "";
            string workingDir            = "";
            string IOFolder              = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\PrintPDFCommandLine\";
            string returnFileName        = IOFolder + "return.txt";
            string callingParamsFileName = IOFolder + "callingparams.txt";

            List <idwFile> idwFiles = new List <idwFile>();


            try
            {
                if (System.IO.File.Exists(returnFileName))
                {
                    System.IO.File.Delete(returnFileName);
                }
                idwFile idw = new idwFile();
                idw.sheetNames = new List <string>();

                if (args == null)
                {
                    using (System.IO.StreamWriter file = new System.IO.StreamWriter(returnFileName, true))
                    {
                        file.WriteLine("Error: No arguments specified, aborting operation");
                    }
                    Console.WriteLine("No arguments specified, aborting operation\n");
                    return(1);     // printer not specified, nothing to print
                }

                printer      = args[0]; // first argument is name of printer to print to
                outputFolder = args[1];
                pdfConverter = args[2];
                workingDir   = args[3];

                for (int argIndex = 4; argIndex < args.Count();)    // the rest of the arguments are the pdf names to use for printing the idw sheets
                {
                    idw.idwName   = args[argIndex];
                    idw.pageCount = int.Parse(args[argIndex + 1]);
                    argIndex     += 2;
                    int i = 0;
                    for (i = argIndex; i < (argIndex + idw.pageCount); i++)
                    {
                        idw.sheetNames.Add(args[i]);
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(callingParamsFileName, true))
                        {
                            file.WriteLine(args[i]);
                            if (System.IO.File.Exists(outputFolder + args[i] + ".pdf"))
                            {
                                System.IO.File.Delete(outputFolder + args[i] + ".pdf");  // delete any outdated files
                            }
                        }
                    }
                    argIndex = i;
                    idwFiles.Add(idw);
                    idw.sheetNames = new List <string>();
                }
            }
            catch (Exception ex)
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(returnFileName, true))
                {
                    file.WriteLine("Error: Problems parsing arguments, aborting operation");
                }
                Console.WriteLine("Problems parsing arguments, aborting operation\n");
                return(1);
            }

            try
            {
                foreach (idwFile idw in idwFiles)
                {
                    InventorApprentice.ApprenticeServerComponent       oApprentice = new ApprenticeServerComponent();
                    InventorApprentice.ApprenticeServerDrawingDocument drgDoc;
                    InventorApprentice.ApprenticeDrawingPrintManager   pMgr;
                    drgDoc = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                    oApprentice.Open(idw.idwName);
                    drgDoc       = (InventorApprentice.ApprenticeServerDrawingDocument)oApprentice.Document;
                    pMgr         = (InventorApprentice.ApprenticeDrawingPrintManager)drgDoc.PrintManager;
                    pMgr.Printer = printer;
                    int actualSheetIndex   = 1;
                    int modifiedSheetIndex = 1;

                    foreach (Sheet sh in drgDoc.Sheets)
                    {
                        string modelName;
                        string modelExtension;
                        if (sh.DrawingViews.Count > 0)  // added to make sure sheet has at least one drawing view
                        {
                            modelName      = sh.DrawingViews[1].ReferencedDocumentDescriptor.DisplayName;
                            modelExtension = System.IO.Path.GetExtension(modelName);

                            List <string> assemblyFileNameList = new List <string>();
                            string        newName = "";

                            switch (sh.Orientation)
                            {
                            case PageOrientationTypeEnum.kLandscapePageOrientation:
                                pMgr.Orientation = PrintOrientationEnum.kLandscapeOrientation;
                                break;

                            case PageOrientationTypeEnum.kDefaultPageOrientation:
                                pMgr.Orientation = PrintOrientationEnum.kDefaultOrientation;
                                break;

                            case PageOrientationTypeEnum.kPortraitPageOrientation:
                                pMgr.Orientation = PrintOrientationEnum.kPortraitOrientation;
                                break;
                            }
                            pMgr.SetSheetRange(actualSheetIndex, actualSheetIndex);
                            pMgr.PrintRange = PrintRangeEnum.kPrintSheetRange;
                            pMgr.ScaleMode  = InventorApprentice.PrintScaleModeEnum.kPrintBestFitScale;

                            //if (more than one matching pdf name)
                            if (idw.sheetNames.Where(x => x.Equals(idw.sheetNames[modifiedSheetIndex - 1])).Count() > 1)
                            {
                                newName = outputFolder + idw.sheetNames[modifiedSheetIndex - 1] + ".pdf";

                                if (System.IO.File.Exists(outputFolder + idw.sheetNames[modifiedSheetIndex - 1] + ".pdf"))
                                {
                                    assemblyFileNameList.Add(newName);
                                    newName = outputFolder + idw.sheetNames[modifiedSheetIndex - 1] + "~" + 1 + ".pdf";
                                    if (System.IO.File.Exists(newName))
                                    {
                                        System.IO.File.Delete(newName);
                                    }
                                    System.IO.File.Move(outputFolder + idw.sheetNames[modifiedSheetIndex - 1] + ".pdf", newName);
                                    assemblyFileNameList.Add(newName);
                                }
                            }

                            string psFileName  = outputFolder + idw.sheetNames[modifiedSheetIndex - 1] + ".ps";
                            string pdfFileName = outputFolder + idw.sheetNames[modifiedSheetIndex - 1] + ".pdf";

                            // for some reason if a ps filename contains a comma it doesn't want to print.
                            // we'll replace it with a tilde.
                            if (psFileName.Contains(","))
                            {
                                psFileName = psFileName.Replace(',', '~');
                            }

                            if (psFileName.Contains("°"))
                            {
                                psFileName = psFileName.Replace('°', '~');
                            }

                            pMgr.PrintToFile(psFileName);

                            // notice:
                            // gs doesn't seem to be able to handle the degree symbol
                            // all filenames with a degree symbol will lose it when run through this script

                            Process oProc = new Process();
                            // need the full path to the program if we want to set UseShellExecute to false
                            ProcessStartInfo startInfo = new ProcessStartInfo(pdfConverter);
                            //startInfo.WorkingDirectory = @"C:\Program Files\gs\gs9.18\bin\";
                            startInfo.WorkingDirectory      = workingDir;
                            startInfo.Arguments             = @"""" + psFileName + @"""" + " " + @"""" + pdfFileName + @"""";
                            startInfo.CreateNoWindow        = true;
                            oProc.StartInfo                 = startInfo;
                            oProc.StartInfo.UseShellExecute = false;
                            oProc.Start();
                            oProc.WaitForExit();


                            if (assemblyFileNameList != null)
                            {
                                if (assemblyFileNameList.Count > 1)   // combine multiple assembly drawings into one pdf file
                                {
                                    // Open the input files
                                    PdfDocument inputDocument1 = new PdfDocument();
                                    PdfDocument inputDocument2 = new PdfDocument();

                                    if (System.IO.File.Exists(assemblyFileNameList[0]))
                                    {
                                        inputDocument1 = PdfReader.Open(assemblyFileNameList[0], PdfDocumentOpenMode.Import);
                                    }

                                    if (System.IO.File.Exists(assemblyFileNameList[1]))
                                    {
                                        inputDocument2 = PdfReader.Open(assemblyFileNameList[1], PdfDocumentOpenMode.Import);
                                    }

                                    // Create the output document
                                    PdfDocument outputDocument = new PdfDocument();

                                    // Show consecutive pages facing. Requires Acrobat 5 or higher.
                                    outputDocument.PageLayout = inputDocument1.PageLayout;

                                    int count = Math.Max(inputDocument1.PageCount, inputDocument2.PageCount);
                                    for (int idx = 0; idx < count; idx++)
                                    {
                                        PdfPage page1 = new PdfPage();
                                        PdfPage page2 = new PdfPage();

                                        if (inputDocument1.PageCount > idx)
                                        {
                                            page1 = inputDocument1.Pages[idx];
                                            page1 = outputDocument.AddPage(page1);
                                        }

                                        if (inputDocument2.PageCount > idx)
                                        {
                                            page2 = inputDocument2.Pages[idx];
                                            page2 = outputDocument.AddPage(page2);
                                        }
                                    }

                                    if (System.IO.File.Exists(assemblyFileNameList[0]))
                                    {
                                        System.IO.File.Delete(assemblyFileNameList[0]);
                                    }

                                    // Save the document...
                                    while (!(System.IO.File.Exists(assemblyFileNameList[0])))
                                    {
                                        string filename = assemblyFileNameList[0];
                                        outputDocument.Save(filename);
                                    }

                                    // delete the temp file and clear the list
                                    if (System.IO.File.Exists(assemblyFileNameList[1]))
                                    {
                                        System.IO.File.Delete(assemblyFileNameList[1]);
                                    }

                                    assemblyFileNameList.Clear();
                                }
                            }

                            using (System.IO.StreamWriter file = new System.IO.StreamWriter(returnFileName, true))
                            {
                                file.WriteLine(pdfFileName);
                            }

                            System.IO.File.Delete(psFileName);
                            actualSheetIndex++;
                            modifiedSheetIndex++;
                        }
                        else
                        {
                            actualSheetIndex++;   // still need to increment sheet index, even if no drawing view was found
                            // on current sheet...
                        }
                    }
                }
                return(0);
            }
            catch (Exception x)
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(returnFileName, true))
                {
                    file.WriteLine("Error: Problems printing pdfs, aborting operation");
                    file.WriteLine(x.ToString());
                }
                Console.WriteLine("Problems printing pdfs, aborting operation\n");
                return(1);
            }
        }
예제 #13
0
        private void Form1_Load(object sender, EventArgs e)
        {
               mApprenticeServer = new ApprenticeServerComponent();
            ViewerButton.Enabled = false;

            PreviewPic.SizeMode = PictureBoxSizeMode.StretchImage;

            mCurrentDoc = null;

        }
예제 #14
0
        static void Main(string[] args)
        {
            Console.BufferWidth = 300;
            Console.WindowWidth = 140;
            string msg = String.Format("coolOrange bcpMaker v{0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);

            Console.WriteLine(msg);
            Console.WriteLine("".PadRight(msg.Length, '*'));
            if (System.IO.File.Exists("bcpMaker.log"))
            {
                System.IO.File.Delete("bcpMaker.log");
            }
            System.IO.File.AppendAllLines("bcpMaker.log", new string[] { msg });
            if (!System.IO.File.Exists("config.xml"))
            {
                Console.WriteLine("config.xml file could not be found nearby the bcpMaker.exe");
                Console.ReadKey();
                return;
            }
            XmlDocument config = new XmlDocument();

            try
            {
                config.Load("config.xml");
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("Error loading config.xml: {0}", ex));
                Console.ReadKey();
                return;
            }

            var    parameters    = config.SelectSingleNode("//PARAMETERS");
            string sourceFolder  = parameters.Attributes["SourceFilesFolder"].Value;
            string targetFolder  = parameters.Attributes["TargetBCPFolder"].Value;
            var    ignore        = config.SelectSingleNode("//IGNORE");
            string ignoreFolder  = ignore.Attributes["Folders"].Value;
            string ignoreFiles   = ignore.Attributes["FileExtensions"].Value;
            var    categoryRules = config.SelectNodes("//CATEGORYRULE");

            System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("Source folder: {0} ", sourceFolder) });
            System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("target folder: {0} ", sourceFolder) });
            System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("ignore file extensions: {0} ", ignoreFiles) });
            System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("ignore folder: {0} ", ignoreFolder) });
            if (!System.IO.Directory.Exists(sourceFolder))
            {
                Console.WriteLine(String.Format("source folder '{0}' does not exist", sourceFolder));
                Console.ReadKey();
                return;
            }
            try
            {
                System.IO.Directory.CreateDirectory(targetFolder);
            }
            catch
            {
                Console.WriteLine(String.Format("target folder '{0}' could not be created", targetFolder));
                Console.ReadKey();
                return;
            }

            #region apprentice server initialization
            ApprenticeServerComponent _invApp         = new ApprenticeServerComponent();
            DesignProject             InventorProject = _invApp.DesignProjectManager.ActiveDesignProject;
            List <string>             libraryFolders  = new List <string>();
            string ccPath = InventorProject.ContentCenterPath;
            libraryFolders.Add(ccPath.Replace(sourceFolder, ""));
            string workSpace = InventorProject.WorkspacePath;
            workSpace = workSpace.Replace(sourceFolder, "");
            var libraryPaths = InventorProject.LibraryPaths;
            msg = String.Format("Using Inventor Project File '{0}'", InventorProject.FullFileName);
            Console.WriteLine(msg);
            System.IO.File.AppendAllLines("bcpMaker.log", new string[] { msg });
            ProjectPaths libPaths = InventorProject.LibraryPaths;
            foreach (ProjectPath libpath in libPaths)
            {
                libraryFolders.Add(libpath.Path.TrimStart('.').Replace("\\", "/"));
            }
            #endregion

            List <string> files = new List <string>();
            Console.WriteLine("Scanning folders...");
            GetAllFilesFromFolderRecursively(sourceFolder, files, ignoreFiles, ignoreFolder);
            Console.WriteLine(String.Format("\rCollected files {0}", files.Count).PadRight(Console.BufferWidth, ' '));

            #region adding files to BCP package
            Console.WriteLine("Adding files to BCP package...");
            var bcpSvcBuilder = new BcpServiceBuilder {
                Version = BcpVersion._2016
            };
            bcpSvcBuilder.SetPackageLocation(targetFolder);
            var bcpSvc = bcpSvcBuilder.Build();

            int counter = 1;
            Dictionary <string, FileObject> bcpInventorFiles = new Dictionary <string, FileObject>(StringComparer.OrdinalIgnoreCase);

            foreach (string file in files)
            {
                string vaultTarget = file.Replace(sourceFolder, "$").Replace("\\", "/");
                bool   isLibrary   = libraryFolders.Any(lf => vaultTarget.Contains(lf.Replace("\\", "/")));
                var    bcpFile     = bcpSvc.FileService.AddFile(vaultTarget, file, isLibrary);
                string extension   = System.IO.Path.GetExtension(file);
                foreach (XmlNode categoryRule in categoryRules)
                {
                    var fileExtensions      = categoryRule.SelectSingleNode("//FILEEXTENSION");
                    var category            = categoryRule.SelectSingleNode("//CATEGORY");
                    var lifecycleDefinition = categoryRule.SelectSingleNode("//LIFECYCLEDEFINITON");
                    var state              = categoryRule.SelectSingleNode("//STATE");
                    var revision           = categoryRule.SelectSingleNode("//REVISION");
                    var revisionDefinition = categoryRule.SelectSingleNode("//REVISIONDEFINITION");
                    if (fileExtensions != null && (fileExtensions.InnerText == "" || fileExtensions.InnerText.Split(',').Contains(extension)))
                    {
                        if (category != null && category.InnerText != "")
                        {
                            bcpFile.Category = category.InnerText;
                        }
                        string stateName = state != null ? state.InnerText : "";
                        if (lifecycleDefinition != null && lifecycleDefinition.InnerText != "")
                        {
                            bcpFile.LatestIteration.Setstate(lifecycleDefinition.InnerText, stateName);
                        }
                        bcpFile.LatestRevision.SetRevisionDefinition(revisionDefinition != null ? revisionDefinition.InnerText : "", revision != null ? revision.InnerText : "");
                        break;
                    }
                }
                if (file.ToLower().EndsWith("iam") || file.ToLower().EndsWith("ipt") || file.ToLower().EndsWith("idw") || file.ToLower().EndsWith("ipn") || file.ToLower().EndsWith("dwg"))
                {
                    bcpInventorFiles.Add(file, bcpFile);
                    System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("Adding to reference check list: {0}", file) });
                }
                msg = String.Format("\rAdding file {0} of {1} to BCP package", counter++, files.Count());
                Console.Write(msg);
            }
            Console.WriteLine(String.Format("\rAdded files {0}", bcpSvc.EntitiesTable.Vault.Statistics.Totfiles).PadRight(Console.BufferWidth, ' '));
            #endregion


            var inventorFiles = files.Where(file => file.ToLower().EndsWith("iam") || file.ToLower().EndsWith("ipt") || file.ToLower().EndsWith("idw") || file.ToLower().EndsWith("ipn") || file.ToLower().EndsWith("dwg")).ToList();
            Console.WriteLine("Building references for Inventor files...");
            counter = 0;
            foreach (string iFile in inventorFiles)
            {
                msg = String.Format("\r{1}/{2}: Building references and properties for {0}", iFile, counter++, inventorFiles.Count);
                Console.Write(msg.PadRight(Console.BufferWidth, ' '));
                ApprenticeServerDocument doc = null;
                try
                {
                    doc = _invApp.Open(iFile);
                }
                catch (Exception ex)
                {
                    msg = String.Format("\r\nOpen ERROR!File {0} could not be opened", iFile);
                    Console.WriteLine(msg);
                    System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("{0}\r\n{1}", msg, ex) });
                    continue;
                }
                var    bcpParent          = bcpInventorFiles[iFile];
                string databaseRevisionID = "";
                string lastSavedLocation  = "";
                object indices            = null;
                object oldPaths           = null;
                object currentPaths       = null;
                try {
                    doc._GetReferenceInfo(out databaseRevisionID, out lastSavedLocation, out indices, out oldPaths, out currentPaths, true);
                }
                catch (Exception ex)
                {
                    msg = String.Format("\r\nRead ERROR!References for file {0} could not retrieved", iFile);
                    Console.WriteLine(msg);
                    System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("{0}\r\n{1}", msg, ex) });
                    continue;
                }

                string[] refs = currentPaths as string[];
                int[]    idx  = indices as int[];
                for (int i = 0; i < refs.Count(); i++)
                {
                    string child = refs[i];
                    if (child == null)
                    {
                        msg = String.Format("\r\nReference Warning!Reference {0} not found for assembly {1}", (oldPaths as string[])[i], iFile);
                        Console.WriteLine(msg);
                        System.IO.File.AppendAllLines("bcpMaker.log", new string[] { msg });
                        continue;
                    }
                    System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("Reference {0}", child) });

                    if (bcpInventorFiles.ContainsKey(child))
                    {
                        var bcpChild = bcpInventorFiles[child];
                        var assoc    = bcpParent.LatestIteration.AddAssociation(bcpChild.LatestIteration, AssociationObject.AssocType.Dependency);
                        assoc.refId           = idx[i].ToString();
                        assoc.needsresolution = true;
                    }
                    else
                    {
                        msg = String.Format("\rPackage ERROR!Child {0} not in bcp package for assembly {1}", (oldPaths as string[])[i], iFile);
                        Console.WriteLine(msg);
                        System.IO.File.AppendAllLines("bcpMaker.log", new string[] { msg });
                    }
                }
                string propName = "";
                try
                {
                    foreach (PropertySet propSet in doc.PropertySets)
                    {
                        foreach (Property prop in propSet)
                        {
                            propName = prop.Name;
                            if (!propName.Equals("Thumbnail") && !propName.Equals("Part Icon") && prop.Value != null)
                            {
                                bcpParent.LatestIteration.AddProperty(prop.DisplayName, prop.Value.ToString());
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    msg = String.Format("\r\nProperty ERROR!Property {1} for file {0} could not be retrieved", iFile, propName);
                    Console.WriteLine(msg);
                    System.IO.File.AppendAllLines("bcpMaker.log", new string[] { String.Format("{0}\r\n{1}", msg, ex) });
                }
                doc.Close();
            }
            _invApp.Close();

            bcpSvc.Flush();
            System.Diagnostics.Process.Start(targetFolder);
        }