private string GetWebresourceFile(string url)
{
WebRequest request = WebRequest.Create(url);
request.Timeout = 10000;
WebResponse response = request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream, System.Text.Encoding.UTF8);
string SourceCode = sr.ReadToEnd();
resStream.Close();
sr.Close();
return SourceCode;
}
myAdBanner
2014年1月7日 星期二
抓取RSS分析
抓取網頁函數
2013年11月7日 星期四
獲得當前網頁中的所有鏈結
當在一個文本框中輸入網址單擊按鈕後,把當前這個網頁的所有鏈結保存到文本框中顯示出來!
private void btnScrape_Click(object sender, EventArgs e)
{
string strHttpSource;
if (UrlIsValid())
{
// 取得一個包含網頁的程式源代碼的字串。請進一步查看 GetHttpStream()
// 與 ConvertStreamToString() 這兩個自訂函式。
try
{
strHttpSource = ConvertStreamToString(GetHttpStream(txtURL.Text));
}
catch (Exception exp)
{
// 將文字設定成 exp.Message 以便顯示於被調用的函數中所設定的自定義錯誤資訊。
MessageBox.Show(exp.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
string strRegExPattern;
// 將用戶所輸入的網址(URL)賦給一個變數。
strUrlEntered = txtURL.Text.Trim();
// 取得功能變數名稱以便於不同的地方使用之。最好是在 Click 事件處理函數中
// 設定此值,如此一來,顯示於 ListView 控制項當中的專案會固定與正確
// 的網功能變數名稱稱相關聯。如果此值是在其他地方賦值,用戶將能夠更改域
// 名並且接著在 ListView 當中雙擊某個專案,此舉將會導致該項目
// 所提取者是一個無效的 URL。
string[] astrDomain = Regex.Split(strUrlEntered, "/");
// 陣列中的第一個元素[0] 是 "http:" ,第三個元素則是實際的功能變數名稱。
strDomain = astrDomain[0] + "//" + astrDomain[2];
if (optLinks.Checked)
{
ShowStatusIndicators("正在鏈結到網頁以便擷取出鏈結,請稍待。");
lvwLinks.Items.Clear();
// 此處所使用的規則運算式用來剖析一個 HTML anchor
// (例如: Microsoft ),
// 說明如下:
//
// ]+ 任何字元的一或多個比對,除了位於中刮號中者以外。
// ) 定義一個子字串之群組的結尾處。
// ""? 零或多個引號(逸出)。
// > 于 HTML anchor 中緊接著完全相同的文字。
// (.+) 比對任何字元的一個群組:也就是 anchor 文字。
// 與 HTML anchor 之結尾標記完全相同的文字。
//
// 請注意:如果您要在 RegEx 測試器中試驗這些規則
// 運算式模式,請確定您沒有逸出雙引號。
strRegExPattern = @"]+)""?>(.+)";
}
else
{
ShowStatusIndicators("正在鏈結到網頁以便擷取出圖像,請稍待。");
htImages = new Hashtable();
lvwImages.Items.Clear();
// 此處用來取出圖片標記的規則運算式,在觀念上與用來取出 HTML anchor
// 的規則運算式非常類似。然而,此處的規則運算式卻是複雜許多,
// 原因是我們必須擷取出可能會依任何順序出現的四個不同屬性。
//
// 為了讓此處所使用的規則運算式在長度與複雜度上都保有其合理性,
// 我們對所要處理之網頁上的 HTML
標記做了下列假設:
//
// 1. 用來指定圖片來源的 src 屬性一定會出現。它是唯一的必要屬性。
//
// 2. src 屬性會出現在 width 與 height 屬性之前。如果並非如此的話,
// width 與 height 屬性將不會被擷取。
//
// 3. 用來指定圖片替代文字的 alt 屬性會出現在 width 與 height 屬性之後。
// 如果並非如此的話,alt 屬性將不會被擷取。
//
// 4. width 與 height 屬性可能會在 src 屬性之後以任何順序出現,
// 本規則運算式能夠處理此狀況。
//
// 上述假設可以確保網頁上的所有圖片標記都會被擷取。然而,它也意味著,
// 其他某些屬性可能不會出現。
//
// 以下是使用於本規則運算式中的幾個重要模式專案:
//
// [^>]+ 與 > 以外的任何字元比對。此顯示出您可以移至下一個您所感興趣的屬性。
//
// (?: 從一個非擷取的群組開始。它會與一個結束 )? 合用, 以便建立
// 出一個選擇性群組(零或一個比對)。此顯示出您可以讓 src
// 以外的所有屬性成為可選擇性的。
//
// | 與 width 和 height 使用來成為一個 Or 運算式。
// 請注意在第一個配對中,width 在前而 height 在後,而在第二個
// 配對中,則是 height 在前而 width 在後。
strRegExPattern = @"
]+(src)\s*=\s*""?([^ "">]+)""?(?:[^>]+(width|height)\s*=\s*""?([^ "">]+)""?\s+(height|width)\s*=\s*""?([^ "">]+)""?)?(?:[^>]+(alt)\s*=\s*""?([^"">]+)""?)?";
}
Regex re = new Regex(strRegExPattern, RegexOptions.IgnoreCase);
Match m = re.Match(strHttpSource);
// 處理 HTML 程式源代碼。因為源是一個長字串,
// 因此我們不使用 Matches 方法,而改用較有效率的 Match(),Match()
// 一次只會傳回一個比對。Success 屬性能夠判斷是否存在另外一個比對。
// NextMatch() 則能夠反復此項作業。
while (m.Success)
{
if (optImages.Checked)
{
string strWidth, strHeight;
// 因為規則運算式模式賦予 width 與 height 屬性選擇性的順序,
// 因此必須先確認哪一個屬性是擺在前面,然後指派合適的 Group 專案值。
if (m.Groups[3].Value.ToLower() == "width")
{
strWidth = m.Groups[4].Value;
strHeight = m.Groups[6].Value;
}
else // height 屬性先出現
{
strWidth = m.Groups[6].Value;
strHeight = m.Groups[4].Value;
}
// 調用 AddImage 以便將自定義的 ImageAttributes 物件新增
// 至 Hashtable 中。請參閱 AddImages 的注釋來瞭解為什麼
// 要使用一個 Hashtable。
AddImage(new ImageAttributes(m.Groups[2].Value,
m.Groups[8].Value, strHeight, strWidth));
}
else
{
// 建立一個 ListViewItem 物件並設定第一欄("src")的文字。
ListViewItem lvi = new ListViewItem();
lvi.Text = m.Groups[1].Value;
lvwLinks.Items.Add(lvi);
}
// 繼續迴圈至下一個比對。
m = m.NextMatch();
}
HideStatusIndicators();
// 將所擷取的每一個影像資訊填入清單檢視控制項中。
if (optImages.Checked)
{
if (htImages != null)
{
FillImagesListView();
}
else
{
MessageBox.Show("沒有任何圖像的屬性與正則運算式相符。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
{
if (lvwLinks.Items.Count == 0)
{
MessageBox.Show("沒有任何鏈結的 URL 與正則運算式相符。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
// 此函式會檢查使用者所輸入的網址是否以 http:// 開頭。
private bool UrlIsValid()
{
if (txtURL.Text.Substring(0, 7) != "http://")
{
MessageBox.Show("您所輸入的網址必須以 http:// 開頭。");
return false;
}
return true;
}
// 此函式會讀取 HttpWebResponse 物件所傳回的 HTTP 響應資料流程並將它轉換成一個字串以便交給 RegEx 處理之。
private string ConvertStreamToString(Stream stmSource)
{
if (stmSource != null)
{
try
{
using (StreamReader sr = new StreamReader(stmSource))
{
// 讀取資料流程並傳回其整個內容。
return sr.ReadToEnd();
}
}
catch (Exception)
{
// 不要顯示一個訊息方塊。只需轉寄來自 GetHttpStream() 的自訂錯誤訊息。
throw new Exception();
}
finally
{
// 清除 Stream 與 StreamReader。
wresScrape.Close();
}
}
else
{
return "";
}
}
// 此函式使用衍生自 System.Net.WebRequest 的 .NET 類別來取得一個 HTTP 響應資料流程,
// 此 HTTP 回應資料流會成為 RegEx 的剖析來源或是所要顯示的影像(當
// 被 ImageViewer.Show() 呼叫時)。
public Stream GetHttpStream(string url)
{
// 使用 WebRequestFactory 建立要求。
wreqScrape = (HttpWebRequest)(WebRequest.Create(url));
wreqScrape.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.1)";
wreqScrape.Method = "GET";
wreqScrape.Timeout = 10000;
try
{
// 傳迴響應資料流程。
wresScrape = (HttpWebResponse)(wreqScrape.GetResponse());
return wresScrape.GetResponseStream();
}
catch (Exception)
{
// 最可能導致發生錯誤的原因是輸入了錯誤的 URL 或是並未連結至 Internet。
// 建立一個自訂的錯誤訊息來轉回給呼叫者函式。
throw new Exception("在提取您所要求的網頁時發生錯誤。" +
"請檢查您所輸入的 URL 以及 Internet 聯機,並再次嘗試。");
}
}
先下載 iTextSharp
目前最新版為itextsharp-all-5.4.0.zip
解壓縮後把 itextsharp.dll 放到bin中
程式中先引用這兩行
using iTextSharp.text;
using iTextSharp.text.pdf;
再call這一段函數
TifFN 代表圖片路徑
PdfFN 代表PDF路徑
public void tif2pdf(string TifFN, string PdfFN)
{
iTextSharp.text.Image image;
//設定4個邊界
int Mleft = 0;
int Mright = 0;
int Mtop = 0;
int Mbottom = 0;
Document document = new Document(iTextSharp.text.PageSize.A4, Mleft, Mright, Mtop, Mbottom);
PdfWriter.GetInstance(document, new FileStream(PdfFN, FileMode.Create));
document.Open();
image = iTextSharp.text.Image.GetInstance(TifFN);
//調整圖片大小,使之適合A4
if (image.Height > iTextSharp.text.PageSize.A4.Height - Mtop)
image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - Mleft, iTextSharp.text.PageSize.A4.Height - Mtop);
else if (image.Width > iTextSharp.text.PageSize.A4.Width - Mleft)
image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - Mleft, iTextSharp.text.PageSize.A4.Height - Mtop);
//調整圖片位置,使之居中
image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
document.NewPage();
document.Add(image);
document.Close();
}
2013年10月7日 星期一
itext 文字浮水印
string sFileIn = "D:\\pdftmp\\102\\09\\10209240001.pdf";
PdfReader reader = new PdfReader(sFileIn);
MemoryStream ms = new MemoryStream();
PdfStamper stamper = new PdfStamper(reader, ms);
for (int i = 1; i <= reader.NumberOfPages; i++)
{
iTextSharp.text.Rectangle pageSize = reader.GetPageSizeWithRotation(i);
PdfContentByte pdfPageContents = stamper.GetUnderContent(i);
pdfPageContents.BeginText();
BaseFont bfChinese = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\kaiu.ttf", BaseFont.IDENTITY_V, BaseFont.NOT_EMBEDDED); //字體 標楷體直書
//BaseFont bfChinese = BaseFont.createFont("C:\\windows\\fonts\\KAIU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //字體 標楷體橫書
pdfPageContents.SetFontAndSize(bfChinese, 14);//14 字型大小
pdfPageContents.SetRGBColorFill(0, 0, 0); //文字顏色
float textAngle = 0.0f; //旋轉角度
float left = 570; //PageSize.Width / 2;
float bottom = 700; // PapeSize.A4.Hight / 2 + 120f;
pdfPageContents.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "版權所有翻印必究。", left, bottom, textAngle);
//pdfPageContents.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "本內容之版權由相關機構擁有", left + 15, bottom, textAngle);
stamper.FormFlattening = true;
stamper.Close();
reader.Close();
pdfPageContents.EndText();
}
//stamper.FormFlattening = true;
//stamper.Close();
FileStream fs = new FileStream("D:\\pdftmp\\102\\09\\watermarked-output.pdf", FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(ms.ToArray());
fs.Close();
bw.Close();
用此方式如產生
『此頁上有錯誤。Acrobat可能無法正確顯示頁面。請聯繫PDF文件的建立者來更正問題。』
請移除舊版檢視軟體(Adobe Reader),移除後請至「ADOBE READER」網站,下載並安裝Adobe Reader(須10.1.4以上版本)。
itext 加上圖片浮水印
string FileLocation = "D:\\pdftmp\\102\\09\\10209240001.pdf"; //PDF原始檔路徑
string WatermarkLocation = "D:\\www\\aspx\\cute\\water-4.png"; //浮水印圖檔路徑
Document document = new Document();
PdfReader pdfReader = new PdfReader(FileLocation);
PdfStamper stamp = new PdfStamper(pdfReader, new FileStream(FileLocation.Replace(".pdf", "[temp][file].pdf"), FileMode.Create));
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(WatermarkLocation);
img.SetAbsolutePosition(560, 100); // 圖片位置 (560,0 = 距離 左方,下方 位置)
img.ScalePercent(35f); //縮放比例
PdfContentByte waterMark;
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
waterMark = stamp.GetOverContent(page);
waterMark.AddImage(img);
}
stamp.FormFlattening = true;
stamp.Close();
File.Delete(FileLocation);
File.Move(FileLocation.Replace(".pdf", "[temp][file].pdf"), FileLocation);
2013年9月14日 星期六
c# 判斷字串是否為空值IsNullOrEmpty
若有一個字串為空值,例如:
string a="";
string b=null;
string c=string.Empty;
所以要判斷a、b、c是否為空值,可以使用IsNullOrEmpty來判斷,所以上面三個字串,其結果皆為true。
string.IsNullOrEmpty(a) = true;
string.IsNullOrEmpty(b) = true;
string.IsNullOrEmpty(c) = true;
上一篇下一篇
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
無標題頁
.cs頁面
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
CommonClass CC = new CommonClass();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string id = Request["id"].ToString();
bindNext(Convert.ToInt32(id));
}
}
private void bindNext(int id)
{
int lastid = id - 1;
int nextid = id + 1;
this.ViewState["NextDetails"] = nextid.ToString();
this.ViewState["lastid"] = lastid.ToString();
this.ViewState["nextid"] = nextid.ToString();
if (lastid > 0)
{
string sql = "select * from news where id=" + lastid + "";
DataSet ds = CC.GetDataSet(sql, "dttit");
DataRow[] row = ds.Tables["dttit"].Select();
foreach (DataRow rs in row)
{
this.lbName.Text = rs["title"].ToString();
this.lkLast.Text = rs["title"].ToString();
this.ViewState["lastDetails"] = rs["content"].ToString();
}
}
else
{
this.lkLast.Text = "已經是第一篇";
}
string sql1 = "select * from news where id=" + nextid + "";
DataSet ds1 = CC.GetDataSet(sql1, "dttit");
DataRow[] row1 = ds1.Tables["dttit"].Select();
foreach (DataRow rs1 in row1)
{
this.lbName.Text = rs1["title"].ToString();
this.lkNext.Text = rs1["title"].ToString();
this.ViewState["nextDetails"] = rs1["content"].ToString();
}
}
protected void lkLast_Click(object sender, EventArgs e)
{
this.LbDetails.Text = this.ViewState["lastDetails"].ToString();
int id = Convert.ToInt32(this.ViewState["lastid"].ToString());
bindNext(id);
}
protected void lkNext_Click(object sender, EventArgs e)
{
this.LbDetails.Text = this.ViewState["nextDetails"].ToString();
int id = Convert.ToInt32(this.ViewState["nextid"].ToString());
bindNext(id);
}
}
訂閱:
文章 (Atom)