মূল কনটেন্টে যান
এআই টিউটোরিয়াল

anydoc দিয়ে অফিস ডকুমেন্টকে Markdown-এ রূপান্তর করুন

Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV এবং PDF ফাইলকে সামঞ্জস্যপূর্ণ GitHub-Flavored Markdown-এ রূপান্তর করতে anydoc কীভাবে ইনস্টল ও ব্যবহার করবেন তা জানুন। এই টিউটোরিয়ালে CLI, ভাষা-বাইন্ডিং, ব্রাউজার WebAssembly, ফরম্যাট শনাক্তকরণ, ডকুমেন্ট অ্যাসেট, ত্রুটি ব্যবস্থাপনা এবং ব্যবহারিক ইন্টিগ্রেশন টিপস আলোচনা করা হয়েছে।

anydoc দিয়ে অফিস ডকুমেন্টকে Markdown-এ রূপান্তর

anydoc কী?

anydoc হলো নথিকে পরিষ্কার GitHub-Flavored Markdown-এ রূপান্তরের জন্য একটি দ্রুত Rust লাইব্রেরি। এটি Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV এবং টেক্সট-ভিত্তিক PDF ফাইল সমর্থন করে। প্রকল্পটি কমান্ড-লাইন ইন্টারফেস এবং Node.js, Python ও ব্রাউজার-ভিত্তিক WebAssembly-এর জন্য বাইন্ডিংও সরবরাহ করে।

লাইব্রেরিটি এমন পাইপলাইনের জন্য তৈরি, যেখানে একাধিক নথি ফরম্যাট গ্রহণ করা হয়, কিন্তু একটি সামঞ্জস্যপূর্ণ Markdown রূপ দরকার। সমর্থিত প্রতিটি অফিস ফরম্যাট একটি অভিন্ন নথি মডেলে পার্স করা হয় এবং একই Markdown সিরিয়ালাইজারের মাধ্যমে পাঠানো হয়। ফলে বিভিন্ন ফরম্যাটে টেবিল, এসকেপিং, শিরোনাম, ফুটনোট, লিংক, তালিকা ও অন্যান্য কাঠামোর সামঞ্জস্য বজায় থাকে।

রূপান্তর কোনো মেশিন-লার্নিং মডেল বা বাহ্যিক পরিষেবা ছাড়াই স্থানীয়ভাবে চলে। README-তে উল্লেখ করা বেঞ্চমার্ক অনুযায়ী, প্রতি নথিতে মধ্যম রূপান্তর সময় পাঁচ মিলিসেকেন্ডের কম। টেক্সট-ভিত্তিক PDF স্থানীয়ভাবে pdf-inspector-এর মাধ্যমে পরিচালিত হয়।

anydoc OCR সম্পাদন করে না। শুধু ছবি থাকা বা স্ক্যান করা PDF-এ পাঠযোগ্য টেক্সট না থাকলে সেটিকে অসমর্থিত হিসেবে জানানো হতে পারে। OCR-ও প্রয়োজন এমন ওয়ার্কফ্লোর জন্য প্রকল্পে উল্লেখিত হোস্টেড বিকল্প হলো Firecrawl Parse।

মূল বৈশিষ্ট্য

  • সামঞ্জস্যপূর্ণ Markdown: সব অফিস ফরম্যাট অভিন্ন নথি মডেল ও সিরিয়ালাইজার ব্যবহার করে।
  • কাঠামোবদ্ধ আউটপুট: সমর্থিত কাঠামোর মধ্যে রয়েছে শিরোনাম ও অ্যাঙ্কর, লিংক, অভ্যন্তরীণ রেফারেন্স, তালিকা, টেবিল, ব্লক কোট, ফুটনোট, এন্ডনোট, বক্তার নোট, ইনলাইন কোড এবং কোড ব্লক।
  • ফরম্যাটিং সংরক্ষণ: বোল্ড, ইটালিক, স্ট্রাইকথ্রু, টাস্ক তালিকা, নেস্টেড তালিকা, সোর্স নম্বর, মার্জ করা টেবিল সেল এবং হেডার সারি উপস্থাপন করা যায়।
  • এমবেড করা সম্পদ: এমবেড করা ছবি ও অবজেক্ট Markdown-এ অল্ট টেক্সট হিসেবে প্রদর্শিত হয়, আর তাদের কাঁচা বাইট ও মিডিয়া টাইপ নথি মডেলের মাধ্যমে উপলভ্য থাকে।
  • বিষয়বস্তু-ভিত্তিক শনাক্তকরণ: PDF, RTF, OLE এবং ZIP-ভিত্তিক নথি ফরম্যাট শুধু ফাইল এক্সটেনশনের ওপর নির্ভর না করে তাদের বাইট থেকে শনাক্ত করা হয়।
  • ননব্লকিং বাইন্ডিং: Node.js রূপান্তরের জন্য libuv থ্রেড পুল ব্যবহার করে, আর Python রূপান্তরের সময় Global Interpreter Lock ছেড়ে দেয়।
  • টাইপযুক্ত প্যাকেজ: TypeScript টাইপ ও Python স্টাব অন্তর্ভুক্ত রয়েছে।
  • এজেন্ট ইন্টিগ্রেশন: প্রকল্পে একটি Agent Skill রয়েছে, যা সামঞ্জস্যপূর্ণ কোডিং এজেন্টকে anydoc CLI ব্যবহার করতে শেখায়।

