NAME

DateTime::Format::PDF - PDF DateTime Parser and Formatter.

SYNOPSIS

use DateTime::Format::PDF;

my $obj = DateTime::Format::PDF->new;
my $dt = $obj->parse_datetime($pdf_date);
my $pdf_date = $obj->format_datetime($dt);

DESCRIPTION

This module understands the formats used by PDF file. It can be used to parse these formats in order to create DateTime objects, and it can take a DateTime object and produce a string representing it in a format accepted by PDF.

METHODS

new

my $obj = DateTime::Format::PDF->new(%params);

Constructor.

Returns instance of object.

parse_datetime

my $dt = $obj->parse_datetime($pdf_date);

Parse PDF datetime string.

Possible valid strings:

D:YYYY
D:YYYYMM
D:YYYYMMDD
D:YYYYMMDDHH
D:YYYYMMDDHHmm
D:YYYYMMDDHHmmSS
D:YYYYMMDDHHmmSSZ
D:YYYYMMDDHHmmSSOHHmm
D:YYYYMMDDHHmmSSOHH'mm
D:YYYYMMDDHHmmSSOHH'mm'
D:YYYYMMDDHHmmSSOHHmm'

Returns DateTime object.

format_datetime

my $pdf_date = $obj->format_datetime($dt);

Format DateTime object to PDF datetime string. Output value is D:YYYYMMDDHHmmSSOHHmm.

Returns string.

ERRORS

format_datetime():
        Bad DateTime object.
                Value: %s

parse_datetime():
        Invalid date format: %s

EXAMPLE1

use strict;
use warnings;

use DateTime::Format::PDF;

# Object.
my $obj = DateTime::Format::PDF->new;

# Parse date.
my $dt = $obj->parse_datetime("D:20240401084337-01'30");

# Print out.
print $dt->strftime("%a, %d %b %Y %H:%M:%S %z")."\n";

# Output like:
# Mon, 01 Apr 2024 08:43:37 -0130

EXAMPLE2

use strict;
use warnings;

use DateTime;
use DateTime::Format::PDF;

# Object.
my $obj = DateTime::Format::PDF->new;

# Example date.
my $dt = DateTime->now;

# Format.
my $pdf_date = $obj->format_datetime($dt);

# Print out.
print "PDF date: $pdf_date\n";

# Output like:
# PDF date: D:20240401084337+0000

EXAMPLE3

use strict;
use warnings;

use DateTime::Format::PDF;
use PDF::Builder;

if (@ARGV < 1) {
        print STDERR "Usage: $0 pdf_file\n";
        exit 1;
}
my $pdf_file = $ARGV[0];

# Open file.
my $pdf = PDF::Builder->open($pdf_file);

# Parser.
my $pdf_date_parser = DateTime::Format::PDF->new;

my ($dt_created, $dt_modified);
my $print_format = "%a, %d %b %Y %H:%M:%S %z";
if (defined $pdf->created) {
        $dt_created = $pdf_date_parser->parse_datetime($pdf->created);
        print "Created: ".$dt_created->strftime($print_format)."\n";
}
if (defined $pdf->modified) {
        $dt_modified = $pdf_date_parser->parse_datetime($pdf->modified);
        print "Modified: ".$dt_modified->strftime($print_format)."\n";
}

# Output:
# Created: Fri, 15 May 2009 08:40:48 +0200
# Modified: Fri, 15 May 2009 08:44:00 +0200

EXAMPLE4

use strict;
use warnings;

use DateTime::Format::PDF;
use PDF::API2;

if (@ARGV < 1) {
        print STDERR "Usage: $0 pdf_file\n";
        exit 1;
}
my $pdf_file = $ARGV[0];

# Open file.
my $pdf = PDF::API2->open($pdf_file);

# Get meta info.
my %meta = $pdf->info;

# Parser.
my $pdf_date_parser = DateTime::Format::PDF->new;

my ($dt_created, $dt_modified);
my $print_format = "%a, %d %b %Y %H:%M:%S %z";
if (exists $meta{'CreationDate'}) {
        $dt_created = $pdf_date_parser->parse_datetime($meta{'CreationDate'});
        print "Created: ".$dt_created->strftime($print_format)."\n";
}
if (exists $meta{'ModDate'}) {
        $dt_modified = $pdf_date_parser->parse_datetime($meta{'ModDate'});
        print "Modified: ".$dt_modified->strftime($print_format)."\n";
}

# Output:
# Created: Fri, 15 May 2009 08:40:48 +0200
# Modified: Fri, 15 May 2009 08:44:00 +0200

DEPENDENCIES

DateTime::Format::Builder, Error::Pure, Scalar::Util.

REPOSITORY

https://github.com/michal-josef-spacek/DateTime-Format-PDF

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© 2024 Michal Josef Špaček

BSD 2-Clause License

VERSION

0.02