合并多个rtf文件

news2024/9/20 16:40:52

 合并多个rtf文件,有2个细节:

1、不同文件之间加分页

2、编号的处理

选择一个目录

        private void BtnImportingDirectoryBrowse_Click(object sender, EventArgs e)
        {
            if (FbdlgDirectory.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = FbdlgDirectory.SelectedPath;
                string dir = textBox1.Text.Trim();
                if (System.IO.Directory.Exists(dir))
                {
                    string rtf_fn = dir + ".rtf";
                    merge_RTF(dir, rtf_fn);
                    MessageBox.Show("Save to " + rtf_fn);
                }
            }
        }

合并

        private void merge_RTF(string dir,string rtf_fn)
        {
            string[] ss = System.IO.Directory.GetFiles(dir, "*.rtf");
            List<string> files = new List<string>();
            files.AddRange(ss);
            files.Sort();
            int p_Count = 0;
            for (int idx=0; idx < files.Count; idx++)
            {
                if (idx == 0)
                {
                    richEditControl1.LoadDocument(files[idx]);
                    p_Count = richEditControl1.Document.Paragraphs.Count;
                }
                else
                {
                    string rtf = System.IO.File.ReadAllText(files[idx]);
                    char pageBreakChar = (char)12;
                    richEditControl1.Document.BeginUpdate();
                    richEditControl1.Document.AppendText(  pageBreakChar.ToString()); 
                    DocumentRange range= richEditControl1.Document.AppendRtfText(rtf) ;
                    richEditControl1.Document.EndUpdate();
                    richEditControl1.Document.BeginUpdate();
                    ParagraphCollection paragraphs = richEditControl1.Document.Paragraphs;
                    int c= paragraphs.Count;
                    if (c >= p_Count)
                    {
                        NumberingList numberingList = null;
                        for (int i = p_Count - 1; i < c; i++)
                        {
                            Paragraph pgf = paragraphs[i]; 
                            if (pgf.IsInList)
                            {
                                if (numberingList == null)
                                {
                                    NumberingList old = richEditControl1.Document.NumberingLists[pgf.ListIndex];

                                    numberingList = richEditControl1.Document.NumberingLists.Add(old.AbstractNumberingListIndex);
                                    numberingList.NumberingType = old.NumberingType;
                                    //numberingList.Levels[0].NewStart = 0;
                                    numberingList.Levels[0].SetOverrideStart(true);
                                    numberingList.Levels[0].NewStart = 1;
                                    pgf.ListIndex = numberingList.Index;
                                }
                                else
                                {
                                    pgf.ListIndex = numberingList.Index;
                                }
                            }
                            else
                            {
                                numberingList = null;
                            }
                        }

                        p_Count = c;
                    }
                    richEditControl1.Document.EndUpdate();
                } 
            }
            NumberingListCollection nl = richEditControl1.Document.NumberingLists;
            foreach (NumberingList n in nl)
            {
                
            }

            richEditControl1.Document.SaveDocument(rtf_fn, DocumentFormat.Rtf); 
        }

插入分页

                    char pageBreakChar = (char)12;
                    richEditControl1.Document.BeginUpdate();
                    richEditControl1.Document.AppendText(  pageBreakChar.ToString()); 
                    DocumentRange range= richEditControl1.Document.AppendRtfText(rtf) ;
                    richEditControl1.Document.EndUpdate();