সমর্থিত ফাইল ফরম্যাট

  • Word: .doc, .docx এবং .docm
  • PowerPoint: .ppt, .pps, .pot, .pptx, .pptm, .ppsx এবং .ppsm
  • Excel: .xls, .xlsx, .xlsm এবং .xlsb
  • OpenDocument: .odt, .ods এবং .odp
  • অন্যান্য ফরম্যাট: .rtf, .epub, .csv এবং .pdf

একটি ইনস্টলেশন পদ্ধতি বেছে নিন

শেল স্ক্রিপ্ট ও এককালীন রূপান্তরের জন্য CLI ব্যবহার করুন। নথি রূপান্তর কোনো অ্যাপ্লিকেশনের অংশ হলে Node.js বা Python, নেটিভ ইন্টিগ্রেশনের জন্য Rust, অথবা সরাসরি ব্রাউজারে ফাইল রূপান্তরের জন্য WebAssembly বেছে নিন।

CLI ইনস্টল করুন

npx ব্যবহার করে স্থায়ী ইনস্টলেশন ছাড়াই আগে থেকে তৈরি CLI চালাতে পারেন:

npx @firecrawl/anydoc report.docx

প্রথমবার চালানোর সময় আপনার প্ল্যাটফর্মের জন্য আগে থেকে তৈরি বাইনারি ডাউনলোড হয়। anydoc-কে স্থায়ী কমান্ড হিসেবে ব্যবহারের জন্য এটি গ্লোবালভাবে ইনস্টল করুন:

npm install -g @firecrawl/anydoc
anydoc --help

Node.js-এর জন্য ইনস্টল করুন

npm install @firecrawl/anydoc

Python-এর জন্য ইনস্টল করুন

pip install firecrawl-anydoc

ব্রাউজার WebAssembly-এর জন্য ইনস্টল করুন

npm install @firecrawl/anydoc-wasm

আপনি ব্রাউজার ডেমোটিও চেষ্টা করতে পারেন। ডেমোটি WebAssembly লাইব্রেরি স্থানীয়ভাবে চালায়, তাই নির্বাচিত ফাইল মেশিনের বাইরে যায় না।

Rust-এর জন্য ইনস্টল করুন

cargo add anydoc

Agent Skill ইনস্টল করুন

anydoc CLI দিয়ে নথি রূপান্তর করতে কোনো সামঞ্জস্যপূর্ণ এজেন্টকে শেখানোর জন্য অন্তর্ভুক্ত স্কিলটি ইনস্টল করুন:

npx skills add firecrawl/anydoc

README-তে সামঞ্জস্যপূর্ণ ক্লায়েন্ট হিসেবে Claude Code, Codex, Cursor এবং OpenCode-এর নাম দেওয়া হয়েছে।

CLI দিয়ে ফাইল রূপান্তর করুন

স্ট্যান্ডার্ড আউটপুটে Markdown লিখুন

সোর্স নথিটি প্রথম আর্গুমেন্ট হিসেবে দিন। তৈরি হওয়া Markdown স্ট্যান্ডার্ড আউটপুটে প্রিন্ট হবে:

npx @firecrawl/anydoc report.docx

