myAdBanner

顯示具有 c# 標籤的文章。 顯示所有文章
顯示具有 c# 標籤的文章。 顯示所有文章

2014年1月7日 星期二

抓取RSS分析

抓取網頁函數
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;
} 

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 聯機,並再次嘗試。");
    }
}

字串與日期轉換

字串與日期轉換
短日期格式

VB
FormatDateTime(TextBox1.Text, DateFormat.ShortDate)
C#
DateTime strDate = DateTime.Parse(TextBox1.Text)
String.Format(“{0:yyyy/MM/dd}", strDate)

驗證日期




先下載 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();
}

判斷日期函數

判斷日期函數
public static bool IsDate(Object obj)
{
    string strDate = obj.ToString();
    try
    {
        DateTime dt = DateTime.Parse(strDate);
        if (dt != DateTime.MinValue && dt != DateTime.MaxValue)
            return true;
        return false;
    }
    catch
    {
        return false;
    }
}

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