Áß‚‡ ÍË Ä‚ˆ
ÝßË Å›‹–

Ä‚ˆ ÞŸ…‹Šœ


ÁÍ ÜßÁ à‰• ÍßÔˆ à— ËÁË ËÁߊ Þ‚Œœ ‚›Œ àƒ Jean Pierre Dube Å›‹– ÞŸÁ ÍË
àé…é•ÍŒŸ„ ÿ‚class ÎÁ ÍßÔˆ à— ÅŠß›À ËÁߊ ‚›Œ àƒ ÞŸœˆ› ßÁ :ËŸì‚›œ Ä‚ˆ
.ËŸì‚›œ àË‚•…‹Á Java Print API

ÍË .ËÍßÀ ÝéŸéÁßéŠ Ü雃 ‚›Œ ÎÁ ÿœ‚‰…›Á Áß‚‡ ÍË Ä‚ˆ ËÍß› ÍË ÑŠƒ ÞŸÁ ÍË
Î韜 ß ¬(Printable and Pageable) ËŸË͘ àŽÍ ‚›Œ àƒ Ä‚ˆ ÜË› ßË ÜßÁ Å›‹–
Ä‚ˆ ÞŸ™ßÁ ‚ƒ ÁÍ ÝßË Å›‹– .ËŸË͘ áÍßÀË‚Ÿ ‚›Œ àƒ Book К— ÎÁ àË‚•…‹Á ÎÍÔ
Java_2D ‚éƒ Í…àËŸˆŸ„ ÚÍÁË› render àƒ Ð„‹ ß Ëß›œ ËŸÁߊ ÖßÍŒ à‰• ÚŸ ÎÁ
ß ‚Ŝߕ ÎÁ àË‚•…‹Á ÿ˜œß˜ˆ ËÍß› ÍË .ÅŠÁËÍ„ ÝŸÁߊ àÔ߃͛ ÿ‚ž‹š— ÍŸ‚‹ ß
àËÁË Üßé– Üéƒé– Å›‹– ÍË à—ŸÍßÔœ‚› ß ËÁË ÝÁߊ ÉŸŽß… àÔ߃͛ ÿ‚К— Οœ
à‡ß… .ÅŠÁËÍ„ ÝŸÁߊ Ø™…Š› ÿ‚Ý͕Ś„ ÍË Ä‚ˆ àƒ Ô߃͛ Üì‚‹› ÿ‹Í̓ àƒ ¬ËŒ
ÎßËœŸß ß Ð—ßœŸ™ ʼn… Þ‚‹ Java ÎÁ àË‚•…‹Á ‚ƒ Å‚œŸÍ›… Ý‚›… à— ËŸŒ‚ƒ à…ŒÁË
.Ë߃ ËÁߊ Á͇Á ß ÜŸ‚„›— ܃‚– ²°°°



ËŸœ— Ä‚ˆ ÁÍ Ëߊ à‰• ÞŸ™ßÁ
ß Printable :ËÍÁË ÒŠŒ› ÜË› ßË Áß‚‡ ÍË Ä‚ˆ Ý…‹Ÿ‹ à— ËŸ…•͘ ÁÍ• ± ÑŠƒ ÍË
ÿÁÍÁË ¬Ë韂›œ Ä‚ˆ ÁÍ àË‚‹ ÚÍÁË› ËœÁß…ÿ› Ô–• Printable àˆ Í˜Á .Pageable
ËŸ‚ƒ Å‚‰• à— Å‹œŸÁ ÞÀ ÞŸÍ…˜Í΃ ß ÅŸËßˉ› ÞŸ™ßÁ .Å‹Á áÍ‚Ÿ‹ƒ ÿ‚ž…ŸËßˉ›
Ø‚éÔééœÁ Íé˜éŸË Å͂郃 Pageable ÜË› .ËœŒ‚ƒ ÍÁËÍߊ̓ àƒ‚Œ› ś͕ ÚŸ ÎÁ
ÚÍÁËé› ËéœÁßé…ÿé› Book Ðšé— ÎÁ àË‚é•é…é‹Á ‚éƒ .ËŸ‚›œÿ› àìÁÍÁ ÁÍ áÍ…ŒŸƒ
Ë‚é‡éŸÁ ËéœÁàËŒ àËÁË Å›Í• Åß‚•…› ÍßÔƒ à— ÁÍ ËË…› Å‚‰• ‚ƒ ß multipage
Ä‚ˆ Ü› Printable ÿߘ™Á ÎÁ àË‚•…‹Á ‚ƒ ÍßÔˆ à— ËËÿ› Þ‚Œœ ± Å‹Ÿ™ .ËŸ‚›œ
.ËŸË Ý‚‡œÁ ÁÍ

ÍË ‘郂éœé› Å雋– ÎÁ ËŸœÁß…ÿ› ÁÍ ‚žœÀ ÐÍß‹ ‚ƒ àÁÍ› Å‚œŸÍ›… Ý‚›… :à‡ß…
.ËŸì‚›œ download à™‚–› ÿ‚ž…œÁ

± Å‹Ÿ™

ÓÍé• Ñ韄 Å‚›ŸÕœ… ÎÁ àË‚•…‹Á ‚ƒ ÁÍ ÈœŸÁ ÝŸœ ÍË ÈœŸÁ ÝŸœ grid ÚŸ ± Å‹Ÿ™
Åé‹ÁÍ ß Äéˆ ¬ÞéŸéŸ‚é„ ¬š‚éƒ ÿÁ̓ ÈœŸÁ ÚŸ šß›› ¬Ëß›œ ËÁߊ Ä‚ˆ ‚àŸŒ‚‰
Íé˜Á à— ËŸŒ‚ƒ à…ŒÁË à‡ß… Å‹Á ËœŒ›Áߊ ß .ËŒ ËÁߊ à…•Í˜ ÍÕœ ÍË ‚àŸŒ‚‰
¬ËéŒ ËœÁߊœ ‚‡ ‚àŸŒ‚‰ ˟˃ Ý‚‡œÁ Java 1.2 ‚ƒ ÁÍ àœß›œ ÞŸÁ ËŸÍÁË ÜŸ›
ÍË Û‚éƒ ÚéŸ .ËéŒ ËéÁßéŠ ÈéœéŸÁ ÚéŸ ÎÁ Íé…éŒéŸéƒ ÿé›é— Äéˆ Å›‹ àŸŒ‚‰ ß
.ËŒ ËÁߊ àŸ–œ ÞŸÁ Çߛ Java 1.2 Print API

printable ÜË› ‚ƒ Ä‚ˆ ÿÁ̓ ÁÍ Î‚Ÿœ ËÍß› Å‚›ÁË–Á ˟˃ à΂‡Á ÍŽ‚‰ Ü‚‰ ÍË
.ÝŸì‚›œ ÜŸ™‰… ß àŸÎ‡…

‚éƒ ÁÍ Ä‚éˆ Í‚é— Þ‚éŸÍ‡ object ÞŸÁ .ËŸì‚›œ Ë‚‡ŸÁ Printer Job Object ÚŸ
.ËŸ‚›œÿ› ΂’À ÁÍ Ä‚ˆ Ü› ß ÜÍ…œ— Ä‚ˆ ÿ‚ž˜ß™‚ŸË ß à‰• ÞËÁË Þ‚Œœ

.(Ì’‚— ÿ‚ž˜ß™‚ŸË ‚Ÿ Ä‚ˆ ÎÁ ÝÁ) ËË Þ‚Œœ ÁÍ Å‹ÍË ÿ‚ž˜ß™‚ŸË -
.Ëœ—ÿ› à˂镅‹Á Printable П•Í…œŸÁ ÎÁ print() Ë…› ÎÁ à— Ëœ— àŸž… К— ÚŸ -
.ËŸ‚›œ ÜÍ…œ— Ëߌ render ËŸ‚ƒ à— ÁÍ ÿÁà‰• àÍ‚›Œ -
.ËŸ‚›œ ÍËœÍ Graphics Í…›ÁÍ‚„ ÎÁ àË‚•…‹Á ‚ƒ ÁÍ Ëߊ à‰• -
ÍËéœÍ à‰• ͘Á ß ËœÁË͘ ΂ƒ ÁÍ PAGE_EXISTS ÍÁË–› Ëߌ render à‰• ͘Á -
.ËœÁË͘ ΂ƒ ÁÍ NO_SUCH_PAGE ÍÁË–› Ëߌÿ›œ



Ä‚ˆ Åž‡ Books ß Pageable ÎÁ àË‚•…‹Á

