You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebindings/kjsembed/docs/examples/envelopemaker/env.js

253 lines
6.4 KiB

#!/usr/bin/env kjscmd
StdDirs.addResourceType("envelopemaker", StdDirs.kde_default("data") + "/envelopemaker");
var win = new KMainWindow(this);
var view = Factory.loadui(StdDirs.findResource("envelopemaker", "EnvelopeMakerUI.ui"), this, win);
//var view = Factory.loadui("EnvelopeMakerUI.ui", this, win);
var Print = view.child('print');
var Save = view.child('save');
var Exit = view.child('exit');
Print.connect(Print, 'clicked()', this, 'print');
Save.connect(Save, 'clicked()', this, 'save');
Exit.connect(Exit, 'clicked()', this, 'exit');
var env = new envelope();
env.init();
win.setCentralWidget(view);
win.setCaption("EnvelopeMaker");
win.show();
application.exec();
function setupEnvelope()
{
var fontName = /(.+)[,](.+)[,](.+)[,](.+)[,](.+)[,](.+)[,](.+)[,](.+)[,](.+)[,](.+)/.exec(view.child('font').font);
env.returnfont = fontName[1];
env.returnpointsize = fontName[2];
env.mailfont = fontName[1];
env.mailpointsize = fontName[2];
env.retAddress[0] = view.child('retAddress1').text;
env.retAddress[1] = view.child('retAddress2').text;
env.retAddress[2] = view.child('retAddress3').text;
env.retAddress[3] = view.child('retAddress4').text;
env.mailAddress[0] = view.child('mailAddress1').text;
env.mailAddress[1] = view.child('mailAddress2').text;
env.mailAddress[2] = view.child('mailAddress3').text;
env.mailAddress[3] = view.child('mailAddress4').text;
if ( view.child('barcode').checked )
{
if( env.getZip() == "" )
{
alert("You must enter a valid 9 digit Zipcode");
return false;
}
}
return true;
}
function print()
{
if (setupEnvelope() )
{
var dcop = new DCOPClient();
if( dcop.attach() )
{
var ps = env.header();
ps += env.returnAddress();
ps += env.mailingAddress();
if( view.child('barcode').checked )
ps += env.barcode();
ps += env.footer();
if ( !dcop.send("kprinterservice", "printer", "printStream(const QString&)", ps ) )
{
alert("There was an error talking to the KPrinterService, please check that it is running.");
}
}
}
}
function save()
{
if (setupEnvelope() )
{
var ps = env.header();
ps += env.returnAddress();
ps += env.mailingAddress();
if( view.child('barcode').checked )
ps += env.barcode();
ps += env.footer();
var fileName = StdDialog.getSaveFileName();
if( fileName != "")
{
System.writeFile(fileName, ps);
}
}
}
function envelope()
{
this.init = function()
{
this.leftmargin = 0.30;
this.ewidth = 9.5;
this.eheight = 4.125;
this.linepos = 0;
this.normalpaper = 11;
this.normalwidth = 8.5;
this.feedcenter = this.normalwidth/2 - this.eheight/2
this.topmargin = 0.30 + this.feedcenter;
this.x0 = 0;
this.y0 = Math.round((this.normalpaper - this.ewidth) * 72);
this.xpos = Math.round(0.40*72*this.ewidth);
this.ypos = Math.round(-0.40*72*this.eheight);
this.xloc = Math.round(this.x0 + (this.topmargin * 72));
this.yloc = Math.round(this.y0 + (this.leftmargin * 72));
this.returnfont = "Times-Roman";
this.returnpointsize = 12;
this.mailfont = "Times-Roman";
this.mailpointsize = 10;
this.retAddress = ["Ian Reinhart Geiser","601 Coach Hill Ct","West Chester PA, 19380"];
this.mailAddress = ["SourceXtreme, Inc","1149 Broad Run Road","Coatesville, PA 39380-9176"];
this.zipcode = "0";
}
this.getZip = function()
{
var mailAddress = /.+,[\s]*.{2,2}[\s]+([\d]{5,5})[-]*([\d]{4,4})/.exec(this.mailAddress);
if( mailAddress )
return mailAddress[1] + mailAddress[2];
else
return "";
}
this.header = function()
{
var ps = "";
ps += "%!\n";
ps += "% EnvelopeMaker\n";
// Page size
// Comm #10 Envelope 297 x 684
// C5 Envelope 461 x 648
// DL Envelope 312 x 624
ps += "newpath\n";
return ps;
}
this.returnAddress = function()
// Return address
{
var ps = this.xloc + " " + this.yloc + " translate\n";
ps += "90 rotate";
for ( var idx = 0; idx < this.retAddress.length; ++idx)
{
if( this.retAddress[idx] != "")
{
ps += "/" + this.returnfont + " findfont " + this.returnpointsize + " scalefont setfont\n";
ps += "0 " + this.linepos + " moveto\n";
ps += "(" + this.retAddress[idx] + ") show\n";
this.linepos -= this.returnpointsize;
}
}
return ps;
}
this.mailingAddress = function()
// Mailing Address
{
var ps = "";
for ( var idx = 0; idx < this.mailAddress.length; ++idx)
{
if( this.mailAddress[idx] != "")
{
ps += "/" + this.mailfont + " findfont " + this.mailpointsize + " scalefont setfont\n";
ps += this.xpos + " " + this.ypos + " moveto\n";
ps += "(" + this.mailAddress[idx] + ") show\n";
this.ypos -= this.mailpointsize;
}
}
return ps;
}
this.footer = function()
{
return "showpage\n";
}
this.barcode = function()
{
this.zipcode = this.getZip();
if( this.zipcode.length != 9)
return "";
var ps = "";
this.xpos = Math.round((this.ewidth - 3.875) * 72);
this.ypos = Math.round((-1 * this.eheight + 0.375) * 72);
var code = [ [1, 1, 0, 0, 0], [0, 0, 0, 1, 1], [0, 0, 1, 0, 1], [0, 0, 1, 1, 0],
[0, 1, 0, 0, 1], [0, 1, 0, 1, 0], [0, 1, 1, 0, 0], [1, 0, 0, 0, 1],
[1, 0, 0, 1, 0],[1, 0, 1, 0, 0] ];
var ziparray = new Array(10);
var zipsum = 0;
for ( var idx = 0; idx < this.zipcode.length; ++idx)
{
ziparray[idx] = this.zipcode.substring(idx, idx+1);
zipsum += ziparray[idx];
}
var correctcode = 10 - zipsum % 10;
if( correctcode == 10)
correctcode = 0;
ziparray[9] = correctcode;
// Set our barcode dimensions to the POSTNET spec.
// Width = 0.02"
// Space between CL's (pitch) = 0.05"
// Height of 1's = 0.125"
// Height of 0's = 0.05"
var pitch = 3.6; //points
var linewidth = 1.44; //points
var height = 0;
var pos = 0;
ps += "newpath\n";
ps += this.xpos + " " + this.ypos + " translate\n";
ps += pos + " 0 moveto\n";
ps += linewidth + " setlinewidth\n";
// Frame bar
var height = Math.round(0.125 * 72);
ps += "0 " + height + " rlineto\n";
// Actual barcode
for( var idx = 0; idx < ziparray.length; ++idx)
{
for (var idx2 = 0; idx2 < code[ ziparray[idx] ].length; ++idx2)
{
pos = Math.round(pos + pitch);
ps += pos + " 0 moveto\n";
var line = code[ ziparray[idx] ][idx2];
height = Math.round((0.05 + line * 0.075) * 72);
ps += "0 " + height + " rlineto\n";
}
}
// Frame bar
pos = Math.round(pos + pitch);
ps += pos + " 0 moveto\n";
height = Math.round(0.125 * 72);
ps += "0 " + height + " rlineto\n";
ps += "stroke\n";
return ps;
}
}