用Access打印帶相片的證件

字號:

最近筆者接到一個(gè)任務(wù),要將學(xué)生的證書信息及相片打印到3+1技能證書模板上,并且還要傳到網(wǎng)上供用人單位查詢。原始數(shù)據(jù)分兩部分,一部分是包含學(xué)生姓名、身份證號、認(rèn)證項(xiàng)目、證書編號等信息的Excel表;另一部分是按認(rèn)證項(xiàng)目分類、以學(xué)生姓名為名的相片,圖片大小均為90×120像素,圖片格式均為JPG。
    考慮到時(shí)間上的緊迫性,還有用戶操作的易用性,以后上網(wǎng)查詢所需數(shù)據(jù)庫的兼容性,因此決定選用Access來開發(fā)。Access具有強(qiáng)大的窗體創(chuàng)建、報(bào)表打印、VBA編程功能,足以勝任大部分小型數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)。
    創(chuàng)建數(shù)據(jù)庫和表
    1. 打開Microsoft Office Access,創(chuàng)建一個(gè)空數(shù)據(jù)庫,與相片的分類目錄放在同一個(gè)文件夾下。
    2. 使用“文件→獲取外部數(shù)據(jù)→導(dǎo)入”功能將Excel表直接導(dǎo)入Access中,保存為“證書信息”表。
    創(chuàng)建證書信息報(bào)表
    1. 創(chuàng)建“證書信息”報(bào)表,先插入一個(gè)“圖像”控件,設(shè)置其圖片屬性為證書模板圖片,設(shè)置其大小為證書模板的大小,設(shè)置其可見性為否,這樣有利于證書信息的排版,且不會(huì)打印出來;再依次插入要打印的字段列表,設(shè)置好字體和字號;最后再插入一個(gè)“圖像”控件,放置于打印相片的地方,設(shè)置其大小為相片的大小,設(shè)置其名稱為“stuimg”。
    2. 依次點(diǎn)擊菜單欄“視圖→代碼”命令,進(jìn)入VBA代碼編寫窗口,編寫如下代碼:
    Private Sub 主體_Format(Cancel As Integer, FormatCount As Integer)
    Dim imgpath As String
    ' 依據(jù)應(yīng)用程序路徑、認(rèn)證項(xiàng)目名稱、姓名得到相片路徑
    imgpath = Application.CurrentProject.Path +"\" +認(rèn)證項(xiàng)目.text +"\"+ 姓名.Text+".jpg"
    ' 判斷照片是否存在,如果不存在則顯示一張空白的圖片。
    If Dir(imgpath) = "" Then imgpath = Application.CurrentProject.Path + "\noimg.bmp"
    Stuimg.Picture = imgpath
    End Sub
    創(chuàng)建打印預(yù)覽面板窗體
    1. 創(chuàng)建“打印預(yù)覽面板”,依次放置一個(gè)用于查詢的文本框,并命名為“inputname”;兩個(gè)命令按鈕“預(yù)覽”、“關(guān)閉”。
    2. 依次點(diǎn)擊菜單欄“視圖→代碼”命令,進(jìn)入VBA代碼編寫窗口,編寫如下代碼:
    Public stuname As String '定義全局變量stuname
    Sub PrintReports(PrintMode As Integer)
    ' 創(chuàng)建打印預(yù)覽子程序
    Dim strWhereCategory As String
    If stuname <> Empty Then
     strWhereCategory = "姓名= '" + stuname + "'"
    End If
    DoCmd.OpenReport "證書信息", PrintMode, , strWhereCategory
    DoCmd.Close acForm, "打印預(yù)覽面板"
    End Sub
    Private Sub inputname_Change()