Ü—Œ…› ËœŸÁÍ• ÚŸ Printable ‚ƒ Ä‚ˆ ¬ËŸ…•͘ ÁÍ• ܃– ÿ‚ž™‚†› ÎÁ à— ÍßÔœ‚›
Þ‚éŒéœ ËßéŠ ÎÁ ÁÍ áÍé…ŒŸƒ ؂ԜÁ ËœË͘ Í…àËŸˆŸ„ ÚÍÁË› à—Ÿ›‚˜œ ‚›Á Å‹Á
Íé…ÿ™› Í‚Ÿ‹ƒ Book К— ß Pageable àËŸˆŸ„ ÚÍÁË› ÎÁ Ä‚ˆ ÿÁ̓ .ËÁË ËÁߊœ
Book К— ¬ËŒ ÉŸÍŒ… áÍ‹ ÞŸÁ ÜßÁ Å›‹– ÍË à—ŸÍßÔœ‚› .Ëœ…‹ Í…Á͇Á ܃‚– ß
àŸž… Þ‚‹—Ÿ Ù‚– ÚŸ ÎÁ Book К— ÚŸ Å‚‰• ‚ŸÀ ÝŸ›ž•ƒ à— ËËÿ› ÅÍ• ‚› àƒ
‚éƒ Pageable ÿé™é› Ü‚†› ÚŸ ÞËŸË ÿÁ̓ .ËœÍÁË ÿ…ß‚•…› ÿ‚žƒ™‚– ‚Ÿ ËœÁàËŒ
.ËŸœ— ÖßÍŒ Ü‚†› ÞŸÁ

² Å‹Ÿ™

ÿßÍ ÿÁÍéƒ Íé˜é„‚ˆ ÚŸ ÎÁ à— ËÍ— ËÁߊ Ä‚ˆ ÁÍ ÿÁà‰• ßË ÚÍË› ÚŸ Ü‚†› ÞŸÁ
ÚŸ ÅÍ߃ Ë™‡ ÿßÍ .Ëß›œ ËÁߊ àË‚•…‹Á ÚÍË› Ëߊ ÿÁ̓ ͘ŸË ͘„‚ˆ ÚŸ ß Ë™‡
Ä‚éˆ Landscape Åé›Íé• ÍË á˃ à‰• ß Ë߃ ËÁߊ Portrait àÎÁËœÁ ÍË à‰•
Ä‚ˆ ÁÍ à‰• ÚŸ Ô–• ͘„‚ˆ Í ² Å‹Ÿ™ ÍË à— ËŸŒ‚ƒ à…ŒÁË à‡ß… .ËŸË͘ ËÁߊ
Ü‚†› àƒ Ëœ— Ä‚ˆ ÁÍ à‰• ÚŸ ÎÁ Í…ŒŸƒ à— Í…œŸÍ„ ÎÁ àË‚•…‹Á ÿÁ̓ .ËŸ‚›œÿ›
:˟삛͕ à‡ß… á˃

³ Å‹Ÿ™

àé‰é• painter Þ‚› ÎÁ à— ËŸ‚›œÿ› à•‚ŽÁ ÁÍ Ýß‹ à‰• ´´ ÔŠ Ë— ³ Å‹Ÿ™ ÍË
Åéžé‡ ÁÍ Åé‹ÍË àé‰é• if Íß…‹Ë ±·± ‚… ±¶´ ÔßÔŠ ÍË .ËŸ‚›œÿ› àË‚•…‹Á ÜßÁ
ÿ郂ŸÎÍÁ ÿÁ̓ Ë— Å‹Á àË‚‹ Ü‚†› ÚŸ ÞŸÁ à—Ÿì‚‡œÀ ÎÁ .Ëœ— ÿ› ÜÍ…œ— render
ËéŸé…é•‚ŸÍË Üƒ– ÿ‚ž™‚†› ÎÁ à—Ÿì‚‡œÀ ÎÁ ‚›Á .Å‹Á Þ‚‹À Í‚Ÿ‹ƒ à‰• render
ÁËéƒ Ä‚ˆ ÿƒßˆÍ‚žˆ .ËŒ‚ƒ ÿÁàËŸˆŸ„ Í‚Ÿ‹ƒ Í‚— ËœÁß…ÿ› ÚÍË› ÚŸ áÍÁ̘ à‰•
àéƒ àé—霟Á ÿ‚‡ƒ à— ËËÿ› ÁÍ Þ‚—›Á ÞŸÁ ¬ËÁË ÝÁߊ ÉŸŽß… àß›‡› ÞŸ› ÍË
ÿ‚éÍ‚— àƒ ¬ËŸË ‚‡ à‰• ÚŸ ÍË ÁÍ ÿÁàËœßÍ„ ‚… ËŸÎÁËÍ„ƒ ÿ…‚ƒ‹‚‰› ÿ‚Í‚—
.ËŸÎÁËÍ„ƒ ͘ŸË

¬ËéŸéœé— render ÁÍ Å‚é‰• Print API ÎÁ àË‚•…‹Á ‚ƒ àœß˜ˆ ËŸœÁËÿ› à— Ü‚‰
Íé˜é„‚ˆ ËœÁß…ƒ ̓͂— ÞÀ ÙŸÍÔ ÎÁ à— ÁÍ Ûß™‚ŸË ÚŸ à—ËŒ‚ƒ ÞŸÁ Í…žƒ Å‹œ—››
ÍË ÁÍ Þ‚é—é›Á ÞéŸÁ ËéŸéÁß銃 Å‹œ—›› ÞŸœˆ› .ÝŸì‚›œ àìÁÍÁ Ëœ— ÞŸŸ… ÁÍ
.ËéË ÍéŸéŸé“é… ÁÍ ‚éàéŸéŒ‚‰ ‚Ÿ ß à‰• ś͕ ‚… ËŸË ÍÁÍ– ̓͂— Í‚Ÿ…ŠÁ
àÍé‡éœ„ ß Printer à͇œ„ :ËŸ‚›œ ÿ› àìÁÍÁ Ûß™‚ŸË à͇œ„ ßË Java Print API
.Page Setup



Ì’‚— ÝŸÕœ… à͇œ„ ß Ä‚ˆ à͇œ„ ÎÁ àË‚•…‹Á
àéŠé‹éœ ÎÁ .ËéŸËÁËÿ› Þ‚Œœ Ô–• ÁÍ Print à͇œ„ ËŸ‚ƒ Áß‚‡ ÿ™ƒ– ÿ‚àŠ‹œ ÍË
Æé‚éƒ Üé›é ÞéŸÁ .ËŸË Þ‚Œœ ÁÍ Print ‚Ÿ Page à͇œ„ ËŸœÁß… ÿ› Java 1.2
ÿé› ÁÍ Þ‚é—›Á ÞŸÁ ‚›Œƒ ß ËŸì‚›œ Ë‚‡ŸÁ Unattended Print Job ÚŸ à— Ëߌÿ›
ÎÁ àË‚é•é…é‹Á .ËéŸì‚›œ ØŸÍ… ÚÍÁË› Ä‚ˆ ÿÁ̓ ÁÍ Ä‚ˆ ÍßÍ‹ ËŸœÁß…ƒ à— ËË
à雂éœÍéƒ ÞËéŒ user-friendly Ãé‡ß› desktop Ëœœ‚› ÿ‚à›‚œÍƒ ÍË ‚ž˜ß™‚ŸË
˟삛͕ à‡ß… ± Ü—Œ àƒ .ËŸË͘ ËÁߊ



Ä‚ˆ à͇œ„ - ± Ü—Œ

ÁÍéœÀ áËœƒÍ—Ÿ„ ß àËÍ— Ã‚Š…œÁ ÁÍ Í˜„‚ˆ ÚŸ ËœÁß… ÿ› ̓͂— Print à͇œ„ ‚ƒ
ß àËÍé— ÝŸÕœ… Ä‚ˆ ÿÁ̓ ÁÍ ‚ÿ„— ËÁË… ËœÁß… ÿ› ÞŸœˆ› ̓͂— .ËË ÍŸŸ’…
ÜÍé…霗 ËŸœÁß…ÿ› à͇œ„ ÞŸÁ ÎÁ àË‚•…‹Á ‚ƒ .ËŸ‚›œ Ã‚Š…œÁ ÁÍ Å‚‰• àËßˉ›
ËœÁß…ÿ› ̓͂— à— Å‹Á ÿ™‰› ‚žœ… à͇œ„ ÞŸÁ .ËŸì‚›œ Ü–…œ› ̓͂— àƒ ÁÍ Ä‚ˆ
.Ëœ— ÜÔ‚ƒ ‚Ÿ ß ËŸì‚… ÁÍ Ä‚ˆ Ü› ‚ƒ

:ËŸì‚›œÿ› àÕ‰š› ËŒ‚ƒ ÿ› Print à͇œ„ ÑŸ‚›œ Çߛ à— ÁÍ ÿœŸ›ÁÍ• ‚‡œŸÁ ÍË

if (printJob.printDialog()){
try{
printJob.print();
}
catch (Exception PrintException){
PrintException.printStackTrace();
}
}

