public class ComPDFHepler
{
/// <summary>
/// 正则获取字符串中两个字符串间的内容
/// </summary>
/// <param name="str"></param>
/// <param name="s"></param>
/// <param name="e"></param>
/// <returns></returns>
public static string GetValue(string str, string s, string e, bool isContansE)
{
Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);
Match matchs = rg.Match(str);
if (isContansE)
{
return matchs.Groups[0].Value + matchs.Groups[2].Value;
}
else
{
return matchs.Groups[0].Value;
}

}

public static string GetValue(string str, string s, string e)
{
Regex rg = new Regex("(?<=(" + s + "))[.\\s\\S]*?(?=(" + e + "))", RegexOptions.Multiline | RegexOptions.Singleline);
Match matchs = rg.Match(str);

return matchs.Groups[0].Value + matchs.Groups[2].Value;
}
/// <summary>
/// 以startString起,取值到结束
/// </summary>
/// <param name="str"></param>
/// <param name="s"></param>
/// <returns></returns>
public static string GetStartWithValue(string str, string startString)
{
Regex rg = new Regex("(?<=(" + startString + "))[.\\s\\S]*", RegexOptions.Multiline | RegexOptions.Singleline);
Match matchs = rg.Match(str);
return matchs.Value;
}
/// <summary>
/// 转换成列表
/// </summary>
/// <param name="tempContent"></param>
/// <returns></returns>
public static List<String> ConvertToArrayString(string tempContent)
{

List<String> list = new List<string>();

StringReader sr = new StringReader(tempContent);

StringBuilder sb = new StringBuilder();

//读第一行

var strContent = sr.ReadLine();

Console.WriteLine(strContent);
//循环读所有的内容

while ((strContent = sr.ReadLine()) != null)
{
if (strContent.Equals(" "))
{
continue;
}

bool isMatch = Regex.IsMatch(strContent, @"(^\d+\.)20[0-9][0-9]");
if (isMatch)
{
if (!string.IsNullOrEmpty(sb.ToString()))
{
list.Add(sb.ToString());

sb = new StringBuilder();
}

}

sb.AppendLine(strContent);

}

sr.Close();

if (!string.IsNullOrEmpty(sb.ToString()))
{
list.Add(sb.ToString());
}

return list;

}

/// <summary>
/// 获取需要分析的(一)贷款 内容
/// </summary>
/// <param name="tagPath"></param>
/// <returns></returns>
public static string GetAnalysisContent(string tagPath)
{

StringReader sr = new StringReader(tagPath);

StringBuilder sb = new StringBuilder();
bool canRead = false;
//读第一行

var strContent = sr.ReadLine();

Console.WriteLine(strContent);
//循环读所有的内容

while ((strContent = sr.ReadLine()) != null)
{
//读到“信 贷 交 易 信 息 明 细 信 贷 交 易 信 息 明 细”,则是需要分析的文件,将其放在临时变量中sb,
//一直读到“( 二 ) 贷 记 卡 ( 二 ) 贷 记 卡”。结束。
if (canRead)
{
if (Regex.IsMatch(strContent, "(()[一二三四五六七八九十]())") && !strContent.Contains("贷款"))
{
canRead = false;
}
else
{
sb.AppendLine(strContent);
}

}
else
{
canRead = strContent.Contains("信贷交易信息明细");
}

}

sr.Close();

return sb.ToString();

}

/// <summary>
/// 获取需要分析的(二)贷记卡 内容
/// </summary>
/// <param name="tagPath"></param>
/// <returns></returns>
public static string GetAnyTextCardInfo(string tagPath)
{

string text = ComPDFHepler.GetValue(tagPath, "信贷交易信息明细", "查询记录", false);
text = ComPDFHepler.GetStartWithValue(text, "贷记卡");
return text;

}

/// <summary>
/// 读取PDF文件
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static string pdf2txt(FileInfo file)
{

PDDocument doc = PDDocument.load(file.FullName);

PDFTextStripper pdfStripper = new PDFTextStripper();

string text = pdfStripper.getText(doc);

doc.close();

return text;

}

/// <summary>
/// 是否是数据
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static bool IsNumber(string text)
{
return Regex.IsMatch(text, @"\d+");
}

/// <summary>
/// 获取字符串中的所有数字
/// </summary>
/// <param name="par"></param>
/// <returns></returns>
public static int GetNumber(string par)
{
string strTempContent = par;
strTempContent = System.Text.RegularExpressions.Regex.Replace(strTempContent, @"[^\d]*", "");
return Convert.ToInt32(strTempContent);
}

/// <summary>
/// 获取字符串中的所有数字,以逗号隔开
/// </summary>
/// <param name="par"></param>
/// <returns></returns>
public static string GetNumberSplit(string par)
{
string strTempContent = par;
strTempContent = System.Text.RegularExpressions.Regex.Replace(strTempContent, @"\D+", ",");
return strTempContent;
}

/// <summary>
/// 获取逾期记录表
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public static List<string> GetListOverDueRecord(string text)
{
string tempTableString = ComPDFHepler.GetStartWithValue(text, "逾期金额\r\n");
var arrayString = tempTableString.Split("\r\n".ToCharArray());
List<string> list = new List<string>();
foreach (string item in arrayString)
{
if (!string.IsNullOrEmpty(item))
{
list.Add(item);
}

}
return list;
}

/// <summary>
/// 是否为Month个月内
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
public static bool isInMonth(string date, int month)
{
string dateFormat = date.Replace('.', '-');
try
{
DateTime dt = DateTime.Parse(dateFormat);
double days = DateTime.Now.Subtract(dt).TotalDays;
if (days / 30 <= month)
{
return true;
}
else
{
return false;
}

}
catch (Exception)
{
return false;
}

}
}

PDF解析帮助类的更多相关文章

  1. pdf解析与结构化提取

    #PDF解析与结构化提取##PDF解析对于PDF文档,我们选择用PDFMiner对其进行解析,得到文本.###PDFMinerPDFMiner使用了一种称作lazy parsing的策略,只在需要的时 ...

  2. 解析C#类中的构造函数

    <解析C#类中的构造函数> 一.  C#中的构造函数概述: C#中类包含数据成员和函数成员.函数成员提供了操作类中数据的某些功能,包括方法.属性.构造器和终结器.运算符和索引器. 构造函数 ...

  3. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  4. PDF解析记录——Pdfbox

    此文仅作记录[嫌放电脑里碍事-_-],内容为以前收集的一小段代码.   下面为pdf获取文本的简要代码片段: private string GetPDFText(string filename) { ...

  5. CI 模板解析器类

    模板解析器类可以解析你的视图文件中的伪变量.它可以解析简单的变量或者以变量作为标签的结构.如果你以前没有用过模板引擎,那么伪变量如下所示: <html><head><ti ...

  6. 爬虫代码实现五:解析所有分页url并优化解析实现类

    如图,我们进入优酷首页,可以看到电视剧列表,我们称这个页面为电视剧列表页,而点击进入某个电视剧,则称为电视剧详情页.那么如何获取所有分页以及对应的详情页呢,通过下面的分页得到. 因此,首先,我们将St ...

  7. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

  8. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  9. Spring5源码解析6-ConfigurationClassParser 解析配置类

    ConfigurationClassParser 在ConfigurationClassPostProcessor#processConfigBeanDefinitions方法中创建了Configur ...

随机推荐

  1. 三天学会HTML5——SVG和Canvas的使用

    在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容. 第2天将学习如何使用Canvas 和使用SV ...

  2. okhttp教程——起步篇

    okhttp教程--起步篇 这篇文章主要总结Android著名网络框架-okhttp的基础使用,后续可能会有关于他的高级使用. okhttp是什么 okhttp是Android端的一个Http客户端, ...

  3. Nodejs·理解Buffer

    Node里面的Buffer其实就是用于网络请求.文件读取等等操作,而且是分配在堆外,不会占用堆内的内存,这也是因为本来V8的内存就很小,如果读取大文件,那就...... 之前有看过Logstash的B ...

  4. fir.im Weekly - 做一款 App 需要考虑什么

    开发 App 是一个痛并快乐的旅程.工具越来越多,成本也越来越低,那么在开发之前需要考虑些什么?limboy 总结了一些经验和反思--做一个 App 前需要考虑的几件事,参考一下为你的 App 多留点 ...

  5. salesforce 零基础开发入门学习(六)简单的数据增删改查页面的构建

    VisualForce封装了很多的标签用来进行页面设计,本篇主要讲述简单的页面增删改查.使用的内容和设计到前台页面使用的标签相对简单,如果需要深入了解VF相关知识以及标签, 可以通过以下链接查看或下载 ...

  6. Android笔记——了解SDK,数据库sqlite的使用

    一.adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具 ...

  7. 常用Math 方法

    /** * * @authors Your Name (you@example.org) * @date 2016-11-18 11:26:44 * @version $Id$ */ Math.pow ...

  8. Java-map-第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录

    第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...

  9. 【WP开发】认清“不透明度”与“可见性”的区别

    这两种情况,许多朋友平时都没有注意到: 1.设置Opacity属性的值为0: 2.将Visibility属性设置为Collapsed. 不少人会简单地认为这两种情况是一样的,都是让UI元素看不见. 我 ...

  10. font-size:100%有什么作用

    h1,h2,h3,h4,h5,h6 {font-size:100%;font-weight:normal;} input,select,textarea,samp {font-size:100%;} ...