如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt
文章目录
- xps转txt
- 方法一
- 方法二
- pdf转txt
- 整页转txt
- 提取pdf表格,并转为txt
- 总结
- 另外参考
- XPS文件转换为TXT文件
- XPS文件转换为PDF文件
- PDF文件转换为TXT文件
- 提取PDF表格并转为TXT
- 示例代码(部分)
本文测试代码已上传,路径如下:
https://download.csdn.net/download/y601500359/90312050
xps部分内容如图
xps转txt
使用XpsDocument 类。
命名空间:System.Windows.Xps.Packaging
程序集:ReachFramework.dll
方法一
public static string XpsToText(string strXpsPath){try{if (!File.Exists(strXpsPath))return "";string strContent = "";System.Windows.Xps.Packaging.XpsDocument _xpsDocument = new System.Windows.Xps.Packaging.XpsDocument(strXpsPath, System.IO.FileAccess.Read);IXpsFixedDocumentSequenceReader fixedDocSeqReader = _xpsDocument.FixedDocumentSequenceReader;IXpsFixedDocumentReader _document = fixedDocSeqReader.FixedDocuments[0];StringBuilder _currentText = new StringBuilder();for (int i = 0; i < _document.FixedPages.Count; i++){IXpsFixedPageReader _page = _document.FixedPages[i];System.Xml.XmlReader _pageContentReader = _page.XmlReader;if (_pageContentReader != null){while (_pageContentReader.Read()){if (_pageContentReader.Name == "Glyphs"){if (_pageContentReader.HasAttributes){string strAtti;for (int ii = 0; ii < _pageContentReader.AttributeCount; ii++){strAtti = _pageContentReader[ii];}if (_pageContentReader.GetAttribute("UnicodeString") != null){_currentText.Append(_pageContentReader.GetAttribute("UnicodeString"));}}}}}}strContent = _currentText.ToString();_xpsDocument.Close();return strContent;}catch{return "";}}
方法二
public static string ReadXps(string strXpsPath){StringBuilder sb = new StringBuilder();//读取文档XpsDocument xpsDocument = new XpsDocument(strXpsPath, FileAccess.Read);//var reader = xpsDocument.FixedDocumentSequenceReader;//循环文档foreach (var document in reader.FixedDocuments){//循环页foreach (var page in document.FixedPages){//读取XML内容XmlReader xrdr = page.XmlReader;while (xrdr.Read()){switch (xrdr.NodeType){case XmlNodeType.Element:if (xrdr.Name == "Glyphs"){sb.Append(xrdr["UnicodeString"]);sb.Append("\n");}break;case XmlNodeType.Whitespace://sb.Append(",");break;default://sb.Append("-");break;}}}}return sb.ToString();}

pdf转txt
整页转txt
static void ConvertPdf2Txt(string filename)
{// 创建PdfDocument对象并加载PDF文件PdfDocument doc = new PdfDocument();doc.LoadFromFile(filename);// 创建 StringBuilder 对象StringBuilder builder = new StringBuilder();// 初始化 PdfTableExtractor 类的实例PdfTableExtractor extractor = new PdfTableExtractor(doc);//提取PDF所有页面的文本string strtxt;foreach (PdfPageBase page in doc.Pages){builder.Append(page.ExtractText());//PdfTextExtractor txtExtractor = new PdfTextExtractor(page);strtxt = page.ExtractText();}//将提取到的文本写为.txt格式并保存到本地路径string strPath = filename.Substring(0, filename.LastIndexOf(".") + 1) + "txt";File.WriteAllText(strPath, builder.ToString());doc.Close();
}

提取pdf表格,并转为txt
static void ConvertPdf2Txt(string filename)
{// 创建PdfDocument对象并加载PDF文件PdfDocument doc = new PdfDocument();doc.LoadFromFile(filename);// 创建 StringBuilder 对象StringBuilder builder = new StringBuilder();// 初始化 PdfTableExtractor 类的实例PdfTableExtractor extractor = new PdfTableExtractor(doc);// 声明 PdfTable 数组PdfTable[] tableList = null;int tableCount = 1;//将提取到的文本写为.txt格式并保存到本地路径string strPath = filename.Substring(0, filename.LastIndexOf(".") + 1) + "txt";// 循环遍历页面for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++){// 从特定页面提取表格tableList = extractor.ExtractTable(pageIndex);// 判断表格列表是否为空if (tableList != null && tableList.Length > 0){// 遍历列表中的表格foreach (PdfTable table in tableList){// 获取特定表格的行数和列数int row = table.GetRowCount();int column = table.GetColumnCount();// 遍历行和列for (int i = 0; i < row; i++){for (int j = 0; j < column; j++){// 获取特定单元格的文本string text = table.GetText(i, j);if(text.IndexOf('\n') > 0){text = Regex.Replace(text, @"[\n]", "");}// 将文本添加到 StringBuilder 中并添加制表符builder.Append(text + "\t");}builder.Append("\r\n");}// 写入 .txt 文件File.WriteAllText(strPath, builder.ToString());tableCount += 1;}}}doc.Close();
}

总结
从上述操作可以看出,由于xps文件的特殊性,如果文本内容出现换行,是无法检测的,而且如果直接通过xps文件读取为txt文件,格式会比较乱,如果想要格式尽量不乱,那么可以先转换为pdf文件,然后再通过pdf文件转换为txt。
其中如果pdf提取表格,可以进一步优化表格对齐内容,其中关键代码位置如下图,所以如果想要将xps文件转换为txt,甚至是csv或者excel,可以合理利用一下上述思路。
另外参考
在C#中,处理不同文件格式(如XPS、PDF和TXT)的转换和表格提取是一个复杂且通常需要依赖第三方库的任务。以下是如何在C#中实现这些操作的概述:
XPS文件转换为TXT文件
-
将XPS转换为PDF(如果需要中间格式):
- 可以使用
System.Printing.PrintQueue和XpsDocumentWriter类将XPS文件打印到PDF打印机(如果安装了支持PDF的打印机驱动程序)。 - 或者,使用第三方库如
Xps2Pdf、DinoPDF等来进行转换。
- 可以使用
-
将PDF转换为TXT:
- 使用PDF解析库(如
iTextSharp、PdfSharp、Aspose.PDF、MuPDF的.NET绑定等)来读取PDF内容。 - 解析PDF文本内容,可能需要处理PDF中的文本布局、字体和编码。
- 将解析后的文本写入TXT文件。
- 使用PDF解析库(如
由于直接从XPS到TXT的转换较为罕见,且中间可能需要处理复杂的格式和布局,因此通常建议先将XPS转换为PDF,再从PDF中提取文本。
XPS文件转换为PDF文件
如上所述,可以使用System.Printing.PrintQueue和XpsDocumentWriter类将XPS文件打印到PDF打印机,或者使用第三方库进行转换。
PDF文件转换为TXT文件
- 使用PDF解析库读取PDF内容。
- 遍历PDF页面,提取文本。
- 将文本写入TXT文件。
提取PDF表格并转为TXT
- 使用PDF解析库读取PDF内容。
- 分析PDF中的文本和布局,识别表格结构(这可能需要自定义逻辑,因为PDF不是为表格数据设计的格式)。
- 提取表格数据。
- 将表格数据格式化为TXT格式(例如,使用逗号、制表符或其他分隔符分隔单元格)。
示例代码(部分)
以下是一个使用iTextSharp库从PDF中提取文本的简单示例:
using System;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.parser;class Program
{static void Main(){string pdfPath = "path/to/your/pdf/file.pdf";string txtPath = "path/to/your/output/file.txt";using (FileStream stream = new FileStream(pdfPath, FileMode.Open, FileAccess.Read)){PdfReader reader = new PdfReader(stream);using (StreamWriter writer = new StreamWriter(txtPath)){for (int i = 1; i <= reader.NumberOfPages; i++){ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();string text = PdfTextExtractor.GetTextFromPage(reader, i, strategy);writer.WriteLine(text);}}}Console.WriteLine("PDF text extracted to TXT file.");}
}
请注意,这个示例代码仅用于从PDF中提取纯文本,并不处理表格提取的复杂逻辑。对于表格提取,您可能需要进一步分析PDF的布局和文本内容,这通常是一个更加复杂和耗时的过程。
此外,由于处理PDF和XPS文件通常涉及复杂的格式和布局,因此强烈建议使用成熟的第三方库,并仔细阅读其文档和示例代码,以了解如何处理这些文件格式。
相关文章:
如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt
文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格,并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码(部分) 本文测试代码已上传,路径如下ÿ…...
Object类(2)
大家好,今天我们继续来看看Object类中一些成员方法,这些方法在实际中有很大的用处,话不多说,来看。 注:所有类都默认继承Object类的,所以可调用Object类中的方法,如equals,也可以发生…...
BGP分解实验·11——路由聚合与条件性通告(3)
续接上(2)的实验。其拓扑如下: 路由聚合的负向也就是拆分,在有双出口的情况下,在多出口做流量分担是优选方法之一。 BGP可以根据指定来源而聚合路由,在产生该聚合路由的范围内的条目注入到本地BGP表后再向…...
无用的知识又增加了:is_assignable means?
std::pair的默认operator被delete掉了,取而代之的是两个enable_if版本。 为什么这么设计,我的理解是在std::map里,已经保存的元素的key值是不能被修改的,比如 注意,下面的代码会修改key值,编译时出现错误…...
MOS的体二极管能通多大电流
第一个问题:MOS导通之后电流方向可以使任意的,既可以从D到S,也可以从S到D。 第二个问题:MOS里面的体二极管电流可以达到几百安培,这也就解释了MOS选型的时候很少考虑体二极管的最大电流,而是考虑DS之间电流…...
C语言【基础篇】之流程控制——掌握三大结构的奥秘
流程控制 🚀前言🦜顺序结构💯 定义💯执行规则 🌟选择结构💯if语句💯switch语句💯case穿透规则 🤔循环结构💯for循环💯while循环💯do -…...
Node.js下载安装及环境配置教程 (详细版)
Node.js:是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型,使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序࿰…...
【PySide6拓展】QCalendarWidget 日历控件
文章目录 PySide6拓展:QCalendarWidget 日历控件前言什么是QCalendarWidget?特点: 如何使用QCalendarWidget?1. 基本用法2. 获取当前选中的日期 QCalendarWidget 常用函数分类介绍1. 日期选择与管理函数2. 日期格式与显示函数3. 日…...
新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战
生成式人工智能的发展既带来了有益的生产力转型机会,也提供了被恶意利用的机会。 最近,Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT,是人工智能用于非法活动的新前沿,可以被用于网…...
【文星索引】搜索引擎项目测试报告
目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…...
【PostgreSQL内核学习 —— (WindowAgg(一))】
WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明:本文的部分内容参考了他人的文章。在编写过程中,我们尊…...
Maya快捷键
旋转 ALT鼠标左键 平移 ALT鼠标中键 缩放 ALT鼠标右键 / 滑动鼠标滚轮 切换视图 空格键 [Q] 选择状态 [W] 移动状态 [E] 旋转状态 [R] 绽放状态 1正常显示 2正常也圆滑同时显示 3圆滑显示 4线框显示 5材质显示 6贴图显示 7灯光显示 CTRLZ 撤销命令…...
Go反射指南
概念: 官方对此有个非常简明的介绍,两句话耐人寻味: 反射提供一种让程序检查自身结构的能力反射是困惑的源泉 第1条,再精确点的描述是“反射是一种检查interface变量的底层类型和值的机制”。 第2条,很有喜感的自嘲…...
深入理解 C 语言函数指针的高级用法:(void (*) (void *)) _IO_funlockfile
深入理解 C 语言函数指针的高级用法 函数指针是 C 语言中极具威力的特性,广泛用于实现回调、动态函数调用以及灵活的程序设计。然而,复杂的函数指针声明常常让即使是有经验的开发者也感到困惑。本文将从函数指针的基本概念出发,逐步解析复杂…...
【观察】甲骨文:以AI为中心,开启企业级平台架构“新革命”
知名科技杂志《连线》创始主编凯文凯利曾预测:“在未来的 100 年里,人工智能将超越任何一种人工力量,将人类引领到一个前所未有的时代。” 可以看到,随着近两年AIGC与大模型的快速爆发,AI在千万行业中的重要性愈发突出…...
react native在windows环境搭建并使用脚手架新建工程
截止到2024-1-11,使用的主要软件的版本如下: 软件实体版本react-native0.77.0react18.3.1react-native-community/cli15.0.1Android Studio2022.3.1 Patch3Android SDKAndroid SDK Platform 34 35Android SDKAndroid SDK Tools 34 35Android SDKIntel x…...
C语言从入门到进阶
视频:https://www.bilibili.com/video/BV1Vm4y1r7jY?spm_id_from333.788.player.switch&vd_sourcec988f28ad9af37435316731758625407&p23 //枚举常量 enum Sex{MALE,FEMALE,SECRET };printf("%d\n", MALE);//0 printf("%d\n", FEMALE…...
Python案例--养兔子
兔子繁殖问题是一个经典的数学问题,最早由意大利数学家斐波那契在13世纪提出。这个问题不仅在数学领域具有重要意义,还广泛应用于计算机科学、生物学和经济学等领域。本文将通过一个具体的Python程序,深入探讨兔子繁殖问题的建模和实现&#…...
Mybatis——sql映射文件中的增删查改
映射文件内的增删查改 准备工作 准备一张数据表,用于进行数据库的相关操作。新建maven工程, 导入mysql-connector-java和mybatis依赖。新建一个实体类,类的字段要和数据表的数据对应编写接口编写mybatis主配置文件 public class User {priva…...
goframe 博客分类文章模型文档 主要解决关联
goframe 博客文章模型文档 模型结构 (BlogArticleInfoRes) BlogArticleInfoRes 结构体代表系统中的一篇博客文章,包含完整的元数据和内容管理功能。 type BlogArticleInfoRes struct {Id uint orm:"id,primary" json:"id" …...
人工智能在医疗领域的应用有哪些?
人工智能在医疗领域的应用十分广泛,涵盖了诊断、治疗、药物研发等多个环节,以下是一些主要的应用: 医疗影像诊断 疾病识别:通过分析 X 光、CT、MRI 等影像,人工智能算法能够识别出肿瘤、结节、骨折等病变,…...
学习第七十六行
提高github下载速度方法 1.github转码云 2.https://github.com.cnpmjs.org com后面加东西 对于面试笔试,最好方法刷力扣,1000题包进大厂的...
C#System.Threading.Timer定时器意外回收注意事项
System.Threading.Timer定时器使用时会出现意外回收的情况。具体解释如下: 只要在使用 Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。即使 Timer 仍处在活动状态,也会被回收。 实例对比测试 实例 定义两个类,其中一个…...
若依基本使用及改造记录
若依框架想必大家都了解得不少,不可否认这是一款及其简便易用的框架。 在某种情况下(比如私活)使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况,记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…...
Java基础教程(007):方法的重载与方法的练习
文章目录 6.5 方法的重载6.6 方法练习数组遍历数组最大值 6.5 方法的重载 在 Java 中,方法的重载是指在同一个类中定义多个方法,这些方法具有相同的名称,但参数列表不同。方法的重载是一种实现多态的方式,允许一个方法名以不同的…...
Day27-【13003】短文,线性表两种基本实现方式空间效率、时间效率比较?兼顾优点的静态链表是什么?如何融入空闲单元链表来解决问题?
文章目录 本次内容总览第四节,两种基本实现方式概览两种基本实现方式的比较元素个数n大于多少时,使用顺序表存储的空间效率才会更高?时间效率比较?*、访问操作,也就是读运算,读操作1、插入,2、删…...
Linux 小火车
1.添加epel软件源 2.安装sl 3. 安装完成后输入: sl...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(四)
Understanding Diffusion Models: A Unified Perspective(四) 文章概括学习扩散噪声参数(Learning Diffusion Noise Parameters)三种等效的解释(Three Equivalent Interpretations) 文章概括 引用…...
python 统计相同像素值个数
目录 python 统计相同像素值个数 最大值附近的值 python 统计相同像素值个数 import cv2 import numpy as np import time from collections import Counter# 读取图像 image cv2.imread(mask16.jpg)# 将图像转换为灰度图像 gray_image cv2.cvtColor(image, cv2.COLOR_BGR2…...
YOLOv8:目标检测与实时应用的前沿探索
随着深度学习和计算机视觉技术的迅速发展,目标检测(Object Detection)一直是研究热点。YOLO(You Only Look Once)系列模型作为业界广受关注的目标检测框架,凭借其高效、实时的特点,一直迭代更新…...