ނ錜 ̓͂— àƒ ÁÍ Print à͇œ„ PrinterJob К— ÎÁ ÿŒŠƒ printDialog() Ë…›
ËéŸé™é— ÍéƒÍ‚é— Í˜Á .ËœÁË͘ ÿ› ΂ƒ ÁÍ Boolean ÍÁË–› ÚŸ Ë…› ÞŸÁ .ËË ÿ›
Íé˜Á .ËéœÁËÍé˜ ÿé› Î‚ƒ ÁÍ true ÍÁË–› printDialog() Ëœ— Ã‚Š…œÁ ÁÍ Print
ß ËéœÁËÍé˜ÿé› Î‚éƒ ÁÍ False ÍÁË–› Ë…› ¬Ëœ— Ã‚Š…œÁ ÁÍ Cancel ËŸ™— ̓͂—
ÍÁËé–é› ÚéŸ ÞËœÁË͘ ΂ƒ ‚ƒ Ô–• printDialog() Ë…› .Ëœ—ÿ›œ Ü› Ä‚ˆ Þ‚›Í•
ÝŸÕœ… ÿ‚Í…›ÁÍ‚„ ÎÁ ÚŸˆŸ .ËŸ‚›œÿ› ÍÁ͖̓ Ô‚ƒ…ÍÁ ‚›Œ à›‚œÍƒ ‚ƒ boolean
.ËŸ‚›œÿ›œ ͆Á PrinterJob ‚ŸŒÁ ÿßÍ Ûß™‚ŸË ÞŸÁ ÍË àËŒ

Ìé’‚— Å‚›ŸÕœ… ËœÁß…ÿ› ̓͂— ¬à͇œ„ ÞŸÁ ‚ƒ .Å‹Á Page à͇œ„ ¬à͇œ„ ÞŸ›ßË
:Å‹Á Page à͇œ„ ÎÁ àœß›œ ÚŸ àËœË Þ‚Œœ ² Ü—Œ .ËË ÍŸŸ“… ÁÍ



Page Setup à͇œ„ -² Ü—Œ

PageFormat ÿéŸéŒ ÿ‚Í…›ÁÍ‚„ Ý‚›… ËœÁß…ÿ› ̓͂— à͇œ„ ÞŸÁ ÎÁ àË‚•…‹Á ‚ƒ
‚éàéŸéŒ‚é‰ ß à‰• Åž‡ ¬Ì’‚— ‘ƒœ› ¬Ì’‚— àÎÁËœÁ Ü›‚Œ à— ËŸ‚›œ Ã‚Š…œÁ ÁÍ
.ËŒ‚ƒÿ›

.ݟ΂‹ Ü‚• ÁÍ Page à͇œ„ àœß˜ˆ à— ËËÿ› Þ‚Œœ ÍŸÎ Ë—

PageFormat documentPageFormat = new PageFormat ();
documentPageFormat = printJob.pageDialog (documentPageFormat);
book.append (new Document (), documentPageFormat);


ÿéŸéŒ ÎÁ clone ÚéŸ pageDialog Ëé…é› Ë韂›œ Ã‚Š…œÁ ÁÍ Ok ËŸ™— ̓͂— ͘Á
ËéÁßéŠ Î‚éƒ ¬Åé‹Á ÍéƒÍ‚é— ØŸÍ‚… ß Å‚›ŸÕœ… àËœÍÁË Íƒ ÍË à— pageFormat
à…•‚Ÿœ ÍŸŸ“… ÿ„— ÚŸ Ë…› ¬ËŸ‚›œ Ã‚Š…œÁ ÁÍ Cancel ËŸ™— ̓͂— ͘Á .ËœÁË͘
ÒéŠéŒé› ÿÁÍéƒ ÁÍ ÝË– ÞŸ™ßÁ ÍŽ‚‰ Ü‚‰ ÍË .ËœÁË͘ ÿ› ΂ƒ ÁÍ pageFormat ÎÁ
‚éƒ Java à— ÝŸÎÁËÍ„ÿ› à…—œ ÞŸÁ àƒ Ü‚‰ ¬ËŸÁà…ŒÁË̓ Áß‚‡ ÍË Ä‚ˆ Ü› ÞËÍ—
.Ëœ—ÿ› ËÍߊ̓ àœß˜ˆ Þ…›

‚Ŝߕ ß Þ…›
ÿ‚éÍé˜é„‚ˆ ÞÁÍßË .ËŒ‚ƒÿ› Ä‚ˆ Ü› Å›‹– ÞŸÍ…àËŸˆŸ„ š‚›…‰Á Þ…› Rendering
ß ÈéœéŸÁ Íé ÍË ÁÍ ‚Í…—ÁÍ‚— ËÁË… Ë߃ ÿ•‚— Ô–• à— daisy wheel ß ÿœÎß‹
ÞËÍé— ÎÁÍé… .Åé‹Á àËŒ áÍ„‹ ¬ÝŸœÁ˃ ‚Í…—ÁÍ‚— ËÁË… Ù‚– ÍË ÁÍ à‰• ÓÍ
ÍÁÍé– Íé…ŒŸƒ à™‚• ÚŸ Å‚›™— ÿŠÍƒ ÞŸƒ ËŸ‚ƒ Ô–• .Ë߃ Þ‚‹À Οœ ‚ž•Á͘ÁÍ‚„
ÝŸÍÁË Ü‚‹ÍÁ ͘„‚ˆ àƒ ÁÍ CR/LF Ë— Ë߃ ÿ•‚— Οœ áËß› ÎÁÍ… ÿÁ̓ .ÝŸËÁËÿ›
àËß›œ ÁËŸ„ ÍŸŸ“… àœß˜ˆ Ä‚ˆ à— ÝŸœŸƒÿ› Ü‚‰ .ÝŸÎÁËÍ„ƒ Ä‚ˆ à›ÁËÁ àƒ Ëƒ ß
àéƒ ‚é› ¬Ýé ÍŸÎ Þ…› ÔŠ ßË Ä‚ˆ ÿÁ̓ àÎßÍ›Á ÿÏߙߜ—… ÎÁ àË‚•…‹Á ‚ƒ .Å‹Á
.ÝŸì‚›œ àË‚•…‹Á ‚ž…œß• ÎÁ àœß˜ˆ à™›‡œ› ÝŸÍÁË Î‚Ÿœ áÍ…ŒŸƒ Å‚šÔÁ



‚Ŝߕ
ÚéŸ Í‚é…éŠ‚é‹ ÁË…ƒÁ ËŸ‚ƒ ¬ËŸì‚›œ render ÁÍ ÃÁ̇ Þ…› ÚŸ ËŸÁߊÿ› àˆœ‚œˆ
̓ ‚Í…—ÁÍ‚— .ËŒ‚ƒÿ› ‚Ŝߕ ÿ™— Ù‚– àËœË Þ‚Œœ ³ Ü—Œ .ËŸ‹‚œŒƒ ÁÍ Font
ÞŸƒ áËß› à™‚• ÔŠ ÞŸÁ .˜͟˜ÿ› ÍÁÍ– ˜ߌÿ› àËœÁߊ baseline à— ÿÔŠ ÿßÍ
ØÍé‰ ÞéŸÍé…Ëéœé™éƒ ß baseline ÞŸƒ à™‚• Ascend .ËŸ‚›œ ÿ› ÒŠŒ› ÁÍ ‚ÍÔ‹
.ËßéŒÿé› àËéŸé›‚éœ descend ØÍé‰ ÞŸÍ…à‚…ß— ß baseline ÞŸƒ à™‚• .ËŒ‚ƒÿ›
ÎÁ Ŝߕ Ö‚•…ÍÁ ß ËËÿ› Þ‚Œœ ÁÍ ØÍ‰ ßË ÞŸƒ áËß› à™‚• Leading
ÅÍ‚éƒé ÚéŸ ÜßéÔ àÍ銚‚éƒ ß .ËßéŒÿ› ÜŸ—Œ… descond + leading + ascend
.ÝŸ›‚œÿ› advance ÁÍ

Þé…é› àé— ÿéœéé› ÞŸÁ àƒ .Ëœ…‹ à…‹ƒÁß Åœß• Ößœ àƒ ¬‚Í…›ÁÍ‚„ ÞŸÁ Ý‚›…
render Þ…› ܆› ÁÍ ÿ—ŸÎŸ• ÿ‚Ž• Þ‚› Arial Ŝߕ ÎÁ àË‚•…‹Á ‚ƒ àËŒ render
.Ëß›œ ËÁߊœ Ü‚“ŒÁ Lucida Ŝߕ ÎÁ àË‚•…‹Á Ý‚˜œ àËŒ



Ŝߕ Ýßž•› - ³ Ü—Œ



