您的位置:首页 > 编程语言 > ASP

使用Aspose.Words生成文档

2015-05-03 18:33 441 查看
/// <summary>
/// 生成设计变更工程联系函
/// </summary>
/// <param name="DesignAlterGUID"></param>
/// <returns></returns>
private string GenerateDesignAlterDoc(string DesignAlterGUID)
{

string AlterCode, ProjectNameList, ReportDate, AlterName, ToProviderName, CCProviderNameList, CostBearedCompanyName, AlterType, AlterClass, IsReturnWork, Remarks, SgInterface, SgInterfaceTitle;
string strInsertSql, strSql;
string strJpgFilePath, strJpgFileName;
Bitmap qrcode;
string strFileName;
string DocGUID;
decimal DesignAlterAmount;
object param;
string[] fieldsName = new string[] { "AlterCode", "ProjectNameList", "ReportDate", "AlterName", "ToProviderName", "CCProviderNameList", "CostBearedCompanyName", "AlterType", "AlterClass", "IsReturnWork", "Remarks", "SgInterface", "SgInterfaceTitle" };
object[] fieldsValue;
try
{
//删除p_Documents中的记录
strSql = "DELETE FROM dbo.p_Documents WHERE FkGUID = @DesignAlterGUID AND DocType = '工程联系函'";
param = new { DesignAlterGUID = DesignAlterGUID };
CPQuery.From(strSql, param).ExecuteNonQuery();
PublicMNG myPublic = new PublicMNG();
string strGetPath = System.Web.HttpContext.Current.Server.MapPath("\\UpFiles\\");
string strSavePath = System.Web.HttpContext.Current.Server.MapPath("\\UpFiles\\工程联系函\\");
//判断目标文件夹是否存在,不存在则创建
if (!Directory.Exists(strSavePath))
{
Directory.CreateDirectory(strSavePath);
}
string strUserGUID = System.Web.HttpContext.Current.Session["UserGUID"].ToString();
Document doc = new Document(strGetPath + "设计变更工程联系函模板.doc");
strSql = "SELECT AlterCode, CONVERT(CHAR(10),ReportDate,120) AS ReportDate,AlterName,ToProviderNameList,CCProviderNameList,CostBearedCompanyName,AlterType,IsReturnWork,Remarks,SgInterface,ISNULL(b.DesignAlterAmount,0) AS DesignAlterAmount,dbo.fn_GetDesignAlterProjNameList(dbo.cb_DesignAlter.DesignAlterGUID) AS ProjNameList FROM dbo.cb_DesignAlter " +
" LEFT JOIN (SELECT DesignAlterGuid,SUM (DesignAlterAmount) AS DesignAlterAmount FROM dbo.cb_DesignAlterBudgetUse GROUP BY DesignAlterGuid) b ON dbo.cb_DesignAlter.DesignAlterGuid = b.DesignAlterGuid WHERE dbo.cb_DesignAlter.DesignAlterGUID = @DesignAlterGUID";
DataTable dt = GetData(strSql);
if (dt.Rows.Count > 0)
{
DataRow dr = dt.Rows[0];
AlterCode = dr["AlterCode"].ToString();
ProjectNameList = dr["ProjNameList"].ToString();
ReportDate = dr["ReportDate"].ToString();
AlterName = dr["AlterName"].ToString();
ToProviderName = dr["ToProviderNameList"].ToString();
CCProviderNameList = dr["CCProviderNameList"].ToString();
CostBearedCompanyName = dr["CostBearedCompanyName"].ToString();

AlterType = "☑ 设计变更   □ 工程指令";

DesignAlterAmount = (decimal)dr["DesignAlterAmount"];
if (DesignAlterAmount > 0)
{
AlterClass = "☑ 增加 □ 减少 □ 无增减";
}
else
{
AlterClass = "□ 增加 ☑ 减少 □ 无增减";
}

IsReturnWork = dr["IsReturnWork"].ToString();
if (IsReturnWork == "1")
{
IsReturnWork = "☑ 是 □ 否";
}
else
{
IsReturnWork = "□ 是 ☑ 否";
}
Remarks = dr["Remarks"].ToString();
SgInterface = dr["SgInterface"].ToString();
if (!string.IsNullOrEmpty(SgInterface))
{
SgInterfaceTitle = "施工界面划分:";
}
else
{
SgInterfaceTitle = "";
}

//1.插入文档正文
fieldsValue = new object[] { AlterCode, ProjectNameList, ReportDate, AlterName, ToProviderName, CCProviderNameList, CostBearedCompanyName, AlterType, AlterClass, IsReturnWork, Remarks, SgInterface, SgInterfaceTitle };
doc.MailMerge.Execute(fieldsName, fieldsValue);

//2.多线程生成文档图片
Thread generateJPGThread = new Thread(new ParameterizedThreadStart(GenerateAndSavePicture));
GenerateJPGThreadParam threadParam = new GenerateJPGThreadParam();
threadParam.Doc = doc.Clone();
threadParam.SavePath = System.Web.HttpContext.Current.Server.MapPath("\\UpFiles\\HTAlterLxh");
threadParam.FileName = AlterCode + ".jpg";
generateJPGThread.Start(threadParam);

//3.生成并插入二维码
doc = InsertQRCode(doc, AlterCode);

//4.插入“主办工程师:” 和 “工程部门盖章:”标题
fieldsName = new string[] { "HostEngineer", "EngineerDeptSeal" };
fieldsValue = new object[] { "主办工程师:", "工程部门盖章:" };
doc.MailMerge.Execute(fieldsName, fieldsValue);

//文档名称
DocGUID = Guid.NewGuid().ToString();
strFileName = "设计变更工程联系函" + DesignAlterGUID + ".doc";
//保存生成的中标通知书
//如果文件存在,先删除
if (File.Exists(strSavePath + strFileName))
{
File.Delete(strSavePath + strFileName);
}
doc.Save(strSavePath + strFileName);
//保存文档信息到p_Documents信息
strInsertSql = "INSERT INTO dbo.p_Documents " +
"( DocGUID,FkGUID,DocType,DocName,FileName,Location,CreateOn,CreateBy,IsImportant,LockedBy,LockedDateTime,ModifiedBy,ModifiedDateTime,URL,jd_documentDetailType) VALUES " +
" ('" + DocGUID + "','" + DesignAlterGUID + "','工程联系函','" + strFileName + "','" + strFileName + "','/UpFiles/工程联系函/',GETDATE(),'" + strUserGUID + "',NULL,NULL,NULL,NULL,NULL,'',NULL);";
//更新记录未已打印
strInsertSql += "UPDATE dbo.cb_DesignAlter SET IsPrint = 1 WHERE DesignAlterGuid = '" + DesignAlterGUID + "'";
InsertData(strInsertSql);

return DocGUID;
}
else
{
return "";
}
}
catch (Exception E)
{
return "";
}
}