ফলাফল পরীক্ষা করতে বা অন্য কোনো কমান্ডে পাইপ করতে এটি সুবিধাজনক।

একটি ফাইলে Markdown সংরক্ষণ করুন

আউটপুট ফাইল বেছে নিতে -o ব্যবহার করুন:

npx @firecrawl/anydoc slides.pptx -o slides.md

স্ট্যান্ডার্ড ইনপুট থেকে ডেটা রূপান্তর করুন

স্ট্যান্ডার্ড ইনপুট থেকে বাইট পড়তে ইনপুট পাথ হিসেবে - ব্যবহার করুন। CSV-এর কনটেন্টে নির্ভরযোগ্য কোনো স্বাক্ষর নেই, তাই এর ফরম্যাট স্পষ্টভাবে উল্লেখ করুন:

npx @firecrawl/anydoc - --format csv < data.csv

Node.js-এ anydoc ব্যবহার করুন

Node.js প্যাকেজটি ফাইল পাথ, বাইট অ্যারে এবং অভিন্ন নথি মডেলের জন্য আলাদা ফাংশন প্রকাশ করে।

ফাইল পাথ রূপান্তর করুন

import { toMarkdown } from '@firecrawl/anydoc';

const markdown = await toMarkdown('report.docx');
console.log(markdown);

বাইট রূপান্তর করুন

কোনো ফাইল ইতিমধ্যে আপলোড, ডাউনলোড বা মেমরিতে পড়া থাকলে toMarkdownBytes ব্যবহার করুন:

import { toMarkdownBytes } from '@firecrawl/anydoc';

const markdown = await toMarkdownBytes(bytes);

যেসব ফরম্যাটের স্বতন্ত্র স্বাক্ষর রয়েছে, anydoc কনটেন্ট থেকে ফরম্যাট শনাক্ত করে। CSV-তে এমন স্বাক্ষর নেই, তাই ফরম্যাটের নাম পাস করুন:

const markdown = await toMarkdownBytes(bytes, 'csv');

ডকুমেন্ট মডেল ও অ্যাসেট সংরক্ষণ করুন

চূড়ান্ত Markdown স্ট্রিংয়ের চেয়ে বেশি কিছু প্রয়োজন হলে, toDocument ব্যবহার করে শেয়ার করা ডকুমেন্ট মডেলে থামুন:

import { toDocument } from '@firecrawl/anydoc';

const document = await toDocument(bytes);

ডকুমেন্ট মডেলে পার্স করা কাঠামো ও এমবেড করা অ্যাসেট থাকে। Markdown উপস্থাপনায় অ্যাসেটের অল্ট টেক্সট ব্যবহার হলেও, এমবেড করা অ্যাসেটের বাইট তাদের মিডিয়া টাইপসহ উপলভ্য থাকে।

Python-এ anydoc ব্যবহার করুন

ফাইল পাথ রূপান্তর করুন

import anydoc

markdown = anydoc.to_markdown("report.docx")
print(markdown)

মেমরিতে থাকা বাইট রূপান্তর করুন

import anydoc

markdown = anydoc.to_markdown_bytes(data)

CSV-এর মতো স্বাক্ষরহীন ইনপুটের নাম স্পষ্টভাবে উল্লেখ করুন:

markdown = anydoc.to_markdown_bytes(data, "csv")

ডকুমেন্ট মডেল অ্যাক্সেস করুন

document = anydoc.to_document(data)

শুধু সিরিয়ালাইজড Markdown নয়, পার্স করা ডকুমেন্ট ও তার এমবেড করা অ্যাসেট প্রয়োজন হলে এই পদ্ধতিটি কার্যকর।

ব্রাউজারে ডকুমেন্ট রূপান্তর করুন

WebAssembly প্যাকেজটি ব্রাউজারে স্থানীয়ভাবে বাইট অ্যারে রূপান্তর করে। রূপান্তর ফাংশন কল করার আগে মডিউলটি ইনিশিয়ালাইজ করুন:

import init, { toMarkdownBytes, toDocument } from '@firecrawl/anydoc-wasm';

await init();

const markdown = toMarkdownBytes(bytes);

অন্যান্য বাইন্ডিংয়ের মতো CSV-এর জন্য ফরম্যাট উল্লেখ করুন:

const markdown = toMarkdownBytes(bytes, 'csv');

