#星空云诊所#:云诊所-星空深入解析套打二开实现所能解决的一些场景

报表及打印是二开中需求最旺盛的,因为几乎每家客户即使标准交互,但报表及打印说不定都会有二开需求,目前有很多开发人员咨询复杂打印的实现,比如有些单据提列表中很多客户希望能打印出相关一些明细内容,有很多如果完全通过配置可能实现不了,那只有通过二开套打插件来实现各种复杂场景,下面就针对套打中如果具体实现进行详细解析,并针对可以干预地方做重点解析,希望能帮助更多开发小伙伴。
一、套打模板一定是针对具体某个要打印的套打模板,套打模板在制作时,数据源需要指向某个单据体,注意打印时需要选择对套打模板。
二、 对于批量打印,注意最好分页,否则预览时可能会出不来。
1. 打印里分页的实现代码如下:
//单据内码
//单据内码所有分录内码
int pageindex = this.View.GetEntryState("F_batchprintlist").CurrentPageIndex;
int rows = this.View.GetEntryState("F_batchprintlist").PageRows;
// int pagecount = this.View.Model.GetEntryRowCount("F_batchprintlist") / rows;
var num = this.View.Model.GetEntryRowCount("F_batchprintlist");//得到记录总数
var totalPage = 0;
var pageSize = rows;//一页显示pageSize条记录
//计算总页数
if (num / pageSize > Convert.ToInt32(num / pageSize))
{
totalPage = Convert.ToInt32(num / pageSize) + 1;
}
else
{
totalPage = Convert.ToInt32(num / pageSize);
}
//当前页数
var currentPage = pageindex+1;
//获取当前页第一条、最后一条记录的行号
int startRow = (currentPage - 1) * pageSize + 1;
int endRow = currentPage * pageSize;
endRow = (endRow > num) ? num : endRow;
2. 批量套打实现具体过程:
List<PrintJob> jobs = new List<PrintJob>();
for (int i = startRow-1; i < endRow; i++)
{
currrecordkey = this.View.Model.GetEntryPKValue("F_batchprintlist", i).ToString();
PrintJobItem print = new PrintJobItem();
print.BillId = this.View.Model.GetPKValue().ToString();
print.FormId = this.View.BillBusinessInfo.GetForm().Id;//业务对象ID
print.TemplateId = GetSingleNoteID();//套打模板
List<string> lst = new List<string>();
lst.Add(currrecordkey);
print.SelectedEtyIds = lst;
List<PrintJobItem> printlist = new List<PrintJobItem>();
printlist.Add(print);
PrintJob pJob = new PrintJob();
pJob.Id = Guid.NewGuid().ToString();
pJob.FormId = this.View.BillBusinessInfo.GetForm().Id;
pJob.PrintJobItems = printlist;
jobs.Add(pJob);
}
string key = Guid.NewGuid().ToString();
this.View.Session[key] = jobs;
JSONObject jsonObj = new JSONObject();
jsonObj.Put("pageID", this.View.PageId);
jsonObj.Put("printJobId", key);
jsonObj.Put("action", "preview");
string action = JSAction.printPreview;
jsonObj.Put("printerAddress", "");//可以指定打印机地址也可以不指定.
this.View.AddAction(action, jsonObj);
注意:必须要获取套打模板,获取套打模板方法:
/// 获取账表套打设置的模板ID
/// </summary>
/// <returns></returns>
public string GetSingleNoteID()
{
var templateID = string.Empty;
if (this.SettingInfo != null)
{
foreach (Dictionary<string, object> obj in this.SettingInfo)
#星空云诊所#:云诊所-星空深入解析套打二开实现所能解决的一些场景
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



