Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用.NET实现pdf到xml的转换_C#_.net_Xml_Pdf - Fatal编程技术网

C# 使用.NET实现pdf到xml的转换

C# 使用.NET实现pdf到xml的转换,c#,.net,xml,pdf,C#,.net,Xml,Pdf,我目前正在构建一个.NET应用程序,其中一个要求是它必须将pdf文件转换为XML文件。有人成功地做到了这一点吗?如果是,您使用了什么?您可以使用pdf库(如)来查询您的pdf文件。一旦访问了所需的数据,就可以轻松地创建xml文件。关于如何使用c#和其他.net语言创建xml文件,web上有大量信息。如果您有特定的问题,只需提问;-) 我以前做过很多这样的项目 你需要做的事情: 1.)查看此项目。该项目使用ITextSharp 如果您下载示例项目并了解它是如何工作的,那就更好了。在这个项目中,它

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

您可以使用pdf库(如)来查询您的pdf文件。一旦访问了所需的数据,就可以轻松地创建xml文件。关于如何使用c#和其他.net语言创建xml文件,web上有大量信息。如果您有特定的问题,只需提问;-)

我以前做过很多这样的项目

你需要做的事情:

1.)查看此项目。该项目使用ITextSharp

  • 如果您下载示例项目并了解它是如何工作的,那就更好了。在这个项目中,它展示了如何从pdf中提取数据。检查PDFParser类,它有一个名为ExtractTextFromPDFBytes(byte[]input)的函数,从该函数中可以看到如何从未压缩的pdf文件中提取文本别忘了包括ITextSharp dll。
PDFParser类

