html轉為pdf的組件有很多,但是還沒有哪一款能達到這個效果,其只要原因是wkhtmltopdf使用webkit網頁渲染引擎開發的用來將 html轉成 pdf的工具,可以跟多種腳本語言進行集成來轉換文檔。但是就使用簡便性來說還是itext等組件占據優勢,如果你要轉換格式有比較高的要求,那么wkhtmltopdf絕對是不二之選!
下載路徑
官網地址 wkhtmltopdf.org/
github地址 github.com/wkhtmltopdf…
使用方法
java調用demo
public class HtmlToPdfInterceptor extends Thread { private InputStream is; public HtmlToPdfInterceptor(InputStream is){ this.is = is; } public void run(){ try{ InputStreamReader isr = new InputStreamReader(is, "utf-8"); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { System.out.println(line.toString()); //輸出內容 } }catch (IOException e){ e.printStackTrace(); } }}public class HtmlToPdf { //wkhtmltopdf在系統中的路徑 private static final String toPdfTool = "D:\wkhtmltopdf\bin\wkhtmltopdf.exe"; /** * html轉pdf * @param srcPath html路徑,可以是硬盤上的路徑,也可以是網絡路徑 * @param destPath pdf保存路徑 * @return 轉換成功返回true */ public static boolean convert(String srcPath, String destPath){ File file = new File(destPath); File parent = file.getParentFile(); //如果pdf保存路徑不存在,則創建路徑 if(!parent.exists()){ parent.mkdirs(); } StringBuilder cmd = new StringBuilder(); cmd.append(toPdfTool); cmd.append(" "); cmd.append(" --header-line");//頁眉下面的線 cmd.append(" --header-center 這里是頁眉這里是頁眉這里是頁眉這里是頁眉 ");//頁眉中間內容 //cmd.append(" --margin-top 30mm ");//設置頁面上邊距 (default 10mm) cmd.append(" --header-spacing 10 ");//(設置頁眉和內容的距離,默認0) cmd.append(srcPath); cmd.append(" "); cmd.append(destPath); boolean result = true; try{ Process proc = Runtime.getRuntime().exec(cmd.toString()); HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream()); HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream()); error.start(); output.start(); proc.waitFor(); }catch(Exception e){ result = false; e.printStackTrace(); } return result; } public static void main(String[] args) { HtmlToPdf.convert("https://my.oschina.net/papio/blog/835645", "d:/wkhtmltopdf.pdf"); }}復制代碼
wkhtmltopdf 參數詳解
wkhtmltopdf [OPTIONS]... <input file> [More input files] <output file>常規選項 --allow <path> 允許加載從指定的文件夾中的文件或文件(可重復) --book* 設置一會打印一本書的時候,通常設置的選項 --collate 打印多份副本時整理 --cookie <name> <value> 設置一個額外的cookie(可重復) --cookie-jar <path> 讀取和寫入的Cookie,并在提供的cookie jar文件 --copies <number> 復印打印成pdf文件數(默認為1) --cover* <url> 使用HTML文件作為封面。它會帶頁眉和頁腳的TOC之前插入 --custom-header <name> <value> 設置一個附加的HTTP頭(可重復) --debug-javascript 顯示的javascript調試輸出 --default-header* 添加一個缺省的頭部,與頁面的左邊的名稱,頁面數到右邊,例如: --header-left '[webpage]' --header-right '[page]/[toPage]' --header-line --disable-external-links* 禁止生成鏈接到遠程網頁 --disable-internal-links* 禁止使用本地鏈接 --disable-javascript 禁止讓網頁執行JavaScript --disable-pdf-compression* 禁止在PDF對象使用無損壓縮 --disable-smart-shrinking* 禁止使用WebKit的智能戰略收縮,使像素/ DPI比沒有不變 --disallow-local-file-access 禁止允許轉換的本地文件讀取其他本地文件,除非explecitily允許用 --allow --dpi <dpi> 顯式更改DPI(這對基于X11的系統沒有任何影響) --enable-plugins 啟用已安裝的插件(如Flash --encoding <encoding> 設置默認的文字編碼 --extended-help 顯示更廣泛的幫助,詳細介紹了不常見的命令開關 --forms* 打開HTML表單字段轉換為PDF表單域 --grayscale PDF格式將在灰階產生 --help Display help --htmldoc 輸出程序HTML幫助 --ignore-load-errors 忽略claimes加載過程中已經遇到了一個錯誤頁面 --lowquality 產生低品質的PDF/ PS。有用縮小結果文檔的空間 --manpage 輸出程序手冊頁 --margin-bottom <unitreal> 設置頁面下邊距 (default 10mm) --margin-left <unitreal> 將左邊頁邊距 (default 10mm) --margin-right <unitreal> 設置頁面右邊距 (default 10mm) --margin-top <unitreal> 設置頁面上邊距 (default 10mm) --minimum-font-size <int> 最小字體大小 (default 5) --no-background 不打印背景 --orientation <orientation> 設置方向為橫向或縱向 --page-height <unitreal> 頁面高度 (default unit millimeter) --page-offset* <offset> 設置起始頁碼 (default 1) --page-size <size> 設置紙張大小: A4, Letter, etc. --page-width <unitreal> 頁面寬度 (default unit millimeter) --password <password> HTTP驗證密碼 --post <name> <value> Add an additional post field (repeatable) --post-file <name> <path> Post an aditional file (repeatable) --print-media-type* 使用的打印介質類型,而不是屏幕 --proxy <proxy> 使用代理 --quiet Be less verbose --read-args-from-stdin 讀取標準輸入的命令行參數 --readme 輸出程序自述 --redirect-delay <msec> 等待幾毫秒為JS-重定向(default 200) --replace* <name> <value> 替換名稱,值的頁眉和頁腳(可重復) --stop-slow-scripts 停止運行緩慢的JavaScripts --title <text> 生成的PDF文件的標題(第一個文檔的標題使用,如果沒有指定) --toc* 插入的內容的表中的文件的開頭 --use-xserver* 使用X服務器(一些插件和其他的東西沒有X11可能無法正常工作) --user-style-sheet <url> 指定用戶的樣式表,加載在每一頁中 --username <username> HTTP認證的用戶名 --version 輸出版本信息退出 --zoom <float> 使用這個縮放因子 (default 1) 頁眉和頁腳選項--header-center* <text> (設置在中心位置的頁眉內容) --header-font-name* <name> (default Arial) (設置頁眉的字體名稱)--header-font-size* <size> (設置頁眉的字體大小)--header-html* <url> (添加一個HTML頁眉,后面是網址)--header-left* <text> (左對齊的頁眉文本)--header-line* (顯示一條線在頁眉下)--header-right* <text> (右對齊頁眉文本)--header-spacing* <real> (設置頁眉和內容的距離,默認0)--footer-center* <text> (設置在中心位置的頁腳內容) --footer-font-name* <name> (設置頁腳的字體名稱) --footer-font-size* <size> (設置頁腳的字體大小default 11)--footer-html* <url> (添加一個HTML頁腳,后面是網址)--footer-left* <text> (左對齊的頁腳文本)--footer-line* 顯示一條線在頁腳內容上)--footer-right* <text> (右對齊頁腳文本)--footer-spacing* <real> (設置頁腳和內容的距離)./wkhtmltopdf --footer-right '[page]/[topage]' http://www.baidu.com baidu.pdf./wkhtmltopdf --header-center '報表' --header-line --margin-top 2cm --header-line http://192.168.212.139/oma/ oma.pdf表內容選項中 --toc-depth* <level> Set the depth of the toc (default 3) --toc-disable-back-links* Do not link from section header to toc --toc-disable-links* Do not link from toc to sections --toc-font-name* <name> Set the font used for the toc (default Arial) --toc-header-font-name* <name> The font of the toc header (if unset use --toc-font-name) --toc-header-font-size* <size> The font size of the toc header (default 15) --toc-header-text* <text> The header text of the toc (default Table Of Contents) --toc-l1-font-size* <size> Set the font size on level 1 of the toc (default 12) --toc-l1-indentation* <num> Set indentation on level 1 of the toc (default 0) --toc-l2-font-size* <size> Set the font size on level 2 of the toc (default 10) --toc-l2-indentation* <num> Set indentation on level 2 of the toc (default 20) --toc-l3-font-size* <size> Set the font size on level 3 of the toc (default 8) --toc-l3-indentation* <num> Set indentation on level 3 of the toc (default 40) --toc-l4-font-size* <size> Set the font size on level 4 of the toc (default 6) --toc-l4-indentation* <num> Set indentation on level 4 of the toc (default 60) --toc-l5-font-size* <size> Set the font size on level 5 of the toc (default 4) --toc-l5-indentation* <num> Set indentation on level 5 of the toc (default 80) --toc-l6-font-size* <size> Set the font size on level 6 of the toc (default 2) --toc-l6-indentation* <num> Set indentation on level 6 of the toc (default 100) --toc-l7-font-size* <size> Set the font size on level 7 of the toc (default 0) --toc-l7-indentation* <num> Set indentation on level 7 of the toc (default 120) --toc-no-dots* Do not use dots, in the toc輪廓選項 --dump-outline <file> 轉儲目錄到一個文件 --outline 顯示目錄(文章中h1,h2來定) --outline-depth <level> 設置目錄的深度(默認為4)頁腳和頁眉 * [page] 由當前正在打印的頁的數目代替 * [frompage] 由要打印的第一頁的數量取代 * [topage] 由最后一頁要打印的數量取代 * [webpage] 通過正在打印的頁面的URL替換 * [section] 由當前節的名稱替換 * [subsection] 由當前小節的名稱替換 * [date] 由當前日期系統的本地格式取代 * [time] 由當前時間,系統的本地格式取代
作者:曹元
鏈接:https://juejin.im/post/6856547881873047559
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
了讓初學 Python 的程序員避免犯同樣的錯誤,以下列出了我學習 Python 時犯的三種錯誤。這些錯誤要么是我長期以來經常犯的,要么是造成了需要幾個小時解決的麻煩。 -- Pete Savage
本文導航
-1、 可變數據類型作為函數定義中的默認參數 …… 07%
-2、 可變數據類型作為類變量 …… 35%
-3、 可變的分配錯誤 …… 53%
編譯自: https://opensource.com/article/17/6/3-things-i-did-wrong-learning-python作者: Pete Savage
譯者: polebug
這些錯誤會造成很麻煩的問題,需要數小時才能解決。
當你做錯事時,承認錯誤并不是一件容易的事,但是犯錯是任何學習過程中的一部分,無論是學習走路,還是學習一種新的編程語言都是這樣,比如學習 Python。
為了讓初學 Python 的程序員避免犯同樣的錯誤,以下列出了我學習 Python 時犯的三種錯誤。這些錯誤要么是我長期以來經常犯的,要么是造成了需要幾個小時解決的麻煩。
年輕的程序員們可要注意了,這些錯誤是會浪費一下午的!
這似乎是對的?你寫了一個小函數,比如,搜索當前頁面上的鏈接,并可選將其附加到另一個提供的列表中。
def search_for_links(page, add_to=[]):new_links = page.search_for_links()
add_to.extend(new_links)
return add_to
從表面看,這像是十分正常的 Python 代碼,事實上它也是,而且是可以運行的。但是,這里有個問題。如果我們給 add_to 參數提供了一個列表,它將按照我們預期的那樣工作。但是,如果我們讓它使用默認值,就會出現一些神奇的事情。
試試下面的代碼:
def fn(var1, var2=[]):var2.append(var1)
print var2
fn(3)
fn(4)
fn(5)
可能你認為我們將看到:
[3][4]
[5]
但實際上,我們看到的卻是:
[3][3, 4]
[3, 4, 5]
為什么呢?如你所見,每次都使用的是同一個列表,輸出為什么會是這樣?在 Python 中,當我們編寫這樣的函數時,這個列表被實例化為函數定義的一部分。當函數運行時,它并不是每次都被實例化。這意味著,這個函數會一直使用完全一樣的列表對象,除非我們提供一個新的對象:
fn(3, [4])
[4, 3]
答案正如我們所想的那樣。要想得到這種結果,正確的方法是:
def fn(var1, var2=None):if not var2:
var2 = []
var2.append(var1)
或是在第一個例子中:
def search_for_links(page, add_to=None):if not add_to:
add_to = []
new_links = page.search_for_links()
add_to.extend(new_links)
return add_to
這將在模塊加載的時候移走實例化的內容,以便每次運行函數時都會發生列表實例化。請注意,對于不可變數據類型,比如元組[1]、字符串[2]、整型[3],是不需要考慮這種情況的。這意味著,像下面這樣的代碼是非常可行的:
def func(message="my message"):print message
這和上面提到的最后一個錯誤很相像。思考以下代碼:
class URLCatcher(object):urls = []
def add_url(self, url):
self.urls.append(url)
這段代碼看起來非常正常。我們有一個儲存 URL 的對象。當我們調用 add_url 方法時,它會添加一個給定的 URL 到存儲中。看起來非常正確吧?讓我們看看實際是怎樣的:
a = URLCatcher()a.add_url('http://www.google.com')
b = URLCatcher()
b.add_url('http://www.bbc.co.hk')
b.urls:
['http://www.google.com', 'http://www.bbc.co.uk']
a.urls:
['http://www.google.com', 'http://www.bbc.co.uk']
等等,怎么回事?!我們想的不是這樣啊。我們實例化了兩個單獨的對象 a 和 b。把一個 URL 給了 a,另一個給了 b。這兩個對象怎么會都有這兩個 URL 呢?
這和第一個錯例是同樣的問題。創建類定義時,URL 列表將被實例化。該類所有的實例使用相同的列表。在有些時候這種情況是有用的,但大多數時候你并不想這樣做。你希望每個對象有一個單獨的儲存。為此,我們修改代碼為:
class URLCatcher(object):def __init__(self):
self.urls = []
def add_url(self, url):
self.urls.append(url)
現在,當創建對象時,URL 列表被實例化。當我們實例化兩個單獨的對象時,它們將分別使用兩個單獨的列表。
這個問題困擾了我一段時間。讓我們做出一些改變,并使用另一種可變數據類型 - 字典[4]。
a = {'1': "one", '2': 'two'}
現在,假設我們想把這個字典用在別的地方,且保持它的初始數據完整。
b = ab['3'] = 'three'
簡單吧?
現在,讓我們看看原來那個我們不想改變的字典 a:
{'1': "one", '2': 'two', '3': 'three'}
哇等一下,我們再看看 b?
{'1': "one", '2': 'two', '3': 'three'}
等等,什么?有點亂……讓我們回想一下,看看其它不可變類型在這種情況下會發生什么,例如一個元組:
c = (2, 3)d = c
d = (4, 5)
現在 c 是 (2, 3),而 d 是 (4, 5)。
這個函數結果如我們所料。那么,在之前的例子中到底發生了什么?當使用可變類型時,其行為有點像 C語言的一個指針。在上面的代碼中,我們令 b = a,我們真正表達的意思是:b 成為 a 的一個引用。它們都指向 Python 內存中的同一個對象。聽起來有些熟悉?那是因為這個問題與先前的相似。其實,這篇文章應該被稱為「可變引發的麻煩」。
列表也會發生同樣的事嗎?是的。那么我們如何解決呢?這必須非常小心。如果我們真的需要復制一個列表進行處理,我們可以這樣做:
b = a[:]
這將遍歷并復制列表中的每個對象的引用,并且把它放在一個新的列表中。但是要注意:如果列表中的每個對象都是可變的,我們將再次獲得它們的引用,而不是完整的副本。
假設在一張紙上列清單。在原來的例子中相當于,A 某和 B 某正在看著同一張紙。如果有個人修改了這個清單,兩個人都將看到相同的變化。當我們復制引用時,每個人現在有了他們自己的清單。但是,我們假設這個清單包括尋找食物的地方。如果“冰箱”是列表中的第一個,即使它被復制,兩個列表中的條目也都指向同一個冰箱。所以,如果冰箱被 A 修改,吃掉了里面的大蛋糕,B 也將看到這個蛋糕的消失。這里沒有簡單的方法解決它。只要你記住它,并編寫代碼的時候,使用不會造成這個問題的方式。
字典以相同的方式工作,并且你可以通過以下方式創建一個昂貴副本:
b = a.copy()
再次說明,這只會創建一個新的字典,指向原來存在的相同的條目。因此,如果我們有兩個相同的列表,并且我們修改字典 a 的一個鍵指向的可變對象,那么在字典 b 中也將看到這些變化。
可變數據類型的麻煩也是它們強大的地方。以上都不是實際中的問題;它們是一些要注意防止出現的問題。在第三個項目中使用昂貴復制操作作為解決方案在 99% 的時候是沒有必要的。你的程序或許應該被改改,所以在第一個例子中,這些副本甚至是不需要的。
編程快樂!在評論中可以隨時提問。
作者簡介:
Pete Savage - Peter 是一位充滿激情的開源愛好者,在過去十年里一直在推廣和使用開源產品。他從 Ubuntu 社區開始,在許多不同的領域自愿參與音頻制作領域的研究工作。在職業經歷方面,他起初作為公司的系統管理員,大部分時間在管理和建立數據中心,之后在 Red Hat 擔任 CloudForms 產品的主要測試工程師。
via: https://opensource.com/article/17/6/3-things-i-did-wrong-learning-python
作者:Pete Savage[5] 譯者:polebug 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
[1]: 元組 - https://docs.python.org/2/library/functions.html?highlight=tuple#tuple
[2]: 字符串 - https://docs.python.org/2/library/string.html
[3]: 整型 - https://docs.python.org/2/library/functions.html#int
[4]: 字典 - https://docs.python.org/2/library/stdtypes.html?highlight=dict#dict
[5]: Pete Savage - https://opensource.com/users/psav
DateTime t1 = new DateTime(100); DateTime t2 = new DateTime(20); if (DateTime.Compare(t1, t2) > 0) Console.WriteLine("t1 > t2"); if (DateTime.Compare(t1, t2) == 0) Console.WriteLine("t1 == t2"); if (DateTime.Compare(t1, t2) < 0) Console.WriteLine("t1 < t2"); 1。比較時間大小的實驗 string st1="12:13"; string st2="14:14"; DateTime dt1=Convert.ToDateTime(st1); DateTime dt2=Convert.ToDateTime(st2); DateTime dt3=DateTime.Now; if(DateTime.Compare(dt1,dt2)>0) msg.Text=st1+">"+st2; else msg.Text=st1+"<"+st2; msg.Text+="\r\n"+dt1.ToString(); if(DateTime.Compare(dt1,dt3)>0) msg.Text+="\r\n"+st1+">"+dt3.ToString(); else msg.Text+="\r\n"+st1+"<"+dt3.ToString(); 2。計算兩個時間差值的函數,返回時間差的絕對值: private string DateDiff(DateTime DateTime1,DateTime DateTime2) { string dateDiff=null; try { TimeSpan ts1=new TimeSpan(DateTime1.Ticks); TimeSpan ts2=new TimeSpan(DateTime2.Ticks); TimeSpan ts=ts1.Subtract(ts2).Duration(); dateDiff=ts.Days.ToString()+"天" +ts.Hours.ToString()+"小時" +ts.Minutes.ToString()+"分鐘" +ts.Seconds.ToString()+"秒"; } catch { } return dateDiff; } 3。實現計算DateTime1-36天=DateTime2的功能 TimeSpan ts=new TimeSpan(40,0,0,0); DateTime dt2=DateTime.Now.Subtract(ts); msg.Text=DateTime.Now.ToString()+"-"+ts.Days.ToString()+"天\r\n"; msg.Text+=dt2.ToString(); use "DateTime.Compare" static method DateTime.Compare( dt1, dt2 ) > 0 : dt1 > dt2 DateTime.Compare( dt1, dt2 ) == 0 : dt1 == dt2 DateTime.Compare( dt1, dt2 ) < 0 : dt1 < dt2 /// <summary> /// 計算兩個日期的時間間隔 /// </summary> /// <param name="DateTime1">第一個日期和時間</param> /// <param name="DateTime2">第二個日期和時間</param> /// <returns></returns> private string DateDiff(DateTime DateTime1, DateTime DateTime2) { string dateDiff = null; TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); dateDiff = ts.Days.ToString()+"天" + ts.Hours.ToString()+"小時" + ts.Minutes.ToString()+"分鐘" + ts.Seconds.ToString()+"秒"; return dateDiff; } 說明: 1.DateTime值類型代表了一個從公元0001年1月1日0點0分0秒到公元9999年12月31日23點59分59秒之間的具體日期時刻。因此,你可以用DateTime值類型來描述任何在想象范圍之內的時間。一個DateTime值代表了一個具體的時刻 2.TimeSpan值包含了許多屬性與方法,用于訪問或處理一個TimeSpan值 下面的列表涵蓋了其中的一部分: Add:與另一個TimeSpan值相加。 Days:返回用天數計算的TimeSpan值。 Duration:獲取TimeSpan的絕對值。 Hours:返回用小時計算的TimeSpan值 Milliseconds:返回用毫秒計算的TimeSpan值。 Minutes:返回用分鐘計算的TimeSpan值。 Negate:返回當前實例的相反數。 Seconds:返回用秒計算的TimeSpan值。 Subtract:從中減去另一個TimeSpan值。 Ticks:返回TimeSpan值的tick數。 TotalDays:返回TimeSpan值表示的天數。 TotalHours:返回TimeSpan值表示的小時數。 TotalMilliseconds:返回TimeSpan值表示的毫秒數。 TotalMinutes:返回TimeSpan值表示的分鐘數。 TotalSeconds:返回TimeSpan值表示的秒數。 ====================================================<BR>int jg=72;//設置一個增加的時間 DateTime dt=Convert.ToDateTime("2006-4-23 12:22:05");// 設置一個初始化的時間 DateTime newdt=dt.AddHours(jg);//初始化時間加上增加的時間 DateTime nowt=DateTime.Now;//現在的時間 Response.Write("現在時間是:"+nowt+"<br>"); Response.Write("數據庫時間是:"+dt+"<br>"); Response.Write("新的時間是:"+newdt+"<br>"); if(newdt<nowt)//如果相加后的時間大于現在的時間 { Response.Write("可以"); } else//否則 { Response.Write("不行"); } ====================================================== // 得到某年某月的天數 public static int GetDaysInMonth(int rYear,int rMonth) { DateTime dt1 = DateTime.Parse(rYear+"-"+rMonth+"-01"); DateTime dt2 = dt1.AddMonths(1); TimeSpan ts = dt2-dt1; return (int)ts.TotalDays; } //得到星期Text public static string GetDayOfWeekHtml(int rDayOfWeek) { switch(rDayOfWeek) { case (int)DayOfWeek.Sunday: return "<font color=\"#ff0000\">星期日</font>"; case (int)DayOfWeek.Monday: return "<font color=\"#000000\">星期一</font>"; case (int)DayOfWeek.Tuesday: return "<font color=\"#000000\">星期二</font>"; case (int)DayOfWeek.Wednesday: return "<font color=\"#000000\">星期三</font>"; case (int)DayOfWeek.Thursday: return "<font color=\"#000000\">星期四</font>"; case (int)DayOfWeek.Friday: return "<font color=\"#000000\">星期五</font>"; case (int)DayOfWeek.Saturday: return "<font color=\"#008800\">星期六</font>"; default: return ""; } } // 得到某年某月的起止日期,格式為0000-00-00 public static string[] GetBeginEndDate(int rYear,int rMonth) { string[] arr = new string[2]; DateTime dt1 = DateTime.Parse(rYear+"-"+rMonth+"-01"); arr[0] = dt1.ToLongDateString(); DateTime dt2 = dt1.AddMonths(1).AddDays(-1); arr[1] = dt2.ToLongDateString(); return arr; } ========================== 在ASP中日期比較使用:DateDiff( "d", "2006-1-30", now )>0;在C#中使用:TimeSpan 代碼如下: using System; using System.Collections; public class DatediffClass { public static void Main() { DateTime dt1 = DateTime.Parse("2006-04-01"); DateTime dt2 = DateTime.Parse("2006-05-01"); TimeSpan ts = dt2.Subtract(dt1); Console.WriteLine(ts.TotalDays); Console.ReadLine(); } } 如果是比較大小:DateTime.Compare(t1, t2) > 0 =================================== 1、DateTime 數字型 System.DateTime currentTime=new System.DateTime(); 1.1 取當前年月日時分秒 currentTime=System.DateTime.Now; 1.2 取當前年 int 年=currentTime.Year; 1.3 取當前月 int 月=currentTime.Month; 1.4 取當前日 int 日=currentTime.Day; 1.5 取當前時 int 時=currentTime.Hour; 1.6 取當前分 int 分=currentTime.Minute; 1.7 取當前秒 int 秒=currentTime.Second; 1.8 取當前毫秒 int 毫秒=currentTime.Millisecond; (變量可用中文) 2、Int32.Parse(變量) Int32.Parse("常量") 字符型轉換 轉為32位數字型 3、 變量.ToString() 字符型轉換 轉為字符串 12345.ToString("n"); //生成 12,345.00 12345.ToString("C"); //生成 ¥12,345.00 12345.ToString("e"); //生成 1.234500e+004 12345.ToString("f4"); //生成 12345.0000 12345.ToString("x"); //生成 3039 (16進制) 12345.ToString("p"); //生成 1,234,500.00% 4、變量.Length 數字型 取字串長度: 如: string str="中國"; int Len = str.Length ; //Len是自定義變量, str是求測的字串的變量名 5、System.Text.Encoding.Default.GetBytes(變量) 字碼轉換 轉為比特碼 如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); 然后可得到比特長度: len = bytStr.Length; 6、System.Text.StringBuilder("") 字符串相加,(+號是不是也一樣?) 如:System.Text.StringBuilder sb = new System.Text.StringBuilder(""); sb.Append("中華"); sb.Append("人民"); sb.Append("共和國"); 7、變量.Substring(參數1,參數2); 截取字串的一部分,參數1為左起始位數,參數2為截取幾位。 如:string s1 = str.Substring(0,2); 8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); 取遠程用戶IP地址 9、穿過代理服務器取遠程用戶真實IP地址: if(Request.ServerVariables["HTTP_VIA"]!=null){ string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); }else{ string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString(); } 10、 Session["變量"]; 存取Session值; 如,賦值: Session["username"]="小布什"; 取值: Object objName=Session["username"]; String strName=objName.ToString(); 清空: Session.RemoveAll(); 11、String str=Request.QueryString["變量"]; 用超鏈接傳送變量。 如在任一頁中建超鏈接:<a href=Edit.aspx?fbid=23>點擊</a> 在Edit.aspx頁中取值:String str=Request.QueryString["fdid"]; 12、DOC對象.CreateElement("新建節點名"); 創建XML文檔新節點 13、父節點.AppendChild(子節點); 將新建的子節點加到XML文檔父節點下 14、 父節點.RemoveChild(節點); 刪除節點 15、Response Response.Write("字串"); Response.Write(變量); 向頁面輸出。 Response.Redirect("URL地址"); 跳轉到URL指定的頁面 16、char.IsWhiteSpce(字串變量,位數)——邏輯型 查指定位置是否空字符; 如: string str="中國 人民"; Response.Write(char.IsWhiteSpace(str,2)); //結果為:True, 第一個字符是0位,2是第三個字符。 17、char.IsPunctuation('字符') --邏輯型 查字符是否是標點符號 如:Response.Write(char.IsPunctuation('A')); //返回:False 18、(int)'字符' 把字符轉為數字,查代碼點,注意是單引號。 如: Response.Write((int)'中'); //結果為中字的代碼:20013 19、(char)代碼 把數字轉為字符,查代碼代表的字符。 如:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。