J'utilise CAM :: PDF et je veux savoir comment obtenir l'orientation d'une chaîne de texte.Comment obtenir l'orientation du texte d'une chaîne de texte dans une page PDF en utilisant CAM :: PDF?
Merci
J'utilise CAM :: PDF et je veux savoir comment obtenir l'orientation d'une chaîne de texte.Comment obtenir l'orientation du texte d'une chaîne de texte dans une page PDF en utilisant CAM :: PDF?
Merci
Un peu des questions connexes: How can I get the page orientation of a PDF page? et How do I get character offset information from a pdf document?
A partir de la solution pour cette dernière question, je suis venu avec cette recette:
use CAM::PDF;
my $pdf = CAM::PDF->new('my.pdf') or die $CAM::PDF::errstr;
for my $pagenum (1 .. $pdf->numPages) {
my $pagetree = $pdf->getPageContentTree($pagenum) or next;
my @text = $pagetree->traverse('MyRenderer')->getTextBlocks;
for my $textblock (@text) {
print "text '$textblock->{str}' at ",
"($textblock->{left},$textblock->{bottom}), angle $textblock->{angle}\n";
}
}
package MyRenderer;
use base 'CAM::PDF::GS';
sub new {
my ($pkg, @args) = @_;
my $self = $pkg->SUPER::new(@args);
$self->{refs}->{text} = [];
return $self;
}
sub getTextBlocks {
my ($self) = @_;
return @{$self->{refs}->{text}};
}
sub renderText {
my ($self, $string, $width) = @_;
my ($x, $y) = $self->textToDevice(0,0);
my ($x1, $y1) = $self->textToDevice(1,0);
push @{$self->{refs}->{text}}, {
str => $string,
left => $x,
bottom => $y,
angle => atan2($y1-$y, $x1-$x),
};
return;
}
qui a donné ce résultat à la page 565 de PDFReference15_v5.pdf:
text 'ab' at (371.324,583.7249), angle -1.5707963267949
text 'c' at (371.324,576.63365), angle -1.5707963267949
Notez que l'angle est en radians. Diviser par Pi et multiplier par 180 pour convertir cela en degrés. Ainsi, -1,5707963267949 est 270 degrés, ce qui correspond à la page 565.
Notez que l'angle imprimé est l'angle par rapport au contenu de la page. Si la page elle-même fait l'objet d'une rotation supplémentaire (conformément à la question sur l'orientation de la page ci-dessus), il se peut que vous souhaitiez combiner les calculs de rotation.
Capture d'écran de la page 565 de ce PDF, montrant le texte pivoté: http://chrisdolan.net/misc/page-orientation-example.png –
Merci Chris! A travaillé comme un charme. En fait, j'ai posté l'une des questions connexes que vous avez mentionnées. Et j'espérais que vous répondriez à celui-ci aussi. Merci encore. – Thushan
Oh, alors vous l'avez fait! C'est drôle, je pensais que ton nom m'était familier, mais je ne l'ai pas placé. :-) –
Que voulez-vous dire par orientation? –
Orientation = verticale ou horizontale (ou peut-être tout autre angle comme 180 ou 270) – Thushan
Horizontale devrait être 0 degrés et verticale devrait être 90. – Thushan