[freeside-commits] freeside/FS/FS cust_bill.pm, 1.163.2.26, 1.163.2.27 Misc.pm, 1.19.2.4, 1.19.2.5
Ivan,,,
ivan at wavetail.420.am
Sun Jun 1 19:16:22 PDT 2008
Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv8976
Modified Files:
Tag: FREESIDE_1_7_BRANCH
cust_bill.pm Misc.pm
Log Message:
use IPC::Run to run pslatex & add a timeout, this should prevent hanging on template errors
Index: Misc.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Misc.pm,v
retrieving revision 1.19.2.4
retrieving revision 1.19.2.5
diff -u -d -r1.19.2.4 -r1.19.2.5
--- Misc.pm 12 Feb 2008 03:11:23 -0000 1.19.2.4
+++ Misc.pm 2 Jun 2008 02:16:20 -0000 1.19.2.5
@@ -5,6 +5,8 @@
use Exporter;
use Carp;
use Data::Dumper;
+use IPC::Run qw( run timeout ); # for _pslatex
+use IPC::Run3; # for do_print... should just use IPC::Run i guess
#do NOT depend on any FS:: modules here, causes weird (sometimes unreproducable
#until on client machine) dependancy loops. put them in FS::Misc::Something
#instead
@@ -13,7 +15,7 @@
@EXPORT_OK = qw( send_email send_fax
states_hash counties state_label
card_types
- generate_ps do_print
+ generate_ps generate_pdf do_print
);
$DEBUG = 0;
@@ -500,12 +502,7 @@
my $dir = $FS::UID::conf_dir. "cache.". $FS::UID::datasrc;
chdir($dir);
- my $sfile = shell_quote $file;
-
- system("pslatex $sfile.tex >/dev/null 2>&1") == 0
- or die "pslatex $file.tex failed; see $file.log for details?\n";
- system("pslatex $sfile.tex >/dev/null 2>&1") == 0
- or die "pslatex $file.tex failed; see $file.log for details?\n";
+ _pslatex($file);
system('dvips', '-q', '-t', 'letter', "$file.dvi", '-o', "$file.ps" ) == 0
or die "dvips failed";
@@ -537,14 +534,82 @@
}
+=item generate_pdf FILENAME
+
+Returns an PDF rendition of the LaTex file, as a scalar. FILENAME does not
+contain the .tex suffix and is unlinked by this function.
+
+=cut
+
+use String::ShellQuote;
+
+sub generate_pdf {
+ my $file = shift;
+
+ my $dir = $FS::UID::conf_dir. "/cache.". $FS::UID::datasrc;
+ chdir($dir);
+
+ #system('pdflatex', "$file.tex");
+ #system('pdflatex', "$file.tex");
+ #! LaTeX Error: Unknown graphics extension: .eps.
+
+ _pslatex($file);
+
+ my $sfile = shell_quote $file;
+
+ #system('dvipdf', "$file.dvi", "$file.pdf" );
+ system(
+ "dvips -q -t letter -f $sfile.dvi ".
+ "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$sfile.pdf ".
+ " -c save pop -"
+ ) == 0
+ or die "dvips | gs failed: $!";
+
+ open(PDF, "<$file.pdf")
+ or die "can't open $file.pdf: $! (error in LaTeX template?)\n";
+
+ unlink("$file.dvi", "$file.log", "$file.aux", "$file.pdf", "$file.tex");
+
+ my $pdf = '';
+ while (<PDF>) {
+ $pdf .= $_;
+ }
+
+ close PDF;
+
+ return $pdf;
+
+}
+
+sub _pslatex {
+ my $file = shift;
+
+ #my $sfile = shell_quote $file;
+
+ my @cmd = (
+ 'latex', '-interaction=batchmode',
+ '\AtBeginDocument{\RequirePackage{pslatex}}',
+ '\def\PSLATEXTMP{\futurelet\PSLATEXTMP\PSLATEXTMPB}',
+ '\def\PSLATEXTMPB{\ifx\PSLATEXTMP\nonstopmode\else\input\fi}',
+ '\PSLATEXTMP',
+ "$file.tex"
+ );
+
+ my $timeout = 60; #?
+
+ for ( 1, 2 ) {
+ run( \@cmd, '>'=>'/dev/null', '2>'=>'/dev/null', timeout($timeout) )
+ or die "pslatex $file.tex failed; see $file.log for details?\n";
+ }
+
+}
+
=item print ARRAYREF
Sends the lines in ARRAYREF to the printer.
=cut
-use IPC::Run3;
-
sub do_print {
my $data = shift;
Index: cust_bill.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_bill.pm,v
retrieving revision 1.163.2.26
retrieving revision 1.163.2.27
diff -u -d -r1.163.2.26 -r1.163.2.27
--- cust_bill.pm 1 Jun 2008 20:13:57 -0000 1.163.2.26
+++ cust_bill.pm 2 Jun 2008 02:16:20 -0000 1.163.2.27
@@ -12,7 +12,7 @@
use HTML::Entities;
use Locale::Country;
use FS::UID qw( datasrc );
-use FS::Misc qw( send_email send_fax generate_ps do_print );
+use FS::Misc qw( send_email send_fax generate_ps generate_pdf do_print );
use FS::Record qw( qsearch qsearchs dbh );
use FS::cust_main_Mixin;
use FS::cust_main;
@@ -2076,8 +2076,9 @@
my $self = shift;
my $file = $self->print_latex(@_);
- FS::Misc::generate_ps($file);
-
+ my $ps = generate_ps($file);
+
+ $ps;
}
=item print_pdf [ TIME [ , TEMPLATE ] ]
@@ -2095,43 +2096,9 @@
my $self = shift;
my $file = $self->print_latex(@_);
-
- my $dir = $FS::UID::conf_dir. "cache.". $FS::UID::datasrc;
- chdir($dir);
-
- #system('pdflatex', "$file.tex");
- #system('pdflatex', "$file.tex");
- #! LaTeX Error: Unknown graphics extension: .eps.
-
- my $sfile = shell_quote $file;
-
- system("pslatex $sfile.tex >/dev/null 2>&1") == 0
- or die "pslatex $file.tex failed; see $file.log for details?\n";
- system("pslatex $sfile.tex >/dev/null 2>&1") == 0
- or die "pslatex $file.tex failed; see $file.log for details?\n";
-
- #system('dvipdf', "$file.dvi", "$file.pdf" );
- system(
- "dvips -q -t letter -f $sfile.dvi ".
- "| gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$sfile.pdf ".
- " -c save pop -"
- ) == 0
- or die "dvips | gs failed: $!";
-
- open(PDF, "<$file.pdf")
- or die "can't open $file.pdf: $! (error in LaTeX template?)\n";
-
- unlink("$file.dvi", "$file.log", "$file.aux", "$file.pdf", "$file.tex");
-
- my $pdf = '';
- while (<PDF>) {
- $pdf .= $_;
- }
-
- close PDF;
-
- return $pdf;
-
+ my $pdf = generate_pdf($file);
+
+ $pdf;
}
=item print_html [ TIME [ , TEMPLATE [ , CID ] ] ]
More information about the freeside-commits
mailing list