แยกข้อจำกัดด้านใบอนุญาตของฟอนต์ TrueType และ OpenType ด้วย Java

เมื่อทำงานกับฟอนต์ดิจิทัลในแอปพลิเคชันซอฟต์แวร์ เอนจินสร้างเอกสาร หรือแพลตฟอร์มเว็บ การปฏิบัติตามข้อจำกัดด้านใบอนุญาตของฟอนต์ถือเป็นสิ่งสำคัญ ผู้ให้บริการฟอนต์จะฝังกฎด้านใบอนุญาตและการใช้งานไว้โดยตรงในไฟล์ฟอนต์เพื่อกำหนดวิธีการฝัง ติดตั้ง หรือแก้ไขฟอนต์ ด้วย Aspose.Font for Java นักพัฒนาสามารถตรวจสอบเมตริกของตาราง OS/2 ที่ฝังอยู่ และแยกข้อจำกัดด้านใบอนุญาตจากไฟล์ฟอนต์ TrueType (.ttf) และ OpenType (.otf) ด้วยโปรแกรม

 

ทำความเข้าใจโหมดการอนุญาตใช้งานฟอนต์

ข้อกำหนดของฟอนต์ TrueType และ OpenType จะจัดเก็บสิทธิ์การฝังไว้ในแฟล็ก fsType ภายในตาราง OS/2 ของฟอนต์ Aspose.Font for Java จัดหมวดหมู่ข้อจำกัดด้านใบอนุญาตที่ฝังอยู่นี้เป็นโหมดต่าง ๆ ผ่านคลาส LicenseFlags:

  • การฝังแบบติดตั้งได้: สามารถฝังฟอนต์และติดตั้งอย่างถาวรบนระบบระยะไกล หรือเพื่อให้ผู้ใช้รายอื่นใช้งานได้
  • การฝังแบบแก้ไขได้: สามารถฝังฟอนต์และโหลดชั่วคราวบนระบบอื่นได้ อนุญาตให้แก้ไข รวมถึงการจัดรูปแบบข้อความใหม่โดยใช้ฟอนต์ที่ฝังอยู่ และสามารถบันทึกการเปลี่ยนแปลงได้
  • การฝังสำหรับการแสดงตัวอย่างและการพิมพ์: สามารถฝังฟอนต์และโหลดชั่วคราวบนระบบอื่นได้ โดยใช้เฉพาะสำหรับการดูหรือพิมพ์เอกสารเท่านั้น
  • การฝังภายใต้ใบอนุญาตแบบจำกัด: ห้ามแก้ไข ฝัง หรือแลกเปลี่ยนฟอนต์ไม่ว่าด้วยวิธีใดโดยไม่ได้รับอนุญาตอย่างชัดแจ้งจากเจ้าของตามกฎหมายก่อน

แยกข้อจำกัดด้านใบอนุญาต TTF ใน Java

ในการอ่านสิทธิ์ใบอนุญาตโดยใช้ Aspose.Font for Java:

  • โหลดไฟล์ฟอนต์โดยใช้ FontFileDefinition และ FontDefinition โดยระบุ FontType.TTF.
  • เรียกดูตาราง OS/2 จากคอลเลกชันตารางของฟอนต์ (getTtfTables().getOs2Table())
  • รับแฟล็กใบอนุญาตโดยใช้ getLicenseFlags()
  • ประเมินสิทธิ์ในการฝังโดยใช้เมธอดตัวช่วย เช่น isEditableEmbedding(), isInstallableEmbedding(), isPreviewAndPrintEmbedding() หรือ isRestrictedLicenseEmbedding()

String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; // Font file name with full path

FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
TtfFont font = (TtfFont) Font.open(fd);

LicenseFlags licenseFlags = null;
if (font.getTtfTables().getOs2Table() != null)
{
    licenseFlags = font.getTtfTables().getOs2Table().getLicenseFlags();
}

if (licenseFlags == null || licenseFlags.isFSTypeAbsent())
{
    System.out.println(MessageFormat.format("Font {0} has no embedded license restrictions", font.getFontName()));
}
else
{
    if (licenseFlags.isEditableEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded on other systems."
            + " In addition, editing is permitted, including ability to format new text"
            + " using the embedded font, and changes may be saved.", font.getFontName()));
    }
    else if (licenseFlags.isInstallableEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} may be embedded, and may be permanently installed"
            + " for use on a remote systems, or for use by other users.", font.getFontName()));
    }
    else if (licenseFlags.isPreviewAndPrintEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded"
            + " on other systems for purposes of viewing or printing the document.", font.getFontName()));
    }
    else if (licenseFlags.isRestrictedLicenseEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} must not be modified, embedded or exchanged in any manner"
            + " without first obtaining explicit permission of the legal owner.", font.getFontName()));
    }
}

การติดตั้งและการตั้งค่า

เพิ่ม Aspose.Font for Java ลงในโปรเจกต์ของคุณผ่าน Maven

Package Manager Console Command

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-font</artifactId>
    <version>Latest</version>
</dependency>

คำถามที่พบบ่อย

1. แบบอักษร Type1 รองรับการแยกข้อจำกัดด้านใบอนุญาตโดยใช้ LicenseFlags หรือไม่?

ไม่ รูปแบบแบบอักษร Type1 มาตรฐาน (.pfb/.pfa) ไม่มีตาราง OS/2 แฟล็ก fsType และโครงสร้างตาราง OS/2 เป็นองค์ประกอบเฉพาะของรูปแบบแบบอักษร TrueType (.ttf) และ OpenType (.otf)

2. หมายความว่าอย่างไรหาก licenseFlags.isFSTypeAbsent() ส่งคืนค่า true?

หาก isFSTypeAbsent() ส่งคืนค่า true (หรือหาก licenseFlags เป็น null) แสดงว่าไม่มีแฟล็กข้อจำกัดด้านใบอนุญาตที่ฝังอยู่ในตาราง OS/2 ของไฟล์แบบอักษร

3. ฉันจะตรวจสอบได้อย่างไรว่าแบบอักษรอนุญาตให้แก้ไขเนื้อหาเอกสารหรือไม่?

คุณสามารถตรวจสอบ licenseFlags.isEditableEmbedding() ได้ หากค่าเป็น true แบบอักษรจะอนุญาตให้โหลดและแก้ไขชั่วคราว ทำให้ผู้ใช้สามารถจัดรูปแบบข้อความใหม่ด้วยแบบอักษรที่ฝังอยู่และบันทึกการเปลี่ยนแปลงได้