ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 6495|ตอบกลับ: 8

[VB.NET] แจกโค้ดการโหลดข้อมูลเข้าสู่ฟอร์ม PDF ด้วย Syncfusion .Net Library

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583




จากตอนที่แล้วเป็น "การสร้างฟอร์ม PDF ด้วย Syncfusion PDF Net Library" มาคราวนี้เราจะทำการอ่านข้อมูลจากไฟล์ MS Access เพื่อโหลด หรือเติมข้อมูลลงไปในฟอร์ม ซึ่งแอดมินเลือกตัว Control หลักๆมาเกือบครบ ประกอบไปด้วย TextBox, CheckBox, ComboBox, RadioButton และ ListBox Control โดยมีวิธีการดังนี้คือ จะทำการโหลดฟอร์ม PDF Template (ต้นแบบ) ขึ้นมาก่อน แล้วทำการอ่านข้อมูลเข้ามา เพื่อทำการกรอกใส่เข้าไปใน Control แต่ละตัว สุดท้ายก็ทำการบันทึกชื่อไฟล์ PDF ด้วยวันที่และเวลา หรือหากท่านนำไปพัฒนาต่อก็ควรเปิด Save File Dialog เพื่อให้ Users บันทึกชื่อไฟล์เอง ...

ดาวน์โหลดของฟรี Syncfusion Essential รุ่น Community ได้ที่นี่ (Version 17.1.0.47) ... ย้ำอีกทีว่าของฟรี 100% แน่นอน ...

Add References ...



มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Imports System.Data
  2. Imports Syncfusion.Pdf
  3. Imports Syncfusion.Pdf.Graphics
  4. Imports Syncfusion.Pdf.Interactive
  5. Imports Syncfusion.Pdf.Parsing
  6. Imports System.Data.OleDb
  7. Imports System.IO

  8. Public Class frmDBtoPDF
  9.     Dim Conn As New OleDbConnection
  10.     Dim Cmd As New OleDbCommand
  11.     Dim DR As OleDbDataReader
  12.     Dim DA As New OleDbDataAdapter
  13.     Dim DS As New DataSet
  14.     Dim strConn As String = String.Empty
  15.     Dim strSQL As String = String.Empty
  16.     '//
  17.     Dim strPathData As String = MyPath(Application.StartupPath) & "data"
  18.     Dim strPathTemplate As String = MyPath(Application.StartupPath)
  19.     Dim strFormFile As String = String.Empty

  20.     ' / ---------------------------------------------------------------
  21.     Private Sub frmDBtoPDF_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  22.         Try
  23.             '// Delete all pdf file if exist.
  24.             FileSystem.Kill(strPathData & "*pdf")
  25.             '// Delete only the specified file.
  26.             'If System.IO.File.Exists(strPathData & strFormFile) = True Then
  27.             'System.IO.File.Delete(strPathData & strFormFile)
  28.             'End If
  29.         Catch ex As Exception
  30.             MessageBox.Show(ex.Message)
  31.         Finally
  32.             If Conn.State = ConnectionState.Open Then Conn.Close()
  33.             Me.Dispose()
  34.             Application.Exit()
  35.         End Try
  36.     End Sub

  37.     ' / ---------------------------------------------------------------
  38.     Private Sub frmDBtoPDF_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  39.         '// START
  40.         Call ConnectDB()
  41.         Call LoadDataBase()
  42.     End Sub

  43.     ' / ---------------------------------------------------------------
  44.     Private Sub LoadDataBase()
  45.         Try
  46.             strSQL = _
  47.                 " SELECT tblPerson.PersonPK, tblPerson.PersonID, tblPerson.Name, tblPerson.Phone, tblPerson.Email, tblPerson.GenderFK, tblGender.Gender, " & _
  48.                 " tblPerson.JobTitleFK, tblJobTitle.JobTitle, tblPerson.LangFK, tblLanguage.LangName, tblPerson.QualificationFK, tblQualification.Qualification " & _
  49.                 " FROM ((tblJobTitle INNER JOIN (tblGender INNER JOIN tblPerson ON tblGender.GenderPK = tblPerson.GenderFK) ON tblJobTitle.JobTitlePK = tblPerson.JobTitleFK) " & _
  50.                 " INNER JOIN tblLanguage ON tblPerson.LangFK = tblLanguage.LangPK) INNER JOIN tblQualification ON tblPerson.QualificationFK = tblQualification.QualificationPK " & _
  51.                 " ORDER BY PersonPK "

  52.             '// Open connection
  53.             If Conn.State = ConnectionState.Closed Then Conn.Open()
  54.             DA = New OleDb.OleDbDataAdapter(strSQL, Conn)
  55.             DS = New DataSet
  56.             DA.Fill(DS, "MyTest")
  57.             dgvData.DataSource = DS.Tables("MyTest").DefaultView
  58.             Call SetupDataGridView(dgvData)
  59.         Catch ex As Exception
  60.             MessageBox.Show(ex.Message)
  61.         End Try
  62.         DS.Dispose()
  63.         DA.Dispose()

  64.     End Sub

  65.     ' / ---------------------------------------------------------------
  66.     ' / Initialized DataGridView
  67.     Private Sub SetupDataGridView(ByRef DGV As DataGridView)
  68.         With DGV
  69.             .RowTemplate.Height = 28
  70.             .AllowUserToOrderColumns = True
  71.             .AllowUserToDeleteRows = False
  72.             .AllowUserToAddRows = False
  73.             .ReadOnly = True
  74.             .MultiSelect = False
  75.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  76.             .Font = New Font("Tahoma", 9)
  77.             .AlternatingRowsDefaultCellStyle.BackColor = Color.Orange
  78.             .DefaultCellStyle.SelectionBackColor = Color.LightSkyBlue
  79.             '/ Auto size column width of each main by sorting the field.
  80.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  81.         End With
  82.     End Sub

  83.     ' / ---------------------------------------------------------------
  84.     Private Sub dgvData_DoubleClick(sender As Object, e As System.EventArgs) Handles dgvData.DoubleClick
  85.         If dgvData.RowCount <= 0 Then Return
  86.         '// Read the value of the focus row.
  87.         Dim PK = dgvData.Item(0, dgvData.CurrentRow.Index).Value  '// Keep Primary Key
  88.         strSQL = _
  89.             " SELECT tblPerson.PersonPK, tblPerson.PersonID, tblPerson.Name, tblPerson.Phone, tblPerson.Email, tblPerson.GenderFK, tblGender.Gender, " & _
  90.             " tblPerson.JobTitleFK, tblJobTitle.JobTitle, tblPerson.LangFK, tblLanguage.LangName, tblPerson.QualificationFK, tblQualification.Qualification " & _
  91.             " FROM ((tblJobTitle INNER JOIN (tblGender INNER JOIN tblPerson ON tblGender.GenderPK = tblPerson.GenderFK) ON tblJobTitle.JobTitlePK = tblPerson.JobTitleFK) " & _
  92.             " INNER JOIN tblLanguage ON tblPerson.LangFK = tblLanguage.LangPK) INNER JOIN tblQualification ON tblPerson.QualificationFK = tblQualification.QualificationPK " & _
  93.             " WHERE PersonPK = " & PK & _
  94.             " ORDER BY PersonPK "
  95.         '// Load data into PDF Form.
  96.         Call LoadDataToPDF(strSQL)
  97.     End Sub

  98.     ' / ---------------------------------------------------------------
  99.     Private Sub CreatePdfForm()
  100.         '/ Create a new PDF document
  101.         Dim document As PdfDocument = New PdfDocument()
  102.         '/ Add a new page to the PDF document
  103.         Dim page As PdfPage = document.Pages.Add()
  104.         '/ Set the True type font.
  105.         Dim font As PdfFont = New PdfTrueTypeFont(New Font("Tahoma", 14), 12, True)
  106.         '/ Create a solid brush.
  107.         Dim brush As PdfBrush = New PdfSolidBrush(Color.Black)
  108.         '/ Draw the string  
  109.         page.Graphics.DrawString("Job Application", font, brush, New PointF(250, 0))

  110.         '// Create TextBox
  111.         font = New PdfTrueTypeFont(New Font("Tahoma", 12), 12, True)
  112.         page.Graphics.DrawString("Name", font, brush, New PointF(10, 20))
  113.         '/ Create a text box field for name
  114.         Dim textBoxField1 As PdfTextBoxField = New PdfTextBoxField(page, "Name")
  115.         textBoxField1.Bounds = New RectangleF(10, 40, 200, 25)
  116.         textBoxField1.ToolTip = "Name"
  117.         document.Form.Fields.Add(textBoxField1)
  118.         '/
  119.         page.Graphics.DrawString("Email address", font, PdfBrushes.Black, New PointF(10, 80))
  120.         '/ Create a text box field for email address
  121.         Dim textBoxField3 As PdfTextBoxField = New PdfTextBoxField(page, "Email")
  122.         textBoxField3.Bounds = New RectangleF(10, 100, 200, 20)
  123.         textBoxField3.ToolTip = "Email address"
  124.         document.Form.Fields.Add(textBoxField3)
  125.         '//
  126.         page.Graphics.DrawString("Phone", font, PdfBrushes.Black, New PointF(10, 140))
  127.         '/ Create a text box field for phone
  128.         Dim textBoxField4 As PdfTextBoxField = New PdfTextBoxField(page, "Phone")
  129.         textBoxField4.Bounds = New RectangleF(10, 160, 200, 20)
  130.         textBoxField4.ToolTip = "Phone"
  131.         document.Form.Fields.Add(textBoxField4)

  132.         '// Create RadioButton
  133.         page.Graphics.DrawString("Gender", font, PdfBrushes.Black, New PointF(10, 200))
  134.         '/ Create radio button for gender
  135.         Dim employeesRadioList As PdfRadioButtonListField = New PdfRadioButtonListField(page, "Gender")
  136.         document.Form.Fields.Add(employeesRadioList)
  137.         page.Graphics.DrawString("Male", font, PdfBrushes.Black, New PointF(40, 220))
  138.         Dim radioButtonItem1 As PdfRadioButtonListItem = New PdfRadioButtonListItem("Male")
  139.         radioButtonItem1.Bounds = New RectangleF(10, 220, 20, 20)
  140.         page.Graphics.DrawString("Female", font, PdfBrushes.Black, New PointF(140, 220))
  141.         Dim radioButtonItem2 As PdfRadioButtonListItem = New PdfRadioButtonListItem("Female")
  142.         radioButtonItem2.Bounds = New RectangleF(110, 220, 20, 20)
  143.         employeesRadioList.Items.Add(radioButtonItem1)
  144.         employeesRadioList.Items.Add(radioButtonItem2)

  145.         '// Create ComboBox
  146.         page.Graphics.DrawString("Which position you are applying for?", font, PdfBrushes.Black, New PointF(10, 260))
  147.         '/ Create combo box for position
  148.         Dim comboBox As PdfComboBoxField = New PdfComboBoxField(page, "JobTitle")
  149.         comboBox.Bounds = New RectangleF(10, 280, 100, 20)
  150.         comboBox.BorderColor = New PdfColor(Color.Gray)
  151.         comboBox.ToolTip = "Job Title"
  152.         comboBox.Items.Add(New PdfListFieldItem("Development", "Development"))
  153.         comboBox.Items.Add(New PdfListFieldItem("Support", "Support"))
  154.         comboBox.Items.Add(New PdfListFieldItem("Documentation", "Documentation"))
  155.         document.Form.Fields.Add(comboBox)

  156.         '// Languages in ListBox
  157.         page.Graphics.DrawString("Languages Known", font, PdfBrushes.Black, New PointF(10, 320))
  158.         '/ Create list box field for languages
  159.         Dim listBoxField As PdfListBoxField = New PdfListBoxField(page, "Languages")
  160.         listBoxField.Bounds = New RectangleF(10, 340, 100, 50)
  161.         listBoxField.Items.Add(New PdfListFieldItem("English", "English"))
  162.         listBoxField.Items.Add(New PdfListFieldItem("French", "French"))
  163.         listBoxField.Items.Add(New PdfListFieldItem("German", "German"))
  164.         document.Form.Fields.Add(listBoxField)

  165.         '// Create CheckBox for Qualification.
  166.         page.Graphics.DrawString("Highest Qualification", font, PdfBrushes.Black, New PointF(10, 410))
  167.         '/ Add checked box field for associate degree
  168.         Dim checkBoxField1 As PdfCheckBoxField = New PdfCheckBoxField(page, "Associate degree")
  169.         page.Graphics.DrawString("Associate degree", font, PdfBrushes.Black, New PointF(30, 427))
  170.         checkBoxField1.ToolTip = "Associate degree"
  171.         checkBoxField1.Bounds = New RectangleF(10, 430, 10, 10)
  172.         document.Form.Fields.Add(checkBoxField1)
  173.         '/ Add checked box field for bachelor degree
  174.         Dim checkBoxField2 As PdfCheckBoxField = New PdfCheckBoxField(page, "Bachelor degree")
  175.         page.Graphics.DrawString("Bachelor degree", font, PdfBrushes.Black, New PointF(30, 447))
  176.         checkBoxField2.ToolTip = "Bachelor degree"
  177.         checkBoxField2.Bounds = New RectangleF(10, 450, 10, 10)
  178.         document.Form.Fields.Add(checkBoxField2)
  179.         '/ Add checked box field for Post Graduate
  180.         Dim checkBoxField3 As PdfCheckBoxField = New PdfCheckBoxField(page, "Post Graduate")
  181.         page.Graphics.DrawString("Post Graduate", font, PdfBrushes.Black, New PointF(30, 467))
  182.         checkBoxField3.ToolTip = "Post Graduate"
  183.         checkBoxField3.Bounds = New RectangleF(10, 470, 10, 10)
  184.         document.Form.Fields.Add(checkBoxField3)

  185.         '/ Save the document
  186.         document.Save(strPathTemplate & "FormTemplate.pdf")
  187.         '/ Close the document
  188.         document.Close(True)
  189.         '/ This will open the PDF file so, the result will be seen in default PDF Viewer.
  190.         Process.Start(strPathTemplate & "FormTemplate.pdf")
  191.     End Sub

  192.     ' / ---------------------------------------------------------------
  193.     Private Sub btnCreateFormPDF_Click(sender As System.Object, e As System.EventArgs) Handles btnCreateFormPDF.Click
  194.         Call CreatePdfForm()
  195.     End Sub

  196.     Private Sub btnDBtoPDF_Click(sender As System.Object, e As System.EventArgs) Handles btnDBtoPDF.Click
  197.         '// Call event double click on DataGridView
  198.         Call dgvData_DoubleClick(sender, e)
  199.     End Sub

  200.     ' / ---------------------------------------------------------------
  201.     Private Sub LoadDataToPDF(ByVal sql As String)
  202.         If Conn.State = ConnectionState.Closed Then Conn.Open()
  203.         '/ Create a command and set its connection  
  204.         Cmd = New OleDbCommand(sql, Conn)
  205.         '/ Execute command  
  206.         DR = Cmd.ExecuteReader()
  207.         '/ Load the PDF document. (Template)
  208.         Dim LoadedDocument As PdfLoadedDocument = New PdfLoadedDocument(strPathTemplate & "FormTemplate.pdf")
  209.         '/ Get the loaded form
  210.         Dim LoadedForm As PdfLoadedForm = LoadedDocument.Form
  211.         While DR.Read()
  212.             '// Syncfusion.Pdf.Parsing Namespace
  213.             '// https://help.syncfusion.com/cr/cref_files/aspnet-classic/pdf/Syncfusion.Pdf.Web~Syncfusion.Pdf.Parsing_namespace.html

  214.             '/ Get the values from database
  215.             Dim name As String = DR("Name").ToString()
  216.             Dim phone As String = DR("Phone").ToString()
  217.             Dim email As String = DR("Email").ToString()
  218.             Dim gender As String = DR("Gender").ToString
  219.             '/ Assign values to fields
  220.             TryCast(LoadedForm.Fields("Name"), PdfLoadedTextBoxField).Text = name
  221.             TryCast(LoadedForm.Fields("Phone"), PdfLoadedTextBoxField).Text = phone
  222.             TryCast(LoadedForm.Fields("Email"), PdfLoadedTextBoxField).Text = email

  223.             '/ Read the 'Gender' radio button field   
  224.             Dim RadioButtonField As PdfLoadedRadioButtonListField = TryCast(LoadedForm.Fields("Gender"), PdfLoadedRadioButtonListField)
  225.             TryCast(LoadedForm.Fields("Gender"), PdfLoadedRadioButtonListField).SelectedValue = gender

  226.             '/ Read a combo box field
  227.             Dim jobtitle As Byte = Val(DR("JobTitleFK").ToString)
  228.             TryCast(LoadedForm.Fields("JobTitle"), PdfLoadedComboBoxField).SelectedIndex = jobtitle - 1

  229.             '// Language FK
  230.             Dim language As Byte = Val(DR("LangFK").ToString)
  231.             TryCast(LoadedForm.Fields("Languages"), PdfLoadedListBoxField).SelectedIndex = New Integer(0) {language - 1}

  232.             '// Qualification
  233.             Dim qualification As Byte = Val(DR("QualificationFK").ToString)
  234.             Select Case qualification
  235.                 Case 1
  236.                     TryCast(LoadedForm.Fields("Associate degree"), PdfLoadedCheckBoxField).Items(0).Checked = True
  237.                 Case 2
  238.                     TryCast(LoadedForm.Fields("Bachelor degree"), PdfLoadedCheckBoxField).Items(0).Checked = True
  239.                 Case 3
  240.                     TryCast(LoadedForm.Fields("Post Graduate"), PdfLoadedCheckBoxField).Items(0).Checked = True
  241.             End Select

  242.             '// Other parts, try to practice by doing yourself.

  243.         End While
  244.         '/ Save the document
  245.         strFormFile = Format(Now, "ddMMyyyy-hhmmss") & ".pdf"
  246.         LoadedDocument.Save(strPathData & strFormFile)
  247.         '/ Close the document
  248.         LoadedDocument.Close(True)
  249.         '/ This will open the PDF file so, the result will be seen in default PDF Viewer
  250.         Process.Start(strPathData & strFormFile)
  251.     End Sub

  252.     ' / ---------------------------------------------------------------
  253.     Private Sub ConnectDB()
  254.         '/ Connection string
  255.         Dim dBFile As String = strPathData & "SampleDB.accdb"
  256.         strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dBFile
  257.         Try
  258.             '/ Create a connection  
  259.             Conn = New OleDbConnection(strConn)
  260.             '/ Open the connection and execute the select command
  261.             Conn.Open()
  262.         Catch ex As Exception
  263.             MessageBox.Show(ex.Message)
  264.         End Try
  265.     End Sub

  266.     ' / ---------------------------------------------------------------
  267.     ' / Get my project path
  268.     ' / AppPath = C:\My Project\bin\debug
  269.     ' / Replace "\bin\debug" with ""
  270.     ' / Return : C:\My Project\
  271.     Function MyPath(ByVal AppPath As String) As String
  272.         '/ MessageBox.Show(AppPath);
  273.         AppPath = AppPath.ToLower()
  274.         '/ Return Value
  275.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  276.         '// If not found folder then put the \ (BackSlash) at the end.
  277.         If Microsoft.VisualBasic.Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  278.     End Function

  279. End Class
