สำหรับท่านใดที่รู้จักผม คงน่าจะรู้ว่าผมทำแอปพลิเคชันให้เช่าฟอนต์อยู่ ก็ขอบอกตรง ๆ ว่ามันได้สวยงามอะไรไม่ได้รายได้ดีอะไร ถ้าให้ผมเดาคงเป็นเพราะ
- ไม่มีฟอนต์ที่ต้องการ
- ความคุ้นชินของผู้ใช้งานในปัจจุบันที่ชินกับการติดตั้งไฟล์ฟอนต์โดยตรง
- ความไม่สามารถเข้ากันได้กับแอปอื่น ๆ หลายคนน่าจะใช้แอปเก่า ๆ อยู่เช่น 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~~ ผมไม่ได้จบวิทยาการคอมมาโดยตรงสงสารผมเถอะนะ
มาเริ่มกันดีกว่า
วิธีการใช้งาน
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-ctfontmanagerregisterfontsforurlMacOS : CTFontManagerUnregisterFontsForURL
https://developer.apple.com/documentation/coretext/1499496-ctfontmanagerunregisterfontsforuWindowsOS : AddFontResourceW
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-addfontresourcewWindowsOS : RemoveFontResourceW
https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-removefontresourcewWindowsOS : PostMessageW // For refresh font
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagew*Api ของ WindowsOS ทำงานค่อนค้างช้า
ตัวอย่างโค้ด:
ผมเหนื่อยมาก