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æãã¤ååã«æã§æã£ã¦ãéãã¦ãè表ç´ã
ã®ãä»ãããã®ã«ä¸ä¾¿ã§ããã
ããã¼ã¸æå®ãã工夫ãããã¨ã§ããã®ä¸ä¾¿ããåé¿ã§ããããã®ãã¼ã¸æå®ãããæã«ä½¿ã
æååããã®ã³ãã³ã$0ã¯æ¨æºåºåã«åºåãããè¤æ°åå°å·ãããå¿
è¦ãããå ´å
(å
ã®PDFãã¡ã¤ã«ã®ãã¼ã¸ã®æ°ã4ã§ç¡ãå ´åããã³ãã¼ã¸æ°ãå¤ãå ´å)ãåºåã¯æ¹è¡æåã§
åºåããã¦è¡¨ç¤ºãããã
使ç¨ä¾ :
12567834 8 # 1-2,5-8,3-4
12567834 9 # 1-2,5-8,3-4 ã®æ¬¡ã®è¡ã« 9
12567834 40 # 1-2,5-6,9-10,13-14,17-20,15-16,11-12,7-8,3-4 ã«ç¶ãã¦
# 21-22,25-26,29-30,33-34,37-40,35-36,31-32,27-28,23-24
ãªãã·ã§ã³ :
-, : ãã¤ãã³(-)ã§åºåããªãããã®å ´åãAdobe Acrobatã§ã®ã³ã³ãã§åºåãããé¨åã26åã¾ã§ã¨ããå¶ç´ã«æ³¨æã
-c n : æªæå®ã 㨠n=100 ãããã¼ã¸æå®ãã¯100æå以ä¸ã®å¶éãããã®ã§ãæå®æååã®åé·ããå¶éããã
-p : pdftk ã使ãå ´åã®ã³ãã³ãæãåºåããã
-2 0 : æåã® n æåã®å®è¦ã¨ æå¾ã®æ¨æºã¨ã©ã¼åºåã®2次æ
å ±ãåºåããªãããã«ããã
--help : ãã®ãªã³ã©ã¤ã³ãã«ãã®æé¢ã表示ããã
éçºã¡ã¢ :
* ãã¼ãæ°åæå®ã«å¯¾å¿ãã¦ããªãã(pdftkãªã©ã®ã³ãã³ãåºåãå©ç¨ãããªã©ã®æ¹æ³ãèããããã)
* ã³ãã³ãæã® 12567834 -P 1852 ã¯ã 8190 æåãåºåããã
=cut
( run in 1.254 second using v1.01-cache-2.11-cpan-13bb782fe5a )