Bumping DB to 061 - Adding the ability to choose font type to the Label tool.

Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Chris Nighswonger 2008-03-07 20:05:53 -05:00 committed by Joshua Ferraro
parent 6a61c4b6a9
commit 11a213a82f
9 changed files with 168 additions and 92 deletions

View File

@ -43,7 +43,7 @@ BEGIN {
&get_layouts
&get_barcode_types
&get_batches &delete_batch
&add_batch &SetFontSize &printText
&add_batch &printText
&GetItemFields
&get_text_fields
get_layout &save_layout &add_layout
@ -332,10 +332,10 @@ sub get_barcode_types {
my $barcode = $layout->{'barcodetype'};
my @array;
push( @array, { code => 'CODE39', desc => 'Code 39' } );
push( @array, { code => 'CODE39MOD', desc => 'Code39 + Modulo43' } );
push( @array, { code => 'CODE39', desc => 'Code 39' } );
push( @array, { code => 'CODE39MOD', desc => 'Code39 + Modulo43' } );
push( @array, { code => 'CODE39MOD10', desc => 'Code39 + Modulo10' } );
push( @array, { code => 'ITF', desc => 'Interleaved 2 of 5' } );
push( @array, { code => 'ITF', desc => 'Interleaved 2 of 5' } );
foreach my $line (@array) {
if ( $line->{'code'} eq $barcode ) {
@ -358,19 +358,17 @@ sub GetUnitsValue {
}
sub GetTextWrapCols {
my ( $fontsize, $label_width ) = @_;
my $string = "0";
my $left_text_margin = 3;
my ( $strtmp, $strwidth );
my $count = 0;
my $textlimit = $label_width - $left_text_margin;
my ( $font, $fontsize, $label_width, $left_text_margin ) = @_;
my $string = '0';
my $strwidth;
my $count = 0;
my $textlimit = $label_width - ( 2* $left_text_margin);
while ( $strwidth < $textlimit ) {
$strwidth = prStrWidth( $string, 'C', $fontsize );
$string = $string . '0';
# warn "strwidth $strwidth, $textlimit, $string";
$count++;
$strwidth = prStrWidth( $string, $font, $fontsize );
$string = $string . '0';
#warn "strwidth:$strwidth, textlimit:$textlimit, count:$count string:$string";
}
return $count;
}
@ -439,13 +437,14 @@ sub SaveTemplate {
$tmpl_id, $tmpl_code, $tmpl_desc, $page_width,
$page_height, $label_width, $label_height, $topmargin,
$leftmargin, $cols, $rows, $colgap,
$rowgap, $fontsize, $units
$rowgap, $font, $fontsize, $units
) = @_;
warn "Passed \$font:$font";
my $dbh = C4::Context->dbh;
my $query =
" UPDATE labels_templates SET tmpl_code=?, tmpl_desc=?, page_width=?,
page_height=?, label_width=?, label_height=?, topmargin=?,
leftmargin=?, cols=?, rows=?, colgap=?, rowgap=?, fontsize=?,
leftmargin=?, cols=?, rows=?, colgap=?, rowgap=?, font=?, fontsize=?,
units=?
WHERE tmpl_id = ?";
@ -454,9 +453,11 @@ sub SaveTemplate {
$tmpl_code, $tmpl_desc, $page_width, $page_height,
$label_width, $label_height, $topmargin, $leftmargin,
$cols, $rows, $colgap, $rowgap,
$fontsize, $units, $tmpl_id
$font, $fontsize, $units, $tmpl_id
);
my $dberror = $sth->errstr;
$sth->finish;
return $dberror;
}
sub CreateTemplate {
@ -465,23 +466,26 @@ sub CreateTemplate {
$tmpl_code, $tmpl_desc, $page_width, $page_height,
$label_width, $label_height, $topmargin, $leftmargin,
$cols, $rows, $colgap, $rowgap,
$fontsize, $units
$font, $fontsize, $units
) = @_;
my $dbh = C4::Context->dbh;
my $query = "INSERT INTO labels_templates (tmpl_code, tmpl_desc, page_width,
page_height, label_width, label_height, topmargin,
leftmargin, cols, rows, colgap, rowgap, fontsize, units)
VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
leftmargin, cols, rows, colgap, rowgap, font, fontsize, units)
VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
my $sth = $dbh->prepare($query);
$sth->execute(
$tmpl_code, $tmpl_desc, $page_width, $page_height,
$label_width, $label_height, $topmargin, $leftmargin,
$cols, $rows, $colgap, $rowgap,
$fontsize, $units
$font, $fontsize, $units
);
my $dberror = $sth->errstr;
$sth->finish;
return $dberror;
}
sub GetAllLabelTemplates {
@ -831,8 +835,8 @@ sub deduplicate_batch {
sub DrawSpineText {
my ( $y_pos, $label_height, $fontsize, $x_pos, $left_text_margin,
$text_wrap_cols, $item, $conf_data )
my ( $y_pos, $label_height, $label_width, $font, $fontsize, $x_pos, $left_text_margin,
$text_wrap_cols, $item, $conf_data, $printingtype )
= @_;
# hack to fix column name mismatch betwen labels_conf.class, and bibitems.classification
$$item->{'class'} = $$item->{'classification'};
@ -843,22 +847,21 @@ sub DrawSpineText {
my $str;
## $item
my $top_text_margin = ( $fontsize + 3 );
my $line_spacer = ($fontsize); # number of pixels between text rows.
my $top_text_margin = ( $fontsize + 3 ); #FIXME: This should be a template parameter and passed in...
my $line_spacer = ( $fontsize * 0.20 ); # number of pixels between text rows (This is actually leading: baseline to baseline minus font size. Recommended starting point is 20% of font size.).
# add your printable fields manually in here
my $layout_id = $$conf_data->{'id'};
my $layout_id = $$conf_data->{'id'};
# my @fields = GetItemFields();
my $str_fields = get_text_fields($layout_id, 'codes' );
my @fields = split(/ /, $str_fields);
#warn Dumper(@fields);
### @fields
my $str_fields = get_text_fields($layout_id, 'codes' );
my @fields = split(/ /, $str_fields);
#warn Dumper(@fields);
### @fields
my $vPos = ( $y_pos + ( $label_height - $top_text_margin ) );
my $hPos = ( $x_pos + $left_text_margin );
# warn Dumper $conf_data;
#warn Dumper $item;
@ -879,7 +882,8 @@ my @fields = split(/ /, $str_fields);
# strip out naughty existing nl/cr's
$str =~ s/\n//g;
$str =~ s/\r//g;
# strip out division slashes
$str =~ s/\///g;
# chop the string up into _upto_ 12 chunks
# and seperate the chunks with newlines
@ -891,31 +895,39 @@ my @fields = split(/ /, $str_fields);
# then loop for each string line
foreach my $str (@strings) {
#warn "HPOS , VPOS $hPos, $vPos ";
# set the font size A
# prText( $hPos, $vPos, $str );
PrintText( $hPos, $vPos, $fontsize, $str );
my $hPos;
if ( $printingtype eq 'BIB' ) { #FIXME: This is a hack and needs to be implimented as a text justification option in the template...
# some code to try and center each line on the label based on font size and string point length...
my $stringwidth = prStrWidth($str, $font, $fontsize);
my $whitespace = ( $label_width - ( $stringwidth + (2 * $left_text_margin) ) );
$hPos = ( ( $whitespace / 2 ) + $x_pos + $left_text_margin );
warn "\$label_width=$label_width \$stringwidth=$stringwidth \$whitespace=$whitespace \$left_text_margin=$left_text_margin for $str";
} else {
$hPos = ( $x_pos + $left_text_margin );
}
PrintText( $hPos, $vPos, $font, $fontsize, $str );
$vPos = $vPos - $line_spacer;
}
} # if field is } #foreach feild
}
} # if field is
} #foreach feild
}
sub PrintText {
my ( $hPos, $vPos, $fontsize, $text ) = @_;
my $str = "BT /Ft1 $fontsize Tf $hPos $vPos Td ($text) Tj ET";
my ( $hPos, $vPos, $font, $fontsize, $text ) = @_;
my $str = "BT /$font $fontsize Tf $hPos $vPos Td ($text) Tj ET";
prAdd($str);
}
sub SetFontSize {
# Is this used anywhere?
my ($fontsize) = @_;
### fontsize
my $str = "BT/F13 30 Tf288 720 Td( AAAAAAAAAA ) TjET";
prAdd($str);
}
#sub SetFontSize {
#
# my ($fontsize) = @_;
#### fontsize
# my $str = "BT/F13 30 Tf288 720 Td( AAAAAAAAAA ) TjET";
# prAdd($str);
#}
sub DrawBarcode {

View File

@ -1158,6 +1158,7 @@ CREATE TABLE `labels_templates` (
`active` int(1) default NULL,
`units` char(20) default 'PX',
`fontsize` int(4) NOT NULL default '3',
`font` char(10) NOT NULL default 'TR',
PRIMARY KEY (`tmpl_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -1109,6 +1109,14 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion ($DBversion);
}
$DBversion = "3.00.00.061";
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
$dbh->do("ALTER TABLE labels_templates ADD COLUMN font char(10) NOT NULL DEFAULT 'TR';");
print "Upgrade to $DBversion done ( Added font column to labels_templates )\n";
SetVersion ($DBversion);
}
=item DropAllForeignKeys($table)
Drop all foreign keys of the table $table

View File

@ -59,13 +59,21 @@
<label for="rowgap">Gap between Rows:</label><input type="text" size="2" name="rowgap" id="rowgap" />
</li>
<li><label for="fonts">Font: </label><select id="fonts" name="fonts">
<!-- TMPL_LOOP NAME="fonts" -->
<option value="<!-- TMPL_VAR NAME="font" -->"><!-- TMPL_VAR NAME="name" --></option>
<!-- /TMPL_LOOP -->
</select></li>
<li><label for="fontsize">Font Size:</label> <input type="text" id="fontsize" name="fontsize" size="1" value="" /></li>
<li><label for="active">Active: </label><input type="checkbox" id="active" name="active" /></li>
</ol>
</fieldset>
<fieldset class="action"><input type="hidden" name="op" value="create" />
<input type="submit" value="Save" />
<a class="cancel" href="/cgi-bin/koha/labels/label-home.pl">Cancel</a></fieldset>
<fieldset class="action">
<input type="submit" name="op" value="Create" />
<input type="submit" name="op" value="Cancel" />
</fieldset>
</form>
</div>

View File

@ -89,6 +89,16 @@
<!-- /TMPL_IF -->
</li>
<li><label for="fonts">Font: </label><select id="fonts" name="fonts">
<!-- TMPL_LOOP NAME="fonts" -->
<!-- TMPL_IF NAME="selected" -->
<option value="<!-- TMPL_VAR NAME="font" -->" selected="selected">
<!-- TMPL_ELSE -->
<option value="<!-- TMPL_VAR NAME="font" -->">
<!-- /TMPL_IF --><!-- TMPL_VAR NAME="name" --></option>
<!-- /TMPL_LOOP -->
</select></li>
<li><label for="fontsize">Font Size:</label> <input type="text" id="fontsize" name="fontsize" size="1" value="<!-- TMPL_VAR NAME="fontsize" -->" /></li>
<li><label for="active">Active: </label>

View File

@ -29,6 +29,7 @@ my $rows = $query->param('rows');
my $colgap = $query->param('colgap');
my $rowgap = $query->param('rowgap');
my $units = $query->param('units');
my $font = $query->param('fonts');
my $fontsize = $query->param('fontsize');
my $batch_id = $query->param('batch_id');
@ -48,6 +49,21 @@ if ( $op eq 'blank' ) {
{ unit => 'POINT', desc => 'Postscript Points' },
);
my @fonts = ( #FIXME: There is probably a way to discover what additional fonts are installed on a user's system and generate this list dynamically...
{ font => 'TR', name => 'Times Roman' },
{ font => 'TB', name => 'Times Bold' },
{ font => 'TI', name => 'Times Italic' },
{ font => 'TBI', name => 'Times Bold Italic' },
{ font => 'C', name => 'Courier' },
{ font => 'CB', name => 'Courier Bold' },
{ font => 'CO', name => 'Courier Oblique' },
{ font => 'CBO', name => 'Courier Bold Oblique' },
{ font => 'H', name => 'Helvetica' },
{ font => 'HB', name => 'Helvetica Bold' },
{ font => 'HO', name => 'Helvetica Oblique' },
{ font => 'HBO', name => 'Helvetica Bold Oblique' },
);
( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => "labels/label-create-template.tmpl",
@ -60,22 +76,28 @@ if ( $op eq 'blank' ) {
);
$template->param(
units => \@units,
units => \@units,
fonts => \@fonts,
);
}
elsif ( $op eq 'create' ) {
elsif ( $op eq 'Create' ) {
CreateTemplate(
$tmpl_code, $tmpl_desc, $page_width,
$tmpl_code, $tmpl_desc, $page_width,
$page_height, $label_width, $label_height, $topmargin,
$leftmargin, $cols, $rows, $colgap,
$rowgap, $fontsize, $units );
$rowgap, $font, $fontsize, $units );
print $query->redirect("./label-templates.pl");
exit;
}
elsif ( $op eq 'Cancel' ) {
print $query->redirect("./label-home.pl");
exit;
}
output_html_with_http_headers $query, $cookie, $template->output;

View File

@ -76,10 +76,32 @@ foreach my $unit (@units) {
}
}
my @fonts = ( #FIXME: There is probably a way to discover what additional fonts are installed on a user's system and generate this list dynamically...
{ font => 'TR', name => 'Times Roman' },
{ font => 'TB', name => 'Times Bold' },
{ font => 'TI', name => 'Times Italic' },
{ font => 'TBI', name => 'Times Bold Italic' },
{ font => 'C', name => 'Courier' },
{ font => 'CB', name => 'Courier Bold' },
{ font => 'CO', name => 'Courier Oblique' },
{ font => 'CBO', name => 'Courier Bold Oblique' },
{ font => 'H', name => 'Helvetica' },
{ font => 'HB', name => 'Helvetica Bold' },
{ font => 'HO', name => 'Helvetica Oblique' },
{ font => 'HBO', name => 'Helvetica Bold Oblique' },
);
foreach my $font (@fonts) {
if ( $font->{'font'} eq $tmpl->{'font'} ) {
$font->{'selected'} = 1;
}
}
$template->param(
proflist => \@proflist,
units => \@units,
fonts => \@fonts,
tmpl_id => $tmpl->{'tmpl_id'},
tmpl_code => $tmpl->{'tmpl_code'},

View File

@ -10,7 +10,6 @@ use HTML::Template::Pro;
use PDF::Reuse;
use PDF::Reuse::Barcode;
use POSIX;
#use C4::Labels;
#use Smart::Comments;
my $DEBUG = 0;
@ -27,7 +26,7 @@ my $spine_text = "";
# get the printing settings
my $template = GetActiveLabelTemplate();
my $conf_data = get_label_options();
my $profile = GetAssociatedProfile($template->{'tmpl_id'});
my $profile = GetAssociatedProfile($template->{'tmpl_id'});
my $batch_id = $cgi->param('batch_id');
my @resultsloop = get_label_items($batch_id);
@ -45,21 +44,8 @@ warn "Starting on label #$start_label" if $DEBUG;
my $fontsize = $template->{'fontsize'};
my $units = $template->{'units'};
### $printingtype;
=c
################### defaults for testing
my $barcodetype = 'CODE39';
my $printingtype = 'BARBIB';
my $guidebox = 1;
my $start_label = 1;
my $units = 'POINTS'
=cut
#my $fontsize = 3;
#warn "UNITS $units";
#warn "fontsize = $fontsize";
warn "UNITS $units";
warn "fontsize = $fontsize";
#warn Dumper $template;
my $unitvalue = GetUnitsValue($units);
@ -88,8 +74,24 @@ warn "pghth=$page_height, pgwth=$page_width, lblhth=$label_height, lblwth=$label
my $label_cols = $template->{'cols'};
my $label_rows = $template->{'rows'};
my $text_wrap_cols = GetTextWrapCols( $fontsize, $label_width );
my $margin = $top_margin;
my $left_text_margin = 3; # FIXME: This value should not be hardcoded
my $str;
prInitVars();
$| = 1;
prFile();
# Some peritent notes from PDF::Reuse regarding prFont()...
# If a font wasn't found, Helvetica will be set.
# These names are always recognized: Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic, Courier, Courier-Bold,
# Courier-Oblique, Courier-BoldOblique, Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique
# They can be abbreviated: TR, TB, TI, TBI, C, CB, CO, CBO, H, HB, HO, HBO
my $fontname = $template->{'font'};
my $font = prFont( $fontname );
my $text_wrap_cols = GetTextWrapCols( $font, $fontsize, $label_width, $left_text_margin );
#warn $label_cols, $label_rows;
@ -99,20 +101,8 @@ my $lowerLeftY = 0;
my $upperRightX = $page_width;
my $upperRightY = $page_height;
prInitVars();
$| = 1;
prFile();
prMbox( $lowerLeftX, $lowerLeftY, $upperRightX, $upperRightY );
# later feature, change the font-type and size?
prFont('C'); # Just setting a font
prFontSize($fontsize);
my $margin = $top_margin;
my $left_text_margin = 3;
my $str;
#warn "STARTROW = $startrow\n";
#my $page_break_count = $startrow;
@ -223,7 +213,7 @@ foreach $item (@resultsloop) {
DrawBarcode( $x_pos, $barcode_y, $barcode_height, $label_width,
$barcode, $barcodetype );
DrawSpineText( $y_pos, $text_height, $fontsize, $x_pos,
DrawSpineText( $y_pos, $text_height, $label_width, $font, $fontsize, $x_pos,
$left_text_margin, $text_wrap_cols, \$item, \$conf_data );
CalcNextLabelPos();
@ -234,7 +224,7 @@ foreach $item (@resultsloop) {
my $barcode_height = $label_height / 2;
DrawBarcode( $x_pos, $y_pos, $barcode_height, $label_width, $barcode,
$barcodetype );
DrawSpineText( $y_pos, $label_height, $fontsize, $x_pos,
DrawSpineText( $y_pos, $label_height, $label_width, $font, $fontsize, $x_pos,
$left_text_margin, $text_wrap_cols, \$item, \$conf_data );
CalcNextLabelPos();
@ -246,7 +236,7 @@ foreach $item (@resultsloop) {
$barcodetype );
CalcNextLabelPos();
drawbox( $x_pos, $y_pos, $label_width, $label_height ) if $guidebox;
DrawSpineText( $y_pos, $label_height, $fontsize, $x_pos,
DrawSpineText( $y_pos, $label_height, $label_width, $font, $fontsize, $x_pos,
$left_text_margin, $text_wrap_cols, \$item, \$conf_data );
CalcNextLabelPos();
@ -255,8 +245,8 @@ foreach $item (@resultsloop) {
elsif ( $printingtype eq 'BIB' ) {
drawbox( $x_pos, $y_pos, $label_width, $label_height ) if $guidebox;
DrawSpineText( $y_pos, $label_height, $fontsize, $x_pos,
$left_text_margin, $text_wrap_cols, \$item, \$conf_data );
DrawSpineText( $y_pos, $label_height, $label_width, $font, $fontsize, $x_pos,
$left_text_margin, $text_wrap_cols, \$item, \$conf_data, $printingtype );
CalcNextLabelPos();
}

View File

@ -29,22 +29,25 @@ my $cols = $query->param('cols');
my $rows = $query->param('rows');
my $colgap = $query->param('colgap');
my $rowgap = $query->param('rowgap');
my $font = $query->param('fonts');
my $fontsize = $query->param('fontsize');
my $units = $query->param('units');
my $active = $query->param('active');
my $prof_id = $query->param('prof_id');
SaveTemplate(
my $dberror = SaveTemplate(
$tmpl_id, $tmpl_code, $tmpl_desc, $page_width,
$page_height, $label_width, $label_height, $topmargin,
$leftmargin, $cols, $rows, $colgap,
$rowgap, $fontsize, $units
$rowgap, $font, $fontsize, $units
);
SetAssociatedProfile( $prof_id, $tmpl_id ) if $prof_id;
warn "Database returned the following error: $dberror" if $dberror;
print $query->redirect("./label-templates.pl");