1 using System; 2 using System.IO; 3 using iTextSharp.text.pdf; 4 5 namespace PdfToText 6 { 7 /// 8 /// Parses a PDF file and extracts the text from it. 9 /// 10 public class PDFParser 11 { 12 /// BT = Beginning of a text object operator 13 /// ET = End of a text object operator 14 /// Td move to the start of next line 15 /// 5 Ts = superscript 16 /// -5 Ts = subscript 17 18 #region Fields 19 20 #region _numberOfCharsToKeep 21 /// 22 /// The number of characters to keep, when extracting text. 23 /// 24 private static int _numberOfCharsToKeep = 15; 25 #endregion 26 27 #endregion 28 29 #region ExtractText 30 /// 31 /// Extracts a text from a PDF file. 32 /// 33 /// the full path to the pdf file. 34 /// the output file name. 35 /// the extracted text 36 public bool ExtractText(string inFileName, string outFileName) 37 { 38 StreamWriter outFile = null; 39 try 40 { 41 // Create a reader for the given PDF file 42 PdfReader reader = new PdfReader(inFileName); 43 //outFile = File.CreateText(outFileName); 44 outFile = new StreamWriter(outFileName, false, System.Text.Encoding.UTF8); 45 46 Console.Write("Processing: "); 47 48 int totalLen = 68; 49 float charUnit = ((float)totalLen) / (float)reader.NumberOfPages; 50 int totalWritten= 0; 51 float 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; i 104 /// This method processes an uncompressed Adobe (text) object 105 /// and extracts text. 106 /// 107 /// uncompressed 108 /// 109 private string ExtractTextFromPDFBytes(byte[] input) 110 { 111 if (input == null || input.Length == 0) return ""; 112 113 try 114 { 115 string resultString = ""; 116 117 // Flag showing if we are we currently inside a text object 118 bool inTextObject = false; 119 120 // Flag showing if the next character is literal 121 // e.g. '\\' to get a '\' character or '\(' to get '(' 122 bool nextLiteral = false; 123 124 // () Bracket nesting level. Text appears inside () 125 int bracketDepth = 0; 126 127 // Keep previous chars to get extract numbers etc.: 128 char[] previousCharacters = new char[_numberOfCharsToKeep]; 129 for (int j = 0; j = ' ') && (c = 128) && (c 235 /// Check if a certain 2 character token just came along (e.g. BT) 236 /// 237 /// the searched token 238 /// the recent character array 239 /// 240 private bool CheckToken(string[] tokens, char[] recent) 241 { 242 foreach(string token in tokens) 243 { 244 if ((recent[_numberOfCharsToKeep - 3] == token[0]) && 245 (recent[_numberOfCharsToKeep - 2] == token[1]) && 246 ((recent[_numberOfCharsToKeep - 1] == ' ') || 247 (recent[_numberOfCharsToKeep - 1] == 0x0d) || 248 (recent[_numberOfCharsToKeep - 1] == 0x0a)) && 249 ((recent[_numberOfCharsToKeep - 4] == ' ') || 250 (recent[_numberOfCharsToKeep - 4] == 0x0d) || 251 (recent[_numberOfCharsToKeep - 4] == 0x0a)) 252 ) 253 { 254 return true; 255 } 256 } 257 return false; 258 } 259 #endregion 260 } 261 } 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#区域字段 19 20#地区#Charstokep编号 21 /// 22///提取文本时要保留的字符数。 23 /// 24私有静态整数_numberofcharstokep=15; 25#结束区域 26 27#结束区域 28 29#区域提取文本 30 /// 31///从PDF文件中提取文本。 32 /// 33///pdf文件的完整路径。 34///输出文件名。 35///提取的文本 36公共bool ExtractText(字符串填充名、字符串输出名) 37 { 38 StreamWriter outFile=null; 39试试看 40 { 41//为给定的PDF文件创建读取器 42 PdfReader读取器=新PdfReader(填充名称); 43//outFile=File.CreateText(outFileName); 44 outFile=newstreamwriter(outFileName,false,System.Text.Encoding.UTF8); 45 46控制台。写入(“处理:”); 47 48整数=68; 49 float charUnit=((float)totalen)/(float)reader.NumberOfPages; 50整数总写入=0; 51浮点数单位=0; 52 53(整型页面=1;页面=1.0f) 59 { 60(整数i=0;i=1.0f) 70 { 71表示(int i=0;i 104///此方法处理未压缩的Adobe(文本)对象 105///并提取文本。 106 /// 107///未压缩 108 /// 109私有字符串ExtractTextFromPDFBytes(字节[]输入) 110 { 111如果(input==null | | input.Length==0)返回“”; 112 113试试看 114 { 115字符串resultString=“”; 116 117//显示当前是否在文本对象中的标志 118 bool inTextObject=false; 119 120//显示下一个字符是否为文字的标志 121//例如,\\'获取'\'字符或'\('获取'(' 122 bool nextLiteral=假; 123 124/()括号嵌套级别。文本显示在()内 125内括号深度=0; 126 127//保留以前的字符以获取摘录编号等: 128个字符[]以前的字符=新字符[_numberOfCharsToKeep]; 129表示(int j=0;j='')和(c=128)和(c) 235///检查是否出现了某个2个字符的令牌(例如BT) 236 /// 237///搜索到的令牌 238///最近的字符数组 239 /// 240私有布尔校验令牌(字符串[]令牌,字符[]最近) 241 { 242 foreach(令牌中的字符串令牌) 243 { 244如果((最近[\u numberofcharstokep-3]==令牌[0])&& 245(最近[_numberofcharstokep-2]==令牌[1])&& 246((最近[_numberofcharstokep-1]='')|| 247(最近[_numberofcharstokep-1]==0x0d)|| 248(最近[_numberofcharstokep-1]==0x0a))&& 249((最近[_numberofcharstokep-4]='')|| 250(最近[_numberofcharstokep-4]==0x0d)|| 251(最近[_numberofcharstokep-4]==0x0a)) 252 ) 253 { 254返回true; 255 } 256 } 257返回错误; 258 } 259#结束区域 260 } 261 } 2.)解析提取的文本并创建xml文件

  • 我以前担心的一些问题是pdf,其中包含页面内的断开链接或URL。现在,如果您也担心这个问题,正则表达式可以轻松解决您的问题,但我建议您以后再处理它

  • 现在,这里是一个关于如何创建xml的示例代码。了解代码的工作原理,以便稍后您将了解如何处理自己的代码

试一试{ //XmlDataDocument sourceXML=新Xm try { //XmlDataDocument sourceXML = new XmlDataDocument(); string xmlFile = Server.MapPath(“DVDlist.xml”); //create a XML file is not exist System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(xmlFile, null); //starts a new document writer.WriteStartDocument(); //write comments writer.WriteComment(“Commentss: XmlWriter Test Program”); writer.Formatting = Formatting.Indented; writer.WriteStartElement(“DVDlist”); writer.WriteStartElement(“DVD”); writer.WriteAttributeString(“ID”, “1″); //write some simple elements writer.WriteElementString(“Title”, “Tere Naam”); writer.WriteStartElement(“Starring”); writer.WriteElementString(“Actor”, “Salman Khan”); writer.WriteEndElement(); writer.WriteEndElement(); writer.WriteEndElement(); writer.Close(); } catch (Exception e1) { Page.Response.Write(e1); }