「C# 檔案不落地在記憶體操作」筆記
===
## 下載 URL 圖檔落地
```csharp=
using (WebClient webClient_ = new WebClient())
{
webClient_.DownloadFile(imageURL, fileName);
}
```
## 下載 URL 圖檔到記憶體
```csharp=
using (WebClient webClient_ = new WebClient())
{
byte[] data_ = webClient_.DownloadData(imageURL);
MemoryStream mem_= new MemoryStream(data_);
}
```
## 寫入 PDF 檔案落地
```csharp=
using (FileStream wfs = new FileStream(filePath, FileMode.OpenOrCreate))
{
PdfWriter wr_ = PdfWriter.GetInstance(_doc, wfs);
_doc.Open();
float[] clos = new float[] { 40, 40, 40 };// 寬度
PdfPTable tablerow1 = new PdfPTable(clos);
foreach (string t in title)
{
PdfPCell cell = new PdfPCell(new Paragraph(t))
{
MinimumHeight = 4f
};
tablerow1.AddCell(cell);
}
List<string> list = new List<string>()
{
"ABC",
"cde",
"FgH"
};
foreach (var d in list)
{
tablerow1.AddCell(new PdfPCell(image, true));
tablerow1.AddCell(new PdfPCell(new Paragraph(d + d)));
tablerow1.AddCell(new PdfPCell(new Paragraph(d)));
}
_doc.Add(tablerow1);//將表格添加到pdf文檔中
_doc.Close();//關閉
wr_.Close();
wfs.Close();
}
```
## 寫入 PDF 檔案到記憶體
```csharp=
using (MemoryStream mem_ = new MemoryStream())
{
PdfWriter wr_ = PdfWriter.GetInstance(_doc, mem_);
_doc.Open();
float[] clos = new float[] { 40, 40, 40 };// 寬度
PdfPTable tablerow1 = new PdfPTable(clos);
foreach (string t in title)
{
PdfPCell cell = new PdfPCell(new Paragraph(t))
{
MinimumHeight = 4f
};
tablerow1.AddCell(cell);
}
List<string> list = new List<string>()
{
"ABC",
"cde",
"FgH"
};
foreach (var d in list)
{
tablerow1.AddCell(new PdfPCell(image, true));
tablerow1.AddCell(new PdfPCell(new Paragraph(d + d)));
tablerow1.AddCell(new PdfPCell(new Paragraph(d)));
}
_doc.Add(tablerow1);//將表格添加到pdf文檔中
_doc.Close();//關閉
wr_.Close();
return mem_.ToArray();
}
```
如果 MemoryStream 要再使用,必須先轉成 byte[],之後再宣告 MemoryStream 來使用
```csharp=
Attachment a_ = new Attachment(new MemoryStream(ms_.ToArray()), ct);
```
透過 new MemoryStream(ms_.ToArray()) 後,Attachment a_ 才能真正取的檔案內容
###### tags: `工作紀錄`