App-12567834
view release on metacpan or search on metacpan
#!/usr/bin/perl
use 5.034 ; use warnings ;
use Time::HiRes qw [ gettimeofday tv_interval ] ;
my ${ dt_start } = [ gettimeofday ] ;
use Encode qw[ decode_utf8 encode_utf8 ] ;
use Getopt::Std ; getopts ',c:2:b:p' , \my %o ;
use Term::ANSIColor qw[ color :constants ] ; $Term::ANSIColor::AUTORESET = 1 ;
use FindBin qw[ $Script ] ;
use List::Util qw[ min max uniq ] ;
use utf8 ;
use Scalar::Util qw[ looks_like_number ] ;
no warnings ;
* d3 = sub { $_[0] =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/gr } ;
use warnings ;
$ARGV[0] //= 8 ;
$o{c} //= 100 ; # ããã¼ã¸æå®ãå仿大æååé·ã
$o{b} //= 1 ;
# å
¥åãã¡ã¤ã«ããããAdobeçæãããã¨ãã«ããã¼ã¸ãµã¤ãºã¨å¦çãã§ãè¤æ°ãã®æå®ãåãããã¨ã ã£ãã¨ãã«
# 2ã 4ãªã©ã®é©åãªå¤(1æè¾ºãã®å
ã®ãã¼ã¸æ°)ãæå®ãã
my $p1 ; # å
ã®PDFãã¡ã¤ã«ã®æåã®ãã¼ã¸çªå·
my $p2 ; # å
ã®PDFãã¡ã¤ã«ã®æå¾ã®ãã¼ã¸çªå·
my $p2a ; # $p2+1 以ä¸ã®ã $p2a - $p1 ã4ã®åæ°ã¨ãªãæå¤§ã®æ°ã
# ã³ãã³ã弿°ãããä¸ãæ¹ã«å¿ãã¦3éãã«ããã¼ã¸æ°ã®æåã¨æå¾ãåãåºãã
($p1,$p2) = $ARGV[0] =~ m/(.*)(-|\.\.)(.*)/ ? ($1,$3) : exists $ARGV[1] ? @ARGV : (1,$ARGV[0]) ;
exit if map {say "'$_' seems not a numbper."} grep { ! looks_like_number $_ } ($p1,$p2) ;
exit if $p1 > $p2 && say "'$p1 <= $p2' does not hold." ;
# æå¾ã«åºåããç´ã®å¦ç ããã³ åºåææ°ã®ç®åº
my $pr = ($p2-$p1+1) % 4 ; # reminder ä½ã
$p2a = $p2 - $pr + 1 ;
my $q = ($p2a-$p1) / 4 ;
my @P0 = () ;
my @P1 = () ;
my $p = $p1 ;
my $o0 = '' ; # åºåæååãä»®æ ¼ç´
my $o1 = '' ; # åºåæåå
my $L = 0 ; # åºåããè¡æ°
sub M ($) ;
* M = ($o{b} // 1 ) eq 1 ? sub ($) { $_[0] } : sub ($) { ( $_[0] - 1 ) * $o{b} + 1 } ;
* con = $o{','} ? sub { map { M $_ } $_[0] .. $_[1] } : sub { ( M $_[0] ) . '-' . ( M $_[1] ) } ; # 颿°ãå®ç¾©ã-ã§ã¤ãªãããã,ã§ã¤ãªããã
* con2 = sub { $p2a < $p2 ? join "," , con ($p2a,$p2) : "$p2" } ;
if ( $o{p} ) {
my @P ;
my $out = "pdftk INPUT.pdf cat " ;
$p=$p1-1;splice @P,@P/2,0,$p+1..($p+=4)for 1..$q;$out .= join" ",@P ;
$out .= " output OUTPUT.pdf" ;
say $out ;
print "# Page " . con2($p2a, $p2) . " has not contained above." if $pr ;
say "# The above contains " . length ($out) . " characters." ;
$o{2}//= 0 ;
exit ;
}
say CYAN + (map { join '', 1..9,($_% 10 ) } ( 1..$o{c}/10) ) , 1..$o{c} % 10 if ($o{2}//'')ne"0"; # æååé·ãã®å®è¦
for ( 1 .. $q ) {
@P0 = @P1 ;
splice @P0 , @P0/2 , 0 , con($p,$p+3) ; # $p . "-" . ($p+3) ; # 試ãã«1度ã«4ãã¼ã¸æ¿å
¥ã
if ( length ( $o0 = join "," , @P0 ) > $o{c} )
{ say $o1 ; $o0 = '' ; @P1 = () ; @P0 = con($p,$p+3) ; $L++ } ; # é·ããããåºåã
splice @P1 , @P1/2 , 0 , con($p++,$p++) , con($p++,$p++) ;
$o1 = $o0 ;
}
do { say join "," , @P0 ; $L ++ } if @P0 ;
#print $p2a < $p2 ? (join",",con($p2a,$p2))."\n" : $p2a == $p2 ? "$p2\n" : '' ; # æå¾ã®ãã¼ã¸ã®åºåã4ã®åæ°ãå¦ãã1æã ããå¦ãã«ããã3éãã«åããã
#print $p2a > $p2 ? '' : con2 ( $p2a , $p2 ) . "\n" ;
$L ++ and say con2($p2a,$p2) if $pr ;
exit ;
END {
exit if ($o{2}//'') eq "0" ;
my $procsec = sprintf "%.5f", tv_interval ${ dt_start } ; #time - $time0 ; # ãã®ããã°ã©ã ã®å¦çã«ããã£ãç§æ°ãæ¯è¼ãã2åã®æå»ã¯ç§åä½ãªã®ã§ã±1ç§æªæºã®èª¤å·®ã¯çºçããã
my $s = tv_interval $dt_start , [ gettimeofday ] ;
say STDERR BOLD FAINT ITALIC " -- $Script ; " . $procsec . " seconds in process. " . $L. " lines output." ;
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE {
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if s/^=head1// .. s/^=cut// and $ARGV[1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1 $0
12567834 NUMBER_OF_PAGES
12567834 N1 N2
12567834 N1-N2
NUMER_OF_PAGES ã¯ãåºåãããå
ã®PDFãã¡ã¤ã«ã®ãã¼ã¸æ°ã§ããã1å§ã¾ããä»®å®ã
N1 㨠N2 ã¯ãæåã®ãã¼ã¸çªå· 㨠æå¾ã®ãã¼ã¸çªå·ã§ããã
Adobe Acrobat Reader çã®ã½ããã¦ã§ã¢ã§ PDFãã¡ã¤ã«ã®ãå°ååãå°å·ãããæã«ã
é常å¤ãã®å ´åã¯ãå°å·ãããç´ã«å°å·ãããå
容ã¯ã1ï½4ã5ï½8ãã¼ã¸ç®... ã®ããã«ã¯
ãªããªããæåã®ç´ã«1,2,7,8ãã¼ã¸ç®ãæå¾ã®ç´ã«3,4,5,6ãã¼ã¸ç®ã®ããã«ãªã£ã¦ãã¾ãã
ãã®ããã«å°å·ãããç´ã ã¨ãå°å·ãããç´ã1æãã¤ååã«æã§æã£ã¦ãéãã¦ãè表ç´ã
ã®ãä»ãããã®ã«ä¸ä¾¿ã§ããã
ããã¼ã¸æå®ãã工夫ãããã¨ã§ããã®ä¸ä¾¿ããåé¿ã§ããããã®ãã¼ã¸æå®ãããæã«ä½¿ã
( run in 2.453 seconds using v1.01-cache-2.11-cpan-b9db842bd85 )