itext
फ़ॉन्ट्स: iText 5 बनाम iText 7
खोज…
टिप्पणियों
IText के पहले संस्करणों में केवल एक फ़ॉन्ट वर्ग था: Font
।
इस फ़ॉन्ट के साथ, आप पाँच फ़ॉन्ट परिवारों से चौदह फोंट के लिए एक Font
ऑब्जेक्ट बना सकते हैं: हेल्वेटिका (नियमित, बोल्ड, तिरछा, बोल्ड-तिरछा), टाइम्स रोमन (नियमित, बोल्ड, इटैलिक, बोल्ड-इटैलिक), कूरियर (नियमित, बोल्ड) , तिरछा, बोल्ड-तिरछा), प्रतीक और जैफ डिंगबैट्स।
इस तरह के एक Font
ऑब्जेक्ट बनाया गया था:
Font font = new Font(FontFamily.TIMES_ROMAN);
उदाहरण के लिए, आपको फ़ॉन्ट का आकार भी परिभाषित करना होगा:
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
डिफ़ॉल्ट फ़ॉन्ट Helvetica था; डिफ़ॉल्ट फ़ॉन्ट आकार 12।
iText विकसित और अधिक फोंट समर्थित थे। इन फोंटों से आंतरिक रूप से निपटने के लिए BaseFont
क्लास का उपयोग किया गया था। एक BaseFont
वर्ग इस तरह बनाया गया था:
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
पहला पैरामीटर एक फ़ॉन्ट प्रोग्राम का पथ है, उदाहरण के लिए एक TTF फ़ाइल, दूसरा पैरामीटर एन्कोडिंग है, उदाहरण के लिए Cyrillic वर्णों के लिए CP1251, तीसरा पैरामीटर इंगित करता है कि क्या फ़ॉन्ट के सबसेट को एम्बेड करने की आवश्यकता है।
BaseFont
वर्ग का उपयोग तब किया जाता है जब आप न्यूनतम स्तर पर सामग्री जोड़ते हैं, उदाहरण के लिए जब आपके कोड में टेक्स्ट ऑब्जेक्ट्स बनाकर beginText()
, setFontAndSize()
, setTextMatrix()
, showText()
, endText()
अनुक्रमों का उपयोग किया जाता है। आमतौर पर, आप केवल निम्न-स्तरीय दृष्टिकोण का उपयोग करेंगे यदि आप एक पीडीएफ विशेषज्ञ हैं। यदि आपको पीडीएफ सिंटैक्स का कुछ भी पता नहीं है, तो आपको इस तरह के अनुक्रम का उपयोग नहीं करना चाहिए।
Font
ऑब्जेक्ट बनाने के लिए आप BaseFont
क्लास का भी उपयोग कर सकते हैं:
Font russian = new Font(bf_russian, 12);
अब हम Paragraph
बनाने के लिए russian
फ़ॉन्ट का उपयोग कर सकते हैं जिसमें रूसी पाठ शामिल है।
IText 5 में Font
ऑब्जेक्ट्स बनाने के कुछ अन्य तरीके हैं, लेकिन यह सबसे सामान्य प्रक्रिया है। लोग कभी-कभी Font
और BaseFont
बीच के अंतर से भ्रमित होते थे, और वे हमेशा सही दृष्टिकोण का उपयोग नहीं करते थे।
हमने iText 7 में क्या तय किया है:
हमने चीजों को और अधिक समान बनाया। अब एक एकल PdfFont
वर्ग है, और आप PdfFontFactory
का उपयोग करके एक फ़ॉन्ट PdfFontFactory
:
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf", "CP1251", true);
यदि आप किसी अन्य फ़ॉन्ट आकार पर स्विच करना चाहते हैं तो आपको अलग-अलग फ़ॉन्ट ऑब्जेक्ट बनाने की आवश्यकता नहीं है। किसी भिन्न फ़ॉन्ट आकार पर स्विच करना setFontSize()
विधि का उपयोग करके किया जा सकता है:
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10));
डिफ़ॉल्ट फ़ॉन्ट अभी भी Helvetica है और डिफ़ॉल्ट फ़ॉन्ट का आकार अभी भी 12 है, लेकिन अब आप दस्तावेज़ के लिए एक फ़ॉन्ट (और एक फ़ॉन्ट आकार) को परिभाषित कर सकते हैं:
document.setFont(font);
इस स्थिति में एक फ़ॉन्ट को निर्दिष्ट किए बिना बिल्डिंग ब्लॉक (उदाहरण के लिए एक Paragraph
) को जोड़ने पर डिफ़ॉल्ट font
होगा।
अधिक जानना चाहते हैं?
PdfFont वर्ग का परिचय दें जो iText 7 में अध्याय 1 है : बिल्डिंग ब्लॉक्स ट्यूटोरियल। मुफ्त ebook जाओ!
HelloWorldInternational.java (iText 5)
इस iText 5 उदाहरण में, हम विभिन्न फोंट का उपयोग करके विभिन्न भाषाओं में एक हैलो वर्ल्ड उदाहरण बनाएंगे:
public void createPdf(String dest)
throws DocumentException, IOException {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
Font font = new Font(FontFamily.TIMES_ROMAN);
Font font14pt = new Font(FontFamily.TIMES_ROMAN, 14);
Font font10pt = new Font(FontFamily.TIMES_ROMAN, 10);
BaseFont bf_russian = BaseFont.createFont(
"resources/fonts/FreeSans.ttf",
"CP1251",
BaseFont.EMBEDDED);
Font russian = new Font(bf_russian, 12);
BaseFont bf_cjk = BaseFont.createFont(
"resources/fonts/NotoSansCJKsc-Regular.otf",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED);
Font cjk = new Font(bf_cjk, 12);
Paragraph p = new Paragraph("Hello World! ", font);
Chunk chunk = new Chunk("Hallo Wereld! ", font14pt);
p.add(chunk);
chunk = new Chunk("Bonjour le monde! ", font10pt);
chunk.setTextRise(4);
p.add(chunk);
chunk = new Chunk(
"\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u043b\u0442\u0435 \u043c\u0438\u0440! ",
russian);
p.add(chunk);
p.add(new Chunk("\u4f60\u597d\u4e16\u754c! ", cjk));
p.add(new Chunk("\uc5ec\ubcf4\uc138\uc694 \uc138\uacc4!", cjk));
document.add(p);
document.close();
}
स्रोत: Developers.itextpdf.com
HelloWorldInternational.java (iText 7)
इस iText 7 उदाहरण में, हम विभिन्न फोंट का उपयोग करके विभिन्न भाषाओं में एक हैलो वर्ल्ड उदाहरण बनाएंगे:
public void createPdf(String dest) throws IOException {
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
try (Document document = new Document(pdf)) {
PdfFont font = PdfFontFactory.createFont(FontConstants.TIMES_ROMAN);
PdfFont russian = PdfFontFactory.createFont(
"src/main/resources/fonts/FreeSans.ttf",
"CP1251", true);
PdfFont cjk = PdfFontFactory.createFont(
"src/main/resources/fonts/NotoSansCJKsc-Regular.otf",
PdfEncodings.IDENTITY_H, true);
document.setFont(font);
Paragraph p = new Paragraph("Hello World! ")
.add(new Text("Hallo Wereld! ").setFontSize(14))
.add(new Text("Bonjour le monde! ").setFontSize(10).setTextRise(4))
.add(
new Text("\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u043b\u0442\u0435 \u043c\u0438\u0440! ")
.setFont(russian))
.add(new Text("\u4f60\u597d\u4e16\u754c! ")
.setFont(cjk))
.add(new Text("\uc5ec\ubcf4\uc138\uc694 \uc138\uacc4!")
.setFont(cjk));
document.add(p);
}
}
स्रोत: Developers.itextpdf.com और iText 7: बिल्डिंग ब्लॉक्स ट्यूटोरियल।