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