Exemple #1
0
        public bool Convert(string sourcePath, string targetPath, Word.WdExportFormat exportFormat)
        {
            object _nullobj     = System.Reflection.Missing.Value;
            bool   result       = false;
            int    page         = 0;
            object paramMissing = Type.Missing;
            object Nothing      = System.Reflection.Missing.Value;

            Word.ApplicationClass wordApplication = new Word.ApplicationClass();
            Word.Document         wordDocument    = null;

            try
            {
                //DrawItems.WriteLog("Convert");
                object paramSourceDocPath  = sourcePath;
                string paramExportFilePath = targetPath;

                Word.WdExportFormat paramExportFormat           = exportFormat;
                bool paramOpenAfterExport                       = false;
                Word.WdExportOptimizeFor paramExportOptimizeFor =
                    Word.WdExportOptimizeFor.wdExportOptimizeForPrint;
                Word.WdExportRange paramExportRange = Word.WdExportRange.wdExportFromTo;
                int paramStartPage = 1;
                int paramEndPage   = 0;
                Word.WdExportItem paramExportItem = Word.WdExportItem.wdExportDocumentContent;
                bool paramIncludeDocProps         = true;
                bool paramKeepIRM = true;
                Word.WdExportCreateBookmarks paramCreateBookmarks =
                    Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks;
                bool paramDocStructureTags   = true;
                bool paramBitmapMissingFonts = true;
                bool paramUseISO19005_1      = false;
                wordDocument = wordApplication.Documents.Open(
                    ref paramSourceDocPath, ref paramMissing, ref paramMissing,
                    ref paramMissing, ref paramMissing, ref paramMissing,
                    ref paramMissing, ref paramMissing, ref paramMissing,
                    ref paramMissing, ref paramMissing, ref paramMissing,
                    ref paramMissing, ref paramMissing, ref paramMissing,
                    ref paramMissing);

                if (wordDocument != null)
                {
                    page = wordDocument.ComputeStatistics(Word.WdStatistic.wdStatisticPages, ref _nullobj);
                }

                if (page % 2 != 0)//删除最后一页空白页
                {
                    paramEndPage = page - 1;
                }
                else
                {
                    paramEndPage = page;
                }

                wordDocument.ExportAsFixedFormat(paramExportFilePath,
                                                 paramExportFormat, paramOpenAfterExport,
                                                 paramExportOptimizeFor, paramExportRange, paramStartPage,
                                                 paramEndPage, paramExportItem, paramIncludeDocProps,
                                                 paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
                                                 paramBitmapMissingFonts, paramUseISO19005_1,
                                                 ref paramMissing);
                result = true;
            }
            catch (Exception ex)
            {
                DrawItems.WriteLog(ex.ToString());

                if (wordDocument != null)
                {
                    wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
                    wordDocument = null;
                }
                if (wordApplication != null)
                {
                    wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
                    wordApplication = null;
                }
                throw ex;
            }
            finally
            {
                if (wordDocument != null)
                {
                    wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
                    wordDocument = null;
                }
                if (wordApplication != null)
                {
                    wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
                    wordApplication = null;
                }

                GC.Collect();
                //GC.WaitForPendingFinalizers();
            }

            return(result);
        }