คัดลอกไปที่คลิปบอร์ด



ดาวน์โหลดโค้ดต้นฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

5

โพสต์

322

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
322
โพสต์ 2019-6-25 12:08:53 | ดูโพสต์ทั้งหมด

สวัสดีครับ
  ผมโหลด Syncfusion PDF Net Library ไม่ได้ รบกวนส่งให้หน่อยได้ไหมครับ

  ขอบคุณครับ

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583
 เจ้าของ| โพสต์ 2019-6-25 13:08:31 | ดูโพสต์ทั้งหมด

Ruschanon ตอบกลับเมื่อ 2019-6-25 12:08
สวัสดีครับ
  ผมโหลด Syncfusion PDF Net Library ไม่ได้ รบกวนส่งให้หน่อยได้ไหมครับ

มาตามลิ้งค์นี้ แล้วต้องสมัครหรือลงทะเบียนก่อนครับถึงจะดาวน์โหลดได้ ยอมเสียเวลาเล็กน้อยครับ เพราะจะมีการอัพเดตกันประจำเลย
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

4

กระทู้

13

โพสต์

112

เครดิต

Member

Rank: 2

เครดิต
112
โพสต์ 2019-10-2 11:56:31 | ดูโพสต์ทั้งหมด

สมัครแล้วครับ แต่ยัง download ไม่ได้ครับ

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583
 เจ้าของ| โพสต์ 2019-10-2 14:33:00 | ดูโพสต์ทั้งหมด

