<? /*********************************************************************** strip_cdata_tags($string) ------------------------------------------------------------- DESCRIPTION: Removes CDDATA tags from a string INPUT: $string Text containing CDDATA tags RETURNS: Returns a string free of CDDATA tags ***********************************************************************/ function strip_cdata_tags($string) { # Strip XML CDATA characters from all array elements $string = str_replace("", "", $string); return $string; } ?>
myAdBanner
2013年11月20日 星期三
Removes CDDATA tags from a string
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 聯機,並再次嘗試。"); } }
Access 自動更新最後修改日期
Access 自動更新最後修改日期
1.資料庫新增一個 最後修改 欄位 日期/時間 格式 預設值 Now()
2. 巨集 新增 上次修改
內容 巨集指令:SetValue 項目:修改日期。運算式:Date() 。
3.表單 -> 事件 ->Before Update 輸入 上次修改
程式碼 加入
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo BeforeUpdate_Err
‘ Set bound controls to system date and time.
DateModified = Date
BeforeUpdate_End:
Exit Sub
BeforeUpdate_Err:
MsgBox Err.Description, vbCritical & vbOKOnly, _
“Error Number " & Err.Number & " Occurred"
Resume BeforeUpdate_End
End Sub
1.資料庫新增一個 最後修改 欄位 日期/時間 格式 預設值 Now()
2. 巨集 新增 上次修改
內容 巨集指令:SetValue 項目:修改日期。運算式:Date() 。
3.表單 -> 事件 ->Before Update 輸入 上次修改
程式碼 加入
Private Sub Form_BeforeUpdate(Cancel As Integer)
On Error GoTo BeforeUpdate_Err
‘ Set bound controls to system date and time.
DateModified = Date
BeforeUpdate_End:
Exit Sub
BeforeUpdate_Err:
MsgBox Err.Description, vbCritical & vbOKOnly, _
“Error Number " & Err.Number & " Occurred"
Resume BeforeUpdate_End
End Sub
先下載 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(); }
CSS自動分頁列印
CSS自動分頁列印
第二段寫法:自動分頁列印! <SCRIPT LANGUAGE='JavaScript'> </SCRIPT>這是列印的第一頁! 這是列印的第二頁!
第三段寫法:第一頁第二頁
第一頁第二頁
2013年11月5日 星期二
訂閱:
文章 (Atom)