Revision: 10927
Updated Code
at January 18, 2009 17:31 by iblis
Updated Code
#!/usr/bin/env perl
# updatepdf.pl
# parses a bibtex file and updates linked pdf file's metadata with bibtex data
use strict;
use warnings;
use Getopt::Std;
use Text::BibTeX;
use PDF::API2;
# option -x forces overwriting existing metadata
# option -f provides the field name which contains the linked PDF file's path
# default PDF file field name to "local-url"
my %options;
getopts('xf:', \%options);
my $field = $options{'f'} || 'local-url';
# get input bibtex file's name from cl argument or read stdin
my $in_file = shift || "<&STDIN";
my $bib = Text::BibTeX::File->new($in_file);
# loops thorugh bibtex entries
while (my $entry = new Text::BibTeX::Entry $bib) {
# skip non-regular entries
next unless $entry->parse_ok && $entry->metatype == BTE_REGULAR;
# read local file field from the bibtex entry
if ( $entry->exists($field) ) {
my $pdf_file = $entry->get($field);
# skip file if doesn't exist or not a .pdf
if ($pdf_file !~ m{\.pdf$}i || ! -e $pdf_file) {
warn "Skipping $pdf_file\n";
next;
}
# get PDF's info
my $pdf = PDF::API2->open($pdf_file);
my %info = $pdf->info();
# set authour and title fields
$info{'Author'} = $entry->get('author')
if $entry->exists('author') && ( $options{'x'} || !defined $info{'Author'} ) ;
$info{'Title'} = $entry->get('title')
if $entry->exists('title') and ( $options{'x'} || !defined $info{'Title'} );
# write
$pdf->info(%info);
$pdf->update();
}
}
Revision: 10926
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 18, 2009 17:28 by iblis
Initial Code
#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Std;
use Text::BibTeX;
use PDF::API2;
# option -x forces overwriting existing metadata
# option -f provides the field name which contains the linked PDF file's path
# default PDF file field name to "local-url"
my %options;
getopts('xf:', \%options);
my $field = $options{'f'} || 'local-url';
# get input bibtex file's name from cl argument or read stdin
my $in_file = shift || "<&STDIN";
my $bib = Text::BibTeX::File->new($in_file);
# loops thorugh bibtex entries
while (my $entry = new Text::BibTeX::Entry $bib) {
# skip non-regular entries
next unless $entry->parse_ok && $entry->metatype == BTE_REGULAR;
# read local file field from the bibtex entry
if ( $entry->exists($field) ) {
my $pdf_file = $entry->get($field);
# skip file if doesn't exist or not a .pdf
if ($pdf_file !~ m{\.pdf$}i || ! -e $pdf_file) {
warn "Skipping $pdf_file\n";
next;
}
# get PDF's info
my $pdf = PDF::API2->open($pdf_file);
my %info = $pdf->info();
# set authour and title fields
$info{'Author'} = $entry->get('author')
if $entry->exists('author') && ( $options{'x'} || !defined $info{'Author'} ) ;
$info{'Title'} = $entry->get('title')
if $entry->exists('title') and ( $options{'x'} || !defined $info{'Title'} );
# write
$pdf->info(%info);
$pdf->update();
}
}
Initial URL
Initial Description
Initial Title
Update PDF metadata from BibTeX data file
Initial Tags
Initial Language
Perl