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#

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