Exemplo n.º 1
0
        private void DOCX()
        {
            Spire.Doc.Document document = new Spire.Doc.Document();
            document.LoadFromFile(sciezkaDoPliku);
            Image wynik = document.SaveToImages(0, Spire.Doc.Documents.ImageType.Metafile);

            Image[] images = document.SaveToImages(Spire.Doc.Documents.ImageType.Metafile);
            int     pom    = 0;

            for (int i = 1; i < images.Count(); i++)
            {
                try
                {
                    if (i != 73)
                    {
                        wynik = MergeTwoImages(wynik, images[i]);
                        images[i].Dispose();
                    }
                    else
                    {
                        wynik.Save(sciezgaDoZapisaniaPliku /*+"_"+ pom */ + ".jpg");
                        wynik.Dispose();
                        wynik = document.SaveToImages(i, Spire.Doc.Documents.ImageType.Metafile);
                        pom++;
                    }
                }
                catch (Exception)
                {
                }
            }
            wynik.Save(sciezgaDoZapisaniaPliku + "_" + document.Count + ".jpg");
            wynik.Dispose();
            document.Dispose();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 对Word文档进行拆分
        /// </summary>
        /// <param name="wordPath">要拆分的Word文档路径</param>
        /// <param name="savePath">拆分后的Word存储路径</param>
        private void SplitWord(string wordPath, string savePath)
        {
            object missing = System.Reflection.Missing.Value; //作为方法传参中的缺省值

            if (!Directory.Exists(savePath))                  //判断Word存储路径是否存在
            {
                Directory.CreateDirectory(savePath);          //如果路径不存在,则创建
            }
            try
            {
                //判断拆分方式:0表示按书签拆分,1表示按分页符拆分,默认为按书签拆分
                switch (flag)
                {
                    #region  书签拆分
                case 0:
                default:
                    Document doc = null;                    //声明一个Word文档对象
                    if (doc == null)                        //判断Word文档对象是否为空
                    {
                        doc = ReadDocument(wordPath);       //调用方法读取指定Word内容,并实例化Word文档对象
                    }
                    int[,] positions = GetPosition(doc);    //获取指定Word中的所有书签的开始和结束位置
                    object oStart = 0;                      //定义变量,表示要拆分的开始位置
                    object oEnd   = 0;                      //定义变量,表示要拆分的结束位置
                    int    row    = positions.GetLength(0); //获取二维数组的行数
                    for (int i = 0; i < row; i++)           //遍历二维数组的所有行
                    {
                        if (i != row - 1)                   //判断是否为最后一行
                        {
                            oEnd = positions[i, 1];         //如果不是最后一行,记录值,作为拆分的结束位置
                        }
                        else
                        {
                            oEnd = doc.Content.End;                     //如果是最后一行,则直接将Word文档的最后位置作为拆分的结束位置
                        }
                        Range tocopy = doc.Range(ref oStart, ref oEnd); //使用开始和结束位置锁定要拆分的范围
                        tocopy.Copy();                                  //复制要拆分范围内容的所有内容
                        Document docto = CreateDocument(textBox1.Text); //调用自定义方法创建一个新的Word文档
                        docto.Content.Paste();                          //将复制的内容粘贴到新创建的Word文档中
                        //设置Word文档的保存路径及文件名(以编号命名)
                        object filename = savePath + "\\" + i.ToString("000") + ".docx";
                        //保存Word文档
                        docto.SaveAs(ref filename, ref missing, ref missing, ref missing, ref missing,
                                     ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
                                     ref missing, ref missing, ref missing, ref missing, ref missing);
                        docto.Close(ref missing, ref missing, ref missing); //关闭Word文档
                        oStart = oEnd;                                      //将本次拆分的结束位置作为下一次拆分的开始位置
                    }
                    break;
                    #endregion

                    #region  分页符拆分
                case 1:
                    Spire.Doc.Document original = new Spire.Doc.Document();             //使用Spire插件创建Word文档对象
                    original.LoadFromFile(wordPath);                                    //加载要拆分的Word文档
                    Spire.Doc.Document newWord = new Spire.Doc.Document(textBox1.Text); //使用选择的模板创建一个新的Word文档对象
                    Spire.Doc.Section  section = newWord.AddSection();                  //为新创建的Word文档添加一节
                    int index = 0;                                                      //根据分页来拆分文档
                    foreach (Spire.Doc.Section sec in original.Sections)                //遍历文档所有节
                    {
                        //遍历文档所有子对象
                        foreach (Spire.Doc.DocumentObject obj in sec.Body.ChildObjects)
                        {
                            if (obj is Spire.Doc.Documents.Paragraph)    //判断是否为段落
                            {
                                //创建Word文档中的段落对象
                                Spire.Doc.Documents.Paragraph para = obj as Spire.Doc.Documents.Paragraph;
                                //复制并添加原有段落对象到新文档
                                section.Body.ChildObjects.Add(para.Clone());
                                //遍历所有段落子对象
                                foreach (Spire.Doc.DocumentObject parobj in para.ChildObjects)
                                {
                                    //判断是否为分页符
                                    if (parobj is Spire.Doc.Break && (parobj as Spire.Doc.Break).BreakType == Spire.Doc.Documents.BreakType.PageBreak)
                                    {
                                        //获取段落分页并移除,保存新文档到文件夹
                                        int i = para.ChildObjects.IndexOf(parobj);
                                        section.Body.LastParagraph.ChildObjects.RemoveAt(i);
                                        newWord.SaveToFile(savePath + "\\" + index.ToString("000") + ".docx", Spire.Doc.FileFormat.Docx);
                                        index++;
                                        //实例化Document类对象,添加section,将原文档段落的子对象复制到新文档
                                        newWord = new Spire.Doc.Document(textBox1.Text);
                                        section = newWord.AddSection();
                                        section.Body.ChildObjects.Add(para.Clone());
                                        if (section.Paragraphs[0].ChildObjects.Count == 0)
                                        {
                                            section.Body.ChildObjects.RemoveAt(0);    //移除第一个空白段落
                                        }
                                        else
                                        {
                                            //删除分页符前的子对象
                                            while (i >= 0)
                                            {
                                                section.Paragraphs[0].ChildObjects.RemoveAt(i);
                                                i--;
                                            }
                                        }
                                    }
                                }
                            }
                            //若对象为表格,则添加表格对象到新文档
                            if (obj is Spire.Doc.Table)
                            {
                                section.Body.ChildObjects.Add(obj.Clone());
                            }
                        }
                    }
                    //拆分后的新文档保存至指定文档
                    newWord.SaveToFile(savePath + "\\" + index.ToString("00") + ".docx", Spire.Doc.FileFormat.Docx);
                    original.Close();
                    original.Dispose();
                    newWord.Close();
                    newWord.Dispose();
                    foreach (string file in Directory.GetFiles(savePath)) //遍历拆分完的所有Word文档
                    {
                        deletePagesInFile(file, 1, 1);                    //删除第一页
                    }
                    break;
                    #endregion
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }//异常跳过
        }