用一般的word转pdf转化工具,都是以虚拟打印机的方式来做的,这样的话word里的超链接在PDF里就无效了,如果用Acrobat Distiller 7.0这个工具转的话word里的超链接是可以转过去,但是这个软件只能一个一个转,我这边需要成批的转。
我希望能通过程序的方式来转,转成PDF后,里面的超链接不丢失
各位兄弟姐妹,多帮个忙吧

解决方案 »

  1.   

    看到这个接受命令行模式吗
    shell (Acrobat Distiller 7.0 word名 PDF名)
      

  2.   

    你具体用的是Acrobat Distiller 7.0哪个类?哪个方法?
      

  3.   

    你以前也做过word转pdf啊
    我是这样写的
     oWord.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
                Type wordType = word.GetType();            //打开WORD文档
                /*对应脚本中的
                 var word = new ActiveXObject("Word.Application");
                 var doc    = word.Documents.Open(docfile);
                */
                oWord.Documents docs = word.Documents;
                Type docsType = docs.GetType();
                object objDocName = @"c:\test.doc";
                oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { objDocName, true, true });            //打印输出到指定文件
                //你可以使用 doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用 Type.InvokeMember 来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数
                Type docType = doc.GetType();
                object printFileName = @"c:\test.ps";
                docType.InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { false, false, oWord.WdPrintOutRange.wdPrintAllDocument, printFileName });
                //new object[]{false,false,oWord.WdPrintOutRange.wdPrintAllDocument,printFileName}
                //对应脚本中的word.PrintOut(false, false, 0, psfile);的参数            //退出WORD
                //对应脚本中的word.Quit();
                wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
    用的虚拟打印机,这个会丢掉超链接
      

  4.   

    这会弹出一个打印的窗口,是吧!
    我用的是PdfMaker,现在正想办法把弹出的窗口去掉呢
      

  5.   

    但是这个PdfMaker也是用的打印虚拟机来做的啊,会丢失超链接啊
      

  6.   

    找遍整个网络好像就这两种打印的方法,有个家伙好像写了个什么VBS的脚本,也能转换,但是有BUG.我相信没人敢用,悲哀~~~杯具~~~
      

  7.   

    就是你运行
    Acrobat.exr word名 PDF名
    看这个软件 支持不支持命令行参数的执行,
    比如photoshop就支持
    photoshop.exe 文件
    这样就可以打开
      

  8.   

    iTextSharp
    PDFClown
    等等之类的你可以去看看
      

  9.   

    tjficcbw ,打开了了怎么关闭它啊
      

  10.   

    Adobe Acrobat Professional进行转化
      

  11.   

     private void button1_Click(object sender, EventArgs e)
            {
                string WordStr = @"C:\temp3.docx";
                string PdfStr = @"C:\temp3.pdf";
                word2PDF(WordStr, PdfStr);
                MessageBox.Show("OK");
            }
             ApplicationClass MSdoc;      
            object Unknown = Type.Missing;
            private void word2PDF(object Source, object Target)
            {   //Creating the instance of Word Application           
                if (MSdoc == null) 
                    MSdoc = new ApplicationClass();            try
                {
                    MSdoc.Visible = false;
                    MSdoc.Documents.Open(ref Source, ref Unknown,
                         ref Unknown, ref Unknown, ref Unknown,
                         ref Unknown, ref Unknown, ref Unknown,
                         ref Unknown, ref Unknown, ref Unknown,
                         ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
                    MSdoc.Application.Visible = false;
                    MSdoc.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;                object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;                MSdoc.ActiveDocument.SaveAs(ref Target, ref format,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown, ref Unknown,
                           ref Unknown, ref Unknown);
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
                finally
                {
                    if (MSdoc != null)
                    {
                        MSdoc.Documents.Close(ref Unknown, ref Unknown, ref Unknown);
                        //WordDoc.Application.Quit(ref Unknown, ref Unknown, ref Unknown); 
                    }
                    // for closing the application
                    MSdoc.Quit(ref Unknown, ref Unknown, ref Unknown);
                }
            }
    我也是要做批量的转换,其实我们可以保存路径,然后循环路径,一个个的去转换 不就好了