PDFLib是另外一种可供选择的方案。除了可以直接产生PDF输出之外,还自带了一个PERL接口。虽然PDFLib的功能非常全面,但是作为一种商业软件其售价是广大个人用户所无法承受的,而且,使用PDFLib同样需要对PDF技术有一定的了解。
作为免费软件产品提供的HTMLDOC事实上就是一种HTML语言的转化工具,可以直接把HTML代码按照用户的需求转换为Postscript或者PDF格式。除了具有图形化接口之外,HTMLDOC还专门集成了一个命令行接口,允许在PERL脚本中进行调用,从而使整个PDF的生成过程一气呵成。
首先,需要安装HTMLDOC(网址:http://www.easysw.com/htmldoc/)。目前,HTMLDOC可以在包括Linux, Solaris, 以及Windows等在内的多种平台上使用。安装过程很简单,具体的安装指令可以参见http://www.easysw.com/htmldoc/htmldoc.html#2_1_4 处的文档说明。
HTMLDOC实际上就是一种HTML和PDF之间的转换工具。在命令行中,可以使用管道将HTML代码传送给HTMLDOC,然后指定HTMLDOC以标准的格式输出结果。
举例来说,可以使用以下命令将一个简单的WEB页面转化为PDF格式:
prompt$#@62;echo"$#@60;H2$#@62;Results$#@60;/H2$#@62;$#@60;TABLE$#@62;$#@60;TR$#@62;$#@60;TD$#@62;Score$#@60;/TD$#@62
;$#@60;TD$#@62;95$#@60;/TD$#@62;$#@60;/TR$#@62;
$#@60;/TABLE$#@62;" | htmldoc --webpage -t pdf - $#@62; resultTable.pdf
说明:
在上述命令中,首先使用echo命令输出一段标准的HTML代码,然后通过管道操作符“|”将其以WEB页面的形式传递给HTMLDOC,由后者产生PDF输出,并把结果保存在resultTable.pdf文件中。
使用PERL产生PDF输出.
实现具体代码如下:
#!/usr/bin/perl
#使用HTMLDOC产生PDF输入
use CGI;
#获取CGI参数
my $cgiobj=new CGI;
my $innerHTML=$cgiobj-$#@62;param("innerHTML");
#处理输入中各种可能出现的特殊字符
my %specialChars=(
"’","′",
"$","\$",
"@","\@",
"!","\!",
"n","",
"r","");
my $specialCharList=join("",keys %specialChars);
$innerHTML=~s/\/\\\\/g;
$innerHTML=~s/([$specialCharList])/$specialChars{$1}/g;
#向浏览器输出PDF标头
print "Content-Type: application/pdfrnrn";
#创建并向浏览器输出PDF数据流
if ($innerHTML) {
my $command="`echo -e ’".$innerHTML."’ | htmldoc --webpage -t pdf - `";
print eval($command);
}
如果要包含Code39条形码的话,给你个例子
{
base.OnClick(e);
Graphics g = Graphics.FromHwnd(this.Handle);
drawCode39(g, "1234567abcdefg");
}
private void drawCode39(Graphics g, string strSource)
{
int barLeft = 5;
int barTop = 5;
int barWidth = 2;
int barHeight = 28;
string strEncode = "010010100";//*
string charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; //Code39的字母
string[] Code39 =
{
/* 0 */ "000110100",
/* 1 */ "100100001",
/* 2 */ "001100001",
/* 3 */ "101100000",
/* 4 */ "000110001",
/* 5 */ "100110000",
/* 6 */ "001110000",
/* 7 */ "000100101",
/* 8 */ "100100100",
/* 9 */ "001100100",
/* A */ "100001001",
/* B */ "001001001",
/* C */ "101001000",
/* D */ "000011001",
/* E */ "100011000",
/* F */ "001011000",
/* G */ "000001101",
/* H */ "100001100",
/* I */ "001001100",
/* J */ "000011100",
/* K */ "100000011",
/* L */ "001000011",
/* M */ "101000010",
/* N */ "000010011",
/* O */ "100010010",
/* P */ "001010010",
/* Q */ "000000111",
/* R */ "100000110",
/* S */ "001000110",
/* T */ "000010110",
/* U */ "110000001",
/* V */ "011000001",
/* W */ "111000000",
/* X */ "010010001",
/* Y */ "110010000",
/* Z */ "011010000",
/* - */ "010000101",
/* . */ "110000100",
/*' '*/ "011000100",
/* $ */ "010101000",
/* / */ "010100010",
/* + */ "010001010",
/* % */ "000101010",
/* * */ "010010100"
};
g.Clear(Color.White);
strSource = strSource.ToUpper();
for (int i = 0; i < strSource.Length; i++)
{
if (charList.IndexOf(strSource[i]) == -1 || strSource[i] == '*')
{
return;
}
strEncode = string.Format("{0}0{1}", strEncode, Code39[charList.IndexOf(strSource[i])]);
}
strEncode = string.Format("{0}0010010100", strEncode);
int left = barLeft;
for (int i = 0; i < strEncode.Length; i++)
{
int width = strEncode[i] == '1' ? barWidth : barWidth/2;
g.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White, left, barTop, width, barHeight);
if (i % 10 == 0)
{
int index = i / 10;
if (index > 0 && index < strSource.Length + 1)
{
g.DrawString(strSource[index - 1].ToString(), this.Font, SystemBrushes.ControlText, left, barHeight + barTop);
}
else
{
g.DrawString("*", this.Font, SystemBrushes.ControlText, left, barHeight + barTop);
}
}
left += width;
}
}
perl语言包含unicode
你可以去看看这个网页.
http://hi.baidu.com/xining52113339/blog/item/2ee7a5d993b701ec39012fbc.html
希望能对你有点帮助~~
- Perl生成PDF文件,包含Code39条形码
- 任务序号:26234
- 当前状态:结束
- 任务金额:250.00元
发任务