.Ë錂éƒÿ› Åß‚•…› 𛂗 ËÍÁËœ‚…‹Á ÿ‹Ëœ Å™‚‰ ÎÁ ‚ž…œß• Þ…•͘ ÍÁÍ– ËœŸÁÍ•
ß Y Íßé‰é› ÿßÍ Íéƒ basline .Ë΂é‹ÿ› ÁÍ Á˃› ÜŸÔ…‹› ÚŸ Ĉ Å›‹ ÿš‚ƒ àŒß˜
àéÔé–éœ Åž‡ ´ Ü—Œ àƒ .ËŸ‚›œÿ› ÒŠŒ› ÁÍ Åœß• Á˃› X Í߉› ÿßÍ ÜßÁ Í…—ÁÍ‚—
.˟삛͕ Å–Ë Åœß• Á˃›


Ŝߕ Á˃› - ´ Ü—Œ

:Å‹Á Ë߇ߛ Ŝߕ Ößœ ßË
Þ‚Œœ ØÍ‰ ÞŸŸ‚„ ß š‚ƒ ÍË àŸßÁÎ ‚ƒ à‚…ß— ÔßÔŠ ‚ƒ ÁÍ Øß͉ Serif ÿ‚Ŝߕ *
.ËŒ‚ƒÿ› Serif Ŝߕ ÎÁ Ü‚†› ÚŸ Times New Roman .ËœËÿ›

Åéœßé• ÚŸ Arial Ŝߕ .ËœÍÁËœ ÿœŸŸÎ… Í‚œ àœß˜ˆŸ Sans Serif ÿ‚ž…œß• *
.ËŒ‚ƒÿ› Sans Serif

