02
2020
07

wps 转 pdf C# 实现

项目需求:不打算用office自带的组件实现word转pdf操作

环境需求:安装wps2016专业版

30
2020
06

C#开发之Word批量转PDF

C#开发之Word批量转PDF

源码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
using Microsoft.Office.Interop.Word;
 
namespace Word2Pdf
{
    class Program
    {
        public static Microsoft.Office.Interop.Word.Document wordDocument { get; set; }
 
        static void Main(string[] args)
        {
            string strFolder_f = null;
            string strFolder_t = null;
            string strFlag = null;
            System.Console.WriteLine("请输入Word文档所在目录");
            strFolder_f = System.Console.ReadLine();
            if (strFolder_f.Substring(strFolder_f.Length - 1, 1) != "\\")
            {
                strFolder_f += "\\";
            }
            strFolder_t = strFolder_f + @"pdf\";
            System.Console.WriteLine("\n创建PDF文档,请确认!");
            System.Console.Write("y(yes) or n(no) ?  ");
            strFlag = System.Console.ReadLine();
            if (strFlag == "y")
            {
                System.Console.WriteLine("\n开始创建PDF文档...");
                CheckFolder(strFolder_t);
                string strPdfFile = null;
                DirectoryInfo TheFolder = new DirectoryInfo(strFolder_f);
 
                Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
                object paramMissing = Type.Missing;
 
                foreach (FileInfo NextFile in TheFolder.GetFiles())
                {
                    strPdfFile = Path.ChangeExtension(strFolder_t + NextFile.Name, ".pdf");
                    wordDocument = appWord.Documents.Open(NextFile.FullName);
                    if (wordDocument != null)
                    {
                        wordDocument.ExportAsFixedFormat(strPdfFile, WdExportFormat.wdExportFormatPDF);
                        wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
                        wordDocument = null;
                    }
                    System.Console.Write(".. ");
                }
 
                if (appWord != null)
                {
                    appWord.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
                    appWord = null;
                }
            }
 
            //KillProcessByName("WINWORD");
            GC.Collect();
            GC.WaitForPendingFinalizers();
 
            System.Console.Write("\n处理完毕,输入任意键退出");
            System.Console.ReadKey();
        }
 
        static void CheckFolder(string strFolderPath)
        {
            if (Directory.Exists(strFolderPath))
            {
                Directory.Delete(strFolderPath, true);
                Directory.CreateDirectory(strFolderPath);
            }
            else
            {
                Directory.CreateDirectory(strFolderPath);
            }
        }
 
        static void KillProcessByName(string name)
        {
            Process[] ps = Process.GetProcessesByName(name);
            foreach (Process p in ps)
            {
                if (p.ProcessName == name)
                    p.Kill();
            }
        }
    }
}


30
2020
06

wps 转 pdf 代码

using System;
using System.IO;
using Word;
namespace WpsToPdf
{
    class Wps2Pdf : IDisposable
    {
        dynamic wps;
        public Wps2Pdf()
        {
             //这里创建wps实例不知道用了什么骚操作就没有报错过 本机安装的是wps2016
            Type type = Type.GetTypeFromProgID("KWps.Application");
            wps = Activator.CreateInstance(type);
        }
        public void ToPdf(string wpsFilename, string pdfFilename = null)
        {
            if (wpsFilename == null) { throw new ArgumentNullException("wpsFilename"); }
            if (pdfFilename == null)
            {
                pdfFilename = Path.ChangeExtension(wpsFilename, "pdf");
            }
            Console.WriteLine(string.Format(@"正在转换 [{0}]
      -> [{1}]", wpsFilename, pdfFilename));
             //到处都是dynamic   看的我一脸懵逼
            dynamic doc = wps.Documents.Open(wpsFilename, Visible: false);//这句大概是用wps 打开  word  不显示界面
            doc.ExportAsFixedFormat(pdfFilename, WdExportFormat.wdExportFormatPDF);//doc  转pdf 
            doc.Close();
        }
        public void Dispose()
        {
            if (wps != null) { wps.Quit(); }
        }
    }
}


09
2019
01

c# word 操作系列之C# 根据Word模版生成Word文件

添加com Microsoft word 11.0 Object Library 引用

09
2019
01

c# word 操作系列之Word代码实现

参考资料:

http://www.cnblogs.com/wngwz/archive/2004/08/19/34678.html

https://www.cnblogs.com/xh6300/p/5915717.html

09
2019
01

c# word 操作系列之Paragraph对象

public void ManipulateRangeText() 
{
    // Retrieve contents of first and second paragraphs
    string  str1 = ThisDocument.Paragraphs[1].Range.Text;
    string  str2 = ThisDocument.Paragraphs[2].Range.Text;
    
// 两个自然段相互交换
    Word.Range rng1 = ThisDocument.Paragraphs[1].Range;
    rng1.Text = str2;
 
    Word.Range rng2 = ThisDocument.Paragraphs[2].Range;
    rng2.Text = str1;
 
    // 显示结果
    rng1.Select();
    MessageBox.Show(rng1.Text, "ManipulateRangeText");
    rng2.Select();
MessageBox.Show(rng2.Text, "ManipulateRangeText");
    Object unit = Word.WdUnits.wdCharacter;
    Object count = -1;
    rng1.MoveEnd(ref unit, ref count);
    // Write new text for paragraph 1.
rng1.Text = "new content for paragraph 1.";
 
rng2.Text = "new content for paragraph 2.";
    // Pause to display the results.
    rng1.Select();
    MessageBox.Show(rng1.Text, "ManipulateRangeText");
    rng2.Select();
    MessageBox.Show(rng2.Text, "ManipulateRangeText");
 
unit = Word.WdUnits.wdCharacter;
   count = 1;
   rng1.MoveEnd(ref unit, ref count);
   // Note that in C#, you must specify 
  // both parameters--it's up to you 
  // to calculate the length of the range.
  unit = Word.WdUnits.wdCharacter;
  count = rng2.Characters.Count;
  rng2.Delete(ref unit, ref count);
  // C#
  rng1.Text = str1;
  // C#
  rng1.InsertAfter(str2);
  rng1.Select();
}


09
2019
01

c# word 操作系列之Range对象

Range对象也代表一个区域。与使用Selection相比较,Range的优势在于

09
2019
01

c# word 操作系列之Selection 对象

Selection对象代表当前选择的area。在word应用程序中,假如你要让一段字符变成黑体,你必须首先选择该段文字,然后应用样式。在代码中也是同样的道理,你要首先定义selection的区域然后进行操作。你可以使用Selection对象在文档中进行选择,格式化,操作,添加文本等。

Selection对象是始终存在的,如果当前没有选择任何东西,那么它代表一个insertion point。因此,在操作Seleciton之前知道它包含的内容是非常重要的。

Tips:    Selection对象与Range对象有很多成员是类似的,它们之间的区别是Selection对象指的是现实在图形界面的区域,而Range对象代表的区域是不可见的(当然通过调用方法可以使其可见)

09
2019
01

c# word 操作系列之Close 关闭word文档

Close 关闭word文档

09
2019
01

c# word 操作系列之Save 保存word文档

//Save 保存word文档
// 保存所有文档
Object noPrompt = true;
Object originalFormat = Type.Missing;
ThisApplication.Documents.Save(ref noPrompt, ref originalFormat);
 
// C#保存当前文档
ThisApplication.ActiveDocument.Save();
// 保存指定名称的文档
Object file = "MyNewDocument.doc";
ThisApplication.Documents.get_Item(ref file).Save();

 SaveAs 另存为