c# - 使用.NET将pdf转换为xml

标签 c# .net xml pdf

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

最佳答案

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

您需要做的事情:

1.) checkout 此项目Extract Text from PDF in C#。该项目使用ITextSharp。

  • 如果您下载示例项目并查看其工作方式,那就更好了。在这个项目中,它显示了如何从pdf中提取数据。 check out 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个公共(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文件。
  • 我之前关心的一些是pdf,其中的pdf页面中包含断开的链接或URL。现在,以防万一,如果您也对此问题感到担心,正则表达式可以轻松解决您的问题,但是我建议您稍后再解决。
  • 现在,这是有关如何创建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/

    相关文章:

    javascript - 如何简化参数的传递

    .net - 如何访问iframe父元素?

    javascript - XMLHttpRequest 仅在加载 xml 文件时在本地使用 Firefox

    c# - Bootstrap CSS 不适用于 ASP.net

    c# - 使用 lambda 表达式选择对象数组中变量的所有不同值

    c# - C# 中 default(IInterface) 的用途

    .net - WPF 与 System.Drawing

    c# - 如何使用 razor 引擎使用图像 src 进行电子邮件模板化

    java - 如何使用 Spring RabbitMQ MessageListener 获取 MessageProperties

    xml - 如何使用 XSLT 进行通配符匹配?