Templates এবং Document Generation

Java Technologies - অ্যাপাচি পিওআই (ওয়ার্ড)
188
188

Apache POI লাইব্রেরি ব্যবহার করে আপনি Word Templates তৈরি করতে পারেন এবং সেই টেমপ্লেটের ভিত্তিতে Document Generation (ডকুমেন্ট প্রজন্ম) করতে পারেন। এই ফিচারটি খুবই কার্যকর যখন আপনাকে অনেক ডকুমেন্ট তৈরি করতে হয় যেগুলির বেশিরভাগ অংশ এক ধরনের থাকে, তবে কিছু অংশ (যেমন ব্যবহারকারীর নাম, ঠিকানা, তারিখ ইত্যাদি) পরিবর্তনশীল হয়। এর মাধ্যমে আপনি ডায়নামিকভাবে ডকুমেন্ট তৈরি করতে পারেন।


Templates ব্যবহার করে Document Generation

Word Templates এমন একটি ডকুমেন্ট ফাইল, যা মূলত একটি ব্ল্যাংক টেমপ্লেট হিসেবে কাজ করে এবং প্রয়োজনীয় স্থানে ডাটা ইনপুট করার জন্য প্লেসহোল্ডার থাকে। Apache POI ব্যবহার করে আপনি এই প্লেসহোল্ডারগুলির মাধ্যমে ডাইনামিক ডেটা ঢুকিয়ে একটি নতুন Word ডকুমেন্ট তৈরি করতে পারেন।

উদাহরণ: Word Template ব্যবহার করে ডকুমেন্ট তৈরি

