回答
添加引用到ReachFramework
和WindowsBase
及以下using
聲明:
using System.Windows.Xps.Packaging;
然後使用此代碼:
XpsDocument _xpsDocument=new XpsDocument("/path",System.IO.FileAccess.Read);
IXpsFixedDocumentSequenceReader fixedDocSeqReader
=_xpsDocument.FixedDocumentSequenceReader;
IXpsFixedDocumentReader _document = fixedDocSeqReader.FixedDocuments[0];
IXpsFixedPageReader _page
= _document.FixedPages[documentViewerElement.MasterPageNumber];
StringBuilder _currentText = new StringBuilder();
System.Xml.XmlReader _pageContentReader = _page.XmlReader;
if (_pageContentReader != null)
{
while (_pageContentReader.Read())
{
if (_pageContentReader.Name == "Glyphs")
{
if (_pageContentReader.HasAttributes)
{
if (_pageContentReader.GetAttribute("UnicodeString") != null)
{
_currentText.
Append(_pageContentReader.
GetAttribute("UnicodeString"));
}
}
}
}
}
string _fullPageText = _currentText.ToString();
文本存在Glyphs
- >UnicodeString
字符串屬性。您必須使用XMLReader
作爲固定頁面。
@Tim Trabold:對於答案的反饋將有所幫助。 – Sanjay
我得到的例外如下:錯誤類型'System.IO.Packaging.Package'在沒有引用的程序集中定義。您必須添加對程序集「WindowsBase,版本= 3.0.0.0,文化=中立,PublicKeyToken = 31bf3856ad364e35」的引用。 – 2013-09-26 05:33:17
+清除它..偉大的工作。 – 2013-09-26 06:30:00
類的全碼:
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Xps.Packaging;
namespace XPS_Data_Transfer
{
internal static class XpsDataReader
{
public static List<string> ReadXps(string address, int pageNumber)
{
var xpsDocument = new XpsDocument(address, System.IO.FileAccess.Read);
var fixedDocSeqReader = xpsDocument.FixedDocumentSequenceReader;
if (fixedDocSeqReader == null) return null;
const string uniStr = "UnicodeString";
const string glyphs = "Glyphs";
var document = fixedDocSeqReader.FixedDocuments[pageNumber - 1];
var page = document.FixedPages[0];
var currentText = new List<string>();
var pageContentReader = page.XmlReader;
if (pageContentReader == null) return null;
while (pageContentReader.Read())
{
if (pageContentReader.Name != glyphs) continue;
if (!pageContentReader.HasAttributes) continue;
if (pageContentReader.GetAttribute(uniStr) != null)
currentText.Add(Dashboard.CleanReversedPersianText(pageContentReader.GetAttribute(uniStr)));
}
return currentText;
}
}
}
,從自定義文件的自定義頁面返回字符串數據的列表。
Dashboard.CleanReversedPersianText丟失 – salle55
private string ReadXpsFile(string fileName)
{
XpsDocument _xpsDocument = new XpsDocument(fileName, System.IO.FileAccess.Read);
IXpsFixedDocumentSequenceReader fixedDocSeqReader
= _xpsDocument.FixedDocumentSequenceReader;
IXpsFixedDocumentReader _document = fixedDocSeqReader.FixedDocuments[0];
FixedDocumentSequence sequence = _xpsDocument.GetFixedDocumentSequence();
string _fullPageText="";
for (int pageCount = 0; pageCount < sequence.DocumentPaginator.PageCount; ++pageCount)
{
IXpsFixedPageReader _page
= _document.FixedPages[pageCount];
StringBuilder _currentText = new StringBuilder();
System.Xml.XmlReader _pageContentReader = _page.XmlReader;
if (_pageContentReader != null)
{
while (_pageContentReader.Read())
{
if (_pageContentReader.Name == "Glyphs")
{
if (_pageContentReader.HasAttributes)
{
if (_pageContentReader.GetAttribute("UnicodeString") != null)
{
_currentText.
Append(_pageContentReader.
GetAttribute("UnicodeString"));
}
}
}
}
}
_fullPageText += _currentText.ToString();
}
return _fullPageText;
}
我得到ArgumentOutOfRangeException使用此代碼,_document.FixedPages只包含一個單一的元素(即使是XPS包含多個頁面)。請參閱:http://i.imgur.com/gpcKxCX.png – salle55
方法,返回所有網頁的文本(修改阿米爾:S碼,希望這是確定):
/// <summary>
/// Get all text strings from an XPS file.
/// Returns a list of lists (one for each page) containing the text strings.
/// </summary>
private static List<List<string>> ExtractTextFromXps(string xpsFilePath)
{
var xpsDocument = new XpsDocument(xpsFilePath, FileAccess.Read);
var fixedDocSeqReader = xpsDocument.FixedDocumentSequenceReader;
if (fixedDocSeqReader == null)
return null;
const string UnicodeString = "UnicodeString";
const string GlyphsString = "Glyphs";
var textLists = new List<List<string>>();
foreach (IXpsFixedDocumentReader fixedDocumentReader in fixedDocSeqReader.FixedDocuments)
{
foreach (IXpsFixedPageReader pageReader in fixedDocumentReader.FixedPages)
{
var pageContentReader = pageReader.XmlReader;
if (pageContentReader == null)
continue;
var texts = new List<string>();
while (pageContentReader.Read())
{
if (pageContentReader.Name != GlyphsString)
continue;
if (!pageContentReader.HasAttributes)
continue;
if (pageContentReader.GetAttribute(UnicodeString) != null)
texts.Add(pageContentReader.GetAttribute(UnicodeString));
}
textLists.Add(texts);
}
}
xpsDocument.Close();
return textLists;
}
用法:
var txtLists = ExtractTextFromXps(@"C:\myfile.xps");
int pageIdx = 0;
foreach (List<string> txtList in txtLists)
{
pageIdx++;
Console.WriteLine("== Page {0} ==", pageIdx);
foreach (string txt in txtList)
Console.WriteLine(" "+txt);
Console.WriteLine();
}
- 1. 從文本文檔中提取句子
- 2. 從PDF文檔中提取文本 - C#
- 3. 如何從XPS文件提取文本或表格到matlab
- 4. 轉換XPS文檔
- 5. 問號XPS文檔
- 6. DOC到XPS文件文檔
- 7. 將XPS文檔拆分爲多個XPS文檔
- 8. 截取PrintDialog到XPS文檔編寫器
- 9. 獲取的由XPS文檔作家
- 10. 從Word文檔中提取宏到c#文本文件#
- 11. XPS文檔有多安全?
- 12. 如何驗證XPS文檔?
- 13. 如何創建XPS文檔?
- 14. 使用docsplit從內存中的文檔中提取文本
- 15. 從HTML文檔中提取文本到單詞列表中
- 16. C#從MemoryStream中打開Office文檔和Xps文件
- 17. 規則從文本文檔中提取鍵+短語
- 18. 如何僅從HTML文檔中提取粗體文本?
- 19. 使用Python從word文檔中提取圖像和文本
- 20. 從腐敗(?)中提取文本pdf文檔
- 21. 從未知內容類型的文檔中提取文本
- 22. 從文本文檔中提取技術關鍵字
- 23. 從word文檔中提取標題的文本
- 24. 如何從LaTeX文檔中提取重要的文本內容
- 25. 從打開的Word文檔中提取文本
- 26. 使用斯坦福NER從文本文檔中提取地址?
- 27. 如何從Word文檔中提取RTF/HTML文本?
- 28. 如何從PDF文檔中提取文本?
- 29. 如何從文檔中提取/識別文本?
- 30. 如何從PDF文檔中提取文本
既然您已爲問題爲C#,因此幾乎所有的答案都將在C#中,但爲什麼只有C#。你對其他語言過敏嗎? –
不,但我的公司在C#開發,我也必須這樣做 –
那麼,什麼?使用任何其他語言創建,然後使用任何在線轉換器(如http://www.developerfusion.com/tools/convert/csharp-to-vb/#convert-again)將其更改爲您所需的語言。在我的最後一個公司,我用C#編碼,現在用VB編寫代碼。它(語法)在前兩天是一個問題。 –