如何將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文件通常涉及復雜的格式和布局,因此強烈建議使用成熟的第三方庫,并仔細閱讀其文檔和示例代碼,以了解如何處理這些文件格式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67171.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67171.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day26-【13003】短文,什么是順序表?順序表和數組、內存地址的關系?順序表的插入、刪除操作如何實現?操作的時間復雜度是多少?

文章目錄 第二節&#xff0c;線性表的順序存儲及實現概覽什么是順序表和鏈表&#xff1f;順序存儲的叫順序表順序表和數組還有內存地址的關系&#xff1f;順序表的基本操作如何實現&#xff1f;1、插入操作如何實現&#xff1f;2、刪除操作如何實現&#xff1f;3、賦值和查找操…

【含開題報告+文檔+PPT+源碼】基于SpringBoot的校園跑腿管理系統

開題報告 本文旨在探討校園跑腿系統的設計與實現&#xff0c;通過深入研究與分析&#xff0c;實現了一套包含用戶管理、發布跑腿單、跑腿搶單、跑腿單評論、在線留言以及用戶在線充值等功能的綜合性系統。該系統以提高校園內物品跑腿與配送效率為核心目標&#xff0c;為廣大學…

zookeeper的介紹和簡單使用

1 zookerper介紹 zookeeper是一個開源的分布式協調服務&#xff0c;由Apache軟件基金會提供&#xff0c;主要用于解決分布式應用中的數據管理、狀態同步和集群協調等問題。通過提供一個高性能、高可用的協調服務&#xff0c;幫助構建可靠的分布式系統。 Zookeeper的特點和功能…

二級 二維數組3

對角線之和 題目描述 輸入一個矩陣&#xff0c;輸出右上-左下對角線上的數字和 輸入 輸入1個整數N。(N<10)表示矩陣有n行n列 輸出 對角線的和 樣例 輸入復制 4 1 2 3 4 2 3 4 5 4 5 6 7 1 2 3 4 輸出復制 14 #include<iostream> using namespace std; int main() {i…

Spring Boot MyBatis Plus 版本兼容問題(記錄)

Spring Boot & MyBatis Plus 版本兼容問題&#xff08;Invalid value type for attribute factoryBeanObjectType: java.lang.String&#xff09; 問題描述問題排查1. 檢查 MapperScan 的路徑2. 項目中沒有配置 FactoryBean3. 檢查 Spring 和 MyBatis Plus 版本兼容性 解決…

嵌入式學習筆記-雜七雜八

文章目錄 連續波光纖耦合激光器工作原理主要特點應用領域設計考慮因素 數值孔徑&#xff08;Numerical Aperture&#xff0c;簡稱NA&#xff09;數值孔徑的定義數值孔徑的意義數值孔徑的計算示例數值孔徑與光纖 四象限探測器檢測目標方法四象限劃分檢測目標的步驟1. 數據采集2.…

Java Web-Cookie與Session

會話跟蹤技術 會話跟蹤技術是一種在 Web 應用程序中跟蹤用戶會話狀態的機制&#xff0c;它允許服務器在多個請求之間識別和關聯屬于同一用戶的請求&#xff0c;以便在整個會話過程中保持用戶相關的信息。以下是幾種常見的會話跟蹤技術&#xff1a; Cookie 概念&#xff1a;Cook…

Spring Boot - 數據庫集成04 - 集成Redis

Spring boot集成Redis 文章目錄 Spring boot集成Redis一&#xff1a;redis基本集成1&#xff1a;RedisTemplate Jedis1.1&#xff1a;RedisTemplate1.2&#xff1a;實現案例1.2.1&#xff1a;依賴引入和屬性配置1.2.2&#xff1a;redisConfig配置1.2.3&#xff1a;基礎使用 2&…

STM32使用VScode開發

文章目錄 Makefile形式創建項目新建stm項目下載stm32cubemx新建項目IED makefile保存到本地arm gcc是編譯的工具鏈G++配置編譯Cmake +vscode +MSYS2方式bilibiliMSYS2 統一環境配置mingw32-make -> makewindows環境變量Cmake CmakeListnijia 編譯輸出elfCMAKE_GENERATOR查詢…

Oracle 12c 中的 CDB和PDB的啟動和關閉