将document文件保存成图片

     /// <summary>
/// 根据文档备份图片
/// </summary>
/// <param name="Doc"></param>
private void GenerateAndSavePicture(object param)
{
GenerateJPGThreadParam threadParam = (GenerateJPGThreadParam)param;
Document doc = threadParam.Doc;
string strSavePath = threadParam.SavePath;
string strFileName = threadParam.FileName;
//移除空白域
doc.MailMerge.DeleteFields();

//判断文件件是否存在
if (!Directory.Exists(strSavePath))
{
Directory.CreateDirectory(strSavePath);
}
//文件已存在,先删除
string strFullName = string.Format(@"{0}\\{1}", strSavePath, strFileName);
if (File.Exists(strFullName))
{
File.Delete(strFullName);
}

ImageSaveOptions iso = new ImageSaveOptions(SaveFormat.Jpeg);
iso.PrettyFormat = true;
doc.Save(strFullName, iso);
}

/// <summary>
/// 封装文档多线程的参数
/// </summary>
class GenerateJPGThreadParam
{
//文档
private Document _doc;

public Document Doc
{
get { return _doc; }
set { _doc = value; }
}

//文件名
private string _FileName;

public string FileName
{
get { return _FileName; }
set { _FileName = value; }
}

//保存路径
private string _SavePath;

public string SavePath
{
get { return _SavePath; }
set { _SavePath = value; }
}

}


生成并插入二维码

     private Document InsertQRCode(Document doc, String AlterCode)
{
Bitmap qrcode;
//获取外网地址
string strSql = "SELECT paramvalue FROM dbo.myBizParamOption WHERE ParamName = 'cb_OutNetAddress'";
string strOutNetAddress = CPQuery.From(strSql).ExecuteScalar<string>();

string strJpgFileName = string.Format(@"{0}/UpFiles/HTAlterLxh/{1}.jpg", strOutNetAddress, AlterCode);
qrcode = GenerateQRCodeMap(strJpgFileName, 50);

Shape shape = new Shape(doc, ShapeType.Image);
shape.ImageData.SetImage(qrcode);
shape.Width = 70;
shape.Height = 70;
shape.HorizontalAlignment = HorizontalAlignment.Left;

DocumentBuilder builder = new DocumentBuilder(doc);
builder.MoveToMergeField("QRCode");
builder.InsertNode(shape);

return doc;

}

/// <summary>
/// 生成二维码图片
/// </summary>
/// <param name="codeNumber">link</param>
/// <returns>二维码图片</returns>
private Bitmap GenerateQRCodeMap(string link, int size)
{
QRCodeEncoder qrEntity = new QRCodeEncoder();

qrEntity.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//二维码编码方式

qrEntity.QRCodeScale = 10;//每个小方格的宽度

qrEntity.QRCodeVersion = 4;//二维码版本号

qrEntity.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//纠错码等级

System.Drawing.Bitmap srcimage;
//动态调整二维码版本号,上限40,过长返回空白图片,编码后字符最大字节长度2953
while (true)
{
try
{
srcimage = qrEntity.Encode(link, System.Text.Encoding.UTF8);
break;
}
catch (IndexOutOfRangeException e)
{
if (qrEntity.QRCodeVersion < 40)
{
qrEntity.QRCodeVersion++;
}
else
{
srcimage = new Bitmap(size, size);
break;
}
}
}
//为生成的二维码图像裁剪白边并调整为请求的高度
return srcimage;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: