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.

220 lines
9.7 KiB
C#

2 months ago
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TradeManageNew.LabelWebReference;
using System.Net;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
namespace TradeManageNew
{
public class UpsLabel
{
public static string AccessLicenseNumber = "";
public static string Username = "";
public static string Password = "";
public static string ShipperNumber = "";
public string GetLabel(string trackcode,out string error)
{
try
{
LBRecovery lb_recovery = new LBRecovery();
LabelRecoveryRequest label_recovery_request = new LabelRecoveryRequest();
UPSSecurity upss = new UPSSecurity();
UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
upssSvcAccessToken.AccessLicenseNumber = AccessLicenseNumber;// "5D83BCCDEFB9A5D5";
upss.ServiceAccessToken = upssSvcAccessToken;
UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
upssUsrNameToken.Username = Username;// "Karmasfar";
upssUsrNameToken.Password = Password;// "Km28862820";
upss.UsernameToken = upssUsrNameToken;
lb_recovery.UPSSecurityValue = upss;
RequestType request = new RequestType();
label_recovery_request.Request = request;
label_recovery_request.TrackingNumber = trackcode;// "1ZRE8474YW96563012";
lb_recovery.Url = "https://onlinetools.ups.com/webservices/LBRecovery";
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
LabelRecoveryResponse label_recovery_response = lb_recovery.ProcessLabelRecovery(label_recovery_request);
var md = label_recovery_response.Items[0];
// Base64StringToImage(label_recovery_response.Items[0]);
LabelResultsType umd = (LabelResultsType)label_recovery_response.Items[0];
//image.LabelImage
string LabelPath = AppDomain.CurrentDomain.BaseDirectory + "attached/ups/";// @"F:\褚明杰\fedex\ShipService_v2014_cs\cs\ShipWebServiceClient\Express\International\ShipWebServiceClient\bin\Release\pdf\";
Random rd = new Random();
String LabelFileName = LabelPath + DateTime.Now.ToString("yyyyMMddHHmmssfff")+rd.Next(100,999).ToString() + ".png";
String LabelFileName2 = LabelPath + trackcode + ".png";
Base64StringToImage(umd.LabelImage.GraphicImage, LabelFileName);
using (FileStream file = new FileStream(LabelFileName, FileMode.Open))
{
Image img = Image.FromStream(file);
UpsLabel obj3 = new UpsLabel();
var img2 = obj3.RotateImg(img, 90);
img2.Save(LabelFileName2);
}
// Console.WriteLine("Image Base64:\n " + image.GraphicImage);
error = "";
return "ok";
// Console.ReadKey();
}
catch (System.Web.Services.Protocols.SoapException ex)
{
//Console.WriteLine("");
//Console.WriteLine("---------LBRecovery Web Service returns error----------------");
//Console.WriteLine("---------\"Hard\" is user error \"Transient\" is system error----------------");
//Console.WriteLine("SoapException Message= " + ex.Message);
//Console.WriteLine("");
//Console.WriteLine("SoapException Category:Code:Message= " + ex.Detail.LastChild.InnerText);
//Console.WriteLine("");
//Console.WriteLine("SoapException XML String for all= " + ex.Detail.LastChild.OuterXml);
//Console.WriteLine("");
//Console.WriteLine("SoapException StackTrace= " + ex.StackTrace);
//Console.WriteLine("-------------------------");
//Console.WriteLine("");
error = "SoapException Message= " + ex.Message + "SoapException Category:Code:Message= " + ex.Detail.LastChild.InnerText+"SoapException XML String for all= " + ex.Detail.LastChild.OuterXml;
return "";
}
catch (Exception ex)
{
//Console.WriteLine("");
//Console.WriteLine("-------------------------");
//Console.WriteLine(" General Exception= " + ex.Message);
//Console.WriteLine(" General Exception-StackTrace= " + ex.StackTrace);
//Console.WriteLine("-------------------------");
error = "General Exception= " + ex.Message + "General Exception-StackTrace= " + ex.StackTrace;
return "";
}
}
public class UPSModel
{
public Object LabelImage { get; set; }
public string TrackingNumber { get; set; }
}
public class LabelImage
{
public string GraphicImage { get; set; }
}
/// <summary>
/// 把base64字符串转化为图片传入base64字符串
/// </summary>
/// <param name="strbase64"></param>
/// <returns></returns>
public static void Base64StringToImage(string strbase64,string path)
{
try
{
strbase64 = strbase64.Replace(' ', '+');
System.IO.MemoryStream stream = new System.IO.MemoryStream(Convert.FromBase64String(strbase64));
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
byte[] b = stream.ToArray();
//byte[] b = stream.GetBuffer();
fs.Write(b, 0, b.Length);
fs.Close();
}
catch (Exception ex)
{
}
}
/// <summary>
/// 根据角度旋转图标
/// </summary>
/// <param name="img"></param>
public Image RotateImg(Image img, float angle)
{
//通过Png图片设置图片透明修改旋转图片变黑问题。
int width = img.Width;
int height = img.Height;
//角度
Matrix mtrx = new Matrix();
mtrx.RotateAt(angle, new PointF((width / 2), (height / 2)), MatrixOrder.Append);
//得到旋转后的矩形
GraphicsPath path = new GraphicsPath();
path.AddRectangle(new RectangleF(0f, 0f, width, height));
RectangleF rct = path.GetBounds(mtrx);
//生成目标位图
Bitmap devImage = new Bitmap((int)(rct.Width), (int)(rct.Height));
Graphics g = Graphics.FromImage(devImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//计算偏移量
Point Offset = new Point((int)(rct.Width - width) / 2, (int)(rct.Height - height) / 2);
//构造图像显示区域:让图像的中心与窗口的中心点一致
Rectangle rect = new Rectangle(Offset.X, Offset.Y, (int)width, (int)height);
Point center = new Point((int)(rect.X + rect.Width / 2), (int)(rect.Y + rect.Height / 2));
g.TranslateTransform(center.X, center.Y);
g.RotateTransform(angle);
//恢复图像在水平和垂直方向的平移
g.TranslateTransform(-center.X, -center.Y);
g.DrawImage(img, rect);
//重至绘图的所有变换
g.ResetTransform();
g.Save();
g.Dispose();
path.Dispose();
return devImage;
}
/// <summary>
/// 第二种方法
/// </summary>
/// <param name="b"></param>
/// <param name="angle"></param>
/// <returns></returns>
public Image RotateImg2(Image b, float angle)
{
angle = angle % 360; //弧度转换
double radian = angle * Math.PI / 180.0;
double cos = Math.Cos(radian);
double sin = Math.Sin(radian);
//原图的宽和高
int w = b.Width;
int h = b.Height;
int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));
int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));
//目标位图
Image dsImage = new Bitmap(W, H);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//计算偏移量
Point Offset = new Point((W - w) / 2, (H - h) / 2);
//构造图像显示区域:让图像的中心与窗口的中心点一致
Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);
Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
g.TranslateTransform(center.X, center.Y);
g.RotateTransform(360 - angle);
//恢复图像在水平和垂直方向的平移
g.TranslateTransform(-center.X, -center.Y);
g.DrawImage(b, rect);
//重至绘图的所有变换
g.ResetTransform();
g.Save();
g.Dispose();
//dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
return dsImage;
}
}
}