หน้า: [1]
 
ผู้เขียน หัวข้อ: [Programing] แบ่งปันโค้ดติดตั้งฟอนต์  (อ่าน 816 ครั้ง)
0 สมาชิก และ 1 ขาจร กำลังดูหัวข้อนี้
สำหรับท่านใดที่รู้จักผม คงน่าจะรู้ว่าผมทำแอปพลิเคชันให้เช่าฟอนต์อยู่ ก็ขอบอกตรง ๆ ว่ามันได้สวยงามอะไรไม่ได้รายได้ดีอะไร  ถ้าให้ผมเดาคงเป็นเพราะ

  • ไม่มีฟอนต์ที่ต้องการ
  • ความคุ้นชินของผู้ใช้งานในปัจจุบันที่ชินกับการติดตั้งไฟล์ฟอนต์โดยตรง
  • ความไม่สามารถเข้ากันได้กับแอปอื่น ๆ หลายคนน่าจะใช้แอปเก่า ๆ อยู่เช่น Adobe CS ไม่พร้อมที่จะไปแอป Adobe CC เวอร์ชันปัจจุบันด้วยเหตุผลอะไรก็แล้วแต่
  • ความน่าเชื่อถือ อีนี้เป็นใครจะให้ฉันติดตั้งแอป แอปดูดเงินหรือป่าวก็ไม่รู้ 555

ผมเอาโค้ดที่เป็นแกนกลางสำคัญมาแบ่งปันให้เป็นแนวทางในอนาคตสำหรับคนที่น่าจะทำได้ดีกว่าผม โค้ดเขียนด้วยภาษา Dart เรียกใช้ Native Api ของ MacOS และ WindowsOS ในการติดตั้งฟอนต์ โดยที่ฟอนต์ไม่จำเป็นจะต้องอยู่ที่โฟลเดอร์ฟอนต์ของระบบปฎิบัติการ เราจะเอาไฟล์ฟอนต์ซ้อนไว้ที่ไหนก็ได้แล้วแต่เลย ผมเลือกใช้ภาษา Dart เพาะสามารถเรียกใช้ Native Api ของแต่ละระบบให้อยู่ในโค้ดชุดเดียวกันได้โดยที่เราไม่ต้องเขียนแยก และเป็นภาษาแบบ VM ช่วยลดปัญหาความเข้ากันได้ของระบบที่แตกต่างกัน และมันเข้าใจง่ายดี

ส่วนแอปพลิเคชัน (Client App) อันนี้แล้วแต่เลย จะเขียนด้วย Flutter ก็ได้ หรือ Electron แบบผม

ส่วนระบบหลังบ้าน (Backend Server) แล้วแต่จะออกแบบยังไงก็ได้จะเป็น License Key Base (แบบผม) หรือ Login Email Base บางที่อาจจะทำแบบให้ใช้ก่อนจ่ายที่หลังจับเวลาตอนเปิดใช้งาน ว่าเปิดใช้ข้างไว้นานเท่าไหล่แล้วมาคิดเงินที่หลัง

โค้ดผมไม่ได้เขียนเองแบบ 100% มีการใช้ Chat Ai ช่วยบ้าง สำหรับโปรแกรมเมอร์ที่มาเห็นโค้ดผมแล้วร้อง Eww~~ ผมไม่ได้จบวิทยาการคอมมาโดยตรงสงสารผมเถอะนะ (เหงื่อแตกพลั่ก)

มาเริ่มกันดีกว่า
  • ติดตั้ง Dart Compiler https://dart.dev/get-dart
  • ดาวน์โหลดโปรเจ็คที่ลิงค์ https://github.com/Jipatype/font_manager_public
  • แตกไฟล์โปรเจ็คและเปิด Terminal และพอยมาที่ root ของโปรเจ็ค
  • พิมพ์ $ dart pub get
  • พิมพ์ $ dart compile exe ./bin/font_manager.dart
  • เราก็จะได้ binary executable file ภายใต้ ./bin/font_manager.exe

วิธีการใช้งาน
font_manager.exe <command> <font_path>
ตัวอย่าง
font_manager.exe --register /path/to/font.otf //สำหรับติดตั้งฟอนต์
font_manager.exe --register-json /path/to/file.json //สำหรับติดตั้งฟอนต์ตามรายการใน json ไฟล์
font_manager.exe --unregister /path/to/font.otf  //ถอนการติดตั้งฟอนต์
font_manager.exe --unregister-all /path/to/directory //ถอนการติดตั้งฟอนต์ทั้งหมดในโฟลเดอร์
font_manager.exe --unregister-json /path/to/file.json //ถอนการติดตั้งฟอนต์ตามรายการใน json ไฟล์

json file schema

{
 "fontPaths" : ["/path/to/font.otf", ....]
}

Native Api
MacOS : CTFontManagerRegisterFontsForURL
https://developer.apple.com/documentation/coretext/1499468-ctfontmanagerregisterfontsforurl
MacOS : CTFontManagerUnregisterFontsForURL
https://developer.apple.com/documentation/coretext/1499496-ctfontmanagerunregisterfontsforu
WindowsOS : AddFontResourceW
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-addfontresourcew
WindowsOS : RemoveFontResourceW
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-removefontresourcew
WindowsOS : PostMessageW // For refresh font
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagew

*Api ของ WindowsOS ทำงานค่อนค้างช้า

ตัวอย่างโค้ด:

ผมเหนื่อยมาก
« แก้ไขครั้งสุดท้าย: 29 ส.ค. 2024, 09:59 น. โดย Jipatype » บันทึกการเข้า
เก่งมาก..แมว  เจ๋ง


บันทึกการเข้า
โปรแกรมนี้ทำงานแบบไม่ต้องติดตั้งตัวไฟล์ฟอนต์จริงๆ เป็นไฟล์ๆ แต่สตรีมลงมาจากเซิฟเวอร์ใช่ไหมครับ
บันทึกการเข้า

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

ถ้าแอปผมก็เป็นการสตรีมลงมาจากเซิฟเวอร์ครับ คล้าย Adobe Font, ตัว Adobe Font เองก็ต้องโหลดฟอนต์จากเซิฟเวอร์มาติดตั้งหรือมีไฟล์อยู่ในเครื่องผู้ใช้เช่นเดียวกันครับ เพียงแค่เขาซ้อนเอาไว้

ส่วนโค้ดที่ผมแจกนี้เป็นแค่ส่วนหนึ่งเท่านั้นครับสำหรับติดตั้งหรือทำให้โปรแกรมอื่นๆ เช่น Adobe Photoshop เห็นฟอนต์เรา
« แก้ไขครั้งสุดท้าย: 29 ส.ค. 2024, 11:38 น. โดย Jipatype » บันทึกการเข้า
 เจ๋ง
บันทึกการเข้า

สู่ความโดดเดี่ยว อันไกลโพ้น
กรี๊ดดดดด
บันทึกการเข้า

ทำมาหากินด้วยการเปิดร้านสกรีนเสื้อยืด จ้ะ
หน้า: [1]
 
 
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2007, Simple Machines | Thai language by ThaiSMF Valid XHTML 1.0! Valid CSS!