# HG changeset patch # User Shingo W. Kagami # Date 1284317661 -32400 # Node ID 8b90d57759c9b83c7203611ad50c7586caecbca2 # Parent cce8365a9d507ea28fa7a53c160a064921112f4e Add ppt2eps tool set. diff -r cce8365a9d50 -r 8b90d57759c9 tex/Makefile.sample --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tex/Makefile.sample Mon Sep 13 03:54:21 2010 +0900 @@ -0,0 +1,36 @@ +TARGET = main +SRCTEX = $(TARGET).tex file1.tex file2.tex +SRCFIG = fig/fig_file1.ppt fig/fig_file2.ppt +SRCMISC = +SRCFIG_DIGEST = $(SRCFIG:.ppt=.md5) + +PRN2EPS = c:/cygwin/home/swk/lib/tex/prn2eps.pl +PPTPRINT = c:/cygwin/home/swk/lib/tex/ppt_printout_ps.vbs + +dvi: $(TARGET).dvi +pdf: $(TARGET).pdf + +# $(TARGET).pdf: $(TARGET).dvi +# dvipsk -Pdl $(TARGET).dvi +# -pdfclose --file $(TARGET).pdf +# cygstart $(TARGET).ps +# @while test ! -e $(TARGET).pdf; do echo -n .; sleep 2; done +# rm $(TARGET).ps + +$(TARGET).pdf: $(TARGET).dvi + -pdfclose --file $(TARGET).pdf + dvipdfmx $(TARGET) + pdfopen --file $(TARGET).pdf --back + +$(TARGET).dvi: $(SRCTEX) $(SRCMISC) $(SRCFIG_DIGEST) + platex $(TARGET) +# jbibtex $(TARGET) +# platex $(TARGET) + platex $(TARGET) + grep Warning $(TARGET).log + +%.md5: %.prn + $(PRN2EPS) $< + +%.prn: %.ppt + wscript $(PPTPRINT) `cygpath -wa $<` `cygpath -wa $*.prn` > $*.note.txt diff -r cce8365a9d50 -r 8b90d57759c9 tex/ppt_printout_ps.vbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tex/ppt_printout_ps.vbs Mon Sep 13 03:54:21 2010 +0900 @@ -0,0 +1,41 @@ +Dim filein +Dim fileout +If WScript.Arguments.Count <> 2 then + WScript.quit +End If +filein = WScript.Arguments.item(0) +fileout = WScript.Arguments.item(1) + +Dim pptApp +Dim pptPres +Set pptApp = Wscript.CreateObject("PowerPoint.Application") +pptApp.Visible = True +Set pptPres = pptApp.Presentations.Open(filein) + +With pptPres.PrintOptions + .RangeType = ppPrintAll + .NumberOfCopies = 1 + .PrintHiddenSlides = msoTrue + .PrintColorType = ppPrintColor + .FitToPage = msoFalse + .FrameSlides = msoFalse + .ActivePrinter = "Generic PostScript Writer" + .PrintInBackground = False +End With +pptPres.PrintOut , , fileout + +Dim i +Dim note +For i = 1 To pptPres.Slides.Count + Wscript.StdErr.Write "Processing slide " & i & "... " + note = pptPres.Slides(i).NotesPage.Shapes(2).TextFrame.TextRange + WScript.StdOut.WriteLine note + WScript.StdOut.WriteLine Chr(12) + If InStr(note, "@file=") > 0 Then + pptPres.Slides(i).Export filein & ".tmp_slide" & i & ".png", "PNG" + End If + Wscript.StdErr.WriteLine "done" +Next + +pptPres.Close + diff -r cce8365a9d50 -r 8b90d57759c9 tex/prn2eps.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tex/prn2eps.pl Mon Sep 13 03:54:21 2010 +0900 @@ -0,0 +1,76 @@ +#!/usr/bin/env perl + +use strict; +use Digest::MD5 qw(md5_hex); +my $f_remove_unused_eps = 0; + +if (@ARGV != 1) { + die 'wrong number of argument'; +} +my $prnfile = $ARGV[0]; + +my $basename = $prnfile; $basename =~ s/\.prn$//; +my $dirname = $prnfile; $dirname =~ s![^/]*$!!; +my $notedumpfile = $basename . '.note.txt'; +my $md5file = $basename . '.md5'; + +my %prev_md5 = (); +my %curr_md5 = (); + +if (-e $md5file) { + open(MD5, $md5file) or die; + while () { + if (/^([01-9a-f]+)\s+([-_01-9a-zA-Z]+)/) { + $prev_md5{$1} = $2; + } + } + close(MD5); +} + +my $counter = 1; +open(NOTES, $notedumpfile) or die; +while () { + if (/\014/) { + $counter++; + } + if (/\@file=([-_01-9a-zA-Z]+)/) { + my $epsbase = $1; + my $page = $counter; + my $pngfile = $basename . '.ppt.tmp_slide' . $page . '.png'; + my $md5; + if (-e $pngfile) { + $md5 = md5_hex(`cat $pngfile`); + $curr_md5{$md5} = $epsbase; + } else { # can't happen + die "no png file: $pngfile"; + } + + if (exists $prev_md5{$md5}) { + if ($prev_md5{$md5} eq $epsbase) { + # not changed + delete $prev_md5{$md5}; + } else { + system("mv $dirname$prev_md5{$md5}.eps $dirname$epsbase.eps"); + delete $prev_md5{$md5}; + } + } else { + system("psselect $page $prnfile > $dirname$epsbase.ps"); + system("ps2eps -R + -B -f $dirname$epsbase.ps"); + system("ps2eps -C $dirname$epsbase.eps"); + system("mv $dirname$epsbase.eps.eps $dirname$epsbase.eps"); + system("rm $dirname$epsbase.ps"); + } + } +} +close(NOTES); + +if ($f_remove_unused_eps) { + # to be implemented +} + +open(MD5, '>', $md5file) or die; +foreach my $m (keys %curr_md5) { + print MD5 $m . "\t" . $curr_md5{$m} . "\r\n"; +} +close(MD5); +system("rm " . $basename . '.ppt.tmp_slide*.png');