南通有哪些网站,开发者选项怎么关闭,邢台市教育局官网,淘宝seo什么意思文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码#xff08;部分#xff09; 本文测试代码已上传#xff0c;路径如下#xff… 文章目录 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文件。
由于直接从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文件通常涉及复杂的格式和布局因此强烈建议使用成熟的第三方库并仔细阅读其文档和示例代码以了解如何处理这些文件格式。