我目前正在构建.NET应用程序,其中一项要求是它必须将pdf文件转换为XML文件。有人成功做到了吗?如果是这样,您使用了什么?
最佳答案
我以前做过很多次这样的项目。
您需要做的事情:
1.) checkout 此项目Extract Text from PDF in C#。该项目使用ITextSharp。
PDFParser类
1个使用系统;
2使用System.IO;
3使用iTextSharp.text.pdf;
4
5个命名空间PdfToText
6 {
7///
8///解析PDF文件并从中提取文本。
9///
10个公共(public)类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私有(private)静态整数_numberOfCharsToKeep = 15;
25 #endregion
26
27 #endregion
28岁
29 #region提取文字
30///
31///从PDF文件中提取文本。
32///
33///pdf文件的完整路径。
34///输出文件名。
35///提取的文字
36公共(public) bool ExtractText(字符串inFileName,字符串outFileName)
37 {
38 StreamWriter outFile = null;
39尝试
40 {
41//为给定的PDF文件创建阅读器
42 PdfReader reader =新的PdfReader(inFileName);
43//输出文件= File.CreateText(outFileName);
44 outFile =新的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页面= 1;页面= 1.0f)
59 {
60 for(int i = 0; i = 1.0f)
70 {
对于(int i = 0; i
104///此方法处理未压缩的Adobe(文本)对象
105///并提取文本。
106///
107///未压缩
108///
109个私有(private)字符串ExtractTextFromPDFBytes(字节[]输入)
110 {
111 if(input == null || input.Length == 0)返回“”;
112
113尝试
114 {
115字符串resultString =“”;
116
117//标记显示我们当前是否在文本对象内
第118节
119
120//标志显示下一个字符是否为文字
121//例如'\\'获得一个'\'字符或'\('获得一个((
122 bool nextLiteral = false;
123
124//()括号嵌套级别。文字出现在()中
125 int方括号深度= 0;
126
127//保留以前的字符以获取提取数字等:
128个char [] previousCharacters =新的char [_numberOfCharsToKeep];
对于(int j = 0; j ='')&&(c = 128)&&(c
235///检查是否出现了某个2个字符的 token (例如BT)
236///
237///搜索到的 token
238///最近的字符数组
239///
240个私有(private) bool CheckToken(字符串[] token ,字符[]最近)
241 {
242 foreach( token 中的字符串 token )
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返回true;
255}
256}
257返回false;
258}
259 #endregion
260}
261}
2.)解析提取的文本并创建和xml文件。
尝试 {
//XmlDataDocument sourceXML = new XmlDataDocument();
字符串xmlFile = Server.MapPath(“DVDlist.xml”);
//创建一个不存在的XML文件
System.Xml.XmlTextWriter writer =新的System.Xml.XmlTextWriter(xmlFile,null);
//开始一个新文件
writer.WriteStartDocument();
//写评论
writer.WriteComment(“注释:XmlWriter测试程序”);
writer.Formatting = Formatting.Indented;
writer.WriteStartElement(“DVDlist”);
writer.WriteStartElement(“DVD”);
writer.WriteAttributeString(“ID”,“1”);
//写一些简单的元素
writer.WriteElementString(“Title”,“Tere Naam”);
writer.WriteStartElement(“Starring”);
writer.WriteElementString(“Actor”,“Salman Khan”);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.Close();
}
捕获(异常e1){
Page.Response.Write(e1);
}
希望对您有所帮助:)
关于c# - 使用.NET将pdf转换为xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6287880/