一、簡介 Oracle 12c引入了多租戶架構&#xff0c;允許一個容器數據庫&#xff08;Container Database, CDB&#xff09;托管多個獨立的可插拔數據庫&#xff08;Pluggable Database, PDB&#xff09;。本文檔旨在詳細描述如何啟動和關閉CDB及PDB。 二、容器數據庫 (CDB) 2.1…

網絡仿真工具Core環境搭建

目錄 安裝依賴包 源碼下載 Core安裝 FAQ 下載源碼TLS出錯誤 問題 解決方案 找不到dbus-launch 問題 解決方案 安裝依賴包 調用以下命令安裝依賴包 apt-get install -y ca-certificates git sudo wget tzdata libpcap-dev libpcre3-dev \ libprotobuf-dev libxml2-de…

FPGA實現任意角度視頻旋轉(二)視頻90度/270度無裁剪旋轉

本文主要介紹如何基于FPGA實現視頻的90度/270度無裁剪旋轉&#xff0c;旋轉效果示意圖如下&#xff1a; 為了實時對比旋轉效果&#xff0c;采用分屏顯示進行處理&#xff0c;左邊代表旋轉前的視頻在屏幕中的位置&#xff0c;右邊代表旋轉后的視頻在屏幕中的位置。 分屏顯示的…

JavaEE:多線程進階

JavaEE&#xff1a;多線程進階 一、對比不同鎖策略之間的應用場景及其區別1. 悲觀鎖 和 樂觀鎖1.1 定義和原理1.2 應用場景1.3 示例代碼 2. 重量級鎖 和 輕量級鎖2.1 定義和原理2.2 應用場景2.3 示例代碼 3. 掛起等待鎖 和 自旋鎖3.1 定義和原理3.2 應用場景3.3 示例代碼 4. 幾…

董事會辦公管理系統的需求設計和實現

該作者的原創文章目錄&#xff1a; 生產制造執行MES系統的需求設計和實現 企業后勤管理系統的需求設計和實現 行政辦公管理系統的需求設計和實現 人力資源管理HR系統的需求設計和實現 企業財務管理系統的需求設計和實現 董事會辦公管理系統的需求設計和實現 公司組織架構…

pytest自動化測試 - pytest夾具的基本概念

<< 返回目錄 1 pytest自動化測試 - pytest夾具的基本概念 夾具可以為測試用例提供資源(測試數據)、執行預置條件、執行后置條件&#xff0c;夾具可以是函數、類或模塊&#xff0c;使用pytest.fixture裝飾器進行標記。 1.1 夾具的作用范圍 夾具的作用范圍&#xff1a; …

esp32-C3 實現DHT11(溫濕度)

安裝DHT傳感器庫&#xff1a; 在Arduino IDE中&#xff0c;進入項目 > 加載庫 > 管理庫。搜索DHT sensor library并安裝。 編寫代碼 定義引腳和傳感器類型初始化傳感器判斷傳感器是否正常讀取數據 源碼 #include <DHT.h> #include <DHT_U.h>// 定義DHT傳感器…

java構建工具之Gradle

自定義任務 任務定義方式&#xff0c;總體分為兩大類:一種是通過 Project 中的task()方法,另一種是通過tasks 對象的 create 或者register 方法。 //任務名稱,閉包都作為參數println "taskA..." task(A,{ }) //閉包作為最后一個參數可以直接從括號中拿出來println …

【Pytest】生成html報告中,中文亂碼問題解決方案

import pytestif __name__ "__main__":# 只運行 tests 目錄下的測試用例&#xff0c;并生成 HTML 報告pytest.main([-v, -s, --htmlreport.html, tests])可以以上方式生成&#xff0c;也可以在pytest.ini中設置 [pytest] addopts --htmlreport.html --self-contai…

MyBatis最佳實踐:提升數據庫交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一個優秀的基于 Java 的持久框架&#xff0c;內部對 JDBC 做了封裝&#xff0c;使開發者只需要關注 SQL 語句&#xff0c;而不關注 JDBC 的代碼&#xff0c;使開發變得更加的簡單MyBatis 通…

《Java程序設計》課程考核試卷

一、單項選擇題&#xff08;本大題共10個小題&#xff0c;每小題2分&#xff0c;共20分&#xff09; 1.下列用來編譯Java源文件為字節碼文件的工具是&#xff08; &#xff09;。 A.java B.javadoc C.jar D.javac 2…