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.

341 lines
15 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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