2010年11月23日 星期二

VB.net itext.net vbcode範例

除了VB也有C#

不過itext.net 好像和 itextsharp 不一定完全相同

http://www.ujihara.jp/iTextdotNET/en/examplesvb.html

2010年11月8日 星期一

ASP.NET 線上產生XML不存在Server上

'*************************************************************
' 前端
'*************************************************************
需有以下的設定,此標籤必須原來就存在,無法動態產生此標籤再來下載。
解法:先有此標籤,href屬性動態指定即可。
$('#outputxml').attr("href",'OutputUD.ashx?selsi=' + si + '&selsn=' + SelSub);


'*************************************************************
' 後端
'*************************************************************
OutputUD.ashx

990125 防止其它網域的使用者呼叫!
If context.Request.UrlReferrer.Host <> context.Request.ServerVariables("SERVER_NAME") Then
FormsAuthentication.SignOut() '981208
context.Response.Redirect("ShowUserRdr.aspx")
End If

context.Response.ClearHeaders()
context.Response.Clear()
context.Response.Expires = 0
context.Response.Buffer = True
context.Response.AddHeader("Accept-Language", "zh-tw")

'檔案名稱
Dim strContentDisposition As String = "attachment; filename=UserRecord.xml"
context.Response.AddHeader("Content-Disposition", strContentDisposition)
context.Response.ContentType = "Application/octet-stream"

'檔案內容
Dim settings As New XmlWriterSettings
settings.Indent = True
settings.OmitXmlDeclaration = False
settings.NewLineOnAttributes = True
settings.Encoding = Encoding.UTF8

'將XML寫入的結果放在 context.Response.OutputStream內
Dim MyWriter As XmlWriter = XmlWriter.Create(context.Response.OutputStream, settings)

Dim sb As New StringBuilder
Dim i As Integer
'*********************************************************************************************** ' 990115 XML資料架構
' 1. UserRdr (root)
' |
' ----- SelectQ
' :
' ---------1. QASubject (選擇題目) 其下標籤
' :
' --------2. QAChinese (申論題目) 其下標籤
' :
' --------3. Customize (自訂或重點資料列表) 其下標籤
' :
' --------4. LawInfo (法規命令) 其下標籤
' :
' --------5. PointRecover (選擇題複習重點) 其下標籤
' :
' :------- 0. Finfo 關於檔案之資訊
'*********************************************************************************************** MyWriter.WriteStartElement("UserRdr")
MyWriter.WriteStartElement("SelectQ")

....................
'990104 考題出處
'MyWriter.WriteElementString("QFrom", "")
MyWriter.WriteStartElement("QFrom")
MyWriter.WriteCData(dr("QSource"))
MyWriter.WriteEndElement()


'990104 科目(僅抓取第一個編號 避免 x6x33x 這種多編碼形式!)
'MyWriter.WriteElementString("Qsub", "")
MyWriter.WriteStartElement("Qsub")
MyWriter.WriteCData(OutSubName)
MyWriter.WriteEndElement()
End While
MyWriter.WriteEndElement()

'990120 最後輸出 檔案的相關資訊!
MyWriter.WriteStartElement("Finfo") '< S >
MyWriter.WriteElementString("WDate", Now)
MyWriter.WriteElementString("S1", "")
MyWriter.WriteElementString("S2", "")
MyWriter.WriteElementString("S3", "")
MyWriter.WriteElementString("S4", "")
MyWriter.WriteEndElement()



'輸出結束標記!
MyWriter.WriteEndElement()
MyWriter.WriteEndElement()
'將XML輸出
MyWriter.Flush()

'將 context.Response.OutputStream 內容輸出
context.Response.OutputStream.ToString()

context.Response.End()


'判斷是否空字串 DBNull 或 特殊字元 ^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF
Function ReplaceSpChr(ByVal k As String) As String
'Return Regex.Replace(k, "[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]", "", RegexOptions.IgnoreCase)
Return Regex.Replace(k, "[\f]", "", RegexOptions.IgnoreCase)
End Function

ASP.NET JQuery 從後端載入XML資料,然後將XML的tag放到相對應的HTML欄位

從後端載入XML資料,然後將XML的tag放到相對應的HTML欄位內。

