当前位置: 首页 > news >正文

如何将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文件

  1. 将XPS转换为PDF(如果需要中间格式):

    • 可以使用System.Printing.PrintQueueXpsDocumentWriter类将XPS文件打印到PDF打印机(如果安装了支持PDF的打印机驱动程序)。
    • 或者,使用第三方库如Xps2PdfDinoPDF等来进行转换。
  2. 将PDF转换为TXT

    • 使用PDF解析库(如iTextSharpPdfSharpAspose.PDFMuPDF的.NET绑定等)来读取PDF内容。
    • 解析PDF文本内容,可能需要处理PDF中的文本布局、字体和编码。
    • 将解析后的文本写入TXT文件。

由于直接从XPS到TXT的转换较为罕见,且中间可能需要处理复杂的格式和布局,因此通常建议先将XPS转换为PDF,再从PDF中提取文本。

XPS文件转换为PDF文件

如上所述,可以使用System.Printing.PrintQueueXpsDocumentWriter类将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表格&#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码&#xff08;部分&#xff09; 本文测试代码已上传&#xff0c;路径如下&#xff…...

【Samba】Ubuntu20.04 Windows 共享文件夹

【Samba】Ubuntu20.04 Windows 共享文件夹 前言整体思路检查 Ubuntu 端 和 Windows 网络通信是否正常创建共享文件夹安装并配置 Samba 服务器安装 Samba 服务器创建 Samba 用户编辑 Samba 配置文件重启 Samba 服务器 在 Windows 端 访问 Ubuntu 的共享文件夹 前言 本文基于 Ub…...

gradle和maven的区别以及怎么选择使用它们

目录 区别 1. 配置方式 2. 依赖管理 3. 构建性能 4. 灵活性和扩展性 5. 多项目构建 如何选择使用 选择 Maven 的场景 选择 Gradle 的场景 区别 1. 配置方式 Maven&#xff1a; 使用基于 XML 的 pom.xml 文件进行配置。所有的项目信息、依赖管理、构建插件等都在这个文…...

360大数据面试题及参考答案

数据清理有哪些方法? 数据清理是指发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理无效值和缺失值等。常见的数据清理方法有以下几种: 去重处理:数据中可能存在重复的记录,这不仅会占用存储空间,还可能影响分析结果。通过对比每条记录的关键属性,若所有关键…...

Myeclipse最新版本 C1 2019.4.0

Myeclipse C1 2019.4.0下载地址&#xff1a;链接: https://pan.baidu.com/s/1MbOMLewvAdemoQ4FNfL9pQ 提取码: tmf6 1.1、什么是集成开发环境? ★集成开发环境讲究-站式开发&#xff0c;使用这个工具即可。有提示功能&#xff0c;有自动纠错功能。 ★集成开发环境可以让软件开…...

MySQL 9.2.0 的功能

MySQL 9.2.0 的功能 MySQL 9.2.0 的功能新增、弃用和删除内容如下&#xff1a; 新增功能 权限新增12&#xff1a;引入了CREATE_SPATIAL_REFERENCE_SYSTEM权限&#xff0c;拥有该权限的用户可执行CREATE SPATIAL REFERENCE SYSTEM、CREATE OR REPLACE SPATIAL REFERENCE SYSTEM…...

接口 V2 完善:分布式环境下的 WebSocket 实现与 Token 校验

&#x1f3af; 本文档详细介绍了如何使用WebSocket协议优化客户端与服务端之间的通信&#xff0c;特别是在处理异步订单创建通知的场景中。通过引入WebSocket代替传统的HTTP请求-响应模式&#xff0c;实现了服务器主动向客户端推送数据的功能&#xff0c;极大地提高了实时性和效…...

微前端架构在前端开发中的实践与挑战

随着单页面应用&#xff08;SPA&#xff09;和前端框架如 React、Vue、Angular 的快速发展&#xff0c;现代前端应用的复杂度日益提升。尤其是当应用规模逐渐增大时&#xff0c;单一的代码库往往难以应对不同团队的协作和版本管理问题。为了应对这一挑战&#xff0c;微前端架构…...

【自学嵌入式(6)天气时钟:软硬件准备、串口模块开发】

天气时钟&#xff1a;软硬件准备、串口模块开发 软硬件准备接线及模块划分ESP8266开发板引脚图软件准备 串口模块编写串口介绍Serial库介绍 近期跟着网上一些教学视频&#xff0c;编写了一个天气时钟&#xff0c;本篇及往后数篇都将围绕天气时钟的制作过程展开。本文先解决硬件…...

