2009-03-19 5 views
3

La fonction getPageDimensions (de CAM :: PDF) renvoie les mêmes valeurs pour les pages portrait et paysage. Comment identifier l'orientation d'une page PDF? J'utilise la bibliothèque CAM :: PDF Perl et je voudrais savoir comment le faire en utilisant cette bibliothèque. Mais tout autre moyen de l'identifier est également le bienvenu (de préférence en utilisant une librairie Perl).Comment puis-je obtenir l'orientation de la page d'une page PDF?

Merci.

Répondre

3

Je suis l'auteur de CAM :: PDF.

Eh bien, il y a deux parties à cela. L'un est les dimensions de la page, comme vous l'avez noté. Cela fonctionne comme prévu: J'utilisé Preview.app d'Apple pour faire pivoter un fichier PDF et couru ces deux lignes de commande:

perl -MCAM::PDF -le'print "@{[CAM::PDF->new(shift)->getPageDimensions(1)]}"' orig.pdf 
0 0 612 792 
perl -MCAM::PDF -le'print "@{[CAM::PDF->new(shift)->getPageDimensions(1)]}"' rotated.pdf 
0 0 792 612 

Mais il y a aussi l'attribut page `/ Rotation ». L'argument est un nombre de degrés (par défaut 0, mais 90 ou 270 ne sont pas rares). Comme les dimensions de la page, il s'agit d'une propriété héritable. Vous devez donc naviguer vers les pages parentes. Voici un outil de ligne de commande rapide et sale pour afficher la valeur de rotation:

use CAM::PDF; 
my $filename = shift || die; 
my $pagenum = shift || die; 
my $pdf = CAM::PDF->new($filename) || die; 
my $pagedict = $pdf->getPage($pagenum); 
my $rotate = 0; 
while ($pagedict) { 
    $rotate = $pdf->getValue($pagedict->{Rotate}); 
    if (defined $rotate) { 
     last; 
    } 
    my $parent = $pagedict->{Parent}; 
    $pagedict = $parent && $pdf->getValue($parent); 
} 
print "/Rotate $rotate\n"; 
+0

Merci Chris. J'ai pensé que $ pagedict -> {Rotate} -> {value} part. Mais pas la partie parent. Merci encore. – Thushan

+0

Petite correction. "my $ rotate" dans le while devrait être $ rotate. – Thushan

+0

Merci. Mon test PDF avait un "/ Rotate 0" explicite (je ne sais pas pourquoi ...) donc je n'ai pas remarqué le bug. –