<?
/***********************************************************************
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)