ধরা যাক, আপনার কাছে একটি .docx ফাইল রয়েছে, যেখানে কিছু ${placeholder} প্লেসহোল্ডার ব্যবহার করা হয়েছে। আপনি এই প্লেসহোল্ডারগুলিকে প্রতিস্থাপন করতে চান।

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class TemplateGenerationExample {
    public static void main(String[] args) {
        try {
            // Template Word ডকুমেন্ট লোড করা
            FileInputStream templateFile = new FileInputStream("template.docx");
            XWPFDocument document = new XWPFDocument(templateFile);

            // Template ডকুমেন্টে টেক্সট পরিবর্তন করা
            for (XWPFParagraph paragraph : document.getParagraphs()) {
                String paragraphText = paragraph.getText();
                if (paragraphText.contains("${name}")) {
                    paragraphText = paragraphText.replace("${name}", "John Doe");
                }
                if (paragraphText.contains("${date}")) {
                    paragraphText = paragraphText.replace("${date}", "2024-12-17");
                }

                // পরিবর্তিত টেক্সট সেট করা
                XWPFRun run = paragraph.createRun();
                run.setText(paragraphText);
            }

            // পরিবর্তিত ডকুমেন্ট সেভ করা
            FileOutputStream out = new FileOutputStream("generated_document.docx");
            document.write(out);
            out.close();

            System.out.println("Document generated from template successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • FileInputStream ব্যবহার করে template.docx নামের একটি টেমপ্লেট ফাইল লোড করা হয়েছে।
  • ডকুমেন্টের প্রতিটি প্যারাগ্রাফের মধ্যে ${name} এবং ${date} প্লেসহোল্ডার খুঁজে বের করা হয়েছে এবং তাদের যথাযথ মান দিয়ে প্রতিস্থাপন করা হয়েছে।
  • পরিবর্তিত ডকুমেন্টটি generated_document.docx নামে সেভ করা হয়েছে।

Dynamic Content Generation

আপনি Dynamic Content (যেমন ব্যবহারকারীর নাম, অ্যাড্রেস ইত্যাদি) ব্যবহার করে টেমপ্লেটের মধ্যে পরিবর্তন আনতে পারেন। এটি সাধারণত looping, conditional statements, বা dynamic form generation এর মাধ্যমে করা হয়।

উদাহরণ: ডাইনামিক কনটেন্ট যোগ করা

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

public class DynamicContentGenerationExample {
    public static void main(String[] args) {
        try {
            // Template Word ডকুমেন্ট লোড করা
            FileInputStream templateFile = new FileInputStream("template.docx");
            XWPFDocument document = new XWPFDocument(templateFile);

            // ডাইনামিক কনটেন্ট (যেমন একটি তালিকা) যোগ করা
            List<String> items = List.of("Item 1", "Item 2", "Item 3");

            // নতুন প্যারাগ্রাফ তৈরি করা এবং তালিকাভুক্ত কনটেন্ট যোগ করা
            XWPFParagraph listParagraph = document.createParagraph();
            for (String item : items) {
                XWPFRun run = listParagraph.createRun();
                run.setText(item);
                run.addBreak();  // নতুন লাইন শুরু করার জন্য
            }

            // পরিবর্তিত ডকুমেন্ট সেভ করা
            FileOutputStream out = new FileOutputStream("generated_dynamic_document.docx");
            document.write(out);
            out.close();

            System.out.println("Document generated with dynamic content successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

ব্যাখ্যা:

  • একটি List ব্যবহার করে ডাইনামিক কনটেন্ট তৈরি করা হয়েছে এবং প্রতিটি আইটেমকে নতুন লাইনে যোগ করা হয়েছে।
  • এই কনটেন্টটি টেমপ্লেট ডকুমেন্টে নতুন প্যারাগ্রাফ হিসেবে যোগ করা হয়েছে এবং ডকুমেন্টটি সেভ করা হয়েছে।

Templates এবং Document Generation এর মধ্যে পার্থক্য

  1. Templates: একটি টেমপ্লেট ফাইল হল পূর্বনির্ধারিত ডিজাইন বা কাঠামো, যেখানে প্লেসহোল্ডার থাকে। এই প্লেসহোল্ডারগুলি ডাইনামিকভাবে পরিবর্তনশীল ডেটা দ্বারা প্রতিস্থাপিত হয়।
  2. Document Generation: ডকুমেন্ট প্রজন্মের প্রক্রিয়ায় আপনি ডাইনামিক কনটেন্ট বা ডেটা ব্যবহার করে একটি নতুন ডকুমেন্ট তৈরি করেন, যেখানে পূর্বনির্ধারিত কাঠামো (যেমন টেমপ্লেট) ব্যবহার করা হতে পারে।

সারাংশ

Apache POI লাইব্রেরি ব্যবহার করে আপনি Word Templates তৈরি করে Dynamic Document Generation করতে পারেন। টেমপ্লেটে placeholders ব্যবহার করে, আপনি ডাইনামিক কনটেন্ট (যেমন ব্যবহারকারীর নাম, তারিখ, তালিকা ইত্যাদি) সহজেই প্রতিস্থাপন করতে পারেন। এটি অনেক কাজে আসে যখন আপনাকে একই ধরনের ডকুমেন্ট একাধিক বার তৈরি করতে হয়, তবে প্রতিটি ডকুমেন্টে কিছু তথ্য ভিন্ন থাকে।

common.content_added_by

Word Templates তৈরি এবং ব্যবহার করা

126
126

Apache POI লাইব্রেরি ব্যবহার করে আপনি Word Templates তৈরি এবং ব্যবহার করতে পারেন। Word Templates হলো এমন ডকুমেন্ট যা একটি নির্দিষ্ট কাঠামো বা ফর্ম্যাট অনুসরণ করে, এবং পরবর্তীতে এই টেমপ্লেট ব্যবহার করে নতুন ডকুমেন্ট তৈরি করা যায়। টেমপ্লেট ব্যবহার করার সুবিধা হল, আপনি একই ধরনের ডকুমেন্ট বারবার তৈরি করতে পারেন, শুধুমাত্র কিছু নির্দিষ্ট তথ্য পরিবর্তন করে।

এখানে আমরা দেখাবো কীভাবে একটি Word Template তৈরি করা যায় এবং কিভাবে Apache POI দিয়ে তা ব্যবহার করা যায়।


Word Template তৈরি করার উদাহরণ

ধরা যাক, আপনি একটি Certificate Template তৈরি করতে চান যা পরবর্তীতে বিভিন্ন নাম এবং তারিখ সহ ব্যবহার করা যাবে। প্রথমে একটি টেমপ্লেট তৈরি করতে হবে, যা placeholder টেক্সট ধারণ করবে। তারপর আপনি এই টেমপ্লেটটি ব্যবহার করে নতুন ডকুমেন্ট তৈরি করবেন।

টেমপ্লেট তৈরি (Word Template .docx)

  1. Microsoft Word ব্যবহার করে একটি সাধারণ Certificate Template তৈরি করুন।
    • একটি প্যারাগ্রাফে লিখুন: "This certificate is awarded to {Name} for their excellent performance on {Date}."
    • {Name} এবং {Date} হল placeholder টেক্সট।
  2. টেমপ্লেটটি certificate_template.docx নামে সেভ করুন।

টেমপ্লেট ব্যবহার করে নতুন Word ডকুমেন্ট তৈরি করা

এখন Apache POI ব্যবহার করে আমরা এই টেমপ্লেট থেকে একটি নতুন ডকুমেন্ট তৈরি করব, যেখানে {Name} এবং {Date} এর জায়গায় বাস্তবিক মান (নাম এবং তারিখ) প্রবেশ করবে।

import org.apache.poi.xwpf.usermodel.*;

import java.io.*;
import java.util.*;

public class WordTemplateExample {
    public static void main(String[] args) {
        try {
            // টেমপ্লেট ফাইল লোড করা
            FileInputStream templateFile = new FileInputStream("certificate_template.docx");
            XWPFDocument templateDoc = new XWPFDocument(templateFile);

            // টেমপ্লেটের সমস্ত প্যারাগ্রাফ খুঁজে বের করা
            List<XWPFParagraph> paragraphs = templateDoc.getParagraphs();

            // টেমপ্লেটের মধ্যে placeholder টেক্সট প্রতিস্থাপন করা
            for (XWPFParagraph paragraph : paragraphs) {
                for (XWPFRun run : paragraph.getRuns()) {
                    String text = run.getText(0);
                    if (text != null) {
                        // {Name} এবং {Date} প্রতিস্থাপন করা
                        text = text.replace("{Name}", "John Doe")
                                   .replace("{Date}", "2024-12-17");
                        run.setText(text, 0);
                    }
                }
            }

            // নতুন ডকুমেন্টটি সেভ করা
            FileOutputStream out = new FileOutputStream("new_certificate.docx");
            templateDoc.write(out);
            out.close();

            System.out.println("নতুন ডকুমেন্ট সফলভাবে তৈরি করা হয়েছে!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

কোড বিশ্লেষণ:

  1. FileInputStream: এটি টেমপ্লেট ফাইলটি লোড করার জন্য ব্যবহৃত হয়।
  2. XWPFDocument: এটি টেমপ্লেট ডকুমেন্টকে প্যার্স করার জন্য ব্যবহার করা হয়।
  3. getParagraphs(): টেমপ্লেটের সব প্যারাগ্রাফ সংগ্রহ করে।
  4. getRuns(): প্রতিটি প্যারাগ্রাফের মধ্যে Run খুঁজে বের করে, যেখানে টেক্সট থাকে।
  5. replace(): placeholder টেক্সট (যেমন {Name} এবং {Date}) আসল মানে প্রতিস্থাপন করা হয়।
  6. FileOutputStream: নতুন ডকুমেন্টটি সেভ করতে ব্যবহৃত হয়।

এই কোডটি একটি নতুন certificate ডকুমেন্ট তৈরি করবে, যেখানে {Name} এবং {Date} যথাক্রমে "John Doe" এবং "2024-12-17" দিয়ে প্রতিস্থাপিত হবে।


টেমপ্লেটের মধ্যে বিভিন্ন ধরনের placeholder ব্যবহার

আপনি চাইলে Word Template-এ বিভিন্ন ধরনের placeholder ব্যবহার করতে পারেন, যেমন:

  • {CompanyName}: কোম্পানির নাম
  • {EmployeeName}: কর্মচারীর নাম
  • {Date}: তারিখ

এই প্লেসহোল্ডারগুলির মান পরিবর্তন করতে আপনি কোডের মধ্যে replace() মেথড ব্যবহার করতে পারেন।

উদাহরণ:

text = text.replace("{CompanyName}", "ABC Corp")
           .replace("{EmployeeName}", "Jane Smith")
           .replace("{Date}", "2024-12-17");

সারাংশ

Apache POI লাইব্রেরি ব্যবহার করে আপনি Word Template তৈরি এবং ব্যবহার করতে পারেন। একটি টেমপ্লেট ডকুমেন্টে placeholder টেক্সট রেখে পরবর্তীতে সেই টেমপ্লেটটি ব্যবহার করে ডকুমেন্টের ভেতরে বাস্তবিক তথ্য যেমন নাম, তারিখ, বা অন্যান্য ডেটা প্রতিস্থাপন করা হয়। এই পদ্ধতিটি পুনরাবৃত্ত কাজকে সহজ এবং দ্রুত করে তোলে, এবং এটি কাস্টম ডকুমেন্ট তৈরির জন্য খুবই উপকারী।


common.content_added_by

Template থেকে Dynamic Document Generation

132
132

Apache POI ব্যবহার করে আপনি Word ডকুমেন্ট তৈরি করতে পারেন এবং এটি একটি Template থেকে Dynamic Content সহ নতুন ডকুমেন্ট তৈরি করতে পারেন। এই প্রক্রিয়ায়, একটি স্ট্যাটিক Word Template (যেমন .docx ফাইল) ব্যবহার করা হয়, যেখানে পূর্বনির্ধারিত টেক্সট বা প্লেসহোল্ডার থাকে এবং প্রোগ্রামmatically সেই টেক্সট বা প্লেসহোল্ডার পরিবর্তন বা প্রতিস্থাপন করা হয়।

এই পদ্ধতিতে, আপনার Template ফাইলের কিছু অংশ ডাইনামিকভাবে পরিবর্তন করা সম্ভব, যেমন নাম, তারিখ, ঠিকানা, অথবা অন্যান্য কাস্টম ডেটা।


Template ব্যবহার করে Dynamic Document Generation

Template থেকে ডাইনামিক ডকুমেন্ট তৈরি করার জন্য কয়েকটি সাধারণ ধাপ:

  1. Template তৈরি করা: একটি স্ট্যাটিক Word Document তৈরি করুন, যেখানে আপনি পরিবর্তনযোগ্য ক্ষেত্র (যেমন ${name}, ${date}) ব্যবহার করবেন।
  2. POI দিয়ে Template লোড করা: Apache POI ব্যবহার করে টেমপ্লেট ফাইলটি লোড করুন।
  3. ডাইনামিক ডেটা দিয়ে টেমপ্লেট পূর্ণ করা: টেমপ্লেটের পরিবর্তনযোগ্য জায়গাগুলিকে dynamic values দিয়ে প্রতিস্থাপন করুন।
  4. নতুন ডকুমেন্ট সংরক্ষণ করা: পরিবর্তিত টেমপ্লেট থেকে নতুন Word ডকুমেন্ট তৈরি এবং সংরক্ষণ করুন।

উদাহরণ: Template থেকে Dynamic Document Generation

ধরা যাক, আমাদের কাছে একটি টেমপ্লেট template.docx ফাইল আছে, যেখানে কিছু প্লেসহোল্ডার আছে যেমন ${name} এবং ${date}। এখন আমরা এই টেমপ্লেটটি ব্যবহার করে একটি নতুন ডকুমেন্ট তৈরি করব, যেখানে এই প্লেসহোল্ডারগুলো ডাইনামিক ডেটা দিয়ে প্রতিস্থাপন করা হবে।

import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;

public class DynamicDocumentGeneration {
    public static void main(String[] args) throws IOException {
        // Template ডকুমেন্ট লোড করা
        FileInputStream fis = new FileInputStream("template.docx");
        XWPFDocument document = new XWPFDocument(fis);

        // ডাইনামিক ডেটা
        Map<String, String> data = Map.of(
            "${name}", "John Doe",
            "${date}", "2024-12-17"
        );

        // টেমপ্লেটে প্লেসহোল্ডার গুলি প্রতিস্থাপন করা
        for (XWPFParagraph paragraph : document.getParagraphs()) {
            for (XWPFRun run : paragraph.getRuns()) {
                String text = run.getText(0);
                if (text != null) {
                    // প্লেসহোল্ডার গুলি প্রতিস্থাপন করা
                    for (Map.Entry<String, String> entry : data.entrySet()) {
                        if (text.contains(entry.getKey())) {
                            text = text.replace(entry.getKey(), entry.getValue());
                            run.setText(text, 0); // প্রতিস্থাপিত টেক্সট সেট করা
                        }
                    }
                }
            }
        }

        // নতুন ডকুমেন্ট সংরক্ষণ
        FileOutputStream out = new FileOutputStream("generated_document.docx");
        document.write(out);
        out.close();

        System.out.println("ডাইনামিক ডকুমেন্ট সফলভাবে তৈরি হয়েছে।");
    }
}

কোড ব্যাখ্যা:

  1. Template লোড করা: প্রথমে template.docx ফাইলটি XWPFDocument দিয়ে লোড করা হয়েছে।
  2. Dynamic Data: একটি Map ব্যবহার করে ডাইনামিক ডেটা নির্দিষ্ট করা হয়েছে, যেখানে প্লেসহোল্ডার (${name}) এবং (${date}) এর পরিবর্তে আসল মান দেওয়া হয়েছে।
  3. Text Replacement: ডকুমেন্টের XWPFParagraph এবং XWPFRun এর মাধ্যমে প্রতিটি প্যারাগ্রাফের টেক্সট চেক করা হচ্ছে, এবং সেখানে যদি প্লেসহোল্ডার থাকে, তবে সেই প্লেসহোল্ডারটি ডাইনামিক ডেটা দিয়ে প্রতিস্থাপন করা হচ্ছে।
  4. Save New Document: পরিবর্তিত ডকুমেন্টটি generated_document.docx নামে নতুন ফাইলে সংরক্ষণ করা হয়েছে।

সারাংশ

Apache POI ব্যবহার করে আপনি সহজেই একটি Template Word Document থেকে Dynamic Document তৈরি করতে পারেন। টেমপ্লেটে প্লেসহোল্ডার বা স্ট্যাটিক টেক্সট রেখে, প্রোগ্রামmatically তা পরিবর্তন করে ডাইনামিক কনটেন্ট যোগ করা সম্ভব। এটি বিভিন্ন প্রয়োজনে যেমন কাস্টম রিপোর্ট তৈরি, চিঠি বা নোটিফিকেশন ইত্যাদি তৈরিতে কাজে আসে। Template থেকে ডাইনামিক ডকুমেন্ট জেনারেট করার জন্য XWPFParagraph এবং XWPFRun ব্যবহার করা হয় টেক্সট ম্যানিপুলেট করার জন্য।


common.content_added_by

Placeholder Text এবং Data Binding

150
150

Apache POI লাইব্রেরি ব্যবহৃত হয় Word ডকুমেন্টের কনটেন্ট ম্যানিপুলেশনের জন্য। এক্ষেত্রে Placeholder Text এবং Data Binding দুটি গুরুত্বপূর্ণ ফিচার। এই ফিচারগুলোকে ব্যবহার করে আপনি ডকুমেন্টে ডাইনামিক ডেটা সন্নিবেশ করতে পারেন এবং placeholder টেক্সটকে data দিয়ে প্রতিস্থাপন করতে পারেন। নিচে Placeholder Text এবং Data Binding ব্যবহারের বিস্তারিত আলোচনা করা হলো।


১. Placeholder Text কী?

Placeholder Text হল এমন একটি টেক্সট যা একটি নির্দিষ্ট স্থানে temporarily (অস্থায়ীভাবে) থাকে, যা পরে ডাইনামিক ডেটা বা ব্যবহারকারীর ইনপুট দিয়ে প্রতিস্থাপন করা হয়। এটি সাধারণত ফর্ম বা টেমপ্লেট ডকুমেন্টে ব্যবহৃত হয়, যেখানে নির্দিষ্ট ফিল্ডগুলো ব্যবহারকারীর ইনপুট বা অন্যান্য ডেটা দ্বারা পূর্ণ হয়।

এটি "{{placeholder}}" বা "[placeholder]" ইত্যাদি ফর্ম্যাটে থাকতে পারে।


২. Placeholder Text যোগ করা

Apache POI ব্যবহার করে Word ডকুমেন্টে Placeholder Text যোগ করা একটি সাধারণ কাজ। আপনি টেক্সট run বা paragraph-এ কিছু placeholder টেক্সট যোগ করতে পারেন, যা পরে ডাইনামিক ডেটার মাধ্যমে প্রতিস্থাপন করা হবে।

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class AddPlaceholderText {
    public static void main(String[] args) throws IOException {
        // নতুন Word ডকুমেন্ট তৈরি করা
        XWPFDocument document = new XWPFDocument();

        // Paragraph তৈরি করা
        XWPFParagraph paragraph = document.createParagraph();
        paragraph.setAlignment(ParagraphAlignment.LEFT);

        // Placeholder text যোগ করা
        XWPFRun run = paragraph.createRun();
        run.setText("Hello, {{name}}! Welcome to the document.");

        // ডকুমেন্ট সেভ করা
        try (FileOutputStream out = new FileOutputStream("document_with_placeholder.docx")) {
            document.write(out);
        }
    }
}

এখানে, {{name}} placeholder হিসেবে রাখা হয়েছে, যা পরবর্তী সময়ে Data Binding ব্যবহার করে প্রতিস্থাপন করা যাবে।


৩. Data Binding কী?

Data Binding হল একটি প্রক্রিয়া যেখানে static বা hardcoded ডেটার পরিবর্তে ডাইনামিক ডেটা placeholder গুলোর স্থানে অটোমেটিকভাবে প্রতিস্থাপন হয়। এটি সাধারণত template-driven ডকুমেন্ট তৈরি করতে ব্যবহৃত হয়, যেমন পত্রিকা, চুক্তিপত্র, রিপোর্ট ইত্যাদি যেখানে কিছু অংশ ব্যবহারকারীর বা ডেটাবেস থেকে আসা তথ্য দিয়ে পূর্ণ করা হয়।


৪. Data Binding Example

এখন, আপনি {{name}} placeholder কে একটি ডাইনামিক ভ্যালু দিয়ে প্রতিস্থাপন করতে পারেন। উদাহরণস্বরূপ, যদি আপনার কাছে একটি ডাটাবেস বা ব্যবহারকারীর ইনপুট থাকে, তবে আপনি সেই তথ্য দিয়ে placeholder প্রতিস্থাপন করতে পারেন।

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ReplacePlaceholderWithData {
    public static void main(String[] args) throws IOException {
        // ডকুমেন্ট লোড করা
        XWPFDocument document = new XWPFDocument(new FileInputStream("document_with_placeholder.docx"));

        // ডকুমেন্টে সব Paragraph গুলি পড়া
        for (XWPFParagraph paragraph : document.getParagraphs()) {
            for (XWPFRun run : paragraph.getRuns()) {
                String text = run.getText(0);
                
                // Placeholder text প্রতিস্থাপন
                if (text != null && text.contains("{{name}}")) {
                    text = text.replace("{{name}}", "John Doe"); // {{name}} কে "John Doe" দিয়ে প্রতিস্থাপন
                    run.setText(text, 0); // নতুন টেক্সট সেট করা
                }
            }
        }

        // পরিবর্তিত ডকুমেন্ট সেভ করা
        try (FileOutputStream out = new FileOutputStream("document_with_data.docx")) {
            document.write(out);
        }
    }
}

এখানে, {{name}} placeholder-এ "John Doe" নাম প্রতিস্থাপন করা হয়েছে। এটি data binding এর একটি উদাহরণ, যেখানে ডাইনামিক ডেটা দিয়ে placeholder গুলি প্রতিস্থাপন করা হয়েছে।


৫. Complex Data Binding

কখনও কখনও আপনার ডকুমেন্টে একাধিক placeholder থাকতে পারে বা অনেক ধরণের ডেটা প্রয়োজন হতে পারে। এতে আপনি বিভিন্ন Dynamic Values একত্রিত করে ডকুমেন্টে একাধিক জায়গায় প্রতিস্থাপন করতে পারেন। উদাহরণস্বরূপ:

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ComplexDataBinding {
    public static void main(String[] args) throws IOException {
        // ডকুমেন্ট লোড করা
        XWPFDocument document = new XWPFDocument(new FileInputStream("document_with_placeholder.docx"));

        // ডাইনামিক ডেটা
        String name = "John Doe";
        String date = "2024-12-17";
        String address = "123 Main Street";

        // Paragraph গুলিতে placeholder গুলি প্রতিস্থাপন
        for (XWPFParagraph paragraph : document.getParagraphs()) {
            for (XWPFRun run : paragraph.getRuns()) {
                String text = run.getText(0);

                if (text != null) {
                    // {{name}} প্রতিস্থাপন
                    if (text.contains("{{name}}")) {
                        text = text.replace("{{name}}", name);
                    }

                    // {{date}} প্রতিস্থাপন
                    if (text.contains("{{date}}")) {
                        text = text.replace("{{date}}", date);
                    }

                    // {{address}} প্রতিস্থাপন
                    if (text.contains("{{address}}")) {
                        text = text.replace("{{address}}", address);
                    }

                    run.setText(text, 0); // নতুন টেক্সট সেট করা
                }
            }
        }

        // পরিবর্তিত ডকুমেন্ট সেভ করা
        try (FileOutputStream out = new FileOutputStream("document_with_complex_data.docx")) {
            document.write(out);
        }
    }
}

এখানে, একাধিক placeholder (যেমন {{name}}, {{date}}, এবং {{address}}) ডাইনামিকভাবে প্রতিস্থাপন করা হয়েছে।


৬. সারাংশ

Placeholder Text এবং Data Binding ব্যবহার করে আপনি একটি Word ডকুমেন্টে ডাইনামিক ডেটা সন্নিবেশ করতে পারেন এবং বিভিন্ন placeholders বা template fields প্রতিস্থাপন করতে পারেন। Apache POI লাইব্রেরি এই কাজটি খুব সহজে করতে সহায়তা করে। আপনি যে কোনও placeholder টেক্সট (যেমন {{name}}, {{address}}) ডাইনামিক ডেটা দিয়ে প্রতিস্থাপন করে একটি টেমপ্লেট তৈরি করতে পারেন এবং সেই টেমপ্লেটে ডাইনামিক ডেটা ইন্সার্ট করতে পারেন।

এই ধরনের টেমপ্লেট ব্যবহারের ফলে আপনি সহজে প্রমোশনাল ম্যাটেরিয়াল, রিপোর্ট বা চুক্তিপত্র তৈরি করতে পারেন যেখানে কিছু তথ্য ডাইনামিকভাবে ইনপুট হয়ে থাকে।

common.content_added_by

Template Management এবং Reusability

147
147

Apache POI এর মাধ্যমে Microsoft Word (DOCX) ডকুমেন্টে template management এবং reusability পরিচালনা করা সম্ভব। Template management হলো ডকুমেন্টে পূর্বনির্ধারিত কন্টেন্ট, স্টাইল, এবং ফরম্যাটের ব্যবহার, যা পুনরায় বিভিন্ন পরিস্থিতিতে ব্যবহৃত হতে পারে। এটি ডকুমেন্ট তৈরির প্রক্রিয়াকে দ্রুত এবং কার্যকর করে।

এখানে আমরা দেখবো কিভাবে Word templates তৈরি করা যায় এবং কিভাবে তা পুনঃব্যবহারযোগ্য (reusable) করা যায় বিভিন্ন ডকুমেন্টের মধ্যে।


১. Template তৈরি এবং Customization

Word Templates (ডকুমেন্ট টেমপ্লেট) সাধারণত এমন ডকুমেন্ট হয়, যা পূর্বনির্ধারিত কন্টেন্ট, স্টাইল, এবং ফরম্যাট ধারণ করে। Apache POI ব্যবহার করে আপনি সহজেই একটি template তৈরি করতে পারেন এবং তারপর সেটিকে প্রয়োজন অনুসারে customize করতে পারেন।

উদাহরণ: Template তৈরি এবং Customization

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.io.FileOutputStream;
import java.io.IOException;

public class TemplateExample {
    public static void main(String[] args) throws IOException {
        // একটি নতুন Word ডকুমেন্ট তৈরি করা
        XWPFDocument document = new XWPFDocument();

        // একটি প্যারাগ্রাফ তৈরি করা (টেমপ্লেটের জন্য স্টাইল সেট করা)
        XWPFParagraph paragraph = document.createParagraph();
        paragraph.setStyle("Heading1");  // টেমপ্লেটের জন্য হেডিং স্টাইল ব্যবহার করা

        // প্যারাগ্রাফের মধ্যে টেক্সট যোগ করা
        XWPFRun run = paragraph.createRun();
        run.setText("টেমপ্লেটের শিরোনাম");

        // টেমপ্লেটের শরীর (Body) তৈরি করা
        XWPFParagraph bodyParagraph = document.createParagraph();
        XWPFRun bodyRun = bodyParagraph.createRun();
        bodyRun.setText("এটি একটি টেমপ্লেটের শরীরের কন্টেন্ট।");

        // Word ডকুমেন্ট সেভ করা
        try (FileOutputStream out = new FileOutputStream("TemplateExample.docx")) {
            document.write(out);
        }

        System.out.println("Template created successfully!");
    }
}

কোড ব্যাখ্যা:

  • paragraph.setStyle("Heading1"): টেমপ্লেটের জন্য Heading1 স্টাইল ব্যবহার করা হয়েছে, যা সাধারণত শিরোনামের জন্য ব্যবহৃত হয়।
  • run.setText("টেমপ্লেটের শিরোনাম"): টেমপ্লেটের শিরোনাম হিসেবে একটি টেক্সট যোগ করা হয়েছে।
  • bodyRun.setText("এটি একটি টেমপ্লেটের শরীরের কন্টেন্ট"): টেমপ্লেটের শরীরের (body) কন্টেন্ট যোগ করা হয়েছে।

২. Template থেকে ডেটা সাবstitute করা

ডকুমেন্টের টেমপ্লেট তৈরি করার পর, আপনি সেই টেমপ্লেটের মধ্যে কিছু জায়গায় dynamic data (যেমন, নাম, তারিখ, ঠিকানা ইত্যাদি) সন্নিবেশ করতে পারেন। এটি ডকুমেন্টের পুনঃব্যবহারযোগ্যতা এবং কাস্টমাইজেশন সহজ করে।

উদাহরণ: Template থেকে ডেটা সাবস্টিটিউশন

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.io.FileOutputStream;
import java.io.IOException;

public class TemplateWithDynamicData {
    public static void main(String[] args) throws IOException {
        // ডাইনামিক ডেটা
        String recipientName = "John Doe";
        String currentDate = "2024-12-17";

        // একটি নতুন Word ডকুমেন্ট তৈরি করা
        XWPFDocument document = new XWPFDocument();

        // প্যারাগ্রাফ তৈরি করা এবং ডাইনামিক ডেটা যোগ করা
        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setText("প্রিয় " + recipientName + ",");
        
        // পরবর্তী প্যারাগ্রাফে ডাইনামিক ডেটা ব্যবহার করা
        XWPFParagraph bodyParagraph = document.createParagraph();
        XWPFRun bodyRun = bodyParagraph.createRun();
        bodyRun.setText("আপনাকে জানানো হচ্ছে যে, আজকের তারিখ: " + currentDate);

        // Word ডকুমেন্ট সেভ করা
        try (FileOutputStream out = new FileOutputStream("TemplateWithDynamicData.docx")) {
            document.write(out);
        }

        System.out.println("Template with dynamic data created successfully!");
    }
}

কোড ব্যাখ্যা:

  • recipientName এবং currentDate: ডাইনামিক ডেটা তৈরি করা হয়েছে, যা টেমপ্লেটের বিভিন্ন জায়গায় ইনসার্ট করা হয়েছে।
  • run.setText("প্রিয় " + recipientName + ","): টেমপ্লেটের মধ্যে প্রাপকের নাম সাবস্টিটিউট করা হয়েছে।
  • bodyRun.setText("আপনাকে জানানো হচ্ছে যে, আজকের তারিখ: " + currentDate): টেমপ্লেটের মধ্যে তারিখ সাবস্টিটিউট করা হয়েছে।

৩. Reusable Template তৈরি করা

Reusable templates তৈরি করতে, একটি টেমপ্লেট ফাইল তৈরি করে সেটি বিভিন্ন প্রোজেক্টে বা ডকুমেন্টে ব্যবহার করা যেতে পারে। এর জন্য আপনি Apache POI দিয়ে একবার একটি template তৈরি করে সেটিকে পরে বিভিন্ন ডাইনামিক ডেটা দিয়ে পরিবর্তন (modify) করতে পারবেন।

উদাহরণ: Reusable Template ব্যবহার

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ReusableTemplateExample {
    public static void main(String[] args) throws IOException {
        // পূর্বে তৈরি করা টেমপ্লেট ফাইল থেকে ডকুমেন্ট লোড করা
        FileInputStream templateFile = new FileInputStream("TemplateExample.docx");
        XWPFDocument document = new XWPFDocument(templateFile);

        // ডাইনামিক ডেটা
        String recipientName = "Jane Smith";
        String currentDate = "2024-12-18";

        // টেমপ্লেটের প্রথম প্যারাগ্রাফে ডেটা সাবস্টিটিউট করা
        XWPFParagraph paragraph = document.getParagraphArray(0);
        XWPFRun run = paragraph.getRuns().get(0);
        run.setText("প্রিয় " + recipientName + ",");

        // টেমপ্লেটের দ্বিতীয় প্যারাগ্রাফে ডেটা সাবস্টিটিউট করা
        XWPFParagraph bodyParagraph = document.getParagraphArray(1);
        XWPFRun bodyRun = bodyParagraph.getRuns().get(0);
        bodyRun.setText("আপনাকে জানানো হচ্ছে যে, আজকের তারিখ: " + currentDate);

        // পরিবর্তিত ডকুমেন্ট সেভ করা
        try (FileOutputStream out = new FileOutputStream("ReusableTemplateExample.docx")) {
            document.write(out);
        }

        System.out.println("Reusable template updated successfully!");
    }
}

কোড ব্যাখ্যা:

  • FileInputStream(templateFile): পূর্বে তৈরি করা টেমপ্লেট ফাইলটি লোড করা হচ্ছে।
  • XWPFParagraph paragraph = document.getParagraphArray(0): টেমপ্লেটের প্রথম প্যারাগ্রাফে ডাইনামিক ডেটা সাবস্টিটিউট করা হচ্ছে।
  • document.write(out): পরিবর্তিত ডকুমেন্ট নতুন নাম দিয়ে সেভ করা হচ্ছে।

সারাংশ

Apache POI এর মাধ্যমে template management এবং reusability কার্যকরভাবে পরিচালনা করা যায়। আপনি একবার একটি Word template তৈরি করে সেটিকে বিভিন্ন ডাইনামিক ডেটা দিয়ে কাস্টমাইজ এবং পুনরায় ব্যবহার করতে পারেন। এটি ডকুমেন্ট তৈরির সময় অনেকটা স্বয়ংক্রিয়তা এবং কার্যকারিতা যোগ করে, বিশেষ করে যখন একাধিক ডকুমেন্ট একই ধরনের কাঠামো এবং ফরম্যাট ধারণ করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion