2026年1月18日 星期日

用iTextSharp變成互動PDF

用iTextSharp變成互動PDF (Interactive PDF)
我發現互動pdf可以讓使用者參與,可以輸入表單欄位,並檢查資料這樣PDF就可以變成Game了。
所以我就將crystal report產出的PDF資料,再用iTextSharp將PDF加入TextField,PushbuttonField變成互動PDF,就可以讓使用者輸入答案或直接看答案。
成語滿格 CROSSWORD 下載互動 sample pdf
    
//用iTextSharp加入TextField
//96個填入格子 預設空白
for (int i = 0; i < 96; i++)
{
    X = i % 8;
    Y = i / 8;
    var W = new TextField(stamp.Writer, new Rectangle(x1, y1, x2, y2), "W" + i.ToString())
    {
        Alignment = Element.ALIGN_CENTER & Element.ALIGN_MIDDLE,
        MaxCharacterLength = 1,
        FontSize = 11,
        Font = baseFont,
        TextColor = Color.BLUE,
    };

    PdfFormField textField = W.GetTextField();
    //輸入完檢查 正確否   
    string jschk = string.Format("chk(event,{0});", i.ToString());
    PdfAction onBlur = PdfAction.JavaScript(jschk, stamp.Writer);
    textField.SetAdditionalActions(PdfName.BL, onBlur);  // On blur
    stamp.AddAnnotation(textField, 1);
}

//用iTextSharp加入PushbuttonField
//數個 看答案按鈕   hover可以看提示,click可以直接show答案 
string js = string.Format("showdata({0});",idx.ToString());            
PdfAction action = PdfAction.JavaScript(  js, stamp.Writer);
var ball = new PushbuttonField(stamp.Writer, new Rectangle(x1, y1, x2, y2), "ball" + idx.ToString());
ball.Text = chengyu_def  // tooltip  adobe edge ok  

PdfFormField ballField = ball.Field;
ballField.Action = action;
stamp.AddAnnotation(ballField, 1);
        
    

2016年2月1日 星期一

將svn的記錄產生成 xml 檔案

在svn的工作目錄下
命令提示字元(cmd.exe) 中執行
svn  log -r{2015-1-1}:{2016-1-1}   D:\workcopy\   --xml -v >  D:\svnlog.xml
(這個指令的意思是:產生 2015-1-1 到2016-1-1之間版本的記錄 產生成 svnlog.xml檔 )

則會產生如下格式的XML檔,如此就可以使用這些內容做其他的管理


XML格式



















2015年12月21日 星期一

crystal report 動態變更線條 LineObject

 'crystal report  動態變更線條  LineObject

       Dim crReport1 As ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument

        '載入報表
        Dim Path As String = Request.ServerVariables("APPL_PHYSICAL_PATH")
        crReport1.Load(Path & "rpt\STANDARD.rpt")


        '找到已存在的線條物件
        Dim Line As LineObject = crReport1.ReportDefinition.ReportObjects("Line1")

        '隱藏線條
        'Line.ObjectFormat.EnableSuppress = True
        '變更線條樣式
        Line.LineStyle = LineStyle.SingleLine
        '變更線條位置
        Line.Left = 100
       '變更線條顏色
        Line.LineColor = Drawing.Color.Red
        '
        '

crystal report 動態變更文字欄位 TextObject

'crystal report  動態變更文字欄位  TextObject

  Dim crReport1 As ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument

        '載入報表
        Dim Path As String = Request.ServerVariables("APPL_PHYSICAL_PATH")
        crReport1.Load(Path & "rpt\STANDARD.rpt")

   '找到已存在的文字欄位
        Dim txtobj As TextObject
        txtobj = crReport1.ReportDefinition.ReportObjects("TEXT1")
        txtobj.Text = "變更後內容"
        txtobj.Height = 285
        txtobj.Top = 1985
        txtobj.Left = 300
        txtobj.Width = 2000
        txtobj.ObjectFormat.EnableCanGrow = True

crystal report 動態變更公式欄位 FormulaFields

'crystal report  動態變更公式 FormulaFields

Dim crReport1 As ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument

        '載入報表
        Dim Path As String = Request.ServerVariables("APPL_PHYSICAL_PATH")
        crReport1.Load(Path & "rpt\STANDARD.rpt")

        '找到公式欄位
        Dim fieldObj As FormulaFieldDefinition
        fieldObj = crReport1.DataDefinition.FormulaFields("公式1")

        '變更公式內容
        fieldObj.Text = "{TABLE.COLUMNA}"

2015年11月6日 星期五

gzip

Imports System.IO
Imports System.IO.Compression
 
             
  Response.Filter = New GZipStream(Response.Filter, CompressionMode.Compress)
  Response.AppendHeader("Content-Encoding", "gzip")

  Response.Write("yourdata")
  Response.Flush()

2015年9月28日 星期一

crystal report 動態產生文字標題欄位 TextObject

'準備一個報表樣本() : standard.rpt

        '載入報表樣本
        Dim crReport As ReportDocument = New CrystalDecisions.CrystalReports.Engine.ReportDocument
        Dim Path As String = Request.ServerVariables("APPL_PHYSICAL_PATH")
        crReport.Load(Path & "rpt\standard.rpt")
        Dim rasClientDocument As ClientDoc.ISCDReportClientDocument = crReport.ReportClientDocument
        '找到pagehead(頁首)區段
        Dim pageSection As CrystalDecisions.ReportAppServer.ReportDefModel.Section = rasClientDocument.ReportDefinition.PageHeaderArea.Sections(0)

        '在報表的pagehead(頁首)區段加入文字標題欄位 create TextObject
        Dim txtObject As CrystalDecisions.ReportAppServer.ReportDefModel.TextObject
        Dim txtObjectParagraph As ReportDefModel.Paragraph
        Dim txtObjectText As ReportDefModel.ParagraphTextElement

        '欄位的字型顏色定義
        Dim dFontColor As ReportDefModel.FontColor
        Dim dFont As ReportDefModel.Font
        dFont = New ReportDefModel.FontClass()
        dFont.Size = 11
        dFont.Name = "標楷體"
        dFontColor = New ReportDefModel.FontColorClass()
        dFontColor.Font = dFont

        txtObject = New CrystalDecisions.ReportAppServer.ReportDefModel.TextObject
        txtObject.Name = "text1"
        txtObject.Height = 285
        txtObject.Top = 1985
        txtObject.Left = begpx
        txtObject.Width = textbox1.Text.Trim.Length * 300  '變數 要加入的文字內容的寬度
        txtObject.Format.EnableCanGrow = True

        '處理Text objects中的文字內容
        txtObjectParagraph = New ReportDefModel.Paragraph
        txtObjectText = New ReportDefModel.ParagraphTextElement
        txtObjectText.Text = textbox1.Text.Trim '變數 要加入的文字內容
        txtObjectParagraph.ParagraphElements.Add(txtObjectText)
        txtObjectParagraph.FontColor = dFontColor
        txtObject.Paragraphs.Add(txtObjectParagraph)

        '加入Text objects
        rasClientDocument.ReportDefController.ReportObjectController.Add(txtObject, pageSection, 0)