【问题标题】:convert word document to pdf将word文档转换为pdf
【发布时间】:2011-04-28 14:55:55
【问题描述】:

我有一个RadGridView,它应该导出为 doc、pdf、csv 和 xls 格式。导出到 doc、csv 和 xls 工作正常……但将其导出为 pdf 格式时出现问题。导出为 pdf 有效,但我隐藏的列仍然显示...

所以我只是想通过以下方式将RadGridView 导出为pdf:将其导出为word,然后以编程方式将其转换为pdf...

顺便说一下,这是我导出到 word 的代码。

//导出到文档 私人无效Export_Doc(对象发件人,System.Windows.RoutedEventArgs e) { ExportDialog("doc", "Word", ExportFormat.Html); } private void ExportDialog(string extension, string selectedItem, ExportFormat 格式) { SaveFileDialog 对话框 = new SaveFileDialog(); dialog.DefaultExt = 扩展名; dialog.Filter = String.Format("{1} 个文件 (*.{0})|*.{0}|所有文件 (*.*)|*.*", extension, selectedItem); 对话框.FilterIndex = 1; if (dialog.ShowDialog() == true) { 使用 (Stream stream = dialog.OpenFile()) { GridViewExportOptions exportOptions = new GridViewExportOptions(); exportOptions.Format = 格式; exportOptions.ShowColumnFooters = true; exportOptions.ShowColumnHeaders = true; exportOptions.ShowGroupFooters = true; RadGridView1.Export(stream, exportOptions); } } }

【问题讨论】:

    标签: c# silverlight pdf ms-word


    【解决方案1】:

    通过 OLE 自动化使用 word(注意:word COM 不可重入 - 确保不要从不同线程同时调用它):

        /// <summary>
        /// Interacts directly with Word via COM to convert a document to PDF
        /// Must have the Microsoft enhancement installed to support Save As PDF
        /// in the word file menu
        /// "2007 Microsoft Office Add-in: Microsoft Save as PDF or XPS" - SaveAsPDFandXPS.exe
        /// </summary>
        private void ExportToPDFUsingWord(object sourceDoc, string destPDF)
        {
            object m = System.Reflection.Missing.Value;
            object readOnly = true;
            object myFalse = false;
            object isVisible = false;
            object matchCase = false;
            object matchWholeWord = true;
            object saveChangesWhenQuitting = false;
    
            //Debug("Connecting to word");
            _Application oWordApp = new Application();
            _Document oWordDoc = null;
            Documents oWordDocs = null;
    
            try
            {
                // load the source file
                //Debug("Opening " + sourceDoc);
                oWordDocs = oWordApp.Documents;
                oWordDoc = oWordDocs.Open(ref sourceDoc, ref m, ref readOnly, ref m, ref m, ref m, ref m, ref m, ref m, ref m, ref m, ref isVisible, ref m, ref m, ref m, ref m);
    
                if (oWordDoc != null)
                {
                    try
                    {
                        WdExportFormat paramExportFormat = WdExportFormat.wdExportFormatPDF;
                        bool paramOpenAfterExport = false;
                        WdExportOptimizeFor paramExportOptimizeFor = WdExportOptimizeFor.wdExportOptimizeForPrint;
                        WdExportRange paramExportRange = WdExportRange.wdExportAllDocument;
                        int paramStartPage = 0;
                        int paramEndPage = 0;
                        WdExportItem paramExportItem = WdExportItem.wdExportDocumentContent;
                        bool paramIncludeDocProps = true;
                        bool paramKeepIRM = true;
                        WdExportCreateBookmarks paramCreateBookmarks = WdExportCreateBookmarks.wdExportCreateWordBookmarks;
                        bool paramDocStructureTags = true;
                        bool paramBitmapMissingFonts = true;
                        bool paramUseISO19005_1 = false;
    
                        // 
                        // Export the file to PDF. 
                        //Debug("Exporting to " + destPDF); 
                        oWordDoc.ExportAsFixedFormat(destPDF,
                            paramExportFormat, paramOpenAfterExport,
                            paramExportOptimizeFor, paramExportRange, paramStartPage,
                            paramEndPage, paramExportItem, paramIncludeDocProps,
                            paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
                            paramBitmapMissingFonts, paramUseISO19005_1,
                            ref m);
                    }
                    finally
                    {
                        //Debug("Closing " + sourceDoc); 
                        oWordDoc.Close(ref saveChangesWhenQuitting, ref m, ref m);
                    }
                }
                else
                    throw new FileLoadException("Documents.Open returned null for file \'" + sourceDoc + "\', perhaps use comexp.msc and change DCOM->Word97-2003 Identity to Interactive user");  // if you are running from within a service then Word behaves differently - it is designed as a user application which must have a user interface
            }
            finally
            {
                // close word and cleanup            
                //Debug("Quitting Word"); 
                oWordApp.Quit(ref saveChangesWhenQuitting, ref m, ref m);
    
                //Debug("Releasing RCWs");
                Release(oWordDocs);
                oWordDocs = null;
                Release(oWordDoc);
                oWordDoc = null;
                Release(oWordApp);
                oWordApp = null;
    
                //Debug("Collecting garbage");
                GC.Collect();  // forces the garbage collector to run and might release any references that the RCW still has
                GC.WaitForPendingFinalizers();
                //Debug("Word objects finished");
            }
        }
    

    【讨论】:

      【解决方案2】:

      使用 DevExpress(以下代码仅适用于 RTF 格式 - 不一定适用于所有 Word 的功能):

      private void ExportToPDFUsingDevExpress(string sourceDoc, string destPDF)
          {
              DevExpress.XtraPrinting.PrintingSystem printingSystem1 = new DevExpress.XtraPrinting.PrintingSystem();
              DevExpress.XtraRichEdit.RichEditControl richEditControl1 = new DevExpress.XtraRichEdit.RichEditControl();
              richEditControl1.LoadDocument(sourceDoc);
              DevExpress.XtraPrinting.PrintableComponentLink link = new DevExpress.XtraPrinting.PrintableComponentLink(printingSystem1);
              link.Component = richEditControl1;
              link.CreateDocument();
              link.PrintingSystem.ExportToPdf(destPDF);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 2012-08-07
        • 2013-09-25
        • 2011-03-02
        • 2014-07-25
        • 2019-04-04
        • 1970-01-01
        相关资源
        最近更新 更多