macbook安装go语言

通过brew来安装go语言 使用brew命令时&#xff0c;一般都会通过brew search看看有哪些版本 brew search go执行后&#xff0c;返回了一堆内容&#xff0c;最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…...

代码随想录算法训练营第三十八天-动态规划-完全背包-322. 零钱兑换

太难了 但听了前面再听这道题感觉递推公式也不是不难理解 动规五部曲 dp[j]代表装满容量为j&#xff08;也就是目标值&#xff09;的背包最少物品数量递推公式&#xff1a;dp[j] std::min(dp[j], dp[j - coins[i]] 1)当使用coins[i]这张纸币时&#xff0c;要向前找到容量为…...

小阿卡纳牌

小阿卡纳牌 风&#xff1a;热湿 火&#xff1a;热干 水&#xff1a;冷湿 土&#xff1a;冷干 火风&#xff1a;温度相同&#xff0c;但是湿度不同&#xff0c;二人可能会在短期内十分热情&#xff0c;但是等待热情消退之后&#xff0c;会趋于平淡。 湿度相同、温度不同&#x…...

DDD 和 TDD

领域驱动设计&#xff08;DDD&#xff09; DDD 是一种软件开发方法&#xff0c;强调通过与领域专家的密切合作来构建一个反映业务逻辑的模型。其核心思想是将业务逻辑和技术实现紧密结合&#xff0c;以便更好地解决复杂的业务问题。 DDD 的关键概念&#xff1a; 1. 领域模型 …...

Java学习教程,从入门到精通,JDBC插入记录语法及案例(104)

JDBC插入记录语法及案例 一、JDBC插入记录语法 在JDBC中&#xff0c;插入记录主要通过执行SQL的INSERT语句来实现。其基本语法如下&#xff1a; INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1, 值2, ..., 值n);表名&#xff1a;需要插入记录的表的名称。列1, 列2, …,…...

Linux文件基本操作

Linux 的设计哲学 在 Linux 中&#xff0c;一切皆文件&#xff01; 什么是文件&#xff1f; 文件是具有永久存储性&#xff0c;按特定字节顺序组成的命名数据集 文件可分为&#xff1a;文本文件&#xff0c;二进制文件 文本文件&#xff1a;每个文件存放一个 ASCII 码 存储…...

React 路由导航与传参详解

随着单页面应用&#xff08;SPA&#xff09;已经成为主流。React 作为最流行的前端框架之一&#xff0c;提供了强大的路由管理工具 react-router-dom&#xff0c;帮助开发者轻松实现页面导航和传参。本文将详细介绍如何使用 react-router-dom 构建路由导航、传参以及嵌套路由的…...

C#面试常考随笔6:ArrayList和 List的主要区别?

在 C# 中&#xff0c;ArrayList和List<T>&#xff08;泛型列表&#xff09;都可用于存储一组对象。推荐优先使用List<T>&#xff0c;因为它具有更好的类型安全性、性能和语法简洁性&#xff0c;并且提供了更丰富的功能。只有在需要与旧代码兼容或存储不同类型对象的…...

C#分页思路:双列表数据组合返回设计思路

一、应用场景 需要分页查询&#xff08;并非全表查载入物理内存再筛选&#xff09;&#xff0c;返回列表1和列表2叠加的数据时 二、实现方式 列表1必查&#xff0c;列表2根据列表1的查询结果决定列表2的分页查询参数 三、示意图及其实现代码 1.示意图 黄色代表list1的数据&a…...

中科大:LLM检索偏好优化应对RAG知识冲突

&#x1f4d6;标题&#xff1a;RPO: Retrieval Preference Optimization for Robust Retrieval-Augmented Generation &#x1f310;来源&#xff1a;arXiv, 2501.13726 &#x1f31f;摘要 &#x1f538;虽然检索增强生成&#xff08;RAG&#xff09;在利用外部知识方面表现出…...

知识库管理系统提升企业知识价值与工作效率的实践路径分析

内容概要 知识库管理系统在企业发展中的重要性日益凸显&#xff0c;尤其是在信息爆炸的时代。现代企业需要有效地管理和利用自身知识资产&#xff0c;以提升整体效率和竞争力。本文旨在探讨知识库管理系统的应用实践&#xff0c;围绕其在信息整理、知识共享及决策支持等方面的…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...