|
|
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;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
} |