You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/DSWeb/Areas/CommMng/DAL/PDFHelper.cs

341 lines
15 KiB
C#

using iTextSharp.text.pdf;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using iTextSharp.text;
using iTextSharp.text.pdf;
using DSWeb.Common.DB;
using System.Data.Entity.Migrations;
using HcUtility.Comm;
using DSWeb.MvcShipping.DAL.MsInfoClient;
using DSWeb.MvcShipping.DAL.MsOpSeaeDAL;
using NPOI.OpenXmlFormats;
using DSWeb.MvcShipping.Models.MsOpSeae;
using NPOI.SS.Formula.Functions;
using System.Drawing;
namespace DSWeb.Areas.CommMng.DAL
{
public class PDFHelper
{
public Int32 width { get; set; } = 842;
public Int32 height { get; set; } = 595;
public PDFHelper()
{
}
public DBResult MakePdf_BillCheckOut(BillCheckOut_md head,string path)
{
var result = new DBResult();
var errorindex = 0.0;
try
{
var cdc = new CommonDataContext();
var markname = System.Environment.CurrentDirectory + $"\\temp{head.CHECKOUTNO}.jpg";
//var path = Server.MapPath("../../UploadFiles/MailFile"); "\\{head.CHECKOUTNO}.pdf";
string filename = path + "\\" + head.CHECKOUTNO + ".pdf";
string SaveUrlName = "../../UploadFiles/MailFile/" + head.CHECKOUTNO + ".pdf";
if (!File.Exists(filename))
{
FileStream newfile = File.Create(filename);
newfile.Close();
}
Document document = new Document(new iTextSharp.text.Rectangle(width, height), 50, 50, 20, 20);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));
document.Open();
// step 4: we add content to the document
//楷体字
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//simkai.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//方正舒体
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//FZSTK.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//方正姚体
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//FZYTK.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//仿宋体
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMFANG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//黑体
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文彩云
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STCAIYUN.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文仿宋
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STFANGSO.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文细黑
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STXIHEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文新魏
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STXINWEI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文行楷
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//STXINGKA.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//华文中宋
BaseFont bfComic = BaseFont.CreateFont("c://windows//fonts//STZHONGS.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//隶书
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMLI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//宋体&新宋体 (这种字体的输出不了.有问题)
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SIMSUN.TTC", BaseFont.NOT_EMBEDDED, BaseFont.NOT_EMBEDDED);
//宋体-方正超大字符集
//BaseFont bfComic = BaseFont.createFont("c://windows//fonts//SURSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//幼圆
//BaseFont bfComic = BaseFont.CreateFont("c://windows//fonts//SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
var companyinfo = cdc.company.FirstOrDefault(x => x.GID == head.CORPID);
var customerFullname = cdc.info_client.FirstOrDefault(x => x.SHORTNAME == head.CUSTOMERNAME).DESCRIPTION;
var stlinfo = MsInfoClientDAL.GetSTLNAME(head.CUSTOMERNAME, "海运出口", DateTime.Now.ToString("yyyy-MM-dd"), "");
var BodyList = cdc.BillCheckOut_Detail.Where(x => x.LINKGID == head.GID).ToList();
var firstbsno = BodyList[0].BSNO;
var firstopseae = cdc.v_op_bs.FirstOrDefault(x => x.BSNO == firstbsno);
var = firstopseae.OP;
var user = cdc.VW_user.FirstOrDefault(x => x.SHOWNAME == );
var baseinfo = BasicDataRefDAL.GetUserLinkRefList($" u.showname='{操作}'", firstopseae.SALECORPID);
//标题字体 黑色26
iTextSharp.text.Font title = new iTextSharp.text.Font(bfComic, 26, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLACK);
//公司名称 黑色加粗22
iTextSharp.text.Font companyname = new iTextSharp.text.Font(bfComic, 20, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLACK);
//表格抬头字体 黑色加粗12
iTextSharp.text.Font heads = new iTextSharp.text.Font(bfComic, 12, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLACK);
//内容文字字体 黑色11
iTextSharp.text.Font infos = new iTextSharp.text.Font(bfComic, 11, 0, iTextSharp.text.BaseColor.BLACK);
//抬头地址字体 黑色11 下划线
iTextSharp.text.Font address = new iTextSharp.text.Font(bfComic, 14, iTextSharp.text.Font.UNDERLINE, iTextSharp.text.BaseColor.BLACK);
//红色内容 红色11
iTextSharp.text.Font redinfos = new iTextSharp.text.Font(bfComic, 12, 0, iTextSharp.text.BaseColor.RED);
#region 条码号
BarCodeDrawing _Code39 = new BarCodeDrawing();
_Code39.Height = 50;
_Code39.Magnify = 1;
_Code39.ViewFont = new System.Drawing.Font("宋体", 13);
var = head.CHECKOUTNO;
System.Drawing.Image _codeImage = _Code39.GetCodeImage(, BarCodeDrawing.BarCodeDrawingModel.BarCodeDrawingNormal, true);
errorindex = 1;
System.IO.MemoryStream _Stream = new System.IO.MemoryStream();
errorindex = 1.1;
ImageConverter imgconv = new ImageConverter();
_codeImage.Save(_Stream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bytes = (byte[])imgconv.ConvertTo(_codeImage, typeof(byte[]));
Stream stream = new MemoryStream(bytes);
errorindex = 1.2;
//string markPath = System.Environment.CurrentDirectory + $"\\temp{条码号}.jpg";
//_codeImage.Save(markPath);
//_codeImage.Dispose();
iTextSharp.text.Image im = iTextSharp.text.Image.GetInstance(stream);
errorindex = 1.3;
im.SetAbsolutePosition(width - 280, height - 60 - 80);
errorindex = 1.4;
im.ScaleAbsolute(260, 40);
errorindex = 1.5;
//document.Add(im);
#endregion
#region 抬头
//公司标志图片放置在../../UploadFiles/MailFile/companyid.png
var = path + "\\" + companyinfo.GID + ".png";
iTextSharp.text.Image = iTextSharp.text.Image.GetInstance();
.SetAbsolutePosition(40, height - 60 - 8);
.ScaleAbsolute(160, 48);
//document.Add(公司标志);
var = new iTextSharp.text.Paragraph(companyinfo.FULLNAME, companyname);
.Alignment = iTextSharp.text.Element.ALIGN_CENTER;
.Leading = 24;
.Add(im);
.Add();
document.Add();
var = new iTextSharp.text.Paragraph(companyinfo.ENNAME, companyname);
.Alignment = iTextSharp.text.Element.ALIGN_CENTER;
.Leading = 24;
document.Add();
var = new iTextSharp.text.Paragraph(" " + companyinfo.PRTHEADXML5 + " ", address);
.Alignment = iTextSharp.text.Element.ALIGN_CENTER;
.Leading = 22;
document.Add();
errorindex = 2;
#endregion
var = new iTextSharp.text.Paragraph("领单申请书", title);
.Alignment = iTextSharp.text.Element.ALIGN_CENTER;
.Leading = 35;
document.Add();
var body = cdc.VW_BillCheckOut_Detail.Where(x => x.LINKGID == head.GID).ToList();
var newinfo1 = new iTextSharp.text.Paragraph($"客户名称:{customerFullname}", infos);
newinfo1.FirstLineIndent = 100;
newinfo1.Leading = 20;
document.Add(newinfo1);
var newinfo11 = new iTextSharp.text.Paragraph($"客户类型:{stlinfo.STLNAME} 联系人:{操作} 联系电话:{操作baseinfo[0].Tel} 邮件发出时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}", infos);
newinfo11.FirstLineIndent = 100;
newinfo11.Leading = 20;
document.Add(newinfo11);
//有效期至
var newinfo2 = new iTextSharp.text.Paragraph($"有效期自收到48小时内({DateTime.Now.AddDays(2).ToString("yyyy-MM-dd HH:mm")})", heads);
newinfo2.FirstLineIndent = 100;
newinfo2.Leading = 20;
document.Add(newinfo2);
var blankline = new iTextSharp.text.Paragraph($" ", infos);
//blankline.FirstLineIndent = 100;
blankline.Leading = 30;
document.Add(blankline);
PdfPTable table = new PdfPTable(4);
table.TotalWidth = 600f;
table.LockedWidth = true;
float[] widths = new float[] { 5f, 5f, 2f, 2f };//, 2f, 3f
table.SetWidths(widths);
table.AddCell(new Phrase("提单号", heads));
table.AddCell(new Phrase("船名", heads));
table.AddCell(new Phrase("航次", heads));
//table.AddCell(new Phrase("签单方式", heads));
//table.AddCell(new Phrase("提单签入日期", heads));
table.AddCell(new Phrase("二次改单", heads));
var bsnolist = body.Select(s => s.BSNO).ToList();
//var bsnolistStr = "'" + string.Join("','", bsnolist) + "'";
var billlist = new List<MsOpSeae>();
foreach (var bsno in bsnolist)
{
var rec = MsOpSeaeDAL.GetData($"B.BSNO='{bsno}'");
billlist.Add(rec);
}
errorindex = 3;
foreach (var item in body)
{
var MBLNO = new iTextSharp.text.Paragraph(item.MBLNO, infos);
table.AddCell(MBLNO);
var VESSEL = new iTextSharp.text.Paragraph(item.VESSEL, infos);
table.AddCell(VESSEL);
var VOYNO = new iTextSharp.text.Paragraph(item.VOYNO, infos);
table.AddCell(VOYNO);
//var bill = billlist.First(x => x.BSNO == item.BSNO);
//var ISSUETYPE = new iTextSharp.text.Paragraph(bill.ISSUETYPE, infos);
//table.AddCell(ISSUETYPE);
//var CHECKINDATE = new iTextSharp.text.Paragraph(bill.ISSUEDATE, infos);
//table.AddCell(CHECKINDATE);
var workloglist = cdc.VW_BILL_BLISSUE_WORKLOG.Where(x => x.BSNO == item.BSNO).ToList();
var = " ";
var = 0;
if (workloglist != null && workloglist.Count > 0)
{
= workloglist.Where(x => x.ACTNAME == "提单签入").ToList().Count();
if ( > 1)
{
= ((DateTime)workloglist.Where(x => x.ACTNAME == "提单签入").Select(s => s.OPDATE).Max()).ToString("yyyy-MM-dd");
}
}
var ECGD = new iTextSharp.text.Paragraph(, infos);
table.AddCell(ECGD);
//newinfo.FirstLineIndent = 100;
//newinfo.Leading = 30;
//document.Add(newinfo);
}
errorindex = 4;
document.Add(table);
//感谢
var newinfo3 = new iTextSharp.text.Paragraph($"感谢您对我司的支持与信任,聚焦专注,用心服务", heads);
newinfo3.FirstLineIndent = 100;
newinfo3.Leading = 30;
document.Add(newinfo3);
var footer = new iTextSharp.text.Paragraph("签字 ", infos);
//footer.FirstLineIndent = 150;
footer.Leading = 30;
footer.Alignment = iTextSharp.text.Element.ALIGN_RIGHT;
document.Add(footer);
var footer2 = new iTextSharp.text.Paragraph($"时间 ", infos);
//footer.FirstLineIndent = 150;
footer2.Leading = 30;
footer2.Alignment = iTextSharp.text.Element.ALIGN_RIGHT;
document.Add(footer2);
document.Close();
//File.Delete(markPath);
head.MAILPDFURL = SaveUrlName;
cdc.BillCheckOut.AddOrUpdate(head);
cdc.SaveChanges();
errorindex = 5;
result.OK(filename);
}
catch (Exception ex) {
var innermsg = "";
if (ex.InnerException != null) {
if (ex.InnerException.Message != null) {
innermsg = ex.InnerException.Message;
}
}
result.SetErrorInfo($"PDFHelper{errorindex}:"+ex.Message+$"[{innermsg}]");
}
return result;
}
}
}