#!/perl use strict; use warnings; use Archive::Zip qw( :ERROR_CODES ); use XML::Twig; my @text; my $file = "The full path to your pptx"; my $zip = Archive::Zip->new(); $zip->read( $file ) == AZ_OK or die "Unable to open Office file\n"; my @slides = $zip->membersMatching( "ppt/slides/slide.+\.xml" ); for my $i ( 1 .. scalar @slides ) # to sort them. { my $content = $zip->contents( "ppt/slides/slide${i}.xml"); my $twig= XML::Twig->new( #keep_encoding=>1, twig_handlers => { 'a:t' => \&topicref_processing, }, ); $twig->parse( $content ); } sub topicref_processing { my($twig, $ppttext) = @_; push @text, $ppttext->text(); } use FindBin qw($Bin); open my $out, ">:encoding(UTF-8)", "$Bin/test_ppt_PM.txt" or die "$!"; print {$out} "$_\n" for @text;