.ËœŒ‚ƒ proportional ‚Ÿ monospaced ÅÍ߃ ËœœÁß…ÿ› ‚ž…œß• ÞŸÁ ÎÁ ÝÁË— Í
Þ‚é‹é—éŸ ÓÍ ÿÁÍÁË ‚Í…—ÁÍ‚— Ý‚›… ÞÀ ÍË à— Å‹Á ÿ…œß• monospace Ŝߕ ÚŸ
áÍ‚éŸé‹ƒ Ëœœ‚› Dot Matrix ‚Ÿ Daisy Wheel ܆› ÿ›ŸË– ÿ‚Í…œŸÍ„ .ËœŒ‚ƒÿ›
Íé .ËéœËÍé—ÿé› àË‚•…‹Á monospace ÿ‚ž…œß• ÎÁ Text based ÿ‚ž‹Ÿ•Í…œŸÁ ÎÁ
ÿ‚éžé…éœßé• .Ë錂ƒÿ› ÁÍÁË ÁÍ Ëߊ Ò‚Š ÓÍ Porotional ÿ‚ž…œß• ÍË Í…—ÁÍ‚—
ÞéŸé…é‹éŠéœ .ËéœËéŒ àœ‰ ËÍÁß áÍΟ™ ÿ‚͘„‚ˆ ÞŸ…‹Šœ ËßÍß ‚ƒ Porotional
Ý ß Íß…Ÿœß› à‰• ÿßÍ Íƒ Ý Porotional ÿ‚ž…œß• ÎÁ à— áÍ‚‡… ÿ‚ͅߟ„›‚—
Ãé™éÔé› ÞŸÁ) .ËœË߃ Ñ‚…œŸ—› ß Apple's Lisa ËœËÍ—ÿ› àË‚•…‹Á Ä‚ˆ Þ‚›Î ÍË
.(ËŒ à…•˜ ËœÍÁË Ë‚Ÿƒ ÁÍ à…ŒÌ˜ ÿ‚žœ‚›Î à— ËÁÍ•Á ÿÁ̓



‚ž…œß• àƒ ÿ‹Í…‹Ë
ß ËéŸé‹éŸßœƒ ÁÍ ÿÁà›‚œÍƒ Í‚ƒ—Ÿ ‚… àËŒ ÿ‰ÁÍÔ ÅÍß ÞŸËƒ Java à—Ÿì‚‡œÀ ÎÁ
WORA ËéééŸéééì‚ééé›éééœ ÁÍé‡Á ÿé›Íé•Åšé„ ß Ýé…é‹éŸé‹ Íé ÿßÍ Íéƒ ÁÍéœÀ
ÁÍ Åéœßé• àËÁßœ‚Š ÚŸ ËŸ‚ƒ Áß‚‡ Þ‚˜Ëœœ— àŸž… ¬(Write Once Run Anywhere)
ÿ霂éƒéŸé…Œ„ ÁÍ Áß‚‡ à— ÿŸ‚Ý͕Ś„ àŸ™— à— ËœËÍ—ÿ› Ë‚‡ŸÁ ÓÍ• ÑŸ„ ÅÍ߃
ÿ‚éžé…éœß• à…‹Ë ÚŸ à— ËÍÁË Î‚Ÿœ Áß‚‡ .Ëœƒ‚Ÿ ÿ‹Í…‹Ë ÞÀ àƒ ËœÁß…ƒ Ëœœ—ÿ›
‚éŸ Ë錂ƒ à…ŒÁË Íƒ ÍË ÁÍ ‚žœÀ Ü›‚ Ý…‹Ÿ‹ à—œŸÁ ÎÁ ÝÁ Ëœ— àŸž… ÓÍ• ÑŸ„
¬Dialog ¬Sans Serif ¬Serif :ËŸ‚›œÿ› Ë‚žœŒŸ„ ÓÍ• ÑŸ„ Ŝߕ ÅŒ Áß‚‡ .àœ
.Monospace ß Lucida Bright ¬Lucida Typewriter ¬Dialog Input

ÞéŸÁ .Ë韂é›éœÿé› àË‚•…‹Á ‚ž…œß• ÿ–Ôœ› ÿ›‚‹Á ÎÁ Áß‚‡ WORA Ù‚– Õ•‰ Åž‡
ÍË JDK ÍË map ÞŸÁ .˜ߌÿ› map Ü›‚ Ý…‹Ÿ‹ ÿ‚Ŝߕ ÿßÍ Í‚—Ëߊ ÍßÔƒ ÿ›‚‹Á
ËéŸéÁßéŠ ÍË àËéœßÍ„ ÞŸÁ ÍË .ËË͘ÿ› ØŸÍ… jre/lib/font.properties ÜŸ‚•
map Áß‚é‡ ÍË Serif ÿ‚éŜߕ àƒ Ü›‚ Ý…‹Ÿ‹ ÍË Ò‚Š Åœß• ÚŸ àœß˜ˆ à— Å•‚Ÿ
Ü雂 Ý…‹Ÿ‹ ÿ‚Ŝߕ àƒ java Ô‹ß… à— Å‹Á ÿ›‹Á Ŝߕ ÿ–Ôœ› Ý‹Á ÚŸ .ËË͘ÿ›
Å雋 ÍË ÿ–Ôœ› Ý‹Á ÚŸ ËŸœ— à‚˜œ font.properties ÜŸ‚• àƒ Í˜Á .ËË͘ÿ› map
àéƒ àé— Å‹Á ÿ–Ôœ› Ý‚œ ÚŸ Serif Ü‚†› ÿÁ̓ .Ëߌÿ› àËŸË "=" ÿß‚‹› Å›š Ĉ
.Ëߌÿ› map ͅߟ„›‚— ÿßÍ Times New Roman Ŝߕ

‚éž…œß• àƒ Font Face ‚Ÿ Ŝߕ Ý‚œ ‚ƒ ËŸœÁß…ÿ› ¬Åœß• ÿ–Ôœ› Ý‚œ ÎÁ ÍŸ’ àƒ
ÍéÕéœ ÍË ÞÀ ÿÁ̓ Ŝߕ ÉÁÍÔ Ô‹ß… à— Å‹Á ÿ›‚œ Ŝߕ Ý‚œ .ËŸœ— ÁËŸ„ ÿ‹Í…‹Ë
¬Ü‚é†é› ÿÁÍéƒ .Lucida ‚éŸ Times Roman ¬Courier ¬Arial ܆› Å‹Á àËŒ à…•Í˜
Arial Åéœßé• àËÁßéœ‚Š ÎÁ ÿ˜› Arial Italic ß Arial Regular ¬Arial Bold
.Ëœ…‹

ÿ‚éÍé…é›ÁÍ‚é„ ËéŸ‚éƒ ¬ËÍÁË Î‚éŸéœ áÍé…éŒéŸéƒ Åéœßé• àƒ ‚›Œ à›‚œÍƒ ͘Á
... Üééé†ééé› ËéééŸéì‚é›éœ ÝéŸéÕéœé… java Þ‚é›Íé• ÍË ÁÍ java.awt.fonts
ÿ‚ž…œß• áÍß…—ÍŸÁË ÚŸ àƒ ‚… java -Djava.awt.fonts=[fonts directory]
ÞËÍ— à•‚ŽÁ Þß˃ à— Ëߌÿ› Æ‚ƒ Ü› ÞŸÁ .Ëœ— àÍ‚ŒÁ TrueType ‚Ÿ ß Type1
à雂éœÍƒ ͘Á .ËŸ‚›œ àË‚•…‹Á Å‹ÍË ÿ‚Ŝߕ ÎÁ à›‚œÍƒ ¬Ü›‚ Ý‹…Ÿ‹ àƒ ‚žœÀ
Ôé‹ß… ÿ…‰Á̓ à— ÒŠŒ› Ŝߕ ÚŸ ËŸ‚ƒ ¬Ëߌÿ› Á͇Á Ø™…Š› ÿ‚ÝÍ• Åš„ ÿßÍ ‚›Œ
ËßéŠ à雂œÍƒ Jar ÜŸ‚• ÍË ÁÍ Åœß• ß ËŸì‚›œ àŸž… ËŒ‚ƒ ÿ‹Í…‹Ë ܃‚– à›‚œÍƒ
.ËŸË ÍÁÍ–



Ŝߕ ‚ƒ Ô‚ƒ…Í› ÿ‚ž‹š—
àËéžéÍéƒ ‚ Ŝߕ ÑÎÁËÍ„ à•ŸÕß à— ÁÍ ‚ž‹š— ÎÁ áÍ‚Ÿ‹ƒ Java Graphics API
àËÁË Þ‚éŒœ ÜŸÌ Üߡ ÍË ËŸ•› ÿ‚ž‹š—ÎÁ ÿŽƒ Å‚ŠŒ› .Ëœ—ÿ› ÿœ‚ƒŸ…Œ„ ËœÍÁË
.Å‹Á àËŒ

Name Type Description
Font Class The Font class represents an instance of a font face. Use this class to create a new font based on the available fonts on the target system.
FontMetrics Class (Abstract) This class contains information about a font and the rendering device. FontMetrics features many utilities, one of which obtains a string's width. Note that this class is abstract; to acquire an instance, you must call Graphics.getFontMetrics(). Use FontMetrics to learn a font's basic metric information, such as its descend, ascend, leading, or advance.
FontRenderContext Class This class provides information about a font related to the rendering device and the rules required to render such a font. Rules define the quality of the rendering.

Classes included in the Java Graphics API
Note: Links to javadocs for these classes are available in Resources



JDK ÅÁËéœé…é‹é› àéƒ ‚ž‹š— ÞŸÁ ÎÁ ÚŸ Í Ü›‚— Å‚‰ŸŽß… ß áÍŸ˜ÁÍ• Åž‡ ‚•Ô™
ÿ‚ž™‚†› ÎÁ ËŸœÁß…ÿ› ‚ž‹š— ÞŸÁ ÎÁ àË‚•…‹Á à߉œ áÍŸ˜ÁÍ• Åž‡ .ËŸœ— à‡ÁÍ›
.ËŸì‚›œ àË‚•…‹Á à™‚–› ÞŸÁ

Þ‚é‹À ÞÁËéœéˆ Þé…é› ØÁ͘ÁÍ‚„ ÚŸ ÞËÍ— render ¬Ý‚Š ÿ‚ž…œß• ÎÁ àË‚•…‹Á ‚ƒ
Proportional Ŝߕ ‚ƒ Þ…› ÚŸ Ü›‚— ÞËÍ— ÎÁÍ… Åž‡ Ý…ŸÍߘ™Á ÚŸ Þ…Œßœ .Å‹Ÿœ
àéƒ ÿé™™›™Á ÞŸƒ ÿ‚Í…—ÁÍ‚— ÿœ‚ƒŸ…Œ„ ÞËÍ— à•‚ŽÁ ß .Å‹Á ‚‹Í• Å–‚Ô Í‚— ÚŸ
ÿ‚éžé‹šé— ÎÁ àé— Åé‹Á ÜéŸé™Ë ÞéŸÁ àéƒ .ËÍé— ËéÁßéŠ àé•‚ŽÁ ÿ˜ËŸˆŸ„ ÞŸÁ
.ÝŸŸ‚›œÿ› àË‚•…‹Á Þ…› ÞËÍ— render ÿÁ̓ TextLayout ß LineBreakMeasurer





TextLayout К—
àéìÁÍÁ š‚éƒ ÅéŸé•韗 ‚ƒ Þß…› ÞËÍ— render ÍË ÁÍ áË‚ŸÎ ËÍ—™› TextLayout
render ÁÍ ÿéœé„ÁÏ ÿ‚éÞé…› ܆› ÿ…ž‡ ßË ÿ‚Þ…› ËœÁß…ÿ› К— ÞŸÁ .ËŸ‚›œÿ›
ÿ™‚›Œ ÿ‚—ŸÍ›Á Úƒ‹ ÿ‚‡ƒ Ëœ…‹ Ĉ àƒ Å‹ÁÍ ÎÁ Ý‚–ÍÁ ÿœ„ÁÏ ÑÍ‚˜œ ÍË .ËŸ‚›œ
àéìÁÍÁ Οœ ÁÍ áÍ…ŒŸƒ ÿ‚ËÍ—™› TextLayout К— .ËŒ‚ƒÿ› Å‹ÁÍ àƒ Äˆ ÎÁ à—
.Ëßé›éœ ÝéŸéÁßéŠéœ àË‚é•é…‹Á Åš‚–› àß›‡› ÞŸÁ ÍË ‚žœÀ ÎÁ ‚› ÿ™ß Ëœ—ÿ›
‚é›Á .Ëœ…‹Ÿœ ÝΚ Ä‚ˆ ÿÁ̓ caret positioning ¬Å‚šÔÁ ËßÍß Ü†› ÿŸ‚žŸ˜ÏŸß
.Ëœ…‹ Ë߇ߛ ‚žŸ˜ÏŸß ÞŸÁ à— ÝŸœÁ˃ Å‹ƒßŠ

.Ë韂雜ÿ›œ Ü› ÿŸ‚žœ… àƒ ‚›Á Ëœ—ÿ› áËœƒ Ù‚– ÁÍ ‚ž•Á͘ÁÍ‚„ TextLayout
.ÝéŸÍÁË Î‚Ÿœ Οœ LineBreakMeasurer К— àƒ ÒŠŒ› ÓÍ ÚŸ ‚ƒ Þ…› ÝŸÕœ… Åž‡
ØÁÍé˜ÁÍ‚„ ß à…‹—Œ ÝŸì‚›œŸ› ØŸÍ… à— ÿŸ‚œž„ ÍË ÁÍ Þ…› LineBreakMeasurer
àéœß˜ˆ à— ËœÁËÿ› ¬Å‹Á àœ‚ƒÎ Ëœˆ К— ÚŸ ÞŸÁ à—Ÿì‚‡œÀ ÎÁ .Ëœ—ÿ› ÝŸÕœ… ÁÍ
àéƒ Ýé LineBreakMeasurer Ðšé— ¬Ë霗Œƒ Þ‚ƒÎ ÞŸœÁß– ̓ ‚œƒ ÁÍ Þ…› ÔŠ ÚŸ
Ðšé— ÎÁ àé— ËÍÁË ÿé…‚éšéÔÁ àéƒ Î‚éŸéœ Ðšé— ÞéŸÁ .Ëéœé—ÿ雜 Ü› ÿŸ‚žœ…
ÍÁËé–é› ÚéŸ ËßéŠ ÿé™éÁ Íßé…é‹Ë Ëéœéœ‚é›é à— ËÍŸ˜ÿ› FontRenderContext
¬Íééé†ßéé› ÍßéÔéƒ Þé…é› ÿ郂éŸÎÍÁ ÿÁÍéƒ .ËéœÁËÍé˜ÿé› Î‚éƒ font metrics
Þé…é› ÞËÍé— render ÑßÍ ß à˂镅‹Á ËÍß› Ŝߕ Ößœ ËŸ‚ƒ FontRenderContext
.ËœÁ˃ ÁÍ Ë–› ПÁßŸË ÿÁ̓



ÁÍ ËŸË‡ К— ÚŸ ËŸ‚ƒ Þ› ¬Ü‚†› ÞŸ™ßÁ àÍ‚ƒ ÍË ÿ‰ŸŽß… àœß˜ Í àìÁÍÁ ÎÁ ܃–
Å‚šÔÁ ËŸÁߊÿ› à—Ÿ›‚˜œ К— ÞŸÁ .AttributedString ¬ÝŸ‚›œ ÿ•Í› ‚›Œ àƒ
ÍË ÁÍ ÍŸÎ à™›‡ ¬Ü‚†› ÿÁ̓ .Å‹Á ËŸ•› 𛂗 ËŸœÁ˃ à…ŒÍ ÚŸ ÜŠÁË attribute
:ËŸÍŸ˜ƒ ÍÕœ

This is a BOLD attribute



Ëé…é› ÎÁ ËéŸ‚éƒ ¬ËŸì‚›œ Ä‚ˆ AttributedString К— Þß˃ ÁÍ ÅÍ‚ƒ ÞŸÁ ͘Á
ËéÁßéŠ ÍéŸÎ Ëé— àƒ àŸƒŒ áΟˆ ÞÀ Ë— ß ËŸœ— àË‚•…‹Á Graphics.drawString
:Ë߃

Font normalFont = new Font ("serif", Font.PLAIN, 12);
Font boldFont = new Font ("serif", Font.BOLD, 12);

g2.setFont (normalFont);
g2.drawString ("This is a ");

g2.setFont (boldFont);
g2.drawString ("bold ");

g2.setFont (normalFont);
g2.drawString ("attribute", 72, 72);


Ü‚é‰ .ÝéŸÍÁË Î‚Ÿœ ÿÁàË‚‹ Þ…› ÞŸœˆ Ä‚ˆ Åž‡ Ë— àÎÁËœÁ àˆ àƒ à— ËŸœ— à‚˜œ
Ë— Ë–ˆ ÝŸœ— render Ü›‚— ÍßÔƒ ÁÍ ØÁ͘ÁÍ‚„ à› ÝŸ…‹Áߊÿ› ͘Á ËŸì‚›œ Íß…
.ÝéŸéŸ‚雜 Í…Š› AttributedString ÿŸŒ ‚ƒ ÁÍ Ü‚†› ÞŸÁ ÝŸœÁß…ÿ› .Ë߃ ÝΚ
ß ÖßÍéŒ ËÍÁË Î‚éŸéœ ß Ë霗ÿ› ÿœ‚ƒŸ…Œ„ Ù™Ô› ÍßÔƒ ÁÍ ‚attribute К— ÞŸÁ
.ËŸì‚›œ ÒŠŒ› ÁÍ attribute ܉› ÿ‚ž…œÁ

.ËŸœŸƒÿ› AttributedString ÎÁ àË‚•…‹Á ‚ƒ ÁÍ ÿ™ƒ– Ü‚†› ‚‡œŸÁ ÍË

AttributedString attributedString = new AttributedString ("This is a Bold attribute");

attributedString.addAttribute (TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, 11, 14);

g2.drawString (attributeString.getIterator (), 72, 72);


àéƒ bold attribute Ü‚›Á Åž‡ .Å‹Á BoldFace ÅÍ߃ Bold à›™— š‚ƒ Ü‚†› ÍË
Íé…é›ÁÍ‚é„ ÞéŸé™ßÁ .ËéŸéì‚雜 àË‚•…‹Á Addatrtribute() Ë…› ÎÁ Bold à›™—
ËßéŒ ÝŸÕœ… ËŸ‚ƒ à— ÁÍ attribute àËÁßœ‚Š à— ¬Å‹Á attribute key ͘œ‚Ÿ‚›œ
attribute à— ËËÿ› Þ‚Œœ WEIGHT .TextAttribute Ü‚†› ÿÁ̓ .ËŸ‚›œÿ› ÿ•Í›
.Ë߃ ËÁߊ weight Ößœ ÎÁ

àéƒ ÁÍ Íé…é›ÁÍ‚é„ ÞéŸé™ßÁ ‚é› Íé˜Á .Åé‹Á attribute ËßéŠ ÝßË Íé…é›ÁÍ‚é„
ÿ‹Í…‹Ë ܃‚– ÿ‚attribute ˃ ÝŸì‚›œ ÝŸÕœ… TextAttribute
¬WEIGHT_EXTRALIGHT ¬WEIGHT_DEMILIGHT ¬WEIGHT_DEMIBOLD
¬WEIGHT_LIGHT ¬WEIGHT__HEAVY ¬WEIGHT_EXTRABOLD
WEIGHT_SEMIBOLD ¬WEIGHT_REGULAR ¬WEIGHT_MEDIUM
.Ë߃ ËœÁߊ WEIGHT_ULTRA_BOLD ß

attribute ÖßÍéŒ Å‹ÁߊÍË ËŸ‚ƒ à›‚œÍƒ à— Å‹Á ÿ™‰› àËœË Þ‚Œœ Ýß‹ Í…›ÁÍ‚„
Øé–ßé…é› attribute ‚é‡é— àé— ËéËÿ› Þ‚Œœ ÍŠÀ ß ÝÍ‚žˆ Í…›ÁÍ‚„ ß Ë˃ ÁÍ
àéƒ ÁÍ attribute ¬Þ‚Ÿ‚„ ß Î‚’À ÿ‚Í…›ÁÍ‚„ Þß˃ ËŸœÁß…ÿ› ÞŸœˆ› .ËË͘ÿ›
ÚéŸ ÿ霂é›é…éŠ‚é‹ ÃéŸé—Íé… àËéœË Þ‚Œœ µ Ü—Œ .ËŸŸ‚›œ Ü‚›Á ÅÍ‚ƒ ÚŸ Ü—
.ËŒ‚ƒÿ› AttributedString



µ Ü—Œ



TextLayout Þß›ÎÀ
Ðšé— ‚éƒ ÞËÍé—Í‚é— ÿÁÍéƒ Î‚Ÿœ ËÍß› ÿ‚ž‹š—ÿ›‚›… ËÍß› ÍË ÝΚ ÝŸ‚•› ÚœŸÁ
àéé‡ÁÍ› ‘ƒ‚œ› Å›‹– àƒ) à™‚–› ÞŸÁ ´ Ü‚†› Ë— .ÝŸÁà…•Í˜ÁÍ• ÁÍ TextLayout
ÿ‚éœéžé„ .ËŸ‚›œÿ› render ÁÍ ØÁ͘ÁÍ‚„ ÚŸ TextLayout ÎÁ àË‚•…‹Á ‚ƒ ¬(Ëߌ
ÍË TextLayout àéƒ ÔßéƒÍé› ÞéŸé›ÁÍ• .Å‹Á àËŸË͘ ØŸÍ… ÈœŸÁ 7.5 ØÁ͘ÁÍ‚„
.ËœŒ‚ƒÿ› ²³µ ÿ™Á ±¶² ÿ‚ÍÔ‹

´ Å‹Ÿ™



Åéœß• addAttribute() Ë…› .ÝŸœ—ÿ› ØŸÍ… AttributeString ÚŸ :´ Å‹Ÿ™ àšŠ
àéƒ Í…›ÁÍ‚„ ßË ß ÝŸœ—ÿ› ØŸÍ… LineBreakMeasurer ÚŸ Є‹ .Ëœ—ÿ› ØŸÍ… ÁÍ
‚é… FontRenderContext ÚéŸ ß AttributedString ÎÁ ØÍ‰ ÚŸ ¬ÝŸœ—ÿ› ËÍÁß ÞÀ
LineBreakMeasurer ¬Ü郂閛 ÍË .ÝŸŒ‚ƒ àËÍ— àìÁÍÁ ÁÍ ÝΚ ÿ‚font metrics
Ëéœéˆ ÎÁ à–™‰ ÞŸÁ .ËœÁË͘ÿ› ̓ TextLayout ÿŸŒ ÚŸ àËŒ à…‹—Œ ÍÔ‹ Í ÿÁ̓
àé…éŒÁË ÍéÔ‚éŠéƒ .Ëœ—ÿ› àË‚•…‹Á ÍÔ‹ Í ÞËÁË ÍÁÍ– ÿÁ̓ ÿŽ‚ŸÍ àË‚‹ Íß…‹Ë
Äéˆ Åé›é‹ ÿš‚éƒ àéŒß˜ ÎÁ ÜŸÔ…‹› ÚŸ ØšŠ Íƒ Ŝߕ Þ…•͘ ÍÁÍ– ܉› à— ËŸŒ‚ƒ
Þ韜ˆ› .ËË͘ÿ› àƒ‹‚‰› Ŝߕ baseline Ђ‹Á ̓ y=0 Óß ÍË .Ëߌÿ›œ àƒ‹‚‰›
ËéŸ‚éƒ ¬ËéŸéË ÍÁÍé– ÿ韚‚ƒ ÍÔ‹ ÍŸÎ ÍË Å‹ÍË ÁÍ Þ…› ÍÔ‹ ÚŸ ËŸÁߊÿ› ͘Á
àéƒ Åœß• Í‚…Š‚‹ Åž‡ .ËŸìÁΕ‚Ÿƒ Ëߊ Å‚ƒ‹‚‰› ÍË ÎŸœ ÁÍ leading ß descend
.ËŸœ— à‡ÁÍ› ± Ü—Œ

Ëé— ÍéÔ‹ Ëœˆ Ô–• Í‚—œŸÁ ÿÁ̓ .ËËÿ› Þ‚Œœ ÁÍ Þ…› Ü›‚— ÎÁÍ… ÚŸ á˃ Ü‚†›
.ÝŸÁàËÍ— à•‚ŽÁ ÿ™ƒ– Ü‚†› àƒ

µ Å‹Ÿ™



áËé…› TextLayout К— ËœˆÍ .Å‹Á ²µ¹ ‚… ²±¹ ÍÔ‹ ÎÁ µ Å‹Ÿ™ Å›‹– ÞŸÍ…ƒ™‚‡
ÿé™ß ¬Ë韂é›éœÿé› ÎÁÍé… Üé›‚é— ÍßéÔéƒ ÁÍ Þé…› ÍÔ‹ ÚŸ à— Ëœ—ÿ› àìÁÍÁ ÁÍ
àéìÁÍÁ Þé…é› ÍéÔé‹ ÞéŸÍŠÀ ÞËÍ— ÁËŸ„ ÿÁ̓ áËÍ—™› ÈŸ LineBreakMeasurer
‚éÍéÔ‹ÿ›‚›… ¬ËŒ‚ƒ àËŒ ÎÁÍ… Å‹ÍË à— ÿ•Á͘ÁÍ‚„ ÚŸ ÍË à— ‚‡œÀ ÎÁ .Ëœ—ÿ›œ
ÁÍéœÀ ß Ý韜— ÁËŸ„ ÁÍ ÍÔ‹ ÞŸÍŠÀ ËŸ‚ƒ ¬Å‹Á àËŒ ÎÁÍ… ÞÀ ÍÔ‹ ÞŸÍŠÀ ÎÁ ÍŸ’
.ÝŸì‚›œ Ä‚ˆ àËŒœ ÎÁÍ…

ÍË ÁÍ ‚žœÀ ß ÝŸœ—Œƒ ÁÍ ‚ÍÔ‹ÿ›‚›… ËŸ‚ƒ ÁË…ƒÁ ¬ÍÔ‹ ÞŸÍŠÀ ÞËÍ— ÁËŸ„ ÿÁ̓
ÜÍé…éœé— ÁÍ ‚ÍÔ‹ÿ›‚›… for à–™‰ ÚŸ Є‹ .ÝŸì‚›œ àÍŸŠÌ (Vector) ÍÁË̓ ÚŸ
ÎÁÍé… ÁÍ ÍéÔé‹ ÞÀ getJustifiedLayout() Ëé…é› ¬Ëßéƒéœ ÞŸÍŠÀ ͘Á ß Ëœ—ÿ›
render Åé‹é àé— àé—éŸé…Íßé Þ‚› àƒ ÁÍœÀ ¬Ë߃ ÍÔ‹ ÞŸÍŠÀ ͘Á ß ËŸ‚›œÿ›
.ËŸ‚›œÿ›



ÍŸß‚… Ä‚ˆ
ß ß àËéœÁߊ Image ÿŸŒ ÚŸ ÍË ÁÍ ÍŸß… ÚŸ à— Å‹Á ÿ˜Ë‚‹ Þ‚› àƒ ÍŸß… Ä‚ˆ
àé— ËéËÿé› Þ‚éŒœ á˃ Ü‚†› .ÝŸœ—ÿ› Á͇Á ÁÍ Graphics2D.drawImage() Ë…›
ÍéŸßé… Ä‚ˆ ÿ™Á Ë— à— ±¹¸ ß ±¶µ ÔßÔŠ àƒ .ÝŸì‚›œ Ä‚ˆ ÁÍ ÍŸß… ÚŸ àœß˜ˆ
.˟삛͕ à‡ß… Å‹Á



¶ Å‹Ÿ™

:Ëߌÿ› ÝŸ‹–… àË‚‹ à™‰Í› à‹ àƒ ÍŸß… Ä‚ˆ ܉ÁÍ›
.ËŸ‚›œ àÍ‚ŒÁ ËŸœ— Ä‚ˆ ËŸÁߊÿ› à— áÍŸß… àƒ à— URL ÚŸ Ë‚‡ŸÁ -±

ÎÁ àË‚é•é…‹Á ‚ƒ .ËŸì‚›œ ΂ƒ MediaTracker К— ÎÁ àË‚•…‹Á ‚ƒ ÁÍ ÍŸß… -²
ËéŸé™éŸ‚é› Í˜Á .ËŸì‚›œ ΂ƒ ÁÍ GIF ß JPEG ¬PNG ÿ‚ž™Ÿ‚• ËŸœÁß…ÿ› К— ÞŸÁ
.ËŸœ— àË‚•…‹Á Advance Imaging API ÎÁ ¬ËŸì‚›œ ΂ƒ ÁÍ á͘ŸË Ößœ ÍŸß…

ÝéŸé‹Íé… Graphics2D Ðšé— ÎÁ drawImage() Ëé…› ÎÁ àË‚•…‹Á ‚ƒ ÁÍ ÍŸß… -³
Image ÿéŸéŒ Í…›ÁÍ‚„ ÞŸ™ßÁ .ËÍÁË Î‚Ÿœ Í…›ÁÍ‚„ ÑŒ àƒ drawImage() .ËŸì‚›œ
Äéˆ Åé›é‹ š‚éƒ àéŒß˜ Å‚…Š› Í…›ÁÍ‚„ ÞŸ›ß‹ ß ÞŸ›ßË .Ëߌ Ä‚ˆ ËŸ‚ƒ à— Å‹Á
.Ëéœé…é‹é Ö‚•…ÍÁ ß ÓÍ ÞËÍ— ÒŠŒ› Òߊ› ÞŸ›‡œ„ ß ÞŸ›Í‚žˆ ß Ëœ…‹ ÍŸß…
Component Ðšé— ÎÁ ܂醛 ÞŸÁ ÿÁ̓ .Å‹Á ImageObserver ÿÁ̓ Í…›ÁÍ‚„ ÞŸÍŠÀ
ÍË ÁÍ ImageObserver ÐéŸé•Í…œŸÁ ¬Component ÿ‚ К—ÿ›‚›… .ÝŸœ—ÿ› àË‚•…‹Á
.ËœËÿ› ÍÁÍ– Þ‚…Í‚Ÿ…ŠÁ



Ìé’‚é— ÿßÍ Íéƒ ÁÍ ÍéŸß‚é… ËŸœÁß…ÿ› ÿ…‰Á̓ ¬à™‰Í› à‹ ÞŸÁ ÎÁ àË‚•…‹Á ‚ƒ
ËéŸéœÁßé…ÿé› ¬ËŸÍÁË Î‚Ÿœ áÍ…ŒŸƒ ÿ‚ž…›Í• ÿœ‚ƒŸ…Œ„ àƒ Í˜Á .ËŸì‚›œ render
.ËŸì‚›œ Å•‚ŸÍË JavaSoft ÅŸ‚‹ Ãß ÎÁ ÁÍ Advanced Imaging API




Åß‚•…› ÿ‚Ý͕Ś„ ÍË Ä‚ˆ
ÿßÍ Íéƒ ËéŸ‚éƒ ‚é›Á Åé‹Á ÅéŸé›Á ÿÁÍÁË WORA Þ‚ƒÎ ÚŸ ÞÁßœƒ Java àˆ Í˜Á
Üì‚‹› ÿƒ‚ŸÎÍÁ ÍßÕœ› àƒ .ËŸ‚›œ àŸ—… Ëœ—ÿ› àìÁÍÁ Ü›‚ Ý…‹Ÿ‹ à— ÿŸ‚ž‹ŸßÍ‹
ß Linux Suse 6.4 ‚éƒ ÁÍ Ýé…é‹éŸé‹ ÚéŸ Þé› ËËéé…é› ÿ‚éÝ͕Ś„ ÿßÍ ÿ„‚ˆ
¬Ðé—ßéœéŸé™ ß ²°°° ÎßËœŸß ÞŸƒ à‹Ÿ‚–› ÿÁ̓ ß ÝËÍ— áËœƒÍ—Ÿ„ Sun Java 1.3
ß ÅéŸé•éŸé— àéƒ Þ› ÿ™Á à–š .ÝËÍ— Üß Í…ßŸ„›‚— ßËÍ àƒ ÁÍ HP5L Í…œŸÍ„
ß Ì’‚— ÝŸÕœ… à— ËŒ‚ƒÿ› áÎßËœŸß ÞŸƒ Áß‚‡ ÿ˜ËÍ…‹˜ ÿ˜œß˜ˆ à—™ƒ Å‹Ÿœ àË΂ƒ
ÁÍ ËÍÁË霂é…é‹Á ÿ‚éžé˜ß™‚ŸË à— Ð—ßœŸ™ ß ËŸ‚›œÿ› àìÁÍÁ ÁÍ ËÍÁËœ‚…‹Á Ä‚ˆ
.ËŸ‚›œÿ›œ ÿœ‚ƒŸ…Œ„

àË‚é•é…é‹Á APS Ä‚éˆ Íé…™Ÿ• ÎÁ SuSE Linux .Å‹Á ͘„‚ˆ áËœƒ Í—Ÿ„ ÜßÁ Ü—Œ›
àéÔé–œ ¶°°x¶°° Ü›‚— Å–Ë ‚ƒ ß ÿ…‹Í˃ ÁÍ ÝËߊ HP5L ÝœÁß…ÿ›œ Þ› ß ËŸ‚›œÿ›
‚éƒ HPLaser Jet 4 ÁÍéœÀ à— ËÍ— Í‚— ÿœ‚›Î Ô–• Þ› ͘„‚ˆ .ÝŸ‚›œ áËœƒ Í—Ÿ„
.ÝËß›œ ÝŸÕœ… (¶°° ÿ‚‡ƒ) ³°° Å–Ë

ÁÍé‡Á Windows àŠ‹œ ÎÁ áÍŸŸ“… àœß˜ ÈŸ Þß˃ ß Linux ÿßÍ Íƒ ÁÍ Ëߊ Ë— Þ›
ÿ‚éàÍ釜„ .ËŒ Ä‚ˆ ÿ™‚ ß š‚ƒ Í‚Ÿ‹ƒ ÅŸ•Ÿ— ‚ƒ ¬Å–Ë Øš…ŠÁ Ý’ÍŸ™ ß .ÝËÍ—
ÍéÕéœ àéƒ ÎßËéœéŸß ‚éƒ Åß‚é•é…› 𛂗 ‚žœÀ .ËœËß›œ Ç…› ÁÍ› Ì’‚— ß Ä‚ˆ
Ëœ…‹ ‚ž˜ß™‚ŸË ÞŸÁ à˜˜‚Œœ · ß ¶ ÿ‚Ü—Œ .˜˟‹Íÿ›



ЗߜŸ™ ÍË Ì’‚— à͇œ„ -¶ Ü—Œ


ЗߜŸ™ ÍË Ä‚ˆ à͇œ„ · Ü—Œ

.ÅŒÁË ËÁߊ ΂ƒ ‚ž…Ÿ™‚• ÿŽƒ ÎÁ ÁÍ ‚›Œ à›‚œÍƒ ‚ž˜ß™‚ŸË ÍË ÿ‹‚‹Á Øš…ŠÁ
àËßËé‰é› Ã‚Š…œÁ ÿÁ̓ ÅœŸÍ„ Ûß™‚ŸË ÎÁ à— ËŸœÁß…ÿ›œ ЗߜŸ™ ʼn… Ü‚†› ÿÁ̓
àßšé .Å‹Á ÍŸÌ„ Þ‚—›Á Í‚— ÞŸÁ ÎßËœŸß ÍË à—Ÿ™‚‰ ÍË .ËŸì‚›œ àË‚•…‹Á à‰•
ÿ霂éƒéŸ…Œ„ Ä‚ˆ ÿ‚àŸŒ‚‰ ØŸÍ… ÎÁ ËœÁß…ÿ›œ ЗߜŸ™ ÍË à‰• Ûß™‚ŸË ÞÀ ̓
.ËÍßÀ Ü›ƒ

ÇéœÍé’ƒ Üéì‚‹› ÞŸÁ ‚ƒ ËÍË Ë ËŸ…‹ ܃‚…Íß„ ÿ‚à›‚œÍƒ Þ…Œßœ Ü‚‰ ÍË Í˜Á
ÎÁ .ËŸì‚›œ ÑŸ‚›ÎÀ Åß‚•…› ÿ‚ÝÍ•…š„ ÿßÍ ÁÍ Ëߊ à›‚œÍƒ ËŸ‚ƒ ß ËŸ…‹ ̓ßÍ
ÍË Ýé ÿÁàéœßé›éœ ÝÍÁËœ ÿ‹Í…‹Ë Ëœ—ÿ› Á͇Á ÁÍ OSX à— Mac àƒ Þ› à—Ÿì‚‡œÀ
Ýé…鋟‹ ÞŸÁ àƒ à— ÝŸ‚›œÿ› ÿ‹ ÿ™ß Ëß›œ ÝÁߊœ àŽÍ ÝÍ•…š„ ÞŸÁ ‚ƒ àÔƒÁÍ
ÖšéÔÁ àƒ á˃ ÿ‚à™‚–› ÍË ÁÍ ÇŸ‚…œ Å–ß ÖÍ‹Á ÍË ß àËÍ— ÁËŸ„ ÿ‹Í…‹Ë Ü›‚
.Ýœ‚‹Íƒ ‚›Œ

ÞéŸÁ .Ëßé›éœ àìÁÍÁ ‚› àƒ ÁÍ Áß‚‡ ÍË Ä‚ˆ API ËÍ—™› ÿ˜œß˜ˆ ² ÑŠƒ :à‡Ÿ…œ
ÝéŸé‹Íé… ÞÀ ÿßÍ Íƒ à— ËŸ‚›œÿ› àŸž… ‚›Œ ÿÁ̓ ÁÍ ÿ—Ÿ•Á͘ Ù‚– ÚŸ Ô–• API
ß ÜßËé‡ ¬ÍéŸßéé… ¬ØÁÍé˜ÁÍ‚é„ Þ߈ ÿ›Ÿ‚•› Ë–‚• API à—Ÿì‚‡œÁ ÎÁ .ËŸì‚›œ
àé— ÿ韂éÍÁ΃Á ÞËÍßÀ ŋ˃ ÿÁ̓ áÍ…ŒŸƒ Ñš… ËŸ‚ƒ ¬ËŒ‚ƒÿ› header/footers
ÞéŸÁ ÍË ÞéŸéœéˆé› .ËŸÍßÀ Ü›ƒ ËœËÿ› ÍÁÍ– Þ‚…Í‚Ÿ…ŠÁ ÍË áÍ…ŒŸƒ Å‚œ‚—›Á
Ä‚éˆ ÞŸƒ ÁÍ Å‚•š…ŠÁ ß ÝËÁË ÿ…ÁÍŸŸ“… Ø™…Š› ÿ‚ÝÍ•…š„ Ëß‡ß ÜŸ™Ë àƒ à™‚–›
Ä‚éˆ ÃßéˆÍ‚ˆ ß ÉÍÔ Ýß‹ Å›‹– ÍË .ÝËÍ— ÿ‹Í̓ ÎßËœŸß ʼn… Ä‚ˆ ß Ð—ßœŸ™ ʼn…
.ËÁË ÝÁߊ Ü›‚— ÉŸŽß… ÁÍ


:àËœ‹Ÿßœ ÿ•Í›
Infocom ßÁ .ËŒ‚ƒÿ› Áß‚‡ Ü–…‹› Íß‚Œ› ÚŸ Jean Pierr Dube
ÁÍ ËßéŠ ÿ‚à›‚œÍƒ Infocom ˃ àƒ ÊŸÍ‚… ÞÀ ÎÁ .Ëß›œ П‹‚… ±¹¸¸ Ü‚‹ÍË ÁÍ
ÙÍéƒ ÔéŠ ÅéŸÍéŸË› ß ÚÍÁË› àŸž… ̓ ÅŸÍŸË› ¬ËŸ™ß… Ü›‚Œ à— Å‹Á àËÁË à‹ß…
Áß‚é‡ ß Visual Basic ¬C ÍË ÿé•‚é— àéƒÍé‡é… ÿÁÍÁË Í韄 ÞÁÏ .ËŒ‚ƒÿ› ÅÍË–
ÞéŸÁ ßÁ .Ë錂ƒÿ› ˟ˇ ÿ‚àÏßÍ„ ÿ›‚›… ÿ™Á Þ‚ƒÎ ÍŽ‚‰ Ü‚‰ ÍË Áß‚‡ .ËŒ‚ƒÿ›
à陂閛 ÞŸÁ Þ…Œßœ Ý‚˜œ ÍË à— Å‹Á àËß›œ ÝŸË–… Ëߊ ÍË‚› àƒ ÁÍ Åš‚–› áÍ‹
.ËÍ„‹ Þ‚‡



ÿ‡œ‹ÍÕœ
ÞŸÁ ËÍß› ÍË ÁÍ Ëߊ ÍÕœ
:ËŸŸß˜ƒ ‚› àƒ Ã™Ô›

ÑÎÍÁ ‚ƒ ÿ™ŸŠ -
ÑÎÍÁ ‚ƒ -
ÑÎÍÁÿƒ -

ÿœ šßÔ ÿ™ŸŠ -
Ë‚œ› -
à‚…ß— -

ÿŠ… ÿ™ŸŠ -
Ãߙԛ -
Å‹Ÿœ ÿŠ… ÿ•‚— àÎÁËœÁ àƒ -


:Ý‚œ

:ÚŸœßÍ…—™Á Å‹„

: Å—ÍŒ Ý‚œ

܃– ÿ‚Å›‹–
Áß‚‡ ÍË Ä‚ˆ ÿߘ™Á ‚ƒ ÿŸ‚œŒÀ - ÜßÁ Å›‹–
Ä‚ˆ ÞŸ…‹Šœ - ÝßË Å›‹–


Copyright 2001, JavaWorld/ International Data Group Inc./PC WORLD Iran. All rights reserved.