使用html2canvas实现批量生成条形码
/*前台代码*/
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GenerateCodeBar.aspx.cs"
Inherits="CodeBar_GenerateCodeBar" EnableEventValidation="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<meta charset="UTF-8" />
<script src="../js/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="js/html2canvas.js" type="text/javascript"></script>
<link href="css/common.css" rel="stylesheet" type="text/css" />
<link href="css/picture.css" rel="stylesheet" type="text/css" />
<link href="../Css/Page.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var index = ;
var timer; //批量生成条形码
function IntervalCodebar() { //判断是否已上传附件
var SN = $("#hdSN").val();
if (!SN) {
alert("请先上传附件"); return false;
}
$("#content").hide();
index = ;
//每次生成图片时 先清空文件夹下的所有文件
var Result = Ajax("post", false, "Handler.ashx", { Option: "d" }, "text");
if (Result == "success") {
timer = setInterval(GenerateCodeBar, );
}
else {
alert("生成失败");
}
} function GenerateCodeBar() {
var SN = $("#hdSN").val();
var Model = $("#hdModel").val();
var ProductName = $("#hdProductName").val(); var sp_SN = SN.split(',');
var sp_Model = Model.split(',');
var sp_ProductName = ProductName.split(','); if (index >= sp_SN.length) {
clearInterval(timer); $("#content").show(); return;
} $("#txtModel").val(sp_Model[index]);
$("#txtSN").val(sp_SN[index]);
$("#txtProductName").val(sp_ProductName[index]);
cutDiv(sp_Model[index], sp_SN[index]);
index++;
//setInterval();
} //利用Html canvas将Div渲染成图片
function cutDiv(Model, SN) {
//var contentBox = document.getElementById("contentBox").innerHTML;
$.ajax({
type: "post", async: false, url: "Handler.ashx",
data: { Option: "a", Model: Model, SN: SN }, datatype: "text",
success: function (data) {
if (data) {
var sp_data = data.split("&SNModel&");
$("#ImgModel_BarCode").html(sp_data[]);
$("#ImgSN_BarCode").html(sp_data[]); html2canvas($("#contentBox"), {
allowTaint: true,
taintTest: false,
onrendered: function (canvas) {
canvas.id = "mycanvas";
//document.body.appendChild(canvas);
//生成base64图片数据
var dataUrl = canvas.toDataURL();
//var newImg = document.createElement("img");
//newImg.src = dataUrl;
//document.body.appendChild(newImg);
var Result = Ajax("post", false, "Handler.ashx", { Base64Text: dataUrl, Option: "b" }, "text");
if (Result != "success") {
alert("生成条形码失败"); return false;
}
}
})
}
},
error: function () {
}
})
} /*** 通用Ajax方法 ***/
function Ajax(Type, Async, Url, Data, DataType) {
var Result = "";
$.ajax({
type: Type, async: Async, url: Url,
data: Data, datatype: DataType,
success: function (data) {
Result = data;
},
error: function () {
Result = "";
}
})
return Result;
} //下载文件
function DownloadFile() {
var Result = Ajax("post", false, "Handler.ashx", { Option: "c" }, "text");
if (Result) {
window.open("UploadImage/image.rar");
}
} //检验上传的是否是Excel文件
function checkinfo() {
var result = false;
var str = document.getElementById("fuexecl").value;
if (!str) {
alert("请选择需要上传的Excel文件"); return false;
}
var d = /\.[^\.]+$/.exec(str);
if (d == ".xlsx" || d == ".xls") {
result = true;
return result;
}
else {
alert("请上传Excel文件"); return false;
}
}
</script>
</head>
<body>
<form id="Form1" runat="server">
<div id="content" style="height: 38px;">
<table border="" cellspacing="" cellpadding="" class="table" align="right" style="min-width: 980px">
<tr>
<td width="250px" align="right">
请选择需要生成条形码的Excel数据:
</td>
<td class="tddt" width="150px">
<input runat="server" type="file" class="input" id="fuexecl" />
</td>
<td align="left">
<asp:Button runat="server" class="button" ID="btnSend" Text="上 传" OnClientClick="return checkinfo();"
OnClick="btnSend_Click" />
<input type="button" id="btnCutDiv" class="button" value="生成条形码" style="margin-left: 10px;"
onclick="IntervalCodebar()" />
<input type="button" id="btnDownload" class="button" value="下 载" style="margin-left: 10px;"
onclick="DownloadFile()" />
</td>
</tr>
</table>
</div>
<div class="contentBox" id="contentBox">
<div class="one">
<div class="one_log">
</div>
</div>
<div class="nine">
<input type="text" id="txtProductName" class="textIpt1" />
</div>
<div class="two">
<span>型号:</span>
<input type="text" id="txtModel" class="textIpt1" />
</div>
<div class="three" style="margin-left: 30px;">
<literal id="ImgModel_BarCode"></literal>
</div>
<div class="four">
<span>SN:</span>
<input type="text" id="txtSN" class="textIpt1" />
</div>
<div class="five" style="margin-left: 30px;">
<literal id="ImgSN_BarCode"></literal>
</div>
<div class="ten">
<img src="data:images/1.png" alt="">
</div>
<div class="ele">
<img src="data:images/11.png" alt="">
</div>
</div>
<input type="hidden" runat="server" id="hdSN" />
<input type="hidden" runat="server" id="hdModel" />
<input type="hidden" runat="server" id="hdProductName" />
</form>
</body>
</html>
/*后台代码*/
<%@ WebHandler Language="C#" Class="Handler" %> using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using System.Drawing.Drawing2D;
using System.Text;
using System.IO; public class Handler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
string Option = context.Request.Form["Option"]; switch (Option)
{
//生成Code39 编码
case "a":
string Model = context.Request.Form["Model"];//型号
string SN = context.Request.Form["SN"];//SN号
string CodeBarModel = BarCodeHelper.get39(Model.Trim(), , );
string CodeBarSN = BarCodeHelper.get39(SN.Trim(), , );
context.Response.Write(CodeBarModel + "&SNModel&" + CodeBarSN);
context.Response.End();
break; //根据Base64编码生成图片
case "b":
string Base64Text = context.Request.Form["Base64Text"].Replace("data:image/png;base64,", "");//Base64文本
string Result = "";
if (Base64StringToImage(context, Base64Text))
Result = "success";
else
Result = "error";
context.Response.Write(Result);
context.Response.End();
break; //把文件夹下的所有文件打包成压缩包
case "c":
string path = context.Server.MapPath("~/CodeBar/UploadImage/"); //文件夹路径
string[] filesOrDirectoriesPaths = Directory.GetFiles(path); //获取文件夹下全部文件路径
//List<FileInfo> files = new List<FileInfo>();
//foreach (string filepath in paths)
//{
// FileInfo file = new FileInfo(filepath); //获取单个文件
// files.Add(file);
//}
string strZipPath = path + "image.rar";//生成的zip文件的路径
string strZipTopDirectoryPath = path;//源文件的上级目录
int intZipLevel = ;//T压缩等级
string strPassword = "";//压缩包解压密码
if (Zip(strZipPath, strZipTopDirectoryPath, intZipLevel, strPassword, filesOrDirectoriesPaths))
{
context.Response.Write(strZipPath); context.Response.End();
}
break; //删除文件夹下的所有文件
case "d":
path = context.Server.MapPath("~/CodeBar/UploadImage/"); //文件夹路径
string[] paths = Directory.GetFiles(path); //获取文件夹下全部文件路径
List<FileInfo> files = new List<FileInfo>();
string result = "";
if (paths.Length == )
result = "success";
else
{
try
{
foreach (string filepath in paths)
{
FileInfo file = new FileInfo(filepath); //获取单个文件
file.Delete();
}
result = "success";
}
catch (Exception ex)
{
result = "error";
throw;
}
}
context.Response.Write(result); context.Response.End();
break;
} } public bool IsReusable
{
get
{
return false;
}
} /// <summary>
/// 生成压缩文件
/// </summary>
/// <param name="strZipPath">生成的zip文件的路径</param>
/// <param name="strZipTopDirectoryPath">源文件的上级目录</param>
/// <param name="intZipLevel">T压缩等级</param>
/// <param name="strPassword">压缩包解压密码</param>
/// <param name="filesOrDirectoriesPaths">源文件路径</param>
/// <returns></returns>
private bool Zip(string strZipPath, string strZipTopDirectoryPath, int intZipLevel, string strPassword, string[] filesOrDirectoriesPaths)
{
try
{
List<string> AllFilesPath = new List<string>();
if (filesOrDirectoriesPaths.Length > ) // get all files path
{
for (int i = ; i < filesOrDirectoriesPaths.Length; i++)
{
if (File.Exists(filesOrDirectoriesPaths[i]))
{
AllFilesPath.Add(filesOrDirectoriesPaths[i]);
}
else if (Directory.Exists(filesOrDirectoriesPaths[i]))
{
GetDirectoryFiles(filesOrDirectoriesPaths[i], AllFilesPath);
}
}
} if (AllFilesPath.Count > )
{ ICSharpCode.SharpZipLib.Zip.ZipOutputStream zipOutputStream = new ICSharpCode.SharpZipLib.Zip.ZipOutputStream(File.Create(strZipPath));
zipOutputStream.SetLevel(intZipLevel);
zipOutputStream.Password = strPassword; for (int i = ; i < AllFilesPath.Count; i++)
{
string strFile = AllFilesPath[i].ToString();
try
{
if (strFile.Substring(strFile.Length - ) == "") //folder
{
string strFileName = strFile.Replace(strZipTopDirectoryPath, "");
if (strFileName.StartsWith(""))
{
strFileName = strFileName.Substring();
}
ICSharpCode.SharpZipLib.Zip.ZipEntry entry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(strFileName);
entry.DateTime = DateTime.Now;
zipOutputStream.PutNextEntry(entry);
}
else //file
{
FileStream fs = File.OpenRead(strFile); byte[] buffer = new byte[fs.Length];
fs.Read(buffer, , buffer.Length); string strFileName = strFile.Replace(strZipTopDirectoryPath, "");
if (strFileName.StartsWith(""))
{
strFileName = strFileName.Substring();
}
ICSharpCode.SharpZipLib.Zip.ZipEntry entry = new ICSharpCode.SharpZipLib.Zip.ZipEntry(strFileName);
entry.DateTime = DateTime.Now;
zipOutputStream.PutNextEntry(entry);
zipOutputStream.Write(buffer, , buffer.Length); fs.Close();
fs.Dispose();
}
}
catch
{
continue;
}
} zipOutputStream.Finish();
zipOutputStream.Close(); return true;
}
else
{
return false;
}
}
catch
{
return false;
}
} /// <summary>
/// Gets the directory files.
/// </summary>
/// <param name="strParentDirectoryPath">源文件路径</param>
/// <param name="AllFilesPath">所有文件路径</param>
private void GetDirectoryFiles(string strParentDirectoryPath, List<string> AllFilesPath)
{
string[] files = Directory.GetFiles(strParentDirectoryPath);
for (int i = ; i < files.Length; i++)
{
AllFilesPath.Add(files[i]);
}
string[] directorys = Directory.GetDirectories(strParentDirectoryPath);
for (int i = ; i < directorys.Length; i++)
{
GetDirectoryFiles(directorys[i], AllFilesPath);
}
if (files.Length == && directorys.Length == ) //empty folder
{
AllFilesPath.Add(strParentDirectoryPath);
}
} /// <summary>
/// base64编码的文本 转为 图片
/// </summary>
/// <param name="txtFileName"></param>
private bool Base64StringToImage(HttpContext context, string Base64Text)
{
bool IsSuccess = false;
try
{
byte[] arr = Convert.FromBase64String(Base64Text);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms); string GUID = System.Guid.NewGuid().ToString();
string path = context.Server.MapPath("~/CodeBar/UploadImage/");
//判断是否存在文件夹 不存在则创建
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
} bmp.Save(path + GUID + ".png", System.Drawing.Imaging.ImageFormat.Png);
ms.Close();
IsSuccess = true;
}
catch (Exception ex)
{
IsSuccess = false;
}
return IsSuccess;
} }
使用html2canvas实现批量生成条形码的更多相关文章
- Excel批量生成条形码
项目要求需要将信息做成条形码的形式,以便通过手持设备直接查看信息,因本次项目信息为固定信息,不需随机生成,故采用本方法: 代码随机生成二维码暂时没有接触,后续有时间会研究 步骤: 1.新建 Excel ...
- 在word中批量制作条形码
条码打印软件可以批量生成条形码然后直接打印,但是有些客户不需要直接打印,而是想将生成的条形码在word中进行排版,发给自己的客户或者下属部门来打印.那么如何实现在word中批量制作条形码呢? 操作很简 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- 脚本工具(获取某个文件夹下的所有图片属性批量生成css样式)
问题描述: 由于有一次工作原因,就是将某个文件夹下的所有图片,通过CSS描述他们的属性,用的时候就可以直接引用.但是我觉得那个文件夹下的图片太多,而且CSS文件的格式又有一定的规律,所有想通过脚本来生 ...
- C# 在Word文档中生成条形码
C# 在Word文档中生成条形码 简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书 ...
- 代码批量生成WORD的遇到的问题及解决
好久没搞工具了,最近因为处理大规模公文处理单文档,自己写了个批量处理WORD的程序:在调试过程中,主要遇到两个问题 第一个是WORD的模板 数据很多,但是WORD模板只需要一个,将数据替换WORD里标 ...
- FluentData-新型轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码
FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 ...
- 用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片
用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片 ticons的用法可以百度 这里记录下具体的编译方法 在安装了ticons和ImageMagickDisp ...
- PHP 批量生成静态文件目录代码
<?php /** * @author:jiangzaixing 20160314 * 获取静态文件方法 */ class StaticFile { const MAP_FILE_NAME = ...
随机推荐
- eclipse重定向输入输出到文件
最近在学习算法第四版,为了要用作者给的测试数据alg4-data,需要将数据直接导入到程序中.在作者的示例代码里用了重定向来做这个事情,但是在eclipse里使用重定向很不方便,查了很多资料,都说是在 ...
- Linux系统yum命令安装软件时保留(下载)rpm包 -- 转载
昨天在部署zabbix监控的时候,遇到一个问题:监控服务器处于无外网状态,在线安装不可用.而某些依赖包度娘或谷姐搜索起来也挺呛人的!于是想到一个办法,利用有外网的服务器的yum命令来安装这些软件,并自 ...
- Canvas画图在360浏览器中跑偏的问题
问题描述,canvas画图的js代码中编写的是画正方形的代码,结果在360浏览器上变成了长方形,不知道怎么回事,请问各位大神是否遇到过此类问题? <!DOCTYPE html> <h ...
- Graded Browser Support
( The YUI Target Environments Matrix is here) About the Browser Test Baseline and Operating Systems ...
- Arcgis Server发布服务
提到Arcgis Server 服务的发布,做起来貌似很简单,就算电脑再卡,只要鼠标还能点,一个小时肯定能搞定,但是当你遇到问题的时候,就头大了,也许搞上个一两天都摸不着头脑,最后你采取的措施可能是一 ...
- 最近使用JQuery Easyui 碰到的几个奇怪问题
最近项目想尝试Easyui来做做前端界面,但是刚开始就碰到几个问题,记录下来,免得忘了. 1. 点击添加或修改按钮后,弹出窗体,窗体内容参加“href”属性远程加载 问题:第一次弹出窗体正常,但是再次 ...
- MS SQLSERVER 存儲過程與緩存
提升SQL Server最具性能的一个方面就是存储过程,SQL Server具备执行计划的缓存功能,以便计划重用.SQL Server2000增强了ad-hoc执行计划的缓存功能,就处理存储过程上性能 ...
- 大毕设-matlab-AM调制解调
博主大毕设关于数字下变频(DDC)的CUDA实现,预计工期比较长,所以留下一些文字记录. 主要分为两部分工作,Matlab仿真部分和CUDA实现. 由于很久没有仿真了,所以先用一个简单的AM调制仿真练 ...
- jquery选择器 之 获取父级元素、同级元素、子元素
jquery选择器 之 获取父级元素.同级元素.子元素 一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div" ...
- Centos实现回收站机制
作为一个运维人员,在服务器上删除文件时为了方便经常会直接使用rm *.txt这类通配符,甚至为了省事加-rf参数,如果是确定的话还好,要是在删除的时候一个不留神,那事可就大了. 俗话说常在河边站哪有不 ...