ডকুমেন্ট মডেল ও এমবেড করা অ্যাসেট সংরক্ষণ করতে toDocument ব্যবহার করুন:

const document = toDocument(bytes);

আগে দেখানো Node.js API-এর বিপরীতে, README-তে থাকা WebAssembly রূপান্তর কলগুলো ইনিশিয়ালাইজেশনের পর সিঙ্ক্রোনাসভাবে চলে।

Rust থেকে anydoc ব্যবহার করুন

ফাইল পাথ রূপান্তর করুন

let markdown = anydoc::to_markdown("report.docx")?;

স্বয়ংক্রিয় শনাক্তকরণসহ বাইট রূপান্তর করুন

let markdown = anydoc::to_markdown_bytes(&bytes, None)?;

CSV স্পষ্টভাবে উল্লেখ করুন

let markdown = anydoc::to_markdown_bytes(
    &bytes,
    anydoc::Format::Csv,
)?;

ডকুমেন্ট মডেল ফেরত দিন

let document = anydoc::to_document(&bytes, None)?;

ফরম্যাট শনাক্তকরণ বুঝুন

anydoc PDF হেডার, RTF-এর ওপেনিং গ্রুপ, OLE স্ট্রিমের নাম এবং ZIP প্যাকেজের মেটাডাটার মতো কনটেন্ট মার্কার পরীক্ষা করে। তাই ভুল নামে চিহ্নিত কোনো ফাইলের প্রকৃত ফরম্যাট তার বাইট থেকে শনাক্ত করা গেলে সেটিও রূপান্তর করা সম্ভব।

Rust বাইট, এক্সটেনশন ও পাথ যাচাইয়ের জন্য সহায়ক ফাংশন দেয়:

Format::from_bytes(&bytes);
Format::from_extension("pptm");
Format::from_path(Path::new("report.odt"));

প্রথম কলটি Some(Format::Docx)-এর মতো শনাক্ত করা ফরম্যাট ফেরত দেয়, অথবা কোনো পরিচিত কনটেন্ট মার্কারের সঙ্গে মিল না থাকলে None ফেরত দেয়। Node.js-এ formatFromBytes-এর মতো নাম এবং Python-এ anydoc.format_from_bytes-এর মতো নামেও সমতুল্য সহায়ক ফাংশন রয়েছে।

CSV-এর জন্য বিশেষ ব্যবস্থাপনা কেন প্রয়োজন

CSV সাধারণ টেক্সট এবং এটিকে অনন্যভাবে শনাক্ত করার মতো কোনো মানক বাইট স্বাক্ষর নেই। নামহীন CSV বাইট বা স্ট্যান্ডার্ড ইনপুট রূপান্তরের সময় csv স্পষ্টভাবে উল্লেখ করুন। কোনো ফাইল পাথে .csv এক্সটেনশন থাকলে এক্সটেনশনটি সেটিকে শনাক্ত করতে পারে।

রূপান্তরজনিত ত্রুটি পরিচালনা করুন

যখন অর্থবহ Markdown তৈরি করা সম্ভব হয় না, তখন রূপান্তর একটি ত্রুটি ফেরত দেয়। Rust-এ ConvertError-এর মাধ্যমে এসব পরিস্থিতি প্রকাশ করা হয়:

  • Unsupported: ফরম্যাটটি অজানা বা রূপান্তরযোগ্য নয়, যেমন শুধু ছবি থাকা PDF।
  • Malformed: ফাইলটির কাঠামো ব্যবহার অনুপযোগী এবং অর্থবহ কনটেন্ট বের করা যায় না।
  • Encrypted: ডকুমেন্টটি এনক্রিপ্ট করা বা পাসওয়ার্ড-সুরক্ষিত।
  • ResourceLimit: ডিকম্প্রেশন, নেস্টিং বা নোড সংখ্যার নির্দিষ্ট নিরাপত্তা সীমা রূপান্তরের সময় অতিক্রম করা হয়েছে।
  • MissingPart: প্রয়োজনীয় ডকুমেন্ট উপাদান অনুপস্থিত।
  • Io: to_markdown-এ দেওয়া ফাইলটি পড়া যায়নি।

একটি ব্যাচ-প্রসেসিং পাইপলাইন এনক্রিপ্ট করা বা অসমর্থিত ফাইলগুলোর রেকর্ড রাখতে পারে এবং বাকি ইনপুট নিয়ে কাজ চালিয়ে যেতে পারে:

match anydoc::to_markdown(path) {
    Ok(markdown) => Some(markdown),
    Err(error @ (ConvertError::Encrypted | ConvertError::Unsupported(_))) => {
        unconverted.push((path, error));
        None
    }
    Err(error) => return Err(error),
}

Node.js ও WebAssembly-এ ত্রুটির ভ্যারিয়েন্টের নাম error.code-এর মাধ্যমে পাওয়া যায়। Python প্রতিটি রূপান্তর ভ্যারিয়েন্টের জন্য নির্দিষ্ট anydoc.ConvertError সাবক্লাস উত্থাপন করে এবং কোনো ফাইল পড়া না গেলে OSError উত্থাপন করে।

উন্নত ইন্টিগ্রেশন টিপস

আপলোড পাইপলাইনের জন্য বাইট রূপান্তরকে অগ্রাধিকার দিন

আপনার অ্যাপ্লিকেশন যদি ইতিমধ্যে কোনো আপলোড, অবজেক্ট স্টোর বা HTTP প্রতিক্রিয়া থেকে ডকুমেন্ট বাইট গ্রহণ করে, তাহলে toMarkdownBytes বা to_markdown_bytes ব্যবহার করুন। এতে ফাইল পাথের প্রয়োজন হয় না এবং ব্যবহারকারীর দেওয়া ফাইলের নামের ওপর নির্ভর না করে anydoc প্রকৃত কনটেন্ট পরীক্ষা করতে পারে।

অ্যাসেট গুরুত্বপূর্ণ হলে ডকুমেন্ট মডেল ব্যবহার করুন

শুধু Markdown-এ এমবেড করা অবজেক্টের কাঁচা বাইট থাকে না। এমবেড করা অ্যাসেট ও তাদের মিডিয়া টাইপ সংরক্ষণ, পরীক্ষা বা আলাদাভাবে প্রক্রিয়াকরণ করতে হলে toDocument বা to_document ব্যবহার করুন।

স্ক্যান করা PDF আলাদাভাবে পরিচালনা করুন

anydoc-এর অন্তর্নির্মিত PDF সহায়তা টেক্সট-ভিত্তিক PDF-এর জন্য তৈরি এবং এতে OCR অন্তর্ভুক্ত নেই। শুধু-ছবির PDF বারবার স্থানীয়ভাবে রূপান্তরের চেষ্টা না করে OCR-সমর্থিত ওয়ার্কফ্লোতে পাঠান।

CSV ফরম্যাট নির্বাচন স্পষ্ট করুন

মেমরিতে থাকা বিভিন্ন ধরনের ইনপুট প্রক্রিয়া করার সময় CSV বাইটের সঙ্গে স্পষ্ট ফরম্যাট মেটাডেটা যুক্ত করুন। অন্যান্য সমর্থিত ফরম্যাট প্রায়ই তাদের কনটেন্ট থেকে শনাক্ত করা যায়, কিন্তু CSV-এর জন্য নাম, এক্সটেনশন অথবা স্পষ্ট ফরম্যাট আর্গুমেন্ট প্রয়োজন।

রানটাইমের আচরণ কাজে লাগান

Node.js-এ রূপান্তর libuv থ্রেড পুলে চলে, ফলে ইভেন্ট লুপ ব্লক হয় না। Python-এ রূপান্তরের সময় GIL ছেড়ে দেওয়া হয়, তাই অন্যান্য Python থ্রেড চলতে থাকে। সমসাময়িক অ্যাপ্লিকেশনে রূপান্তর যুক্ত করার সময় এই বৈশিষ্ট্যগুলো কার্যকর।

পরবর্তী ধাপে সামঞ্জস্যপূর্ণ আউটপুট ব্যবহার করুন

অফিস ফরম্যাটগুলো একই সিরিয়ালাইজার ব্যবহার করায়, পরবর্তী সিস্টেমগুলো Word, PowerPoint, Excel, RTF এবং OpenDocument ইনপুটের জন্য আলাদা পরিচ্ছন্নকরণ নিয়ম বজায় না রেখে একটি Markdown কাঠামো ব্যবহার করতে পারে। এ কারণে সার্চ ইনডেক্সিং, এক্সট্রাকশন পাইপলাইন এবং ভাষা মডেলের জন্য কাঠামোবদ্ধ টেক্সট প্রস্তুত করার কাজে anydoc বিশেষভাবে উপযোগী।