'*************************************************************
' 前端
'*************************************************************
/* 選取不同的 科目類別 ----------------------------------------------------- */
$('#LoginView1_ddlSubject').change(function() {
var si = $('#LoginView1_ddlSubject option:selected').val();
var SelSub=$('#LoginView1_ddlSubject option:selected').text() ;
if ( si !=0 ) {
$.blockUI({message: '


使用者紀錄載入中,請耐心稍後喔…



'});
//針對不同的科目id顯示對應的 [匯出記錄]超連結
$('#outputxml').attr("href",'OutputUD.ashx?selsi=' + si + '&selsn=' + SelSub);
//執行ajax功能
$.ajax({
url: "FetchRdr.ashx",
type: "POST", /* 傳輸量若太多要改用POST */
data: "V=" + si ,
cache: false,
/*dataType: "xml", 回傳格式 xml */
success: function(response) {
// ................")
//var x = $("" + response + "");
var x = $(response );
//alert (x.find("SecionA").text());
$("#RdrS1").html(x.find("SecionA").text());
$("#RdrS2").html(x.find("SecionB").text());
$("#RdrS3").html(x.find("SecionC").text());
$("#RdrS4").html(x.find("SecionD").text() + x.find("SecionE").text()); //此區塊一併寫入 重點參數!
//$("#RdrS1").html(response);
$.unblockUI(); //取消動畫!
}, /* 若不成功,大部分是伺服端APSX的問題 且客戶端送出的字串前後結尾不可以有雙引號等特殊字元 */
error: function(xhr, textStatus, thrownError) { alert("錯誤:" + xhr.responseText); }
}) /* data: "acc='abc'",*/
}
else { // 沒有選擇科目時
//alert('請先選擇要複習的科目喔~ \n\n 提醒: 匯出使用者記錄,只允許每次匯出一個科目....') ;
$('.OutputUserData').attr("href",'#');
}
});


'*************************************************************
' 後端
'*************************************************************




'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
' 配合 XML 設定 (只是仿製為XML的用法,<![CDATA[xxx]]> 可避開標籤的問題!) JQuery 將 字串 前後包住 即可使用XML工具FIND的函數!
'
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sb.Append("<xml><udr><seciona><![CDATA[xxxxxxxx]]></SecionA>")
sb.Append("<secionb><![CDATA[xxxxxxxxxxxxx]]></SecionE></Udr></xml>")
context.Response.Write(sb.ToString)
'最後輸出
context.Response.End()

ASP.NET 利用 BlockUI 做為文章預覽畫面

作法:
當文章送出之前,以BlockUI產生一個文章預覽畫面,這樣就不用再多做一個頁面顯示了,也不影響Server的效能。

-----------------------------
前端
-----------------------------

$('#MakeSure').click(function() {
$.unblockUI();
//執行 指定輸入功能
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("LoginView1$FormView1$InsertButton" , "", true,"" ,"" , false, true)) ;
return true;
});

$('#CancelInput').click(function() {
$.unblockUI();
return false;
});

/* 取消預定寫入事件,以預覽文章視窗替代 */
/*------------------------------------------------------------------------------------------------*/
$("#LoginView1_FormView1_InsertButton").click(function() {
// 寫入 預覽內容!
var Sub=$("#LoginView1_FormView1_txtSubject").val();
var XXX=$("#LoginView1_FormView1_txtContent").val();
// 避免特殊符號寫入文章內容
XXX=XXX.replace(/[\!\\+=_\[\]#$%^&*|"';?/><,.]/g,''); // 確定要顯示內容的相對位置 請配合 CSS對於相關區塊的語法 var FormWidth= 770; var FormHeight= 300; var lPos= (screen.width/2)-(FormWidth/2) +'px' ; //var tPos= (screen.height /2)-(FormHeight/2) +'px'; var tPos= '50px'; FormWidth=FormWidth+ 'px'; XXX =XXX.replace(/\n/g,'
'); // textarea 回車符號
$("#AricleResult").html('標題:' + Sub + '

'+ XXX);
$.blockUI({ message: $('#ArtPreview'), css: { width: FormWidth ,top: tPos , left: lPos } });
// $.blockUI({ message: $('#ArtPreview'), css: { width: '400px' } });
return false;
});

預覽結果


請注意!! 系統會自動排除半形的特殊符號(例如:#$%^&*|"'<>等)。請改以全形符號取代(例如: #$%︿&*"’<>等)


ASP.NET JQuery JSON示例

---------------------------------------------
前端
---------------------------------------------
以下的作法,是利用TagArticle函數將文章透過$.getJSON QueryArticle.ashx來取回資料。

function TagArticle(Sid,controlName,Ds ) { //標記文章
$.blockUI({ message: '

處理中,請耐心稍後喔…



' });
//990714 改善GET的Cache問題
$.getJSON("QueryArticle.ashx?Qid=" + Sid + "&d=" + Ds +"&q="+new Date().getTime(), function(Vdata) {
//處理 TAG 陣列
var tn="";
tn=Vdata.TagV;
//自動產生 Tag標記
var Slt='';
var cnt=0;
for( var i = 0; i < tagCnt; i++ ) { if( tn.indexOf("x" + (i+1) + "x" ) !=-1 ) { Slt=Slt + "" + (i+1) +'.' + tagN[i+1] + '    ' ;
} else {
Slt=Slt + "" + (i+1) +'.' + tagN[i+1] + '    ' ;
}
//每行排列三個控制項
cnt+=1 ;
if (cnt==4) {
Slt=Slt + "
"
cnt=0;
}
}
var XXX='';
XXX=Vdata.SugV
$("#Subj").html(XXX );
XXX=Vdata.MsgV
XXX =XXX.replace(/
/g,"\n")
XXX =XXX.replace(/(^\s*)|(\s*$)/g, "");
$("#Ac").val(XXX );
$("#Tagzone").html( Slt);
});
$.unblockUI(); //取消動畫!

---------------------------------------------
後端 QueryArticle.ashx
---------------------------------------------
'取得文章!
Dim ads As New AccessDataSource("~/App_Data/history.mdb", "")
Dim dv As Data.DataView
Dim s As String = ""
Dim LinkS As String = ""
ads.SelectCommand = "select tag,subject,Message,DiscussID from [oldarticle] where DiscussID=" & Qid
'990507以 StringBuilder 寫入 JSON 格式以供 前端JS再使用
Dim sb As New StringBuilder
dv = ads.Select(New DataSourceSelectArguments)
If dv.Count <> 0 Then
'MsgBox(dv.Item(0).Item("tag") & " " & dv.Item(0).Item("Message"))
'JOSN的基本格式如下()
'{ 'dataset' : [ {'categoryid' : 'A' , 'categoryname' : 'Cat'}
', {'categoryid' : 'B' , 'categoryname' : 'Mouse'}
', {'categoryid' : 'B' , 'categoryname' : 'Dog'}]}
'990507 因簡易版,只有1筆資料 故採此架構
'{
' "foo": "afsdfsafsdf.",
' "bar": "ABCDEFG",
' "baz": [52, 97]
'}
sb.Append("{ ")
sb.Append("""TagV"" : """ & dv.Item(0).Item("tag") & """ , ") '寫入第一個參數,tag
sb.Append("""SugV"" : """ & dv.Item(0).Item("subject") & """, ")

If SelDataSource = 0 Then '資料庫的名稱不同

Dim ads2 As New AccessDataSource("~/App_Data/@history.mdb", "")
Dim dv2 As Data.DataView
ads2.SelectCommand = "select Message,DiscussID from [oldarticle] where DiscussID=" & Qid
dv2 = ads2.Select(New DataSourceSelectArguments)
If dv2.Count <> 0 Then
sb.Append("""MsgV"" : """ & dv2.Item(0).Item("Message") & """} ") '寫入第2個參數,Message
End If
Else
sb.Append("""MsgV"" : """ & dv.Item(0).Item("Message") & """} ") '寫入第2個參數,Message
End If

'看不見的段落字元 很恐怖!! 會導致 JSON出現錯誤! 990622
sb.Replace(vbCrLf, "
")
sb.Replace(vbCr, "
")
sb.Replace(vbLf, "
")
'sb.Replace("


", "
")
' context.Response.Write(Replace(dv.Item(0).Item("tag") & "ckvkc" & dv.Item(0).Item("Message"), vbCrLf, "
"))
context.Response.Write(sb.ToString)

2010年11月7日 星期日

電腦技巧 圖片 -> PDF 工具使用心得(i2pdf)

若是僅要將圖片轉成PDF檔,這個軟體和之前介紹的PDFill,好用多了。
PDFill除了要安裝好幾個程式外,所產生的暫存檔及處理速度也是相當驚人的差

若需求簡單,可直接用i2pdf,因他不需要安裝,在不壓縮圖片的情形下轉成PDF相當快速。
下載位置 http://www.softpedia.com/progDownload/i2pdf-Download-158298.html

追蹤者