
جائزہ
@deepseek-ai/libreoffice-kit ایک Node.js پیکیج ہے جو پہلے سے تیار کردہ، مختصر LibreOffice انجنز کے ذریعے Office دستاویزات کو تبدیل اور رینڈر کرتا ہے۔ یہ ان ایپلی کیشنز کے لیے بنایا گیا ہے جنہیں قابلِ پیش گوئی دستاویز لے آؤٹ، قابلِ مطالعہ متن، فونٹس پر واضح کنٹرول، اور الگ سے نصب LibreOffice پر انحصار کیے بغیر آف لائن عمل درآمد درکار ہوتا ہے۔
یہ پیکیج Office سے PDF میں تبدیلی، براہِ راست PNG رینڈرنگ، اور اسپریڈشیٹ کی دوبارہ گنتی کی سہولت فراہم کرتا ہے۔ اسے Node.js سروس، ڈیسک ٹاپ ایپلی کیشن، بیچ پروسیسنگ جاب، یا کسی دیگر دستاویزی پائپ لائن میں استعمال کیا جا سکتا ہے۔ اجازت، فائل اسٹوریج، اور پیش منظر کے انٹرفیس ایپلی کیشن کی ذمہ داری رہتے ہیں۔
اہم خصوصیات
- Office تبدیلی: معاون Writer، Calc، اور Impress دستاویزات کو PDF میں برآمد کریں۔
- صفحہ رینڈرنگ: Office یا PDF ان پٹس کو براہِ راست PNG صفحات میں رینڈر کریں۔
- اسپریڈشیٹ کی دوبارہ گنتی: ورک بکس کی دوبارہ گنتی کریں اور تازہ نتیجہ محفوظ کریں۔
- فونٹ سے آگاہ پراسیسنگ: سسٹم فونٹس دریافت کریں یا واضح طور پر تشکیل شدہ فونٹ ڈائریکٹریز کا اشاریہ بنائیں۔
- قابلِ تشکیل متبادل: عام لاطینی اور آسان چینی فونٹ خاندانوں کے لیے فال بیک ترجیحات استعمال کریں۔
- غائب فونٹس کی رپورٹنگ: قابلِ مطالعہ OOXML دستاویز ڈیٹا میں بیان کردہ غیر دستیاب فونٹ خاندانوں کی رپورٹ کریں۔
- آف لائن انجنز: معاون macOS اور Windows سسٹمز پر پیکیج شدہ مقامی انجنز، یا Linux پر WASM انجن استعمال کریں۔
- وسائل کا کنٹرول: ٹائم آؤٹ اور فونٹ اشاریہ سازی یا لوڈنگ کی حدود نافذ کریں۔
- کمانڈ لائن اور Node APIs: ٹرمینل سے تبدیلیاں چلائیں یا انہیں ایپلی کیشن کوڈ میں شامل کریں۔
معاون دستاویزات سے متعلق امور
یہ انجن Writer، Calc، Impress، OOXML اور بائنری Office فلٹرز، چارٹس، لے آؤٹ اور ڈرائنگ اجزا، اور PDF برآمد کی سہولت برقرار رکھتا ہے۔ بائنری .doc، .xls، اور .ppt فائلیں اس وقت معاون ہیں جب وہ حقیقی OLE مرکب دستاویزات ہوں، جیسے Microsoft Office 97–2003 فائلیں۔
صرف بائنری Office ایکسٹینشن کے ساتھ نئے نام دی گئی RTF یا HTML فائلیں قبول نہیں کی جاتیں۔
.wpsفائلیں بھی قبول نہیں کی جاتیں۔
OOXML دستاویزات کے لیے missingFonts قابلِ مطالعہ دستاویزی XML میں ملنے والے غیر دستیاب خاندانوں کی رپورٹ کرتا ہے۔ بائنری فارمیٹس خالی فہرست واپس کرتے ہیں، اگرچہ 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 دستاویز کے صفحہ 1 کو 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('Unavailable families:', 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
حقیقی انجن ٹیسٹس کے لیے اضافی طور پر اڈاپٹر کی تعمیر، تیار کردہ انجن پے لوڈز، اور LIBREOFFICE_RUNTIME_ENTRY کا packages/entry/lib/index.js کے مطلق راستے کی طرف اشارہ کرنا ضروری ہے۔ انجن کی تعمیرات میں ریپوزٹری کے ذریعے مقرر کردہ سورس اور ٹول چین ورژنز استعمال ہونے چاہییں۔
نتیجہ
@deepseek-ai/libreoffice-kit جدید Node.js ایپلیکیشنز میں Office تبدیلی، اسپریڈشیٹ کی دوبارہ کیلکولیشن اور PNG رینڈرنگ شامل کرنے کا ایک عملی طریقہ فراہم کرتا ہے۔ اس کا بنیادی فائدہ واضح فونٹ ہینڈلنگ کو تیار شدہ مقامی اور WASM انجنز کے ساتھ ملانا ہے، جو آف لائن کام کرتے ہیں۔ قابل اعتماد نتائج کے لیے مطلوبہ فونٹس فراہم کریں، مطلق نجی راستے استعمال کریں، مناسب حدود مقرر کریں، missingFonts کا جائزہ لیں، اور استعمال کے بعد ہمیشہ کنورٹرز کو ڈسپوز کریں۔
منسوخی، تفصیلی خرابی سے نمٹنے اور اضافی وسائل کے کنٹرولز کے لیے Node API دستاویزات دیکھیں۔
