
সংক্ষিপ্ত বিবরণ
@deepseek-ai/libreoffice-kit হলো একটি Node.js প্যাকেজ, যা পূর্বনির্মিত ও আকারে ছোট LibreOffice ইঞ্জিন ব্যবহার করে Office নথি রূপান্তর ও রেন্ডার করে। এটি এমন অ্যাপ্লিকেশনের জন্য তৈরি, যেগুলোর নির্ভরযোগ্য নথি বিন্যাস, পাঠযোগ্য লেখা, নির্দিষ্ট ফন্ট নিয়ন্ত্রণ এবং আলাদাভাবে ইনস্টল করা LibreOffice-এর ওপর নির্ভরতা ছাড়াই অফলাইনে কাজ করার সুবিধা প্রয়োজন।
প্যাকেজটি Office থেকে PDF রূপান্তর, সরাসরি PNG রেন্ডারিং এবং স্প্রেডশিট পুনঃগণনা সমর্থন করে। এটি Node.js সার্ভিস, ডেস্কটপ অ্যাপ্লিকেশন, ব্যাচ-প্রসেসিং কাজ বা অন্য কোনো নথি পাইপলাইনে ব্যবহার করা যায়। অনুমোদন, ফাইল সংরক্ষণ এবং প্রিভিউ ইন্টারফেস অ্যাপ্লিকেশনের দায়িত্বে থাকবে।
প্রধান বৈশিষ্ট্য
- Office রূপান্তর: সমর্থিত Writer, Calc এবং Impress নথি PDF-এ রপ্তানি করুন।
- পৃষ্ঠা রেন্ডারিং: Office বা PDF ইনপুট সরাসরি PNG পৃষ্ঠায় রেন্ডার করুন।
- স্প্রেডশিট পুনঃগণনা: ওয়ার্কবুক পুনঃগণনা করে হালনাগাদ ফলাফল সংরক্ষণ করুন।
- ফন্ট-সচেতন প্রক্রিয়াকরণ: সিস্টেম ফন্ট শনাক্ত করুন অথবা স্পষ্টভাবে কনফিগার করা ফন্ট ডিরেক্টরি ইনডেক্স করুন।
- কনফিগারযোগ্য বিকল্প: প্রচলিত Latin এবং সরলীকৃত চীনা ফন্ট পরিবারের জন্য ফলব্যাক পছন্দ ব্যবহার করুন।
- অনুপস্থিত ফন্টের প্রতিবেদন: পাঠযোগ্য OOXML নথির ডেটায় ঘোষিত অনুপলব্ধ ফন্ট পরিবারগুলোর প্রতিবেদন তৈরি করুন।
- অফলাইন ইঞ্জিন: সমর্থিত macOS ও Windows সিস্টেমে প্যাকেজ করা নেটিভ ইঞ্জিন অথবা Linux-এ WASM ইঞ্জিন ব্যবহার করুন।
- রিসোর্স নিয়ন্ত্রণ: টাইমআউট এবং ফন্ট ইনডেক্সিং বা লোডিং সীমা প্রয়োগ করুন।
- কমান্ড-লাইন ও Node API: টার্মিনাল থেকে রূপান্তর চালান অথবা অ্যাপ্লিকেশন কোডে সংযুক্ত করুন।
সমর্থিত নথি সম্পর্কিত বিবেচনা
ইঞ্জিনটি Writer, Calc, Impress, OOXML ও বাইনারি Office ফিল্টার, চার্ট, লেআউট ও ড্রয়িং উপাদান এবং PDF রপ্তানি সমর্থন বজায় রাখে। বাইনারি .doc, .xls এবং .ppt ফাইল সমর্থিত, যদি সেগুলো প্রকৃত OLE compound document হয়, যেমন Microsoft Office 97–2003 ফাইল।
শুধু বাইনারি Office এক্সটেনশন দিয়ে নতুন নাম দেওয়া RTF বা HTML ফাইল গ্রহণ করা হয় না।
.wpsফাইলও গ্রহণ করা হয় না।
OOXML নথির ক্ষেত্রে, পাঠযোগ্য নথি XML-এ পাওয়া অনুপলব্ধ পরিবারগুলোর প্রতিবেদন missingFonts দেয়। বাইনারি ফরম্যাট খালি তালিকা ফেরত দেয়, যদিও LibreOffice নিজস্ব ফন্ট ম্যাচিং চালিয়ে যায়। তাই ফলাফলটি অনুপস্থিত গ্লিফের সম্পূর্ণ প্রতিবেদন নয়।
পূর্বশর্ত ও ইনস্টলেশন
আপনার Node.js 22.19.0 বা পরবর্তী সংস্করণ প্রয়োজন। npm থেকে 0.1.3 সংস্করণ ইনস্টল করুন:
npm install @deepseek-ai/libreoffice-kit@0.1.3
প্যাকেজটি ঐচ্ছিক নির্ভরতা ব্যবহার করে বর্তমান অপারেটিং সিস্টেম ও আর্কিটেকচারের উপযোগী ইঞ্জিন ইনস্টল করে। এটি ইনস্টলেশনের সময় LibreOffice কম্পাইল করে না, অতিরিক্ত ইঞ্জিন ডাউনলোড করে না বা ব্যবহারকারীর ইনস্টল করা LibreOffice অ্যাপ্লিকেশন খোঁজে না।
প্ল্যাটফর্মভিত্তিক ইঞ্জিন নির্বাচন
- macOS Apple Silicon:
@deepseek-ai/libreoffice-kit-darwin-arm64ব্যবহার করে। - macOS Intel:
@deepseek-ai/libreoffice-kit-darwin-x64ব্যবহার করে। - Windows ARM64:
@deepseek-ai/libreoffice-kit-win32-arm64ব্যবহার করে এবং ARM64 Node.js-এর পাশাপাশি Microsoft Visual C++ v14 ARM64 Redistributable প্রয়োজন। - Windows x64:
@deepseek-ai/libreoffice-kit-win32-x64ব্যবহার করে এবং Microsoft Visual C++ v14 x64 Redistributable প্রয়োজন। - Linux: সাধারণত শেয়ার করা
@deepseek-ai/libreoffice-kit-wasmইঞ্জিন ব্যবহার করে।
macOS ও Windows-এ সংশ্লিষ্ট নেটিভ প্যাকেজ প্রয়োজন এবং WASM-এ ফলব্যাক হয় না। প্রয়োজনীয় ইঞ্জিন অনুপস্থিত বা ক্ষতিগ্রস্ত হলে createConverter একটি unavailable ত্রুটি দিয়ে প্রত্যাখ্যান করে। ব্যর্থ রূপান্তরও স্বয়ংক্রিয়ভাবে অন্য ইঞ্জিনে পরিবর্তন ঘটায় না।
কমান্ড-লাইন ইন্টারফেস ব্যবহার
ইনস্টলেশনের মাধ্যমে dsoffice কমান্ড যোগ হয়। কোনো প্রকল্পে এটি স্থানীয়ভাবে ইনস্টল করা থাকলে npm exec-এর মাধ্যমে চালান।
একটি পৃষ্ঠা PNG-তে রেন্ডার করা
নিচের কমান্ডটি একটি DOCX নথির ১ নম্বর পৃষ্ঠা report-pages আউটপুট ডিরেক্টরিতে রেন্ডার করে:
npm exec -- dsoffice render \
--input report.docx \
--output-dir report-pages \
--pages 1
একটি Office নথি PDF-এ রূপান্তর
npm exec -- dsoffice convert \
--input report.docx \
--output report.pdf
একটি স্প্রেডশিট পুনঃগণনা
সূত্রগুলোর মান গণনা করে হালনাগাদ ওয়ার্কবুক সংরক্ষণ করতে পুনঃগণনা কমান্ড ব্যবহার করুন:
npm exec -- dsoffice recalculate \
--input budget.xlsx \
--output recalculated.xlsx
Node.js API-এর মাধ্যমে নথি রূপান্তর
অ্যাপ্লিকেশনে সংযুক্ত করার জন্য createConverter ইমপোর্ট করুন, একটি কনভার্টার তৈরি করুন, অপারেশন চালান এবং finally ব্লকে কনভার্টারটি নিষ্পত্তি করুন।
import { createConverter } from '@deepseek-ai/libreoffice-kit';
const converter = await createConverter({
timeoutMs: 120_000,
});
try {
const result = await converter.render({
inputPath: '/private/work/document.docx',
outputPath: '/private/work/document.pdf',
});
console.log('Backend:', result.backend);
console.log('Missing fonts:', result.missingFonts);
} finally {
await converter.dispose();
}
এই উদাহরণে, তৈরি হওয়া PDF outputPath-এ লেখা হয়। ফেরত পাওয়া ফলাফলে নির্বাচিত ব্যাকএন্ড শনাক্ত করা হয় এবং নথির জন্য শনাক্ত করা অনুপস্থিত ফন্ট পরিবারের নাম অন্তর্ভুক্ত থাকে।
পাথ ও আউটপুটের প্রয়োজনীয়তা
- ইনপুট ও আউটপুটের পরম পাথ দিন।
- কলিং অ্যাপ্লিকেশনের মালিকানাধীন ও নিয়ন্ত্রিত ব্যক্তিগত ডিরেক্টরি ব্যবহার করুন।
- অনুরোধ করা আউটপুট ফাইলটি আগে থেকে বিদ্যমান থাকা যাবে না।
- ডিসপোজাল একটি
finallyব্লকে রাখুন, যাতে নেটিভ প্রসেস, ওয়ার্কার, প্রোফাইল এবং অস্থায়ী রিসোর্স পরিষ্কার করা যায়।
কাস্টম ফন্ট কনফিগার করা
ডিফল্টভাবে, প্যাকেজটি প্রচলিত সিস্টেম ও ব্যবহারকারীর ফন্ট ডিরেক্টরিতে ফন্ট খুঁজে পায়। এর পরিবর্তে fontDirectories-এর মাধ্যমে নির্দিষ্ট রুট দিতে পারেন:
import { createConverter } from '@deepseek-ai/libreoffice-kit';
const converter = await createConverter({
timeoutMs: 120_000,
fontDirectories: [
'/absolute/path/to/company-fonts',
'/absolute/path/to/cjk-fonts',
],
});
try {
const result = await converter.render({
inputPath: '/private/work/presentation.pptx',
outputPath: '/private/work/presentation.pdf',
});
if (result.missingFonts.length > 0) {
console.log('অনুপলব্ধ পরিবার:', result.missingFonts);
}
} finally {
await converter.dispose();
}
কাস্টম ফন্ট রুটগুলো ডিফল্ট আবিষ্কার তালিকায় যুক্ত হয় না; বরং সেটিকে প্রতিস্থাপন করে। প্যাকেজটি মেটাডেটা ও গ্লিফ কভারেজ পরীক্ষা করতে fontkit ব্যবহার করে, তারপর নির্বাচিত ফাইলগুলোকে তাদের মূল ফন্ট বাইট হিসেবে ইঞ্জিনে সরবরাহ করে।
কোনো ফন্ট সংগ্রহ বান্ডেল বা ডাউনলোড করা হয় না। আপনার ডিপ্লয়মেন্টে উপযুক্ত ফন্ট সরবরাহ করতে হবে এবং সেগুলো পুনর্বিতরণের অধিকার মেনে চলতে হবে। সাধারণত ন্যূনতম কনটেইনারে ফন্ট ইনস্টল করা বা একটি নির্দিষ্ট ফন্ট ডিরেক্টরি কনফিগার করা প্রয়োজন।
ফলব্যাক আচরণ
ডিফল্ট fontFallbacks-এ সাধারণ ল্যাটিন ও সরলীকৃত চীনা পরিবারের জন্য পছন্দ অন্তর্ভুক্ত থাকে। Calibri অনুপলব্ধ হলে বিকল্প হিসেবে Carlito এবং Cambria অনুপলব্ধ হলে Caladea অন্তর্ভুক্ত থাকে। কলার-প্রদত্ত ফলব্যাক গ্রুপগুলো ডিফল্টগুলো প্রতিস্থাপন করে এবং কেবল বাস্তবে উপলব্ধ ফন্ট নির্বাচন করতে পারে; এগুলো ফন্ট ইনস্টল করে না।
সঠিকভাবে ইনস্টল করা ফন্ট পরিবারগুলো অগ্রাধিকার পায়, যার মধ্যে অলংকারধর্মী ও হস্তলিখন ফন্টও রয়েছে। উপযুক্ত ইনস্টল করা ফেস নির্বাচন করতে WASM ফন্ট অনুরোধে ওজন ও ইটালিকের তথ্যও থাকে, আর অনুপস্থিত গ্লিফের জন্য ফন্ট ক্যাটালগ অতিরিক্ত ফন্ট সরবরাহ করতে পারে।
উন্নত অপারেশনাল টিপস
সতর্কতার সঙ্গে কনভার্টার পুনঃব্যবহার করুন
কনভার্টার পুনঃব্যবহার করলে অপরিবর্তিত ফন্ট মেটাডেটার জন্য শেয়ার করা ইন-মেমরি ও সীমাবদ্ধ ব্যবহারকারী-স্থানীয় ডিস্ক ক্যাশ থেকে সুবিধা পাওয়া যায়। তবে একটি কনভার্টারের অপারেশনগুলো সিরিয়ালভাবে চলে। আপনার সার্ভিসের নির্দিষ্ট কনকারেন্সি মডেল প্রয়োজন হলে, একই কনভার্টারে একাধিক রেন্ডার একইসঙ্গে চলে ধরে না নিয়ে এই সিরিয়ালাইজেশন বিবেচনায় নিন।
প্রতিটি রেন্ডারে এখনও একটি নতুন নেটিভ প্রসেস বা Node ওয়ার্কার এবং একটি ব্যক্তিগত প্রোফাইল ব্যবহৃত হয়। বাতিলকরণ ও ডিসপোজাল ইঞ্জিন বন্ধ হওয়া এবং পরিষ্কার-পরিচ্ছন্নতা সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করে।
ফন্ট রিসোর্সের সীমা নির্ধারণ করুন
বড় বা অবিশ্বস্ত ফন্ট ডিরেক্টরির ক্ষেত্রে উপলব্ধ ফন্ট নিয়ন্ত্রণগুলো দিয়ে সীমা নির্ধারণ করা উচিত:
maxFontFilesইনডেক্স করা ফন্ট ফাইলের সংখ্যা সীমিত করে।maxFontFileBytesপ্রতিটি ফন্ট ফাইলের আকার সীমিত করে।maxLoadedFontBytesলোড করা ফন্ট ডেটার মোট পরিমাণ সীমিত করে।
প্রতিটি অপারেশনে ফন্ট পুনরায় আবিষ্কার ও পুনরায় যাচাই করা হয়। অপরিবর্তিত মেটাডেটা কনভার্টার ফ্যাক্টরি ক্যাশের মাধ্যমে শেয়ার করা যায়। ক্যাশ কনফিগারেশন ও অবৈধকরণের বিস্তারিত জানতে ফন্ট মেটাডেটা ক্যাশের ডকুমেন্টেশন দেখুন।
Linux-এ ফন্টের প্রাপ্যতা পরিকল্পনা করুন
Linux WASM ইঞ্জিন কেবল আমদানি করা ফন্ট ব্যবহার করে। কোনো ব্যবহারযোগ্য ফন্ট না থাকলে রূপান্তর unavailable ত্রুটিসহ প্রত্যাখ্যাত হয়। তাই কনটেইনারে উপযুক্ত ফন্ট ইনস্টল করা বা একটি নিয়ন্ত্রিত ফন্ট ডিরেক্টরি মাউন্ট করে তার পরম পাথ fontDirectories-এ দিতে হবে।
Office-এর অভিন্ন আউটপুট ধরে নেবেন না
ফন্ট-সচেতন প্রসেসিং পরিবার নির্বাচনের ওপর নিয়ন্ত্রণ বাড়ায়, কিন্তু Microsoft Office-এর সঙ্গে অভিন্ন আউটপুট বা নেটিভ ও WASM ইঞ্জিনের মধ্যে অভিন্ন আউটপুটের নিশ্চয়তা দেয় না। ফন্টের মেট্রিক্সে লাইন ভাঙা, পৃষ্ঠা বিন্যাস, টেবিলের মাত্রা এবং অন্যান্য লেআউটের বিবরণ বদলে যেতে পারে।
অর্থবহ তুলনার জন্য একই ডকুমেন্ট বাইট, ফন্ট এবং এক্সপোর্ট অপশন ব্যবহার করুন। কনফিগার করা প্রতিস্থাপনের আগে নেটিভ LibreOffice ইনস্টল করা মূল পরিবার এবং মেট্রিক-সামঞ্জস্যপূর্ণ বিকল্প সমাধান করতে পারে, এবং এটি নিজস্ব ফেস নির্বাচন করে।
রূপান্তরকে ডকুমেন্ট-প্রসেসিং সীমারেখা হিসেবে বিবেচনা করুন
লাইব্রেরিটি রূপান্তর ও রেন্ডারিং সম্পাদন করে, কিন্তু অনুমোদন, স্টোরেজ বা প্রিভিউ ইন্টারফেস সরবরাহ করে না। অ্যাপ্লিকেশনগুলোর উচিত অ্যাক্সেস যাচাই করা, কলারের মালিকানাধীন ফাইল আলাদা রাখা, ব্যক্তিগত ওয়ার্কিং ডিরেক্টরি বেছে নেওয়া এবং রূপান্তর কাজের চারপাশে উপযুক্ত সময় ও রিসোর্স সীমা প্রয়োগ করা।
ডেভেলপমেন্ট ও যাচাই
আপনি যদি নিজেই রিপোজিটরিতে অবদান রাখেন, LibreOffice বিল্ড না করেই মেটাডেটা, ইউনিট এবং প্যাকেজিং পরীক্ষা চালাতে পারবেন:
pnpm verify:metadata
pnpm test
pnpm test:packaging
বাস্তব ইঞ্জিন পরীক্ষার জন্য অতিরিক্তভাবে অ্যাডাপ্টার বিল্ড, প্রস্তুত ইঞ্জিন পেলোড এবং packages/entry/lib/index.js-এর পরম পাথ নির্দেশ করা LIBREOFFICE_RUNTIME_ENTRY প্রয়োজন। ইঞ্জিন বিল্ডে রিপোজিটরি নির্ধারিত সোর্স ও টুলচেইন সংস্করণ ব্যবহার করা উচিত।
উপসংহার
@deepseek-ai/libreoffice-kit আধুনিক Node.js অ্যাপ্লিকেশনে Office রূপান্তর, স্প্রেডশিট পুনর্গণনা এবং PNG রেন্ডারিং বান্ডেল করার একটি কার্যকর উপায় প্রদান করে। এর প্রধান সুবিধা হলো অফলাইনে কাজ করা প্রস্তুত নেটিভ ও WASM ইঞ্জিনের সঙ্গে সুস্পষ্ট ফন্ট ব্যবস্থাপনা। নির্ভরযোগ্য ফলাফলের জন্য প্রয়োজনীয় ফন্ট সরবরাহ করুন, পরম ব্যক্তিগত পাথ ব্যবহার করুন, উপযুক্ত সীমা নির্ধারণ করুন, missingFonts পরীক্ষা করুন এবং ব্যবহারের পর সবসময় কনভার্টার ডিসপোজ করুন।
বাতিলকরণ, বিস্তারিত ত্রুটি ব্যবস্থাপনা এবং অতিরিক্ত রিসোর্স নিয়ন্ত্রণের জন্য Node API ডকুমেন্টেশন দেখুন।
