c#将PDF元数据CreationTime转换为DateTime

本文关键字:转换 DateTime CreationTime 元数据 PDF | 更新日期: 2023-09-27 18:25:35

我需要处理从PDF元数据中检索到的CreationTime,并将其与DataTime格式进行比较。

string path = e.Row.Cells[1].Text;
var pdfReader = new PdfReader(path);
var CreatedDate = pdfReader.Info["CreationDate"];
e.Row.Cells[13].Text = Convert.ToString(CreatedDate);

这会返回一个日期-时间字符串,如:

  • D: 20150710080410
  • D: 20150209075651+01'00'

和比较:

            DateTime Created = Convert.ToDateTime(CreatedDate);
            DateTime Compare = Convert.ToDateTime(e.Row.Cells[14].Text);
            if (Compare > Created)
            {
                e.Row.Cells[15].Text = "actualizar";
            }

Martin

c#将PDF元数据CreationTime转换为DateTime

我真的需要一个解决方案,BBL管理员关于编写自己的函数的评论是我的出路。

通过这个[this itex支持链接][1],我能够将pdfDate格式集成为D:YYYYMMDDHMMSSOHH'm'

接下来我需要知道的是c#中支持的日期格式,我可以使用[this c-sharpcorner article][2]中的DateTime.Parse()进行解析,对我来说最理想的格式是";yyyy'-'MM'-'dd'HH':'m':'s"

在知道我得到的输入和我可以解析的格式后,我创建了下面的函数来构造日期,基本上是从pdfDate中获取部分,并为"parsable"日期字符串构建部分。。。

private DateTime CreateDateTime(string date) //use the pdfDate as parameter to the date argument
  {
            string dateStr = date.Remove(0, 2).Remove(14, 6); //Remove D: & OHH'mm
            string tmpDateStr = dateStr.Substring(0, 4) //Get year i.e yyyy
                + "-" + dateStr.Substring(4, 2) // Get month i.e mm & prepend - (hyphen)
                + "-" + dateStr.Substring(6, 2) // Get day i.e dd & prepend -
                + "T" + dateStr.Substring(8, 2) // Get hour and prepend T
                + ":" + dateStr.Substring(10, 2) // Get minutes and prepend :
                + ":" + dateStr.Substring(12, 2); //Get seconds and prepend :
            return DateTime.Parse(tmpDateStr);  
  }

好吧,我希望你在提问时能找到一种方法,其他面临同样挑战的人都可以试试我的方法,看看它是否有帮助。尽管如此,问题还是得到了回答。

注意:还有其他更好的方法。[1] :http://itextsupport.com/apidocs/iText7/7.1.0/com/itextpdf/kernel/pdf/PdfDate.html[2] :https://www.c-sharpcorner.com/blogs/date-and-time-format-in-c-sharp-programming1

如果您试图转换的Date-Time字符串每次都以"D:"开头,那么您可能会考虑为D:添加一个remove函数。当你尝试转换时,这可能会给你一个例外。试试这个:

// Gather the Info
string path = e.Row.Cells[1].Text;
var pdfReader = new PdfReader(path);
var CreatedDate = pdfReader.Info["CreationDate"];
e.Row.Cells[13].Text = Convert.ToString(CreatedDate);
string sCreatedDate = Convert.ToString(CreatedDate).Remove(0, 2)
// Convert and Compare
DateTime Created = Convert.ToDateTime(sCreatedDate);
DateTime Compare = Convert.ToDateTime(e.Row.Cells[14].Text);
if (Compare > Created)
{
    e.Row.Cells[15].Text = "actualizar";
}

您不必创建sCreatedDate,但这样查看会更干净一些。您也可以在进行日期时间转换时转换CreatedDate.ToString().Remove(0,2):

DateTime Created = Convert.ToDateTime(CreatedDate.ToString().Remove(0,2));

希望这能有所帮助。