【问题标题】:pdf to xml conversion using .NET使用 .NET 将 pdf 转换为 xml
【发布时间】:2011-09-11 09:16:36
【问题描述】:

我目前正在构建一个 .NET 应用程序,其中一项要求是它必须将 pdf 文件转换为 XML 文件。有没有人成功做到这一点?如果有,你用过什么?

【问题讨论】:

  • 您要“转换”哪种 pdf? PDF 文件不是“结构化的”,因此通常从它们中提取信息是一项艰巨的任务。我认为您应该详细说明您要达到的目标。

标签: c# .net xml pdf


【解决方案1】:

我以前做过很多次这种项目。

你需要做的事情:

1.) 查看这个项目Extract Text from PDF in C#。该项目使用 ITextSharp。

  • 最好下载示例项目并看看它是如何工作的。在这个项目中,它展示了如何从 pdf 中提取数据。查看 PDFParser 类,它具有名为 ExtractTextFromPDFBytes(byte[] input) 的函数,您可以从该函数中看到文本是如何从未压缩的 pdf 文件中提取出来的。 不要忘记包含 ITextSharp dll。

PDFParser 类

1 使用系统; 2 使用 System.IO; 3 使用iTextSharp.text.pdf; 4 5 命名空间 PdfToText 6 { 7 /// 8 /// 解析 PDF 文件并从中提取文本。 9 /// 10 公共类PDFParser 11 { 12 /// BT = 文本对象运算符的开始 13 /// ET = 文本对象运算符的结束 14 /// Td 移动到下一行的开头 15 /// 5 Ts = 上标 16 /// -5 Ts = 下标 17 18 #region 字段 19 20 #region _numberOfCharsToKeep 21 /// 22 /// 提取文本时要保留的字符数。 23 /// 24 私有静态 int _numberOfCharsToKeep = 15; 25 #结束区域 26 27 #结束区域 28 29 #区域提取文本 30 /// 31 /// 从 PDF 文件中提取文本。 32 /// 33 /// pdf文件的完整路径。 34 /// 输出文件名。 35 /// 提取的文本 36 public bool ExtractText(string inFileName, string outFileName) 37 { 38 StreamWriter outFile = null; 39 尝试 40 { 41 //为给定的PDF文件创建一个阅读器 42 PdfReader 阅读器 = 新 PdfReader(inFileName); 43 //outFile = File.CreateText(outFileName); 44 outFile = new StreamWriter(outFileName, false, System.Text.Encoding.UTF8); 45 46 Console.Write("处理中:"); 47 48 整数总长度 = 68; 49 float charUnit = ((float)totalLen) / (float)reader.NumberOfPages; 50 int totalWritten= 0; 51 浮动 curUnit = 0; 52 53 for (int page = 1; page = 1.0f) 59 { 60 for (int i = 0; i = 1.0f) 70 { 71 for (int i = 0; 我 104 /// 此方法处理未压缩的 Adob​​e(文本)对象 105 /// 并提取文本。 106 /// 107 /// 未压缩 108 /// 109 私有字符串 ExtractTextFromPDFBytes(byte[] 输入) 110 { 111如果(输入==空||输入。长度== 0)返回“”; 112 113试试 114 { 115 字符串结果字符串 = ""; 116 117 // 显示我们当前是否在文本对象中的标志 第118章 119 120 // 显示下一个字符是否为文字的标志 121 // 例如'\\' 获取 '\' 字符或 '\(' 获取 '(' 122布尔下一个文字=假; 123 124 // () 括号嵌套级别。文本出现在 () 内 125 int括号深度= 0; 126 127 // 保留以前的字符以获取提取数字等: 128 字符 [] 以前的字符 = 新字符 [_numberOfCharsToKeep]; 129 for (int j = 0; j = ' ') && (c = 128) && (c 235 /// 检查某个 2 字符标记是否刚刚出现(例如 BT) 236 /// 237 /// 搜索到的令牌 238 /// 最近的字符数组 239 /// 240 私有 bool CheckToken(string[] tokens, char[] 最近) 第241章 242 foreach(令牌中的字符串令牌) 第243章 第244章 245(最近 [_numberOfCharsToKeep - 2] == 令牌 [1])&& 246((最近[_numberOfCharsToKeep-1] =='')|| 247(最近[_numberOfCharsToKeep - 1] == 0x0d)|| 248(最近[_numberOfCharsToKeep-1] == 0x0a))&& 249((最近[_numberOfCharsToKeep-4] =='')|| 250(最近[_numberOfCharsToKeep - 4] == 0x0d)|| 251(最近[_numberOfCharsToKeep - 4] == 0x0a)) 252) 第253章 254返回真; 第255章 第256章 257 返回错误; 第258章 第259章 260 } 第261章

2.) 解析提取的文本并创建 xml 文件。

  • 我之前的一些担忧是 pdf 文件在页面内包含损坏的链接或 url。现在,以防万一您也担心这个问题,正则表达式可以轻松解决您的问题,但我建议您稍后再处理。

  • 现在这里是一个关于如何创建 xml 的示例代码。了解代码是如何工作的,以后你就会知道如何处理自己的代码。

尝试 { //XmlDataDocument sourceXML = new XmlDataDocument(); 字符串 xmlFile = Server.MapPath(“DVDlist.xml”); //创建一个不存在的XML文件 System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(xmlFile, null); //开始一个新文档 writer.WriteStartDocument(); //写cmets writer.WriteComment(“评论:XmlWriter 测试程序”); writer.Formatting = Formatting.Indented; writer.WriteStartElement(“DVDlist”); writer.WriteStartElement(“DVD”); writer.WriteAttributeString(“ID”, “1”); //写一些简单的元素 writer.WriteElementString(“标题”,“Tere Naam”); writer.WriteStartElement(“主演”); writer.WriteElementString(“演员”, “萨尔曼汗”); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); } 捕捉(异常 e1){ Page.Response.Write(e1); }

希望对您有所帮助:)

【讨论】:

  • 代码不完整
【解决方案2】:

您可以使用iTextSharp 等pdf 库来查询您的pdf 文件。一旦您访问了您需要的数据,您就可以轻松地创建一个 xml 文件。网上有大量关于如何使用 c# 和其他 .net 语言创建 xml 文件的信息。如果您有具体问题,请提出;-)

【讨论】:

    【解决方案3】:

    我最终使用了 Byte Scout's PDF Extractor SDK 。效果很好。

    【讨论】:

      【解决方案4】:

      看看 pdf2Data。
      http://itextpdf.com/blog/pdf2data-extract-information-invoices-and-templates

      它基于模板将 pdf 文件转换为 XML 文件。模板是使用选择器定义的,允许最终用户指定诸如“选择第二页上的表格”或“选择以这种特定字体编写的文本”等内容。

      请记住,我隶属于 iText,因此即使我对 PDF 的了解很广,我也可能被认为偏向于 iText 产品(因为我帮助开发它们)。

      【讨论】:

      • 你不得不说你隶属于itext。
      • 我已经提到了我的隶属关系。
      猜你喜欢
      • 2013-04-10
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      相关资源
      最近更新 更多