编号的处理,遍历所有 numberingList 判断位置 ,处理编号 SetOverrideStart , NewStart = 1

                     ParagraphCollection paragraphs = richEditControl1.Document.Paragraphs;
                    int c= paragraphs.Count;
                    if (c >= p_Count)
                    {
                        NumberingList numberingList = null;
                        for (int i = p_Count - 1; i < c; i++)
                        {
                            Paragraph pgf = paragraphs[i]; 
                            if (pgf.IsInList)
                            {
                                if (numberingList == null)
                                {
                                    NumberingList old = richEditControl1.Document.NumberingLists[pgf.ListIndex];

                                    numberingList = richEditControl1.Document.NumberingLists.Add(old.AbstractNumberingListIndex);
                                    numberingList.NumberingType = old.NumberingType;
                                    //numberingList.Levels[0].NewStart = 0;
                                    numberingList.Levels[0].SetOverrideStart(true);
                                    numberingList.Levels[0].NewStart = 1;
                                    pgf.ListIndex = numberingList.Index;
                                }
                                else
                                {
                                    pgf.ListIndex = numberingList.Index;
                                }
                            }
                            else
                            {
                                numberingList = null;
                            }
                        }

                        p_Count = c;
                    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux---文件(1)---初识文件

目录 预备知识 文件操作接口 打开文件接口 重定向与文件操作关系 "w"方式与重定向 “a”方式与追加重定向 写入文件接口 读取文件接口 系统调用接口 参数解析 预备知识 我们知道&#xff0c;创建出一个空文件也要在内存中占空间。 文件文件内容文件属性 操…

raw.githubusercontent.com未能解析” 解决方案

1.操作场景 通过windows11 powershell 下载依赖包 2.报错信息如下 irm : 未能解析此远程名称: raw.githubusercontent.com 所在位置 行:1 字符: 27 & ([scriptblock]::Create((irm "https://win11debloat.raphi.re/"))) ~~~~~~~~~…

C++知识点总结(54):复杂模拟综合

复杂模拟综合 例题1. 玩具谜题2. 猴子兄弟爬山3. 浇水4. 数组旋转5. 石头剪刀布6. 巨石滚滚 例题 1. 玩具谜题 小南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈&#xff0c…

llm 是泡沫?

这篇文章不谈技术&#xff0c;只想聊聊自己这两年从事 llm 工作的一些感悟。 我个人对 llm 是一种很复杂的态度。毕竟&#xff0c;它真的击碎了我 2023 年之前所有的技术积累&#xff0c;以前在 nlp 苦心钻研的训练经验、模型结构、不同任务类型的不同处理技巧&#xff0c;好像…

个微管理撤回删除的消息都可以查看

有没有经历过误删微信消息的尴尬时刻&#xff1f;&#x1f605;或者想知道撤回的消息到底是什么内容&#xff1f;今天&#xff0c;我要向大家推荐一个多功能微管理神器&#xff0c;帮你轻松解决这些问题&#xff01;&#x1f4aa;&#x1f48c; 1️⃣ 多个账号同时在线 &#x…

nefu暑假集训3 并查集与最小生成树 个人模板+例题汇总

前言&#xff1a; 并查集与最小生成树的训练。 正文&#xff1a; 链接&#xff1a;并查集与最小生成树 - Virtual Judge (vjudge.net) 题目&#xff1a; A - 关押罪犯&#xff1a; #include <bits/stdc.h> using namespace std; const int N200005; int fa[N],d[N]; …

实现一个能设置MaxLine的LayoutManager

实现一个能设置MaxLine的LayoutManager 有时候&#xff0c;我们会遇到这种需求&#xff1a;一个线性的列表布局&#xff0c;当item量很少的时候&#xff0c;就是wrap_content直接展示完所有item&#xff0c;但是当item数量超过某个数时就要固定高度&#xff0c;让其变成可滑动…

AOP 面向切片编程

目录 1. 什么是AOP 2. AOP的应用场景 3. AOP在Java中的实现 4. Spring AOP概述 5. Spring AOP的配置 1.在pom.xml文件中添加Spring AOP的依赖&#xff1a; 2. 定义切面 3. 启用AOP 4. 目标类 5. 测试AOP 6. AOP与其他技术的对比 面向切面编程&#xff08;AOP, Aspec…

SPI通信(软件模拟)

1 软件SPI程序框架 2 软件SPI交换一个字节的先后顺序 3 读取W25q64芯片厂商ID,设备ID 4 宏定义W26q64指令码 5 页缓冲区最大256字节&#xff0c;超过就会忙碌 6 页编程

生产环境中变态开启devtools(强制)

写到最前面 首先&#xff0c;你已经下载了google的插件【vue devtools】&#xff0c;不知道怎么下载&#xff0c;留言博主 如果你想看的项目中的vuetools插件打开是这样的 Vue.js is detected on this page. Devtools inspection is not available because it’s in product…

【中学教资-信息技术】多媒体文件大小的存储

图像/音频/视频文件大小的计算 1 图像文件2 音频文件3 视频文件4 例题5 总结 视频讲解&#xff1a;音频文件大小/视频文件大小计算-失舵之舟 1 图像文件 压缩比原始大小/被压缩之后大小 颜色深度&#xff1a;指图像中每个像素所占的二进制位数&#xff08;bit&#xff09; n位…

BioXM一款实用的生物小软件

软件介绍 BioXM是一款非常简单明了的分子生物学软件&#xff0c;全中文操作界面非常友好。 DNA序列分析、蛋白质序列分析、多序列比对、氨基酸相似性计算、酶切位点分析、ORF分析、分子量和等电点预测、序列数据库等。 软件下载 https://pan.quark.cn/s/84df485efd6e安装教…

Vxe UI vue vxe-table 如何在表格中使用上传附件、上传图片

Vxe UI vue vxe-table 如何在表格中使用上传附件、上传图片 效果图 在表格中显示缩略图模式上传附件或图片 点击更多按钮查看全部 鼠标拖动上传 代码 <template><div><vxe-grid v-bind"gridOptions"></vxe-grid></div> </tem…

第九周:机器学习

目录 摘要 Abstract 一、RNN 1、引入 2、RNN的分类 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周主要围绕RNN进行探讨&#xff0c;从为什么需要这类”循环网络“入手&#xff0c;提到了”slot filling“技术&#xff0c;接着又对R…

大模型赋能风控运营:效率跃升的密码

一、大模型助力风控运营的背景与趋势 大模型兴起的背景 随着金融行业的迅速发展和数据量的爆炸式增长&#xff0c;传统的风控运营手段逐渐难以满足复杂多变的风险形势。大数据、人工智能等技术的不断进步&#xff0c;为大模型在风控运营领域的应用提供了技术支撑。金融机构面…

海洋大地测量基准与水下导航系列之一引子

海底大地基准网是一组布放在海底的声学基准站&#xff0c;组建类似GNSS星座的定位系统&#xff0c;既可以对水面及水下的各类设备提供时间和空间信息&#xff0c;也可用来监测海底板块及水体环境的动态变化。海底声学基准站与海面GNSS、海底重力站联合打造立体的观测控制网&…

十道MySQL必问面试题

你是如何理解最左前缀原则的&#xff1f;你是如何理解行锁、GAP锁、临键锁的&#xff1f;你是如何理解MVCC的&#xff1f;你是如何理解count(*)和count(1)的&#xff1f;你是如何理解Online DDL的&#xff1f;你知道哪些情况下会导致索引失效&#xff1f;你是如何理解filesort的…

fastmock使用

FastMock 是一个在线工具&#xff0c;用于快速创建和管理模拟 API&#xff08;Mock API&#xff09;。它主要用于前端开发&#xff0c;允许开发者在没有真实后端服务的情况下&#xff0c;模拟 API 响应&#xff0c;从而加速开发和测试过程。 FastMock网址&#xff1a;fastmock.…

Java多进程调用dll程序和exe程序

&#x1f3af;导读&#xff1a;本文介绍了使用Java调用本地DLL及EXE程序的方法。针对DLL调用&#xff0c;文章提供了基于Java Native Access (JNA) 库的具体实现方案&#xff0c;包括定义Java接口以映射DLL中的函数&#xff0c;并展示了如何加载DLL及调用其中的方法。对于EXE程…

Python 数据可视化:工具与实践

文章目录 数据可视化可视化库特点对比实例&#xff1a;绘制基本数据分布图评估维度 交互式可视化与静态图表实例&#xff1a;创建交互式折线图评估维度 实时数据可视化实例&#xff1a;展示实时股票数据评估维度 图表设计原则实例&#xff1a;设计适合展示销售数据的条形图评估…