komen ตอบกลับเมื่อ 2019-10-2 11:56
สมัครแล้วครับ แต่ยัง download ไม่ได้ครับ

ได้ปกติน่ะครับ ... https://www.syncfusion.com/accou ... o/licensed/17_3_0_9
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

33

โพสต์

372

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
372
โพสต์ 2019-10-16 01:14:05 | ดูโพสต์ทั้งหมด

ขอบคุณคับ

4

กระทู้

13

โพสต์

112

เครดิต

Member

Rank: 2

เครดิต
112
โพสต์ 2019-11-6 15:04:07 | ดูโพสต์ทั้งหมด

thongkorn ตอบกลับเมื่อ 2019-10-2 14:33
ได้ปกติน่ะครับ ... https://www.syncfusion.com/account/downloads/studio/licensed/17_3_0_9

ผมโหลดแล้ว มันบอกหมดอายุ ครับ

0

กระทู้

13

โพสต์

40

เครดิต

Newbie

Rank: 1

เครดิต
40
โพสต์ 2019-12-9 09:21:57 | ดูโพสต์ทั้งหมด

ขอคุณครับ

0

กระทู้

58

โพสต์

140

เครดิต

Member

Rank: 2

เครดิต
140
โพสต์ 2022-10-25 15:43:01 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 21:23 , Processed in 0.241439 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้