الگوهای طراحی برنامه نویسی شیءگرا
توسعه وب
دات نت فریم ورک
دبلیو پی اف و سیلور لایت
سی و مشتقات
کتابهای رایگان
متفرقه
محیطهای مجتمع توسعه
مرورگرها
پی اچ پی
using Microsoft.AspNetCore.Mvc; namespace AngularTemplateDrivenFormsLab.Controllers { [Route("api/[controller]")] public class ReportsController : Controller { [HttpGet("[action]")] public IActionResult GetPdfReport() { return File(virtualPath: "~/assets/sample.pdf", contentType: "application/pdf", fileDownloadName: "sample.pdf"); } } }
import { Injectable } from "@angular/core"; import { Observable } from "rxjs/Observable"; import { HttpClient } from "@angular/common/http"; @Injectable() export class DownloadPdfDataService { constructor(private httpClient: HttpClient) { } public getReport(): Observable<Blob> { return this.httpClient.get("/api/Reports/GetPdfReport", { responseType: "blob" }); } }
img-src 'self' data: blob: default-src 'self' blob: object-src 'self' blob:
import { DownloadPdfDataService } from "./../download-pdf-data.service"; import { WindowRefService } from "./../../core/window.service"; import { Component, OnInit } from "@angular/core"; import { DomSanitizer, SafeResourceUrl } from "@angular/platform-browser"; @Component({ templateUrl: "./view-pdf.component.html", styleUrls: ["./view-pdf.component.css"] }) export class ViewPdfComponent implements OnInit { private nativeWindow: Window; private pdfBlobUrl: string; sanitizedPdfBlobResourceUrl: SafeResourceUrl; constructor(private downloadService: DownloadPdfDataService, private windowRefService: WindowRefService, private sanitizer: DomSanitizer) { } ngOnInit() { this.nativeWindow = this.windowRefService.nativeWindow; this.downloadService.getReport().subscribe(pdfDataBlob => { console.log("pdfDataBlob", pdfDataBlob); const urlCreator = this.nativeWindow.URL; this.pdfBlobUrl = urlCreator.createObjectURL(pdfDataBlob); console.log("pdfBlobUrl", this.pdfBlobUrl); this.sanitizedPdfBlobResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.pdfBlobUrl); }); } }
<h1>Display PDF Files</h1> <div *ngIf="sanitizedPdfBlobResourceUrl"> <h4>using iframe</h4> <iframe width="100%" height="600" [attr.src]="sanitizedPdfBlobResourceUrl" type="application/pdf"></iframe> <h4>using object</h4> <object [attr.data]="sanitizedPdfBlobResourceUrl" type="application/pdf" width="100%" height="100%"></object> <h4>usin embed</h4> <embed [attr.src]="sanitizedPdfBlobResourceUrl" type="application/pdf" width="100%" height="100%"> </div>
this.sanitizedPdfBlobResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.pdfBlobUrl);
printPdf() { const iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.src = this.pdfBlobUrl; document.body.appendChild(iframe); iframe.contentWindow.print(); }
showPdf() { this.nativeWindow.open(this.pdfBlobUrl); }
downloadPdf() { const fileName = "test.pdf"; const anchor = document.createElement("a"); anchor.style.display = "none"; anchor.href = this.pdfBlobUrl; anchor.download = fileName; document.body.appendChild(anchor); anchor.click(); }
PM> Install-Package structuremap PM> Install-Package Castle.Core
using System; namespace AOP02.Core { [AttributeUsage(AttributeTargets.Method)] public class CacheMethodAttribute : Attribute { public CacheMethodAttribute() { // مقدار پیش فرض SecondsToCache = 10; } public double SecondsToCache { get; set; } } }
using System; using System.Threading; using AOP02.Core; namespace AOP02.Services { public interface IMyService { string GetLongRunningResult(string input); } public class MyService : IMyService { [CacheMethod(SecondsToCache = 60)] public string GetLongRunningResult(string input) { Thread.Sleep(5000); // simulate a long running process return string.Format("Result of '{0}' returned at {1}", input, DateTime.Now); } } }
using System; using System.Web; using Castle.DynamicProxy; namespace AOP02.Core { public class CacheInterceptor : IInterceptor { private static object lockObject = new object(); public void Intercept(IInvocation invocation) { cacheMethod(invocation); } private static void cacheMethod(IInvocation invocation) { var cacheMethodAttribute = getCacheMethodAttribute(invocation); if (cacheMethodAttribute == null) { // متد جاری توسط ویژگی کش شدن مزین نشده است // بنابراین آنرا اجرا کرده و کار را خاتمه میدهیم invocation.Proceed(); return; } // دراینجا مدت زمان کش شدن متد از ویژگی کش دریافت میشود var cacheDuration = ((CacheMethodAttribute)cacheMethodAttribute).SecondsToCache; // برای ذخیره سازی اطلاعات در کش نیاز است یک کلید منحصربفرد را // بر اساس نام متد و پارامترهای ارسالی به آن تهیه کنیم var cacheKey = getCacheKey(invocation); var cache = HttpRuntime.Cache; var cachedResult = cache.Get(cacheKey); if (cachedResult != null) { // اگر نتیجه بر اساس کلید تشکیل شده در کش موجود بود // همان را بازگشت میدهیم invocation.ReturnValue = cachedResult; } else { lock (lockObject) { // در غیر اینصورت ابتدا متد را اجرا کرده invocation.Proceed(); if (invocation.ReturnValue == null) return; // سپس نتیجه آنرا کش میکنیم cache.Insert(key: cacheKey, value: invocation.ReturnValue, dependencies: null, absoluteExpiration: DateTime.Now.AddSeconds(cacheDuration), slidingExpiration: TimeSpan.Zero); } } } private static Attribute getCacheMethodAttribute(IInvocation invocation) { var methodInfo = invocation.MethodInvocationTarget; if (methodInfo == null) { methodInfo = invocation.Method; } return Attribute.GetCustomAttribute(methodInfo, typeof(CacheMethodAttribute), true); } private static string getCacheKey(IInvocation invocation) { var cacheKey = invocation.Method.Name; foreach (var argument in invocation.Arguments) { cacheKey += ":" + argument; } // todo: بهتر است هش این کلید طولانی بازگشت داده شود // کار کردن با هش سریعتر خواهد بود return cacheKey; } } }
using System; using AOP02.Core; using AOP02.Services; using Castle.DynamicProxy; using StructureMap; namespace AOP02 { class Program { static void Main(string[] args) { ObjectFactory.Initialize(x => { var dynamicProxy = new ProxyGenerator(); x.For<IMyService>() .EnrichAllWith(myTypeInterface => dynamicProxy.CreateInterfaceProxyWithTarget(myTypeInterface, new CacheInterceptor())) .Use<MyService>(); }); var myService = ObjectFactory.GetInstance<IMyService>(); Console.WriteLine(myService.GetLongRunningResult("Test")); Console.WriteLine(myService.GetLongRunningResult("Test")); } } }
Result of 'Test' returned at 2013/04/09 07:19:43 Result of 'Test' returned at 2013/04/09 07:19:43
x.For<IMyInterface>().HybridHttpOrThreadLocalScoped().Use<MyClass>();
203 00:16:38,731 --> 00:16:41,325 <i>Happy Christmas, your arse I pray God it's our last</i>
203 00:16:38,731 --> 00:16:41,325 <i>Happy Christmas, your arse I pray God it's our last</i>
private readonly static Regex regex_srt = new Regex(@"(?<sequence>\d+)\r\n(?<start>\d{2}\:\d{2}\:\d{2},\d{3}) --\> " + @"(?<end>\d{2}\:\d{2}\:\d{2},\d{3})\r\n(?<text>[\s\S]*?)\r\n\r\n", RegexOptions.Compiled); public string ToUnicode(string lines) { string subtitle= regex_srt.Replace(lines,delegate(Match m) { string text = m.Groups["text"].Value; //1.remove tags text = CleanScriptTags(text); //2.replace letters PersianReshape reshaper = new PersianReshape(); text = reshaper.reshape(text); string[] splitedlines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); text = ""; foreach (string line in splitedlines) { //3.reverse tags text += ReverseText(reshaper.reshape(line))+Environment.NewLine ; } return string.Format("{0}\r\n{1} --> {2}\r\n", m.Groups["sequence"], m.Groups["start"].Value, m.Groups["end"]) + text + Environment.NewLine+Environment.NewLine ; } ); return subtitle; }
m.Groups["text"].Value
private static readonly Regex regex_tags = new Regex("<.*?>", RegexOptions.Compiled); private string CleanScriptTags(string html) { return regex_tags.Replace(html, string.Empty); }
PersianReshape reshaper = new PersianReshape(); text = reshaper.reshape(text); string[] splitedlines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); text = ""; foreach (string line in splitedlines) { //3.reverse tags text += ReverseText(reshaper.reshape(line))+Environment.NewLine ; }
Dictionary<int ,int> letters=new Dictionary<int, int>(); //0=0x0 ,1=1x0 ,2=0x1 ,3=1x1 private void FillPrimaryTable() { //آ letters.Add(1570, 65153); //ا letters.Add(1575, 65166); //أ letters.Add(1571, 65155); //ب letters.Add(1576, 65167); //ت letters.Add(1578, 65173); //ث letters.Add(1579, 65177); //ج letters.Add(1580, 65181); ..... } Dictionary<int,byte> specialchars=new Dictionary<int, byte>(); private void SetSpecialChars() { //آ specialchars.Add(1570, 0); //ا specialchars.Add(1575, 0); //د2 specialchars.Add(1583, 1); //ذ2 specialchars.Add(1584, 1); //ر2 specialchars.Add(1585, 1); //ز2 specialchars.Add(1586, 1); //ژ specialchars.Add(1688, 1); //و2 specialchars.Add(1608, 1); //أ specialchars.Add(1571, 1); }
PersianReshape reshaper = new PersianReshape(); text = reshaper.reshape(text);
//3.reverse tags text = ReverseText(text);
string[] splitedlines = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); text = ""; foreach (string line in splitedlines) { //3.reverse tags text += ReverseText(reshaper.reshape(line))+Environment.NewLine ; }
private string Reverse(string text) { return Reverse(text,0,text.Length); } private string Reverse(string text,int start,int end) { if (end < start) return text; string reverseText = ""; for (int i = end-1; i >=start; i--) { reverseText += text[i]; } return reverseText; }
private string ReverseText(string text) { char[] chararray = text.ToCharArray(); string reverseText = ""; bool prefixcomp = false; bool postfixcomp = false; string prefix = ""; string postfix = ""; #region get prefix symbols for (int i = 0; i < chararray.Length; i++) { if (!prefixcomp) { char ch =(char) chararray.GetValue(i) ; if (ch< 130) { prefix += chararray.GetValue(i); } else { prefixcomp = true; break; } } } #endregion }
#region get postfix symbols for (int i = chararray.Length - 1; i >-1 ; i--) { if (!postfixcomp && prefix.Length!=text.Length) { char ch = (char)chararray.GetValue(i); if (ch < 130) { postfix += chararray.GetValue(i); } else { postfixcomp = true; break; } } } #endregion
#region reverse text reverseText = Reverse(text, prefix.Length, text.Length-postfix.Length); reverseText = unTagetdLettersRegex.Replace(reverseText, delegate(Match m) { return Reverse(m.Value); }); #endregion
private static readonly Regex unTagetdLettersRegex = new Regex(@"[A-Za-z0-9]+", RegexOptions.Compiled);
return prefix+ reverseText+postfix;
private static readonly Regex unTagetdLettersRegex = new Regex(@"[A-Za-z0-9]+", RegexOptions.Compiled); private string ReverseText(string text) { char[] chararray = text.ToCharArray(); string reverseText = ""; bool prefixcomp = false; bool postfixcomp = false; string prefix = ""; string postfix = ""; #region get prefix symbols for (int i = 0; i < chararray.Length; i++) { if (!prefixcomp) { char ch =(char) chararray.GetValue(i) ; if (ch< 130) { prefix += chararray.GetValue(i); } else { prefixcomp = true; break; } } } #endregion #region get postfix symbols for (int i = chararray.Length - 1; i >-1 ; i--) { if (!postfixcomp && prefix.Length!=text.Length) { char ch = (char)chararray.GetValue(i); if (ch < 130) { postfix += chararray.GetValue(i); } else { postfixcomp = true; break; } } } #endregion #region reverse text reverseText = Reverse(text, prefix.Length, text.Length-postfix.Length); reverseText = unTagetdLettersRegex.Replace(reverseText, delegate(Match m) { return Reverse(m.Value); }); #endregion return prefix+ reverseText+postfix; }
return string.Format("{0}\r\n{1} --> {2}\r\n", m.Groups["sequence"], m.Groups["start"].Value, m.Groups["end"]) + text + Environment.NewLine+Environment.NewLine ;
//1.remove tags text = CleanScriptTags(text);
text =StringUtils.ConvertToMultiLine(text);
namespace Utils { public static class StringUtils { public static string ConvertToMultiLine(String text, int min = 30, int max = 40) { if (text.Trim() == "") return text; string[] words = text.Split(new string[] { " " }, StringSplitOptions.None); string text1 = ""; string text2 = ""; foreach (string w in words) { if (text1.Length < min) { if (text1.Length == 0) { text1 = w; continue; } if (w.Length + text1.Length <= max) text1 += " " + w; } else text2 += w + " "; } text1 = text1.Trim(); text2 = text2.Trim(); if (text2.Length > 0) { text1 += Environment.NewLine + ConvertToMultiLine(text2, min, max); } return text1; } } }
fn add(x: i32, y: i32) -> i32 { let sum = x + y; sum } fn main() { let a = 5; let b = 3; let result = add(a, b); println!("The sum is: {}", result); }
use std::rc::Rc; #[derive(Debug)] struct LargeData { data: Vec<i32>, } impl LargeData { fn new(size: usize) -> LargeData { LargeData { data: vec![0; size], } } } fn main() { let large_data = Rc::new(LargeData::new(1_000_000)); let shared_data1 = Rc::clone(&large_data); let shared_data2 = Rc::clone(&large_data); println!("{:?}", shared_data1); println!("{:?}", shared_data2); }
[DataContract] public class Employee { [DataMember] public string Name { get; set; } [DataMember] public Employee Manager { get; set; } }
[DataContract] public class Department { [DataMember] public string DeptName { get; set; } [DataMember] public List<Employee> Staff { get; set; } }
[ServiceContract] public interface IDepartmentService { [OperationContract] Department GetOneDepartment(); }
public class DepartmentService : IDepartmentService { public Department GetOneDepartment() { List<Employee> listOfEmployees = new List<Employee>(); var masoud = new Employee() { Name = "Masoud" }; var saeed = new Employee() { Name = "Saeed", Manager = masoud }; var peyman = new Employee() { Name = "Peyman", Manager = saeed }; var mostafa = new Employee() { Name = "Mostafa", Manager = saeed }; return new Department() { DeptName = "IT", Staff = new List<Employee>() { masoud, saeed, peyman, mostafa } }; } }
class Program { static void Main( string[] args ) { DepartmentServiceClient client = new DepartmentServiceClient(); var result = client.GetOneDepartment(); WriteDataToFile( result ); Console.ReadKey(); } private static void WriteDataToFile( Department data ) { DataContractSerializer dcs = new DataContractSerializer( typeof( Department ) ); var ms = new MemoryStream(); dcs.WriteObject( ms, data ); ms.Seek( 0, SeekOrigin.Begin ); var sr = new StreamReader( ms ); var xml = sr.ReadToEnd(); string filePath = @"d:\\data.xml"; if ( !File.Exists( filePath ) ) { File.Create( filePath ); } using ( TextWriter writer = new StreamWriter( filePath ) ) { writer.Write( xml ); } }
<Department xmlns="http://schemas.datacontract.org/2004/07/Service" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Name>IT</Name> <Staff> <Employee> <Manager i:nil="true"/> <Name>Masoud</Name> </Employee> <Employee> <Manager> <Manager i:nil="true"/> <Name>Masoud</Name> </Manager> <Name>Saeed</Name> </Employee> <Employee> <Manager> <Manager> <Manager i:nil="true"/> <Name>Masoud</Name> </Manager> <Name>Saeed</Name> </Manager> <Name>Peyman</Name> </Employee> <Employee> <Manager> <Manager> <Manager i:nil="true"/> <Name>Masoud</Name> </Manager> <Name>Saeed</Name> </Manager> <Name>Mostafa</Name> </Employee> </Staff> </Department>
[DataContract( IsReference = true )] public class Employee { [DataMember] public string Name { get; set; } [DataMember] public Employee Manager { get; set; } }
<Department xmlns="http://schemas.datacontract.org/2004/07/Service" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Name>IT</Name> <Staff> <Employee z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> <Manager i:nil="true"/> <Name>Masoud</Name> </Employee> <Employee z:Id="i2" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> <Manager z:Ref="i1"/> <Name>Saeed</Name> </Employee> <Employee z:Id="i3" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> <Manager z:Ref="i2"/> <Name>Peyman</Name> </Employee> <Employee z:Id="i4" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> <Manager z:Ref="i2"/> <Name>Mostafa</Name> </Employee> </Staff> </Department>