রূপান্তর পাইপলাইন যেভাবে কাজ করে

  1. ফরম্যাট নির্ধারণের জন্য anydoc ডকুমেন্টের বাইট অথবা উপলভ্য ফাইলের নামের তথ্য পরীক্ষা করে।
  2. ফরম্যাট-নির্দিষ্ট পার্সার Word, PowerPoint, Excel, OpenDocument, RTF, EPUB অথবা CSV কনটেন্ট পড়ে।
  3. পার্সার ব্লক, ইনলাইন উপাদান, টেবিল, ফুটনোট এবং অ্যাসেটসহ একটি অভিন্ন ডকুমেন্ট মডেল তৈরি করে।
  4. একটি সাধারণ সিরিয়ালাইজার ওই মডেলকে GitHub-Flavored Markdown-এ রূপান্তর করে।
  5. PDF pdf-inspector-এর মাধ্যমে পরিচালিত হয় এবং সরাসরি Markdown-এ রূপান্তরিত হয়।

এই আর্কিটেকচারের ফলে একটি সিরিয়ালাইজার উন্নতি একসঙ্গে অনেক ফরম্যাটে সুবিধা দিতে পারে। উদাহরণস্বরূপ, টেবিলের বিশেষ অক্ষর এস্কেপ করার সংশোধন কোনো একক ইনপুট পার্সারের মধ্যে সীমাবদ্ধ থাকে না।

পারফরম্যান্স ও উপযুক্ত ব্যবহার

রিপোজিটরি চৌদ্দটি পরীক্ষিত ফরম্যাটের বাস্তব বিশ্বের 100টি ডকুমেন্টের ওপর একটি বেঞ্চমার্কের প্রতিবেদন দিয়েছে। anydoc সব চৌদ্দটি ফরম্যাট সমর্থন করেছে, 4.4 মিলিসেকেন্ডের মধ্যম রূপান্তর সময় অর্জন করেছে এবং ওই তুলনায় 81-এর সামগ্রিক গুণমান স্কোর পেয়েছে। সম্পূর্ণতা, কাঠামো, ফরম্যাটিং এবং পরিচ্ছন্নতার ভিত্তিতে গুণমান নির্ধারণ করা হয়েছে।

বেঞ্চমার্কের ফলাফল করপাস, হার্ডওয়্যার এবং পদ্ধতির ওপর নির্ভর করে। তাই প্রতিটি ওয়ার্কলোডের নিশ্চয়তা হিসেবে নয়, বরং প্রকল্প-নির্দিষ্ট প্রমাণ হিসেবে অন্তর্ভুক্ত বেঞ্চমার্ক ব্যবহার করুন। প্রকল্পে বর্ণিত সবচেয়ে উপযুক্ত ব্যবহার হলো এমন একটি পাইপলাইন, যা বিভিন্ন ধরনের অফিস ডকুমেন্ট গ্রহণ করে এবং দ্রুত, কাঠামোবদ্ধ ও সামঞ্জস্যপূর্ণ Markdown প্রয়োজন।

উপসংহার

anydoc Rust, Node.js, Python, ব্রাউজার এবং কমান্ড লাইনের জন্য একটি অভিন্ন রূপান্তর ওয়ার্কফ্লো দেয়। দ্রুত পরীক্ষা করতে CLI দিয়ে শুরু করুন, তারপর আপনার অ্যাপ্লিকেশনের সঙ্গে সামঞ্জস্যপূর্ণ বাইন্ডিং বেছে নিন। আপলোড করা ফাইলের জন্য বাইট-ভিত্তিক রূপান্তর ব্যবহার করুন, CSV স্পষ্টভাবে নির্দিষ্ট করুন, এমবেড করা অ্যাসেট গুরুত্বপূর্ণ হলে ডকুমেন্ট মডেল সংরক্ষণ করুন এবং এনক্রিপ্টেড, ত্রুটিপূর্ণ, অসমর্থিত অথবা স্ক্যান করা ডকুমেন্টকে আলাদা কেস হিসেবে পরিচালনা করুন।