diff --git a/words/arabic/net/ai-powered-document-processing/_index.md b/words/arabic/net/ai-powered-document-processing/_index.md index a216bdfe7b..61c93343d7 100644 --- a/words/arabic/net/ai-powered-document-processing/_index.md +++ b/words/arabic/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ | [العمل مع نموذج الذكاء الاصطناعي من Google](./working-with-google-ai-model/) |قم بترقية معالجة المستندات لديك باستخدام Aspose.Words for .NET وGoogle AI لإنشاء ملخصات موجزة بسهولة. | | [العمل مع نموذج الذكاء الاصطناعي المفتوح](./working-with-open-ai-model/) | أطلق العنان لتلخيص المستندات بكفاءة باستخدام Aspose.Words لـ .NET مع نماذج OpenAI القوية. انغمس في هذا الدليل الشامل الآن. | | [العمل مع خيارات التلخيص](./working-with-summarize-options/) | تعلم كيفية تلخيص مستندات Word بشكل فعال باستخدام Aspose.Words for .NET من خلال دليلنا خطوة بخطوة حول دمج نماذج الذكاء الاصطناعي للحصول على رؤى سريعة. | +| [كيفية استخدام LLM مع Aspose.Words – إعادة كتابة الفقرات في C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | تعلم كيفية دمج نموذج اللغة الكبيرة مع Aspose.Words لإعادة كتابة فقرات مستندات Word باستخدام C#. | +| [كيفية فحص القواعد النحوية في C# – دليل كامل لمستندات Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | تعلم كيفية فحص القواعد النحوية في مستندات Word باستخدام Aspose.Words لـ .NET وC#. | +| [تلخيص مستند Word في C# – دليل كامل باستخدام Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | تعلم كيفية تلخيص مستندات Word باستخدام Aspose.Words لـ .NET مع نموذج Anthropic Claude في دليل شامل خطوة بخطوة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/arabic/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..353973ecb2 --- /dev/null +++ b/words/arabic/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: تعلم كيفية فحص القواعد النحوية في مستند Word باستخدام C#. يغطي هذا الدرس + أيضًا كيفية تحميل ملف DOCX باستخدام C# واستخدام Aspose.Words AI للحصول على نتائج + دقيقة. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: ar +og_description: كيف تتحقق من القواعد النحوية في مستند Word باستخدام C#؟ اتبع هذا البرنامج + التعليمي لتحميل ملف DOCX باستخدام C# وإجراء فحوصات نحوية مدعومة بالذكاء الاصطناعي + باستخدام Aspose.Words. +og_title: كيفية فحص القواعد في C# – دليل كامل خطوة بخطوة +tags: +- Aspose.Words +- C# +- Grammar Checking +title: كيفية فحص القواعد النحوية في C# – دليل كامل لوثائق Word +url: /ar/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية فحص القواعد النحوية في C# – دليل كامل لمستندات Word + +هل تساءلت يومًا **كيفية فحص القواعد النحوية** في مستند Word دون مغادرة بيئة التطوير المتكاملة الخاصة بك؟ لست وحدك. يحتاج العديد من المطورين إلى التحقق من صحة التقارير التي يولدها المستخدم، ورسائل البريد الإلكتروني الآلية، أو حتى الوثائق قبل نشرها. الخبر السار؟ باستخدام Aspose.Words AI يمكنك القيام بذلك برمجيًا، وتتناسب العملية بالكامل مع سير عمل C# المعتاد. + +في هذا الدليل سنستعرض كل ما تحتاج إلى معرفته: من تحميل ملف DOCX C# إلى استدعاء مدقق القواعد النحوية بالذكاء الاصطناعي وتفسير النتائج. في النهاية ستحصل على مقتطف جاهز للتنفيذ يطبع شدة كل مشكلة، رسالتها، والبديل المقترح—دون الحاجة إلى النسخ واللصق يدويًا. + +## ما ستتعلمه + +- **كيفية فحص القواعد النحوية** في مستند Word باستخدام Aspose.Words AI. +- الخطوات الدقيقة **لتحميل ملف DOCX C#** باستخدام الفئة `Document`. +- كيفية التعامل مع كائن `GrammarCheckResult`، التكرار على المشكلات، وإخراج تشخيصات مفيدة. +- الأخطاء الشائعة (مثل نقص التراخيص) ونصائح لجعل الحل جاهزًا للإنتاج. + +> **المتطلبات المسبقة:** .NET 6.0+ (أو .NET Framework 4.6+)، Visual Studio 2022 (أو أي بيئة تطوير تفضلها)، وترخيص Aspose.Words for .NET (الإصدار التجريبي المجاني يكفي للاختبار). إذا لم تقم بتثبيت حزم NuGet بعد، شغّل: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +الآن، دعنا نغوص في التفاصيل. + +## الخطوة 1: تحميل ملف DOCX في C# + +قبل أن يتم فحص القواعد النحوية، يجب تحميل المستند إلى الذاكرة. تجعل Aspose.Words هذا الأمر سطرًا واحدًا، لكن هناك بعض التفاصيل التي تستحق الذكر. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**لماذا هذا مهم:** +- استخدام `Path.Combine` يضمن التوافق عبر الأنظمة. +- فحص الوجود يمنع تعطل البرنامج في وقت التشغيل الذي قد يُخفي منطق فحص القواعد النحوية الحقيقي. +- عندما **تحمل ملف DOCX C#**، تقوم Aspose بتحليل جميع الأنماط، الرؤوس، التذييلات، وحتى النص المخفي، مما يمنح الذكاء الاصطناعي صورة كاملة عن المستند. + +> **نصيحة احترافية:** إذا كنت بحاجة للعمل مع تدفقات (مثلاً ملفات تُرفع عبر الويب)، يمكنك استبدال استدعاء `new Document(docPath)` بـ `new Document(stream)`. + +## الخطوة 2: اختيار نموذج الذكاء الاصطناعي لفحص القواعد النحوية + +تدعم Aspose.Words AI عدة نماذج، من النماذج الخفيفة المحلية إلى نماذج GPT السحابية. لمعظم السيناريوهات، يقدم **GPT‑3.5 Turbo** توازنًا مثاليًا بين السرعة والدقة. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**لماذا اختيار GPT‑3.5 Turbo؟** +- إنه سريع بما يكفي لمعالجة دفعات من عشرات الملفات في الدقيقة. +- التكلفة (إذا كنت على خطة مدفوعة) أقل من GPT‑4 مع القدرة على اكتشاف معظم الأخطاء الشائعة. +- يتعامل API تلقائيًا مع حدود الرموز، لذا لا تحتاج إلى تقسيم المستندات الضخمة يدويًا. + +إذا كنت تفضل نهجًا غير متصل، استبدل `AiModelType.Gpt35Turbo` بـ `AiModelType.Local` (يتطلب حزمة النموذج غير المتصل الاختيارية). + +## الخطوة 3: التكرار على المشكلات وعرض ملاحظات مفيدة + +يحتوي `GrammarCheckResult` على مجموعة من كائنات `GrammarIssue`. كل مشكلة تزودك بالشدة، رسالة قابلة للقراءة البشرية، وبديل مقترح. دعنا نطبعها بشكل منسق. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**ما معنى الحقول:** +- `Severity` – عادةً ما تكون `Info` أو `Warning` أو `Error`. اعتبر `Error` ضرورة إصلاح قبل النشر. +- `Message` – وصف مختصر للمشكلة (مثال: “اتفاق الفعل مع الفاعل”). +- `SuggestedReplacement` – الإصلاح المقترح من الذكاء الاصطناعي؛ يمكنك تطبيقه تلقائيًا إذا وثقت بالنموذج، أو عرضه على مراجع بشري. + +> **حالة حافة:** قد تحتوي بعض المشكلات على `SuggestedReplacement` فارغ (مثل اقتراحات التنسيق). في هذه الحالات، قم فقط بوضع علامة على الموقع للمراجعة اليدوية. + +## مثال عملي كامل + +بتجميع كل ما سبق، إليك تطبيق console مستقل يمكنك نسخه ولصقه في مشروع .NET جديد. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**الناتج المتوقع (عينة):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +إذا شغّلت البرنامج على مستند نظيف، سترى السطر “✅ No grammar issues detected.” بدلاً من ذلك. + +## معالجة الأخطاء الشائعة + +| المشكلة | لماذا يحدث | الحل السريع | +|---------|------------|-------------| +| **LicenseException** | مكتبات Aspose تتطلب ترخيصًا صالحًا للاستخدام في الإنتاج. | أضف `License license = new License(); license.SetLicense("Aspose.Words.lic");` في بداية `Main`. | +| **Network timeout** | استدعاء نموذج الذكاء الاصطناعي يصل إلى السحابة ويتجاوز مهلة 100 ثانية الافتراضية. | زد المهلة عبر `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` قبل استدعاء `CheckGrammar`. | +| **Large documents (> 10 MB)** | بعض النماذج السحابية تقصّ الإدخال. | قسّم المستند إلى أقسام باستخدام `document.Sections` وشغّل الفحص لكل قسم، ثم اجمع النتائج. | +| **Missing suggestions** | النموذج لم يتمكن من توليد بديل (مثلاً صياغة غامضة). | سجّل المشكلة للمراجعة اليدوية؛ لا تطبق اقتراحات فارغة تلقائيًا. | + +## توسيع الحل + +- **الإصلاح التلقائي:** كرّر عبر `grammarResult.Issues` واستبدل النص باستخدام `document.Range.Replace`. تأكد من عمل نسخة احتياطية للملف الأصلي أولًا. +- **معالجة دفعات:** غلف التدفق بالكامل داخل `foreach` على مجلد يحتوي ملفات DOCX. احفظ كل تقرير كملف JSON للتحليل لاحقًا. +- **التكامل مع ASP.NET:** قدّم نقطة نهاية تستقبل ملف DOCX مرفوع، تشغّل الفحص، وتعيد حمولة JSON تحتوي المشكلات. + +## توضيح بصري + +how to check grammar flow diagram + +*المخطط أعلاه يوضح عملية الخطوات الثلاث: تحميل DOCX → تشغيل فحص القواعد النحوية بالذكاء الاصطناعي → إخراج المشكلات.* + +## الخلاصة + +غطّينا **كيفية فحص القواعد النحوية** في مستند Word باستخدام C#، وعرضنا الكود الدقيق **لتحميل ملف DOCX C#**، وشرحنا كيفية تفسير الملاحظات التي يولدها الذكاء الاصطناعي. مع Aspose.Words AI، تحصل على محرك قواعد نحوية قوي مدعوم بالسحابة يندمج بسلاسة مع أي تطبيق .NET. + +ما الخطوات التالية؟ جرّب أتمتة حلقة الإصلاح‑التطبيق، جرب النموذج الأحدث `AiModelType.Gpt4` للحصول على اقتراحات أدق، أو اجمع هذا مع مكتبة تدقيق إملائي لإنشاء خط أنابيب تدقيق كامل. الاحتمالات لا حصر لها، وأنت الآن تمتلك أساسًا صلبًا للبناء عليه. + +هل لديك أسئلة أو واجهت حالة حافة صعبة؟ اترك تعليقًا أدناه، وتمنياتنا لك بالبرمجة السعيدة! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/arabic/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/arabic/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..72017a27d8 --- /dev/null +++ b/words/arabic/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: كيفية استخدام نموذج اللغة الكبيرة (LLM) لتحرير المستندات باستخدام Aspose + – تعلم استبدال نص الفقرة، والاتصال بنموذج اللغة المحلي، وإعادة كتابة النص باستخدام + الذكاء الاصطناعي. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: ar +og_description: كيفية استخدام نموذج اللغة الكبيرة (LLM) لتحرير المستندات باستخدام + Aspose. يوضح هذا الدليل كيفية الاتصال بنموذج لغة محلي، واستبدال نص الفقرة، وإعادة + كتابة النص باستخدام الذكاء الاصطناعي. +og_title: كيفية استخدام LLM مع Aspose.Words – إعادة كتابة الفقرات في C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: كيفية استخدام LLM مع Aspose.Words – إعادة كتابة الفقرات في C# +url: /ar/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية استخدام LLM مع Aspose.Words – إعادة كتابة الفقرات في C# + +هل تساءلت يوماً **كيف تستخدم LLM** لتحسين مستند Word دون فتحه يدوياً؟ لست وحدك. يواجه العديد من المطورين صعوبة عندما يحتاجون إلى *استبدال نص الفقرة* برمجياً لكن لا يملكون سير عمل نظيف يعتمد على الذكاء الاصطناعي. + +في هذا الدرس سنقوم بربط نموذج لغة كبير محلي، نمرره مقطعاً من ملف `.docx`، نطلب منه **إعادة كتابة النص باستخدام AI**، وأخيراً نحفظ المستند المحدث—كل ذلك باستخدام Aspose.Words. بنهاية الدرس ستحصل على تطبيق Console بلغة C# جاهز للتنفيذ يوضح كامل الخطوات. + +> **ما ستحصل عليه:** مثال كامل قابل للتنفيذ، شرح لكل خطوة، نصائح للحالات الخاصة، وأفكار لتوسيع الحل. + +## ما الذي ستحتاجه + +- **.NET 6+** (أو .NET Framework 4.7.2 – الكود يعمل على كلاهما) +- **Aspose.Words for .NET** (حزمة NuGet `Aspose.Words`) +- **خادم LLM محلي** ي expose نقطة نهاية HTTP بسيطة `/generate` (مثل Ollama، LMStudio، أو خدمة Flask مخصصة) +- إلمام أساسي بـ C# وشفرة عميل HTTP + +لا توجد حزم SDK إضافية مطلوبة؛ كل ما تبقى هو الشفرة التي سنكتبها معاً. + +## الخطوة 1: كيفية استخدام LLM لاستبدال نص الفقرة + +أول شيء علينا فعله هو تحديد الفقرة التي نريد تعديلها. تجعلنا Aspose.Words ذلك سهلاً عبر نموذج كائن غني. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**لماذا هذا مهم:** +اختيار العقدة الصحيحة يمنعك من الكتابة فوق العناوين أو الجداول عن طريق الخطأ. باستخدام نهج **استبدال نص الفقرة** نحافظ على بنية المستند سليمة بينما نغير فقط المحتوى الذي يهمنا. + +> **نصيحة احترافية:** إذا كان مستندك يحتوي على أقسام بطول متغير، استخدم `document.GetChildNodes(NodeType.Paragraph, true)` و LINQ لتحديد الفقرة بناءً على نصها أو نمطها. + +## الخطوة 2: الاتصال بنقطة نهاية LLM محلية + +الآن بعد أن حصلنا على النص، نحتاج لإرساله إلى الـ LLM. يستخدم المثال فئة غلاف بسيطة `LocalLargeLanguageModel` تخفي تفاصيل HTTP. يمكنك استبدالها بـ استدعاءات `HttpClient` إذا رغبت. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**لماذا نتصل بهذه الطريقة:** +إعداد **الاتصال بـ LLM محلي** يزيل زمن الانتقال، يبقي البيانات داخل المؤسسة، ويتجنب تكاليف الـ API. كما يجعل الغلاف الشفرة اللاحقة أنظف، مما يسمح بالتركيز على منطق **إعادة كتابة النص باستخدام AI**. + +## الخطوة 3: إعادة كتابة النص باستخدام AI مع Aspose.Words + +مع نص الفقرة جاهز والـ LLM مستعد، نصيغ مطالبة (prompt) تخبر النموذج بالضبط ما نريده—إعادة كتابة بنبرة رسمية. يمكنك تعديل المطالبة لأنماط أخرى (ودية، تقنية، إلخ). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**لماذا هذا يعمل:** +نماذج LLM تعتمد على المطالبات؛ إعطاء تعليمات صريحة (“Rewrite … in a formal tone”) ينتج نتائج متسقة. خطوة **إعادة كتابة النص باستخدام AI** هي جوهر الدرس – فهي تُظهر كيف يمكن دمج الذكاء الاصطناعي مباشرةً في سير عمل المستندات. + +## الخطوة 4: تعديل المستند وحفظ التغييرات + +الآن نستبدل الـ runs الأصلية بالمحتوى الجديد. تخزن Aspose.Words النص في كائنات `Run`، لذا فإن مسحها أولاً يمنع بقاء بقايا تنسيق غير مرغوبة. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**ملاحظة حول الحالات الخاصة:** +إذا كانت الفقرة الأصلية تحتوي على تنسيقات مختلطة (غامق، مائل) قد ترغب في الحفاظ على الأنماط. في هذه الحالة، أنشئ `Run` جديداً، انسخ إعدادات `Font` الأصلية، ثم عيّن `Text` إلى `revisedText`. + +## مثال كامل يعمل + +فيما يلي البرنامج الكامل الذي يمكنك نسخه ولصقه في مشروع Console. تذكر تثبيت حزمة NuGet الخاصة بـ Aspose.Words أولاً (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### النتيجة المتوقعة + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +افتح `output.docx` – ستلاحظ أن الفقرة الثالثة الآن تحتوي على النسخة المنقحة. + +## أسئلة شائعة ومشكلات محتملة + +| السؤال | الجواب | +|----------|--------| +| **ماذا لو أعاد الـ LLM JSON يحتوي على حقول إضافية؟** | عدّل `GenerateText` لتسلسل الخاصية الصحيحة أو قم بتحليل الاستجابة يدوياً. | +| **هل يمكن معالجة عدة فقرات في آن واحد؟** | نعم – كرّر عبر `document.FirstSection.Body.Paragraphs` وطبق نفس منطق المطالبة، ربما بإضافة فهرس الفقرة إلى المطالبة لتوفير السياق. | +| **خادم الـ LLM يتطلب مصادقة؟** | أضف رأساً إلى `HttpClient` قبل طلب POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **يفقد التنسيق بعد الاستبدال.** | احفظ إعدادات `Run.Font` الأصلية: أنشئ `Run` جديداً، انسخ `originalRun.Font.Clone()`، ثم عيّن `Text`. | +| **أحياناً يُعيد الـ LLM سلاسل فارغة.** | نفّذ آلية احتياطية – إذا كان `revisedText.Trim().Length == 0`، احتفظ بالنص الأصلي أو أعد المحاولة بمطالبة أبسط. | + +## توسيع الحل + +الآن بعد أن أتقنت **كيفية استخدام LLM** لفقرة واحدة، فكر في الخطوات التالية: + +- **معالجة دفعات:** كرّر عبر كل فقرة وأعد كتابتها بنمط مختار (مثلاً “اجعل كل النص مختصرًا”). +- **إعادة كتابة واعية للأنماط:** مرّر اسم نمط الفقرة الأصلي في المطالبة حتى يلتزم الـ LLM بالعناوين مقابل نص الجسم. +- **دمج مع خط أنابيب CI:** أتمتة تحسين المستندات كجزء من عملية بناء الوثائق. +- **مطالبات بديلة:** جرّب “summarize this paragraph” أو “translate this paragraph to Spanish” لاستكشاف كامل قدرة **إعادة كتابة النص باستخدام AI**. + +## الخلاصة + +استعرضنا كامل تدفق **كيفية استخدام LLM** مع Aspose.Words: تحميل المستند، **الاتصال بـ LLM محلي**، استخراج الفقرة، **إعادة كتابة النص باستخدام AI**، **استبدال نص الفقرة**، وأخيراً حفظ النتيجة. الشفرة مستقلة، تعمل فورًا، وتظهر طريقة عملية لدمج الذكاء الاصطناعي مع أتمتة المستندات التقليدية. + +جرّبها، عدّل المطالبات، ودع + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/arabic/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/arabic/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..cd4cc89682 --- /dev/null +++ b/words/arabic/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-05-04 +description: لخص مستند Word بسرعة وترجم النص باستخدام Google. تعلم كيفية استخدام Anthropic + Claude، وإنشاء ملخص من التقرير، وترجمة النص باستخدام Google في دورة C# واحدة. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: ar +og_description: لخص مستند Word على الفور وترجم النص باستخدام Google. يوضح هذا الدليل + كيفية استخدام Anthropic Claude و Aspose.Words لإنشاء ملخص من التقرير. +og_title: تلخيص مستند Word باستخدام C# – خطوة بخطوة مع Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: تلخيص مستند Word في C# – دليل كامل باستخدام Anthropic Claude +url: /ar/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تلخيص مستند Word باستخدام C# – دليل كامل باستخدام Anthropic Claude + +هل احتجت إلى **تلخيص مستند Word** لكن شعرت بالحيرة بين الـ APIs والكود الطويل؟ لست وحدك. في العديد من المشاريع—التقارير السنوية، المذكرات القانونية، أو الأوراق البحثية—استخراج نظرة عامة مختصرة هو نقطة ألم يومية. لحسن الحظ، الجمع بين Aspose.Words وAnthropic Claude يجعل العملية سهلة، ويمكنك حتى إضافة ترجمة سريعة عبر Google أثناء ذلك. + +في هذا الدرس سنستعرض كل ما تحتاج معرفته: تحميل ملف .docx كبير، استدعاء نموذج Claude V2 لتوليد ملخص، ترجمة عبارة باستخدام Google، ومعالجة أكثر المشكلات شيوعًا. بنهاية الدرس ستتمكن من **إنشاء ملخص من تقرير** ببضع أسطر من C# فقط. + +## المتطلبات المسبقة + +- .NET 6+ (أو .NET Core 3.1) مثبت +- رخصة Aspose.Words for .NET (أو نسخة تجريبية مجانية) +- الوصول إلى API Anthropic Claude V2 (ستحتاج إلى مفتاح API) +- اتصال إنترنت لمترجم Google +- Visual Studio 2022 أو أي بيئة تطوير C# مفضلة + +لا تحتاج إلى حزم NuGet إضافية بخلاف `Aspose.Words` و `Aspose.Words.AI`؛ ففئة المترجم تأتي مع نفس المكتبة. + +## الخطوة 1 – تحميل مستند Word المصدر + +أول ما علينا فعله هو جلب ملف .docx إلى الذاكرة. Aspose.Words يجعل ذلك بسيطًا، وبفضل محلله القوي يعمل مع التخطيطات المعقدة والجداول وحتى الصور المدمجة. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **لماذا هذا مهم:** تحميل المستند مبكرًا يتيح لك فحص الخصائص (المؤلف، عدد الكلمات) وتحديد ما إذا كان الملخص ضروريًا أم لا. الملفات الكبيرة > 10 ميغابايت قد تستهلك الذاكرة، لذا فكر في استخدام `LoadOptions` مع `LoadFormat.Docx` إذا واجهت مشاكل أداء. + +## الخطوة 2 – تلخيص المستند باستخدام Anthropic Claude + +الآن يأتي الجزء الممتع: نمرر المستند إلى Claude V2. فئة `Summarizer` تُجرد استدعاء HTTP، معالجة الرموز، وإعادة المحاولات. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **كيف يعمل:** +> 1. **التقسيم** – Aspose يقسم المستند تلقائيًا إلى قطع قابلة للإدارة (≈ 2 KB لكل قطعة) لتتناسب مع حدود الرموز في Claude. +> 2. **هندسة المطالبة** – المكتبة تُرسل مطالبة مثل “Provide a concise executive summary of the following text:” متبوعة بكل قطعة. +> 3. **التجميع** – Claude يُعيد ملخصات جزئية تُدمج معًا لتكوين `summaryText` النهائي. + +### الحالات الخاصة والنصائح + +- **تقارير ضخمة جدًا** (> 100 صفحة) قد تتجاوز نافذة سياق Claude. إذا لاحظت قطعًا في الناتج، قلل قيمة `SummarizerOptions.MaxChunkSize` إلى قيم أصغر. +- **مصدر غير إنجليزي** – Claude يعمل بأفضل شكل مع الإنجليزية؛ للغات أخرى، قم بالترجمة أولًا (انظر الخطوة 4) ثم الملخص. +- **حدود المعدل** – Anthropic يفرض حدودًا في الدقيقة. ضع الاستدعاء داخل حلقة إعادة محاولة مع تأخير تصاعدي إذا تلقيت استجابة `429`. + +## الخطوة 3 – التحقق من ناتج الملخص + +قبل المتابعة، من الجيد التحقق من أن الملخص ليس فارغًا ويتوافق مع توقعات الطول (مثلاً 5‑10 % من عدد الكلمات الأصلي). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +إذا كان النسبة منخفضة جدًا (< 2 %)، قد ترغب في تعديل خاصية `SummarizerOptions.SummaryLength` لطلب ناتج أطول. + +## الخطوة 4 – ترجمة النص باستخدام Google + +الآن بعد أن حصلنا على ملخص إنجليزي واضح، لنضيف ترجمة سريعة. فئة `Translator` تستخدم نقطة النهاية العامة للترجمة في Google (لا تحتاج إلى مفتاح API للعبارات القصيرة، لكن للإنتاج يُفضَّل الانتقال إلى Cloud Translation API المدفوع). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **لماذا Google؟** إنه سريع، مدعوم على نطاق واسع، ونقطة النهاية المجانية تتعامل مع السلاسل القصيرة دون مصادقة. للترجمات الضخمة، اجمع الطلبات واحترم حدود الاستخدام الخاصة بـ Google. + +### ترجمة الملخص بالكامل (اختياري) + +إذا كنت تحتاج الملخص بالكامل بالإسبانية (أو أي لغة أخرى)، ما عليك سوى تمرير `summaryText` إلى `Translator.Translate`. احذر من حد حجم الطلب 5 KB؛ قد تحتاج إلى تقسيم الملخص إلى قطع أصغر. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## الخطوة 5 – حفظ الملخص مرة أخرى في ملف Word (مكافأة) + +غالبًا ما يتوقع المستخدم النهائي ملفًا قابلًا للتحميل بدلاً من مخرجات الكونسول. لننشئ ملف `.docx` جديد يحتوي على النسختين الإنجليزية والإسبانية. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### نصيحة عملية + +عند تضمين الملخص في ملف Word جديد، حافظ على تنسيق بسيط (استخدم نمط `Normal`). الأنماط المعقدة من المصدر قد تتسبب في تغييرات غير متوقعة في التخطيط. + +## مثال كامل يعمل + +فيما يلي البرنامج **الكامل، جاهز للنسخ واللصق** الذي يجمع كل شيء معًا. يمكن تشغيله بأمر `dotnet run` بعد إضافة حزم Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**الناتج المتوقع في الكونسول** (مقتطع للختصر): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## الأسئلة المتكررة + +| السؤال | الجواب | +|----------|--------| +| *هل يمكنني استخدام نموذج AI مختلف؟* | نعم. استبدل `SummarizerModel.AnthropicClaudeV2` بـ `SummarizerModel.OpenAIGPT4` (يتطلب مفتاح OpenAI) أو أي مزود مدرج في الـ enum. | +| *ماذا لو احتوى المستند على أقسام محمية؟* | Aspose سيطرح استثناء `ProtectedDocumentException`. قم بفك الحماية أولًا باستخدام `LoadOptions.Password` أو اطلب نسخة غير محمية. | +| *هل أحتاج رخصة Aspose مدفوعة للإنتاج؟* | النسخة التجريبية مجانية حتى 20 صفحة. للتقارير الأكبر، الرخصة تزيل حد الصفحات وتضيف تحسينات أداء. | +| *هل مترجم Google موثوق للكتل الكبيرة؟* | للعبارات القصيرة يكفي. للترجمات الضخمة، انتقل إلى Cloud Translation API لتجنب حدود حجم الطلب والحصول على كشف لغة أفضل. | + +## الخلاصة + +لقد تعلمنا الآن **تلخيص مستند Word** باستخدام Aspose.Words مع نموذج Anthropic Claude V2، ثم **ترجمة النص باستخدام Google** إلى + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/arabic/net/basic-conversions/_index.md b/words/arabic/net/basic-conversions/_index.md index 4ddcead2e7..2d32e02aa9 100644 --- a/words/arabic/net/basic-conversions/_index.md +++ b/words/arabic/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [حفظ ملف PDF بصيغة Jpeg](./pdf-to-jpeg/) حوّل ملفات PDF إلى JPEG بسهولة باستخدام Aspose.Words لـ .NET. اتبع دليلنا المفصل مع الأمثلة والأسئلة الشائعة. مثالي للمطورين والهواة. | [حفظ ملف PDF إلى صيغة Word (Docx)](./pdf-to-docx/) تعرّف على كيفية تحويل ملف PDF إلى مستند Word (Docx) باستخدام Aspose.Words for .NET في هذا الدليل المفصل خطوة بخطوة. مثالي للمطورين. | [كيفية تصدير LaTeX من Word – دليل خطوة بخطوة](./how-to-export-latex-from-word-step-by-step-guide/) | تعلّم كيفية تصدير مستندات Word إلى صيغة LaTeX باستخدام Aspose.Words لـ .NET خطوة بخطوة مع أمثلة عملية. | +| [إنشاء PDF قابل للوصول من DOCX باستخدام C# – كيفية تحويل Word إلى PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | تعلم كيفية إنشاء ملفات PDF قابلة للوصول من مستندات DOCX باستخدام Aspose.Words وC# مع أمثلة عملية. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/arabic/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..daaad5caee --- /dev/null +++ b/words/arabic/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: إنشاء ملف PDF قابل للوصول من ملف DOCX باستخدام C#. تعلّم كيفية تحويل + Word إلى PDF، حفظ Word كملف PDF، وتصدير docx إلى PDF مع الالتزام بإمكانية الوصول. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: ar +og_description: إنشاء ملف PDF قابل للوصول من ملف DOCX باستخدام C#. اتبع هذا الدليل + خطوة بخطوة لتحويل Word إلى PDF، وحفظ Word كملف PDF، وتصدير docx إلى PDF مع إمكانية + وصول كاملة. +og_title: إنشاء ملف PDF قابل للوصول من DOCX باستخدام C# – دليل سريع +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: إنشاء ملف PDF قابل للوصول من DOCX باستخدام C# – كيفية تحويل Word إلى PDF +url: /ar/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إنشاء PDF يمكن الوصول إليه من DOCX باستخدام C# – كيفية تحويل Word إلى PDF + +هل احتجت يوماً إلى **إنشاء PDF يمكن الوصول إليه** من مستند Word لكنك لم تكن متأكدًا من أي مكتبة تثق بها؟ لست وحدك—العديد من المطورين يواجهون نفس العائق عندما يجب عليهم الالتزام بمعايير PDF/UA لإمكانية الوصول. الخبر السار هو أنه باستخدام Aspose.Words يمكنك تحويل ملف `.docx` إلى PDF متوافق في بضع أسطر من الشيفرة، وستحصل على ملف يمكن لقارئات الشاشة قراءته فعليًا. + +في هذا الدرس سنستعرض كل ما تحتاج إلى معرفته لـ **تحويل Word إلى PDF**، **حفظ Word كـ PDF**، وحتى **تصدير docx إلى PDF** مع الالتزام بـ PDF/UA‑1 (أو PDF/UA‑2). في النهاية ستحصل على مقتطف C# جاهز للاستخدام، وتفهم لماذا كل إعداد مهم، وستكون مجهزًا للتعامل مع الحالات الخاصة مثل الخطوط المفقودة أو إعدادات الصفحة المخصصة. + +## المتطلبات المسبقة + +- .NET 6.0 أو أحدث (الكود يعمل أيضًا مع .NET Framework 4.6+) +- ترخيص Aspose.Words for .NET (أو مفتاح تقييم مجاني) +- فهم أساسي لـ C# و Visual Studio (أو أي بيئة تطوير تفضلها) +- ملف DOCX تريد جعله قابلًا للوصول (سنسميه `input.docx`) + +> **نصيحة احترافية:** إذا كنت تستخدم النسخة التجريبية المجانية، تذكر أن PDF المُولد سيحتوي على علامة مائية صغيرة تقول “Evaluation”. + +## الخطوة 1: تثبيت حزمة NuGet الخاصة بـ Aspose.Words + +قبل أن نكتب أي شيفرة C#، يجب إضافة مكتبة Aspose.Words إلى المشروع. + +```bash +dotnet add package Aspose.Words +``` + +تشغيل الأمر يستعيد ملف `Aspose.Words.dll` ويجعل المساحات الاسمية متاحة. هذه الخطوة أساسية لأن فئة `PdfSaveOptions` موجودة داخل تلك الحزمة. + +## الخطوة 2: تحميل ملف DOCX المصدر + +الخطوة المنطقية الأولى هي تحميل مستند Word الذي تريد تحويله. فكر في ذلك كفتح كتاب قبل أن تبدأ في تعديل صفحاته. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **لماذا هذا مهم:** تحميل المستند ينشئ تمثيلًا في الذاكرة يتضمن جميع الأنماط، الصور، والبيانات الوصفية. إذا كان الملف تالفًا، سيتسبب `Document` في رمي استثناء—لذا قد ترغب في تغليف هذا بكتلة try/catch في الكود الإنتاجي. + +## الخطوة 3: تكوين خيارات حفظ PDF لإمكانية الوصول + +تتيح لك Aspose.Words تحديد مستوى التوافق PDF. PDF/UA‑1 هو المعيار الأصلي لإمكانية الوصول، بينما يضيف PDF/UA‑2 بعض العلامات الأحدث. اختر ما يتوافق مع متطلبات عميلك. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **ما الذي يفعله “Compliance”:** تعيين `PdfCompliance.PdfUax1` يخبر Aspose.Words بدمج العلامات الصحيحة، ترتيب القراءة المنطقي، والنص البديل للصور—بالضبط ما تبحث عنه برامج قارئات الشاشة. + +## الخطوة 4: حفظ المستند كـ PDF يمكن الوصول إليه + +الآن انتهى الجزء الصعب؛ ببساطة نوجه Aspose.Words لكتابة ملف PDF باستخدام الخيارات التي عرّفناها للتو. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +بعد تنفيذ هذا السطر، ستجد `output.pdf` في المجلد المحدد. افتحه في Adobe Acrobat Reader وتحقق من **File → Properties → Description → PDF/A and PDF/UA** لتأكيد التوافق. + +## الخطوة 5: التحقق من إمكانية الوصول (اختياري لكن موصى به) + +بينما يضمن الكود إنتاج PDF مع علامات، فإن الفحص اليدوي السريع يساعد على اكتشاف أي محتوى مخصص قد يحتاج إلى اهتمام إضافي. + +1. افتح `output.pdf` في Adobe Acrobat Pro. +2. انتقل إلى **Tools → Accessibility → Full Check**. +3. شغّل الفحص وراجع أي تحذيرات (مثل النص البديل المفقود للصور المخصصة). + +إذا أظهر التقرير عدم وجود أخطاء، فقد نجحت في **إنشاء PDF يمكن الوصول إليه** يطابق معايير PDF/UA‑1. + +## الاختلافات الشائعة والحالات الخاصة + +### تحويل ملفات DOCX متعددة في حلقة + +إذا كان لديك مجموعة من المستندات، غلف منطق التحميل‑الحفظ داخل حلقة `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### التحويل إلى PDF/UA‑2 + +فقط غير قيمة تعداد `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### التعامل مع الخطوط المخصصة + +إذا كان ملف DOCX يستخدم خطوطًا غير مثبتة على الخادم، قم بدمجها: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +الدمج يضمن أن يظهر PDF بنفس الشكل على أي جهاز—تفصيل حاسم عندما تقوم بـ **تصدير docx إلى pdf** لأصحاب المصلحة الخارجيين. + +## مثال كامل يعمل + +فيما يلي البرنامج الكامل الجاهز للتنفيذ الذي يجمع كل الأجزاء معًا. انسخه‑الصقه في تطبيق Console، عدّل المسارات، واضغط **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**النتيجة المتوقعة:** ملف اسمه `output.pdf` يفتح في أي عارض PDF، يحمل العلامات الصحيحة لإمكانية الوصول، ويمكن مشاركته مع المستخدمين الذين يعتمدون على تقنيات المساعدة. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*نص بديل للصورة:* *مثال على إنشاء PDF يمكن الوصول إليه – لقطة شاشة لمستند متوافق مع PDF/UA‑1.* + +## الأسئلة المتكررة + +- **هل يعمل هذا مع .NET Core؟** + بالتأكيد. Aspose.Words متعدد المنصات، لذا يعمل نفس الكود على Windows وLinux وmacOS. + +- **ماذا لو كان ملف DOCX يحتوي على ماكرو؟** + يتم تجاهل الماكرو أثناء التحويل؛ يُحوَّل المحتوى المرئي فقط إلى PDF. + +- **هل يمكنني إضافة عنوان ميتا بيانات مخصص للـ PDF؟** + نعم—قم بتعيين `pdfSaveOptions.Metadata.Title = "Your Custom Title";` قبل الحفظ. + +- **هل PDF/UA‑2 مدعوم على نطاق واسع؟** + معظم قارئات PDF الحديثة تدعم PDF/UA‑2، ولكن إذا كنت تستهدف أدوات أقدم، فالأفضل الالتزام بـ PDF/UA‑1. + +## الخلاصة + +لقد أظهرنا لك كيفية **إنشاء PDF يمكن الوصول إليه** من ملف DOCX باستخدام Aspose.Words، بدءًا من تثبيت حزمة NuGet وحتى التحقق من توافق PDF/UA. باتباع هذه الخطوات يمكنك بثقة **تحويل Word إلى PDF**، **حفظ Word كـ PDF**، و**تصدير docx إلى PDF** مع الالتزام بمعايير إمكانية الوصول—مهارة أساسية لأي مطور يعمل على خطوط أنابيب المستندات المؤسسية. + +هل أنت مستعد للتحدي التالي؟ جرّب إضافة رأس/تذييل مخصص، دمج علامة PDF/A‑2b، أو أتمتة العملية في واجهة ويب API باستخدام ASP.NET Core. الاحتمالات لا حصر لها، والأساس الذي بنيناه هنا سيمكنك من التعامل معها بثقة. + +برمجة سعيدة، ولتكن ملفات PDF الخاصة بك دائمًا قابلة للقراءة! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/arabic/net/programming-with-markdownsaveoptions/_index.md b/words/arabic/net/programming-with-markdownsaveoptions/_index.md index e4bfc46653..fadaa2f38f 100644 --- a/words/arabic/net/programming-with-markdownsaveoptions/_index.md +++ b/words/arabic/net/programming-with-markdownsaveoptions/_index.md @@ -41,9 +41,11 @@ ### [كيفية حفظ Markdown من DOCX – دليل خطوة بخطوة](./how-to-save-markdown-from-docx-step-by-step-guide/) ### [كيفية تصدير Markdown من DOCX – دليل كامل](./how-to-export-markdown-from-docx-complete-guide/) + ### [كيفية تصدير LaTeX من Word: تحويل DOCX إلى Markdown باستخدام Aspose](./how-to-export-latex-from-word-convert-docx-to-markdown-with/) ### [تحويل Word إلى Markdown – تضمين الصور كـ Base64](./convert-word-to-markdown-embed-images-as-base64/) + ### [كيفية حفظ Markdown من Word – دليل C# كامل](./how-to-save-markdown-from-word-complete-c-guide/) ### [كيفية حفظ Markdown من Word – دليل كامل](./how-to-save-markdown-from-word-complete-guide/) @@ -58,6 +60,8 @@ ### [تحويل Word إلى Markdown في C# – دليل كامل مع استخراج الصور](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) +### [كيفية حفظ الصور – تحويل DOCX إلى Markdown باستخدام Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/arabic/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..c70b5b7aa2 --- /dev/null +++ b/words/arabic/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,245 @@ +--- +category: general +date: 2026-05-04 +description: تعلم كيفية حفظ الصور أثناء تحويل ملف DOCX إلى Markdown باستخدام Aspose.Words. + يوضح هذا الدليل أيضًا كيفية استخراج الصور من Word وحفظ Word كـ Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: ar +og_description: كيفية حفظ الصور أثناء تحويل ملف DOCX إلى Markdown باستخدام Aspose.Words. + دليل خطوة بخطوة مع كود C# كامل. +og_title: كيفية حفظ الصور – تحويل DOCX إلى ماركداون باستخدام Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: كيفية حفظ الصور – تحويل DOCX إلى Markdown باستخدام Aspose.Words +url: /ar/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية حفظ الصور – تحويل DOCX إلى Markdown باستخدام Aspose.Words + +هل تساءلت يومًا **عن كيفية حفظ الصور** عندما تحتاج إلى تحويل ملف Word إلى Markdown؟ لست وحدك. يواجه العديد من المطورين مشكلة عندما تُسقط عملية التحويل الصور في فوضى من الروابط المكسورة، أو الأسوأ — تفقدها تمامًا. الخبر السار هو أن Aspose.Words يمنحك تحكمًا دقيقًا، بحيث يمكنك استخراج الصور من Word، وتحديد مكان حفظها، والحصول على مخرجات Markdown نظيفة. + +في هذا الدرس سنستعرض مثالًا كاملاً وجاهزًا للتنفيذ بلغة C# يُظهر **كيفية حفظ الصور** في مجلد مخصص أثناء تحويل ملف `.docx` إلى `.md`. سنتطرق أيضًا إلى **convert docx to markdown**، **extract images from word**، والسؤال الأوسع **how to convert docx** بطريقة تسمح لك **save word as markdown** دون فقدان أي من الأصول. + +## المتطلبات المسبقة + +- .NET 6.0 أو أحدث (تعمل الواجهة البرمجية بنفس الطريقة على .NET Framework 4.7+) +- رخصة Aspose.Words سارية أو نسخة تجريبية مجانية (الإصدار المجاني يضيف علامة مائية إلى المخرجات، لكن الكود يعمل بنفس الطريقة) +- مستند Word يحتوي بالفعل على صور (مثل `DocWithImages.docx`) +- Visual Studio 2022 أو أي محرر يمكنه بناء مشاريع C# + +> **نصيحة احترافية:** إذا كنت تستخدم النسخة التجريبية، لا يزال بإمكانك اختبار منطق حفظ الصور؛ فقط تذكر أن ملف PDF/MD النهائي سيحتوي على العلامة المائية التجريبية. + +## نظرة عامة على الحل + +على مستوى عالٍ، تبدو العملية هكذا: + +1. تحميل ملف `.docx` المصدر باستخدام `Document`. +2. إنشاء كائن `MarkdownSaveOptions` وربطه بـ `IResourceSavingCallback`. +3. في الـ callback، تحديد المجلد واسم الملف لكل صورة. +4. حفظ المستند كـ Markdown؛ يقوم الـ callback بكتابة كل صورة إلى القرص. + +هذا هو جوهر **كيفية حفظ الصور** أثناء التحويل. نفس النمط يعمل مع أنواع الموارد الأخرى (الخطوط، CSS، إلخ) إذا احتجت إليها. + +## الخطوة 1 – تحميل ملف DOCX الذي يحتوي على صور + +أولًا نحتاج إلى كائن `Document` يشير إلى ملف Word الذي تريد تحويله. لا شيء معقد هنا؛ مجرد استدعاء مباشر للمنشئ. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **لماذا هذا مهم:** تحميل المستند هو المكان الوحيد الذي يقوم فيه Aspose بتحليل XML الخاص بـ Word، لذا أي خطوط مفقودة أو أجزاء تالفة ستؤدي إلى استثناء الآن—قبل أن نبدأ حتى في حفظ الصور. + +## الخطوة 2 – إعداد MarkdownSaveOptions مع Callback لحفظ الصور + +تتيح لك فئة `MarkdownSaveOptions` ربط عملية الحفظ عبر `ResourceSavingCallback`. يتلقى هذا الـ callback كائن `ResourceSavingArgs` لكل مورد خارجي (صور، CSS، إلخ) يحتاج Aspose إلى كتابته. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### تنفيذ الـ Callback + +فيما يلي التنفيذ الكامل لـ `ImageSavingCallback`. يقوم بإنشاء مجلد فرعي `Images` بجوار ملف Markdown، ويعطي كل صورة اسمًا تسلسليًا (`img_0.png`, `img_1.jpg`, …)، ويمكنك أيضًا توجيه تدفق الصورة إلى مكان آخر (مثل دلو سحابي). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **كيف يساعدك هذا:** من خلال تخصيص `args.FileName` تتحكم تمامًا في **كيفية حفظ الصور**—سواء في مجلد مسطح، أو هيكل هرمي مبني على التاريخ، أو حتى قاعدة بيانات BLOB. الـ callback يُنفّذ لكل صورة، لذا لن تحتاج إلى معالجة لاحقة لملف Markdown. + +## الخطوة 3 – حفظ المستند كـ Markdown + +الآن بعد أن أصبحت الخيارات والـ callback جاهزين، التحويل الفعلي هو سطر واحد فقط. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +عند انتهاء السطر، ستحصل على: + +- `Doc.md` – تمثيل Markdown لمحتوى Word الخاص بك. +- `Images\img_0.png`, `Images\img_1.jpg`, … – كل صورة مستخرجة من ملف DOCX الأصلي. + +## مثال كامل وجاهز للتنفيذ + +نجمع كل شيء معًا في تطبيق console مستقل يمكنك نسخه ولصقه في مشروع C# جديد. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### النتيجة المتوقعة + +بعد تشغيل البرنامج: + +- افتح `C:\Docs\Doc.md` في أي محرر نصوص. ستظهر روابط صور Markdown مثل `![](Images/img_0.png)`. +- سيحتوي مجلد `Images` على كل صورة مستخرجة، مسماة تسلسليًا. +- سيُعرض ملف Markdown بشكل صحيح في أي عارض يدعم الصور المحلية (معاينة VS Code، GitHub، إلخ). + +## الأسئلة المتكررة (FAQs) + +### هل يعمل هذا مع صيغ صور أخرى (SVG, TIFF)؟ + +نعم. `Path.GetExtension(args.FileName)` يحافظ على الامتداد الأصلي، لذا تُحفظ SVG، TIFF، BMP، وحتى EMF دون تغيير. الملاحظة الوحيدة هي أن بعض عارضات Markdown قد لا تعرض SVG داخل النص؛ في هذه الحالة يمكنك تحويل SVG إلى PNG مسبقًا. + +### ماذا لو أردت تضمين الصور كـ Base64 بدلاً من ملفات منفصلة؟ + +داخل `ResourceSaving` يمكنك استبدال كتابة الملف الفعلية بـ `MemoryStream` ثم تعديل رابط Markdown يدويًا. لا يوفر Aspose مفتاحًا مباشرًا لـ “embed as Base64”، لكن الـ callback يمنحك التحكم الكامل في `args.Stream`. + +### كيف يختلف هذا عن طريقة `ExportImages` المدمجة؟ + +`ExportImages` تستخرج جميع الصور إلى مجلد **بدون** توليد Markdown. ربطنا بين العمليتين عبر الـ callback يضمن أن أسماء ملفات الصور تتطابق مع الإشارات داخل ملف `.md`. هذا التوافق هو المفتاح لـ **كيفية حفظ الصور** بشكل صحيح أثناء التحويل. + +### هل يمكنني تحويل عدة ملفات DOCX دفعة واحدة؟ + +بالتأكيد. غلف المنطق الأساسي داخل حلقة `foreach (var file in Directory.GetFiles(..., "*.docx"))`، عدّل مسارات الإخراج، وأعد استخدام نفس `ImageSavingCallback`. فقط تذكّر إنشاء كائن `MarkdownSaveOptions` جديد لكل مستند، لأن `args.DestinationFileName` يتغيّر في كل تكرار. + +## الحالات الخاصة وأفضل الممارسات + +| الحالة | ما يجب الانتباه إليه | الإصلاح الموصى به | +|-----------|----------------------|-----------------| +| **DOCX كبير (مئات الـ MB)** | ضغط على الذاكرة أثناء التحميل | استخدم `LoadOptions` مع `LoadFormat.Docx` واضبط `LoadOptions.LoadFormat = LoadFormat.Docx` للتحميل التدفقي للأجزاء | +| **تعارض أسماء الصور** | إذا كان المصدر يحتوي بالفعل على `img_0.png` في المجلد الهدف، قد يتم الكتابة فوقه | أضف GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **مجلد الإخراج للقراءة فقط** | عملية الحفظ تُطلق `UnauthorizedAccessException` | تأكد من تشغيل العملية بأذونات مناسبة أو اختر مسارًا قابلًا للكتابة | +| **موارد غير صور (CSS, خطوط)** | الـ callback يستقبلها أيضًا | احمِ الكود بـ `if (args.ResourceType != ResourceType.Image) return;` (مُظهر مسبقًا) | +| **أسماء ملفات Unicode** | بعض أنظمة الملفات قد تُسيء معالجة الأحرف | استخدم `Path.GetInvalidFileNameChars()` لتنقية `args.FileName` قبل تعيينه | + +## مواضيع ذات صلة قد ترغب في استكشافها لاحقًا + +- **convert docx to markdown** مع أنماط عناوين مخصصة (استخدم `MarkdownSaveOptions.ExportImagesAsBase64` للصور المضمنة) +- **extract images from word** باستخدام `Document.GetChildNodes(NodeType.Shape, true)` وغيرها من الأساليب المتقدمة +- **how to convert docx** إلى صيغ أخرى مثل HTML أو PDF مع الحفاظ على الموارد المضمنة +- **save word as markdown** مع تحسينات للروابط الداخلية وتنسيق القوائم + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/arabic/net/working-with-fonts/_index.md b/words/arabic/net/working-with-fonts/_index.md index 833dbc604a..7f0e30d260 100644 --- a/words/arabic/net/working-with-fonts/_index.md +++ b/words/arabic/net/working-with-fonts/_index.md @@ -47,12 +47,12 @@ | [الحصول على تباعد أسطر الخط](./get-font-line-spacing/) تعلّم كيفية ضبط مسافات أسطر الخطوط باستخدام Aspose.Words لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. مثالي للمطورين. | | [التحقق من تأثير نص DrawingML](./check-drawingml-text-effect/) تعرّف على كيفية التحقق من تأثيرات نص DrawingML في مستندات Word باستخدام Aspose.Words لـ .NET من خلال دليلنا المفصل خطوة بخطوة. حسّن مستنداتك بسهولة. | | [تعيين تنسيق الخط](./set-font-formatting/) | تعرّف على كيفية ضبط تنسيق الخط في مستندات Word باستخدام Aspose.Words لـ .NET. اتبع دليلنا المفصل خطوة بخطوة لتحسين أتمتة مستنداتك. | -| [تعيين علامة التأكيد على الخط](./set-font-emphasis-mark/) تعرّف على كيفية ضبط علامات توكيد الخطوط في مستندات Word باستخدام Aspose.Words لـ .NET من خلال هذا الدليل المفصل خطوة بخطوة. مثالي لمطوري .NET. | +| [تعيين علامة التأكيد على الخط](./set-font-emphasis-mark/) تعرّف على كيفية ضبط علامات توكيد الخطوط في Aspose.Words لـ .NET من خلال هذا الدليل المفصل خطوة بخطوة. مثالي لمطوري .NET. | +| [تعيين مجلدات الخطوط](./set-fonts-folders/) تعرّف على كيفية إعداد مجلدات خطوط مخصصة في Aspose.Words لـ .NET من خلال هذا الدليل الشامل خطوة بخطوة. مثالي للمطورين الذين يرغبون في تحسين خطوط المستندات. | +| [تمكين تعطيل استبدال الخط](./enable-disable-font-substitution/) تعرّف على كيفية تفعيل أو تعطيل استبدال الخطوط في مستندات Word باستخدام Aspose.Words لـ .NET. تأكد من تناسق مستنداتك على جميع المنصات. | +| [تعيين علامة التأكيد على الخط](./set-font-emphasis-mark/) تعرّف على كيفية ضبط علامات توكيد الخطوط في Aspose.Words لـ .NET من خلال هذا الدليل المفصل خطوة بخطوة. مثالي لمطوري .NET. | | [تعيين مجلدات الخطوط](./set-fonts-folders/) تعرّف على كيفية إعداد مجلدات خطوط مخصصة في Aspose.Words لـ .NET من خلال هذا الدليل الشامل خطوة بخطوة. مثالي للمطورين الذين يرغبون في تحسين خطوط المستندات. | | [تمكين تعطيل استبدال الخط](./enable-disable-font-substitution/) تعرّف على كيفية تفعيل أو تعطيل استبدال الخطوط في مستندات Word باستخدام Aspose.Words لـ .NET. تأكد من تناسق مستنداتك على جميع المنصات. | -| [تعيين علامة التأكيد على الخط](./set-font-emphasis-mark/) تعرّف على كيفية ضبط علامات توكيد الخطوط في Aspose.Words لـ .NET من خلال هذا الدليل المفصل خطوة بخطوة. مثالي لمطوري .NET. -| [تعيين مجلدات الخطوط](./set-fonts-folders/) تعرّف على كيفية إعداد مجلدات خطوط مخصصة في Aspose.Words لـ .NET من خلال هذا الدليل الشامل خطوة بخطوة. مثالي للمطورين الذين يرغبون في تحسين خطوط المستندات. -| [تمكين تعطيل استبدال الخط](./enable-disable-font-substitution/) تعرّف على كيفية تفعيل أو تعطيل استبدال الخطوط في مستندات Word باستخدام Aspose.Words لـ .NET. تأكد من تناسق مستنداتك على جميع المنصات. | [تعيين إعدادات الخط الاحتياطي](./set-font-fallback-settings/) |تعرف على كيفية تعيين إعدادات استبدال الخط في Aspose.Words لـ .NET وتخصيص استبدال الخط في مستندات Word الخاصة بك. | | [تحميل إعدادات Noto الاحتياطية](./load-noto-fallback-settings/) | تعرّف على كيفية تحميل إعدادات Noto الاحتياطية في مستند Word باستخدام Aspose.Words لـ .NET. اتبع دليلنا خطوة بخطوة لضمان عرض جميع الأحرف بشكل صحيح. | | [تعيين مثيلات مجلدات الخطوط الافتراضية](./set-fonts-folders-default-instance/) تعرّف على كيفية تعيين مجلدات الخطوط للنسخة الافتراضية في Aspose.Words لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. خصّص مستندات Word بسهولة. | @@ -73,14 +73,11 @@ | [كيفية التقاط الخطوط في Aspose.Words – دليل كامل](./how-to-capture-fonts-in-aspose-words-complete-guide/) |تعرف على كيفية التقاط الخطوط في Aspose.Words من خلال دليل شامل خطوة بخطوة. | | [كيفية تحميل ملف DOCX واكتشاف الخطوط المفقودة – دليل C# كامل](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) |تعلم كيفية تحميل مستندات DOCX واكتشاف الخطوط المفقودة باستخدام Aspose.Words لـ .NET في دليل C# خطوة بخطوة. | | [تمكين تحذيرات استبدال الخط في Aspose.Words – دليل شامل](./enable-font-substitution-warnings-in-aspose-words-complete-g/) |تعلم كيفية تمكين إشعارات التحذير عند استبدال الخطوط في مستندات Word باستخدام Aspose.Words. | - - +| [استبدال الخطوط في Aspose: اكتشاف الخطوط المفقودة في مستندات Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) |تعرف على كيفية اكتشاف الخطوط المفقودة في مستندات Word باستخدام Aspose.Words لـ .NET. | {{< /blocks/products/pf/tutorial-page-section >}} - {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} - {{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/arabic/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/arabic/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..9573e4c7fd --- /dev/null +++ b/words/arabic/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-05-04 +description: تعلم كيفية استخدام استبدال الخطوط في Aspose لاكتشاف الخطوط المفقودة عند + تحميل مستند Word واسترجاع تفاصيل الخطوط المفقودة — دليل خطوة بخطوة. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: ar +og_description: إتقان استبدال الخطوط في Aspose لاكتشاف الخطوط المفقودة عند تحميل مستند + Word واسترجاع معلومات الخطوط المفقودة باستخدام كود C# كامل. +og_title: استبدال الخطوط في Aspose – اكتشاف الخطوط المفقودة في مستندات Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'استبدال الخطوط في Aspose: اكتشاف الخطوط المفقودة في مستندات Word' +url: /ar/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# استبدال الخطوط في Aspose – اكتشاف الخطوط المفقودة في مستندات Word + +هل تساءلت يوماً لماذا يبدو مستند Word غير صحيح على جهاز آخر؟ غالباً ما يكون السبب هو خط مفقود، و**استبدال الخطوط في Aspose** هو الأداة التي تتيح لك اكتشاف هذه الفجوات قبل أن تتحول إلى كارثة بصرية. في هذا الدرس سنستعرض كيفية **اكتشاف الخطوط المفقودة** في لحظة **تحميل مستند Word**، ثم **استرجاع تفاصيل الخط المفقود** لتتمكن من إصلاحه أو استبداله. + +سنغطي كل شيء بدءاً من إعداد رد النداء للتحذير إلى استخراج قائمة نظيفة بالخطوط المفقودة. في النهاية ستحصل على مقتطف C# جاهز للتنفيذ يخبرك بالضبط أي الخطوط لم تُعثر عليها، وستفهم لماذا هذا مهم للحفاظ على دقة المستند. + +--- + +## المتطلبات المسبقة – ما تحتاجه قبل البدء + +- **Aspose.Words for .NET** (الإصدار 23.12 أو أحدث يُنصح به). +- بيئة تطوير .NET (Visual Studio، Rider، أو سطر أوامر `dotnet`). +- ملف DOCX تجريبي يستخدم خطاً غير مثبت لديك—سميه `DocumentWithMissingFont.docx`. +- معرفة أساسية بـ C#—لا شيء معقد، فقط القدرة على تشغيل تطبيق كونسول. + +إذا كان أي من ذلك غير مألوف لك، توقف وقم بتثبيت حزمة NuGet: + +```bash +dotnet add package Aspose.Words +``` + +هذا كل شيء. لا خطوط إضافية، ولا خدمات خارجية. + +--- + +## الخطوة 1: تحميل مستند Word (وتفعيل فحص الخطوط) + +أول شيء تقوم به هو **تحميل مستند Word**. يقوم Aspose.Words بتحليل الملف، وإذا لم يتمكن من العثور على الخط المرجعي، فإنه يضيف تحذير *FontSubstitution*. إليك الشيفرة التي تقوم بالتحميل: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **لماذا هذا مهم:** تحميل المستند مبكراً يمنح Aspose فرصة لفحص كل مقطع نصي، نمط، وكائن مضمّن. إذا لم يُعثر على خط في النظام أو في مجلد الخطوط المخصص ستحصل على تحذير لاحقاً. + +--- + +## الخطوة 2: ربط رد نداء التحذير لالتقاط أحداث الاستبدال + +يستخدم Aspose.Words آلية رد نداء لإبلاغك بمشكلات مثل الخطوط المفقودة. من خلال تعيين تنفيذ `IWarningCallback` إلى `doc.WarningCallback`، يمكنك اعتراض كل تحذير عند حدوثه. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **نصيحة احترافية:** يمكنك ربط ردود نداء متعددة (مثل التسجيل، تحديث واجهة المستخدم) عبر نمط مركب، لكن لهذا الدرس يكفي رد نداء واحد لتبقى الأمور واضحة. + +--- + +## الخطوة 3: تنفيذ رد نداء تحذير استبدال الخطوط + +الآن نعرّف الفئة التي تقوم بالعمل الفعلي. يتلقى رد النداء كائن `WarningInfo`؛ نقوم بفلترة `WarningType.FontSubstitution` وتخزين الوصف لاستخدامه لاحقاً. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **ما يحدث:** عندما يصادف Aspose خطاً مفقوداً، ينشئ تحذيراً مثل “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” يقوم رد النداء بطباعة هذا السطر وحفظه. + +--- + +## الخطوة 4: معالجة المستند (اختياري) وجمع الخطوط المفقودة + +إذا كنت تحتاج فقط إلى **اكتشاف الخطوط المفقودة**، فإن خطوة التحميل تكفي—فالتنبيهات تُطلق تلقائياً. ومع ذلك، يحتاج العديد من المطورين إلى **استرجاع معلومات الخط المفقود** بعد تنفيذ بعض العمليات (مثل الحفظ أو التحويل). أدناه نجبر عملية صغيرة—حفظ إلى PDF—لضمان إصدار جميع التحذيرات، ثم نستخرج الرسائل المجمعة. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **الناتج المتوقع على الكونسول** (مثال): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +لاحظ كيف يوضح كل سطر الخط الأصلي والخط البديل الذي اختاره Aspose. هذا هو جوهر تقارير **استبدال الخطوط في Aspose**. + +--- + +## الخطوة 5: متقدم – استخدام مصادر خطوط مخصصة لتقليل الاستبدالات + +أحياناً تكون لديك الخطوط المفقودة، لكنها ليست في مجلد النظام الافتراضي. يتيح لك Aspose.Words الإشارة إلى دليل مخصص عبر `FontSettings`. إضافة هذه الخطوة يمكن أن تقلل بشكل كبير من عدد تحذيرات الاستبدال. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **لماذا نضيف هذا؟** إذا كنت توزع مستندات عبر أجهزة مختلفة، فإن تجميع الخطوط المطلوبة في مجلد معروف يضمن نفس المظهر البصري في كل مكان. كما يجعل روتين **اكتشاف الخطوط المفقودة** أكثر دقة لأن Aspose سيفحص ذلك المجلد قبل اللجوء إلى الخط البديل. + +--- + +## مثال عملي كامل + +نجمع كل ما سبق في برنامج كونسول جاهز للنسخ واللصق. احفظه باسم `Program.cs` وشغّله باستخدام `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**ما يجب أن تراه:** إذا كان ملف DOCX المصدر يشير إلى خطوط غير موجودة لديك، سيطبع الكونسول كل سطر استبدال متبوعاً بملخص مختصر. إذا كانت جميع الخطوط موجودة، ستحصل على رسالة “No missing fonts were detected.”. + +--- + +## الأخطاء الشائعة وكيفية تجنّبها + +| المشكلة | لماذا يحدث | الحل | +|---------|------------|------| +| **عدم ظهور أي تحذيرات** | المستند يستخدم خطوط النظام فقط، أو أضفت مجلدًا مخصصًا يحتوي على الخطوط المفقودة. | تأكد من أن ملف DOCX فعلاً يشير إلى خط غير متوفر. يمكنك فتحه في Word وتغيير فقرة إلى خط نادر (مثل “Papyrus”). | +| **تكرار الرسائل** | نفس الخط مستخدم في عدة مقاطع، مما ينتج تحذيرات متعددة. | احذف التكرارات باستخدام `Distinct()` إذا كنت تحتاج فقط إلى مجموعة فريدة. | +| **بطء الأداء على المستندات الكبيرة** | كل تحذير يُعالج على خيط الواجهة. | نفّذ التحميل في مهمة خلفية أو استخدم `Parallel.ForEach` للمعالجة اللاحقة. | +| **خط بديل غير مناسب** | الاستبدال الافتراضي في Aspose قد لا يتوافق مع هوية علامتك التجارية. | عيّن `FontSettings.SubstitutionSettings.DefaultFontName` إلى خط بديل مفضّل (مثل “Calibri”). | + +--- + +## توسيع الحل – تصدير الخطوط المفقودة إلى JSON + +إذا كنت تبني خدمة ويب تحتاج لإبلاغ الخطوط المفقودة للعميل، فإن تسلسل القائمة إلى JSON سهل جداً: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +الآن يمكن لواجهة API الخاصة بك إرجاع حمولة JSON نظيفة يمكن لنظام آخر استهلاكها. + +--- + +## الخاتمة + +في هذا الدليل استعرضنا **استبدال الخطوط في Aspose** من البداية إلى النهاية: تحميل مستند Word، ربط رد نداء التحذير، التقاط كل حدث *اكتشاف خطوط مفقودة*، وأخيراً **استرجاع معلومات الخط المفقود** للتقارير أو الإصلاح. بإضافة مجلد خطوط مخصص يمكنك تقليل عدد الاستبدالات، ومع بضع أسطر إضافية يمكنك حتى تصدير النتائج كملف JSON. + +تذكر أن سلامة المظهر البصري لمستنداتك تعتمد على الخطوط المستخدمة. باستخدام التقنية الموضحة هنا، لن تُفاجأ أبداً بخط بديل غير متوقع مرة أخرى. + +هل أنت مستعد للخطوة التالية؟ جرّب دمج هذه المنطق في خط أنابيب معالجة مستندات أكبر، أو استكشف ميزات أخرى في Aspose.Words مثل تضمين الخطوط (`doc.FontSettings.EmbeddedFonts`). الاحتمالات لا حصر لها، ومستخدموك سيشكرونك على المخرجات المصقولة. + +--- + +![لقطة شاشة ل + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/chinese/net/ai-powered-document-processing/_index.md b/words/chinese/net/ai-powered-document-processing/_index.md index 79c133fcd9..5c7a38458c 100644 --- a/words/chinese/net/ai-powered-document-processing/_index.md +++ b/words/chinese/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ | [使用 Google AI 模型](./working-with-google-ai-model/) 使用 Aspose.Words for .NET 和 Google AI 提升您的文档处理能力,轻松创建简洁的摘要。| | [使用开放的人工智能模型](./working-with-open-ai-model/) 使用 Aspose.Words for .NET 和 OpenAI 强大的模型,解锁高效的文档摘要功能。立即深入了解这份全面的指南。| | [使用汇总选项](./working-with-summarize-options/) 学习使用 Aspose.Words for .NET 有效地总结 Word 文档,并遵循我们关于集成 AI 模型以获得快速洞察的分步指南。| +| [使用 LLM 与 Aspose.Words – 在 C# 中改写段落](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) 学习如何在 C# 中使用大型语言模型与 Aspose.Words 结合,实现段落改写,提高文档质量。| +| [如何在 C# 中检查语法 – Word 文档完整指南](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) 学习如何在 C# 使用 Aspose.Words 检查 Word 文档的语法,提升文档质量。| +| [使用 Anthropic Claude 汇总 Word 文档 – C# 完整指南](./summarize-word-document-in-c-complete-guide-using-anthropic/) 学习如何在 C# 中使用 Anthropic Claude 与 Aspose.Words 集成,实现高效的 Word 文档摘要。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/chinese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..d7fd9fcc4c --- /dev/null +++ b/words/chinese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-05-04 +description: 学习如何使用 C# 检查 Word 文档中的语法。本教程还涵盖如何在 C# 中加载 DOCX 文件并使用 Aspose.Words AI + 以获得准确的结果。 +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: zh +og_description: 如何使用 C# 检查 Word 文档中的语法?请按照本教程在 C# 中加载 DOCX 文件,并使用 Aspose.Words 进行 + AI 驱动的语法检查。 +og_title: 如何在 C# 中检查语法 – 完整的逐步指南 +tags: +- Aspose.Words +- C# +- Grammar Checking +title: 如何在 C# 中检查语法 – Word 文档完整指南 +url: /zh/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中检查 Word 文档的语法 – 完整指南 + +是否曾想过 **如何在不离开 IDE 的情况下检查** Word 文档的语法?你并不是唯一有此需求的人。许多开发者需要在发布前验证用户生成的报告、自动化邮件,甚至文档的正确性。好消息是?使用 Aspose.Words AI,你可以以编程方式完成此操作,整个过程可以无缝融入典型的 C# 工作流。 + +在本指南中,我们将逐步讲解你需要了解的一切:从使用 C# 加载 DOCX 文件,到调用 AI 语法检查器并解释结果。阅读完毕后,你将拥有一段可直接运行的代码片段,能够打印每个问题的严重程度、信息以及建议的替换内容——无需手动复制粘贴。 + +## 你将学到的内容 + +- **如何使用 Aspose.Words AI 检查 Word 文档的语法**。 +- 使用 `Document` 类 **在 C# 中加载 DOCX 文件** 的完整步骤。 +- 如何处理 `GrammarCheckResult` 对象,遍历问题并输出有用的诊断信息。 +- 常见陷阱(如缺少许可证)以及让解决方案具备生产就绪性的技巧。 + +> **先决条件:** .NET 6.0+(或 .NET Framework 4.6+),Visual Studio 2022(或任意你喜欢的 IDE),以及 Aspose.Words for .NET 许可证(免费试用版可用于测试)。如果尚未安装 NuGet 包,请运行: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +现在,让我们开始吧。 + +## 步骤 1:在 C# 中加载 DOCX 文件 + +在进行任何语法检查之前,必须先将文档加载到内存中。Aspose.Words 只需一行代码即可完成,但有一些细节值得注意。 + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**为什么这很重要:** +- 使用 `Path.Combine` 可确保跨平台兼容性。 +- 存在性检查可以防止运行时崩溃,从而避免掩盖真正的语法检查逻辑。 +- 当你 **在 C# 中加载 DOCX 文件** 时,Aspose 会解析所有样式、页眉、页脚,甚至隐藏文本,为 AI 提供文档的完整视图。 + +> **专业提示:** 如果需要使用流(例如来自网页上传的文件),可以将 `new Document(docPath)` 调用替换为 `new Document(stream)`。 + +## 步骤 2:选择用于语法检查的 AI 模型 + +Aspose.Words AI 支持多种模型,从轻量本地模型到基于云的 GPT 变体。对于大多数场景,**GPT‑3.5 Turbo** 在速度和准确性之间提供了良好的平衡。 + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**为何选择 GPT‑3.5 Turbo?** +- 对于每分钟处理数十个文件的批量任务,它足够快速。 +- 在付费套餐下,其成本低于 GPT‑4,同时仍能捕获大多数常见错误。 +- API 会自动处理 token 限制,无需手动拆分超大文档。 + +如果你更倾向于离线方案,可将 `AiModelType.Gpt35Turbo` 替换为 `AiModelType.Local`(需要可选的离线模型包)。 + +## 步骤 3:遍历问题并显示有用的反馈 + +`GrammarCheckResult` 包含一系列 `GrammarIssue` 对象。每个问题都提供严重程度、可读信息以及建议的替换。下面我们将它们友好地打印出来。 + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**字段含义:** +- `Severity` – 通常为 `Info`、`Warning` 或 `Error`。将 `Error` 视为发布前必须修复的错误。 +- `Message` – 对问题的简要描述(例如 “主谓一致错误”)。 +- `SuggestedReplacement` – AI 推荐的修复方案;如果信任模型,可自动应用;否则呈现给人工审阅者。 + +> **边缘情况:** 某些问题的 `SuggestedReplacement` 可能为空(例如样式建议)。此时仅标记位置以供人工检查。 + +## 完整可运行示例 + +将所有内容整合后,下面是一个可直接复制到新 .NET 项目中的控制台应用程序示例。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**预期输出(示例):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +如果对干净的文档运行程序,你会看到 “✅ No grammar issues detected.”(未检测到语法问题)这一行。 + +## 处理常见陷阱 + +| 问题 | 产生原因 | 快速解决方案 | +|------|----------|--------------| +| **LicenseException** | Aspose 库在生产环境下需要有效许可证。 | 在 `Main` 开头加入 `License license = new License(); license.SetLicense("Aspose.Words.lic");` | +| **Network timeout** | AI 模型调用云端时超过默认 100 秒超时。 | 在调用 `CheckGrammar` 前设置 `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` | +| **Large documents (> 10 MB)** | 某些云模型会截断输入。 | 使用 `document.Sections` 将文档拆分为多个章节,分别检查后再汇总结果。 | +| **Missing suggestions** | 模型未能生成替换(如歧义表达)。 | 记录该问题供人工审阅;不要自动应用空的建议。 | + +## 扩展方案 + +- **自动修复:** 遍历 `grammarResult.Issues`,使用 `document.Range.Replace` 替换文本。务必先备份原文件。 +- **批量处理:** 将整个流程包装在对 DOCX 文件目录的 `foreach` 循环中。将每个报告保存为 JSON 文件以便后续分析。 +- **集成到 ASP.NET:** 暴露一个接受上传 DOCX、运行检查并返回 JSON 负载的端点。 + +## 图片示例 + +如何检查语法流程图 + +*上图可视化了三步流程:加载 DOCX → 运行 AI 语法检查 → 输出问题。* + +## 结论 + +我们已经完整介绍了 **如何在 C# 中检查 Word 文档的语法**,演示了 **在 C# 中加载 DOCX 文件** 的确切代码,并说明了如何解读 AI 生成的反馈。借助 Aspose.Words AI,你可以获得强大的云端语法引擎,轻松集成到任何 .NET 应用中。 + +接下来可以尝试实现自动修复循环,使用更新的 `AiModelType.Gpt4` 获得更精准的建议,或结合拼写检查库构建完整的校对流水线。可能性几乎无限,而你已经拥有了坚实的基础。 + +有疑问或遇到棘手的边缘案例?在下方留言吧,祝编码愉快! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/chinese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/chinese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..0a13af1013 --- /dev/null +++ b/words/chinese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-05-04 +description: 如何使用 LLM 与 Aspose 编辑文档——学习替换段落文本、连接本地 LLM,并使用 AI 重写文本。 +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: zh +og_description: 如何使用 LLM 与 Aspose 编辑文档。本指南展示了如何连接本地 LLM、替换段落文本以及使用 AI 重写文本。 +og_title: 如何使用 LLM 与 Aspose.Words – 在 C# 中重写段落 +tags: +- Aspose.Words +- C# +- AI +- LLM +title: 如何在 Aspose.Words 中使用 LLM – 用 C# 重写段落 +url: /zh/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Aspose.Words 中使用 LLM – 用 C# 重写段落 + +有没有想过 **如何使用 LLM** 在不手动打开的情况下润色 Word 文档?你并不是唯一有此困惑的人。许多开发者在需要以编程方式 *替换段落文本* 时会遇到瓶颈,因为缺乏干净的 AI 驱动工作流。 + +在本教程中,我们将连接本地大型语言模型,向其提供来自 `.docx` 文件的片段,要求它 **使用 AI 重写文本**,最后保存更新后的文档——全部使用 Aspose.Words。完成后,你将拥有一个可直接运行的 C# 控制台应用程序,演示完整的流程。 + +> **你将获得:** 完整可运行的示例、每一步的解释、针对边缘情况的技巧以及扩展方案的思路。 + +## 你需要的环境 + +- **.NET 6+**(或 .NET Framework 4.7.2 —— 代码在两者上均可运行) +- **Aspose.Words for .NET**(NuGet 包 `Aspose.Words`) +- 一个 **本地 LLM 服务器**,提供简单的 HTTP `/generate` 接口(例如 Ollama、LMStudio,或自定义 Flask 服务) +- 对 C# 和 HTTP 客户端代码有基本了解 + +无需额外的 SDK;其余全部在我们即将编写的代码中。 + +## 步骤 1:如何使用 LLM 替换段落文本 + +我们首先需要做的事是确定要修改的段落。Aspose.Words 通过提供丰富的对象模型,使这一步变得轻而易举。 + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**为什么这很重要:** +选择正确的节点可以防止意外覆盖标题或表格。通过使用 **replace paragraph text** 方法,我们在保持文档结构完整的同时,仅修改我们关心的内容。 + +> **专业提示:** 如果文档中有可变长度的章节,可使用 `document.GetChildNodes(NodeType.Paragraph, true)` 并结合 LINQ 根据文本或样式定位段落。 + +## 步骤 2:连接本地 LLM 接口 + +现在我们已经拿到文本,需要将其发送给 LLM。示例使用了一个简易的包装类 `LocalLargeLanguageModel` 来隐藏 HTTP 细节。如果你愿意,也可以直接使用 `HttpClient` 调用来替代它。 + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**为什么这样连接:** +**connect to local llm** 的设置可以消除延迟,保持数据本地化,并避免 API 成本。包装类还能让后续代码更简洁,使我们能够专注于 **rewrite text using ai** 逻辑。 + +## 步骤 3:使用 Aspose.Words 通过 AI 重写文本 + +手握段落文本且 LLM 已就绪后,我们构造一个提示词,明确告诉模型我们的需求——以正式语气重写。你可以根据需要调整提示词,以实现其他风格(友好、技术等)。 + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**为什么有效:** +LLM 依赖提示词驱动;提供明确指令(“Rewrite … in a formal tone”)可获得一致的结果。**rewrite text using ai** 步骤是本教程的核心——它展示了如何将 AI 直接嵌入文档工作流。 + +## 步骤 4:编辑文档并保存更改 + +现在我们用新内容替换原始的 run。Aspose.Words 将文本存储在 `Run` 对象中,先清空它们可以避免残留的格式化痕迹。 + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**边缘情况说明:** +如果原始段落包含混合格式(粗体、斜体),你可能需要保留样式。此时,可创建新的 `Run`,复制原始 `Font` 设置,然后将其 `Text` 设置为 `revisedText`。 + +## 完整工作示例 + +下面是完整的程序代码,可直接复制粘贴到控制台项目中。请先安装 Aspose.Words NuGet 包(`dotnet add package Aspose.Words`)。 + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### 预期输出 + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +打开 `output.docx` —— 你会看到第三段已变为润色后的版本。 + +## 常见问题与注意事项 + +| 问题 | 回答 | +|----------|--------| +| **如果我的 LLM 返回带有额外字段的 JSON?** | 调整 `GenerateText` 以反序列化正确的属性,或手动解析响应。 | +| **我能一次处理多个段落吗?** | 可以——遍历 `document.FirstSection.Body.Paragraphs` 并应用相同的提示逻辑,必要时在提示中加入段落索引以提供上下文。 | +| **我的 LLM 服务器需要身份验证?** | 在 POST 前向 `HttpClient` 添加头部:`_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`。 | +| **替换后格式丢失。** | 保留原始 `Run.Font` 设置:创建新的 `Run`,复制 `originalRun.Font.Clone()`,然后设置其 `Text`。 | +| **LLM 有时返回空字符串。** | 实现回退机制——如果 `revisedText.Trim().Length == 0`,保留原始文本或使用更简单的提示重新尝试。 | + +## 扩展方案 + +既然你已经掌握了 **how to use llm** 对单段落的使用,接下来可以考虑以下步骤: + +- **批量处理:** 遍历每个段落并以选定的风格重写(例如 “使所有文本简洁”)。 +- **样式感知重写:** 在提示中传入原始段落的样式名称,使 LLM 能区分标题和正文。 +- **与 CI 流水线集成:** 将文档润色自动化,作为文档构建过程的一部分。 +- **替代提示词:** 尝试 “summarize this paragraph” 或 “translate this paragraph to Spanish”,以探索 **rewrite text using ai** 的全部潜能。 + +## 结论 + +我们已经完整演示了在 Aspose.Words 中使用 **how to use llm** 的整个流程:加载文档、**connect to local llm**、提取段落、**rewrite text using ai**、**replace paragraph text**,最后保存结果。代码自包含、开箱即用,展示了将 AI 与传统文档自动化相结合的实用方法。 + +试一试,调整提示词,然后让 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/chinese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/chinese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..0e80099968 --- /dev/null +++ b/words/chinese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-05-04 +description: 快速摘要 Word 文档并使用 Google 翻译文本。学习如何使用 Anthropic Claude,从报告中创建摘要,并在单个 C# + 教程中使用 Google 翻译文本。 +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: zh +og_description: 即时总结 Word 文档并使用 Google 翻译文本。本指南展示如何使用 Anthropic Claude 和 Aspose.Words + 从报告中创建摘要。 +og_title: 在 C# 中使用 Anthropic Claude 步骤式摘要 Word 文档 +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: 在 C# 中对 Word 文档进行摘要 – 使用 Anthropic Claude 的完整指南 +url: /zh/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中汇总 Word 文档 – 使用 Anthropic Claude 的完整指南 + +是否曾经需要 **summarize word document**,却因为要处理 API 和冗长的代码而卡住?你并不孤单。在许多项目中——年度报告、法律简报或研究论文——提取简明概览是日常痛点。幸运的是,Aspose.Words 与 Anthropic Claude 的组合让这变得轻而易举,甚至还能顺手加入快速的 Google 翻译。 + +在本教程中,我们将逐步讲解所有必备内容:加载大型 .docx、调用 Claude V2 模型生成摘要、使用 Google 翻译短语,以及处理最常见的坑点。完成后,你只需几行 C# 代码即可 **create summary from report**。 + +## 前置条件 + +- 已安装 .NET 6+(或 .NET Core 3.1) +- 拥有 Aspose.Words for .NET 许可证(或免费试用) +- 可访问 Anthropic Claude V2 API(需要 API 密钥) +- 具备 Google 翻译的网络连接 +- Visual Studio 2022 或你喜欢的 C# IDE + +除 `Aspose.Words` 与 `Aspose.Words.AI` 之外,无需额外的 NuGet 包;翻译器类随同同一库一起提供。 + +## 步骤 1 – 加载源 Word 文档 + +首先要把 .docx 文件加载到内存中。Aspose.Words 让这一步变得非常简单,且凭借其强大的解析器,能够处理复杂布局、表格乃至嵌入的图片。 + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **为什么重要:** 预先加载文档可以让你检查属性(作者、字数),并决定是否真的需要摘要。超过 10 MB 的大文件会占用较多内存,若出现性能问题,可考虑使用 `LoadOptions` 并指定 `LoadFormat.Docx`。 + +## 步骤 2 – 使用 Anthropic Claude 对文档进行摘要 + +接下来是核心环节:将文档交给 Claude V2。`Summarizer` 类封装了 HTTP 调用、令牌处理以及重试逻辑。 + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **工作原理:** +> 1. **分块** – Aspose 会自动将文档拆分为可管理的块(≈ 2 KB 每块),以符合 Claude 的令牌限制。 +> 2. **提示工程** – 库会发送类似 “Provide a concise executive summary of the following text:” 的提示语,随后附上每个块的内容。 +> 3. **聚合** – Claude 返回的局部摘要会被拼接成最终的 `summaryText`。 + +### 边缘情况与技巧 + +- **超大报告**(> 100 页)可能超出 Claude 的上下文窗口。若出现截断输出,请将 `SummarizerOptions.MaxChunkSize` 调整为更小的值。 +- **非英文源文档** – Claude 对英文效果最佳;若是其他语言,请先翻译(见步骤 4),再进行摘要。 +- **速率限制** – Anthropic 对每分钟请求次数有限制。若收到 `429` 响应,请在调用外层加入指数退避的重试循环。 + +## 步骤 3 – 验证摘要输出 + +在继续之前,最好检查摘要是否为空,并且长度是否符合预期(例如,占原始字数的 5‑10 %)。 + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +如果比例过低(< 2 %),可以调高 `SummarizerOptions.SummaryLength` 属性,以请求更长的输出。 + +## 步骤 4 – 使用 Google 进行翻译 + +现在我们已经得到一段简洁的英文摘要,接下来给它加上快速翻译。`Translator` 类使用 Google 的公共翻译接口(短句无需 API 密钥,生产环境建议改用付费的 Cloud Translation API)。 + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **为什么选 Google?** 速度快、支持广泛,且免费端点可以在不进行身份验证的情况下处理短字符串。批量翻译时,请将调用分批进行,并遵守 Google 的使用限制。 + +### 翻译整篇摘要(可选) + +如果需要将完整摘要翻译成西班牙语(或其他语言),只需将 `summaryText` 传入 `Translator.Translate`。注意单次请求大小上限为 5 KB,必要时将摘要拆分为更小的块。 + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## 步骤 5 – 将摘要保存回 Word 文件(附加功能) + +很多情况下,终端用户更期待下载一个文档,而不是仅在控制台看到输出。下面演示如何创建一个新的 `.docx`,同时包含英文和西班牙文版本。 + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### 实用技巧 + +在新 Word 文件中嵌入摘要时,保持原始格式最小化(使用 `Normal` 样式)。源文档的复杂样式可能导致意外的布局偏移。 + +## 完整工作示例 + +以下是 **完整、可直接复制粘贴** 的程序示例。添加 Aspose 包后,运行 `dotnet run` 即可编译通过。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**预期的控制台输出**(为节省篇幅已截断): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## 常见问题 + +| Question | Answer | +|----------|--------| +| *Can I use a different AI model?* | Yes. Replace `SummarizerModel.AnthropicClaudeV2` with `SummarizerModel.OpenAIGPT4` (requires an OpenAI key) or any provider listed in the enum. | +| *What if the document contains protected sections?* | Aspose will throw `ProtectedDocumentException`. Unlock it first with `LoadOptions.Password` or request an unprotected copy. | +| *Do I need a paid Aspose license for production?* | The free trial works for up to 20 pages. For larger reports, a license removes the page limit and adds performance optimizations. | +| *Is the Google translator reliable for large blocks?* | For short strings it’s fine. For bulk translation, switch to the Cloud Translation API to avoid request‑size limits and to get better language detection. | + +## 结论 + +我们已经使用 Aspose.Words 与 Anthropic Claude V2 模型 **summarize word document**,随后 **translate text with Google** 完成了整个流程。 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/chinese/net/basic-conversions/_index.md b/words/chinese/net/basic-conversions/_index.md index 5b0e5a83f1..141c4bfb1e 100644 --- a/words/chinese/net/basic-conversions/_index.md +++ b/words/chinese/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [使用 Aspose.Words 将 Word 转换为 PDF(C#)指南](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | 学习如何使用 Aspose.Words for .NET 在 C# 中将 Word 文档转换为 PDF,提供分步指南和代码示例。| | [使用 Aspose.Words 将 Word 保存为 PDF – 完整 C# 指南](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | 学习如何使用 Aspose.Words for .NET 在 C# 中将 Word 文档保存为 PDF,提供完整的分步指南和代码示例。| | [使用 Aspose.Words 将 Docx 保存为 PDF – 完整 C# 指南](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | 学习如何使用 Aspose.Words for .NET 在 C# 中将 Docx 文档保存为 PDF,提供完整的分步指南和代码示例。| +| [在 C# 中从 DOCX 创建可访问 PDF – 将 Word 转换为 PDF 的方法](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | 学习使用 Aspose.Words for .NET 在 C# 将 DOCX 转换为符合可访问性标准的 PDF,提供代码示例和详细步骤。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/chinese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..631b090f6e --- /dev/null +++ b/words/chinese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,210 @@ +--- +category: general +date: 2026-05-04 +description: 在 C# 中从 DOCX 文件创建可访问的 PDF。了解如何将 Word 转换为 PDF、将 Word 保存为 PDF,以及在符合可访问性要求的情况下导出 + docx 为 PDF。 +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: zh +og_description: 在 C# 中从 DOCX 文件创建可访问的 PDF。请按照本分步教程将 Word 转换为 PDF、将 Word 保存为 PDF,并将 + docx 导出为具有完整可访问性的 PDF。 +og_title: 在 C# 中从 DOCX 创建可访问的 PDF – 快速指南 +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: 在 C# 中从 DOCX 创建可访问的 PDF – 如何将 Word 转换为 PDF +url: /zh/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中从 DOCX 创建可访问的 PDF – 如何将 Word 转换为 PDF + +是否曾需要从 Word 文档 **创建可访问的 PDF**,但不确定该使用哪个库?你并不孤单——许多开发者在必须满足 PDF/UA 可访问性标准时都会遇到同样的难题。好消息是,使用 Aspose.Words,你只需几行代码就能将 `.docx` 转换为符合标准的 PDF,并且生成的文件能够被屏幕阅读器真正读取。 + +在本教程中,我们将逐步讲解 **convert Word to PDF**、**save Word as PDF**,甚至 **export docx to PDF** 并符合 PDF/UA‑1(或 PDF/UA‑2)标准所需的全部内容。完成后,你将拥有可直接使用的 C# 代码片段,了解每个设置的意义,并能够处理常见的边缘情况,如缺失字体或自定义页面设置。 + +## 先决条件 + +- .NET 6.0 或更高版本(该代码同样适用于 .NET Framework 4.6+) +- Aspose.Words for .NET 许可证(或免费评估密钥) +- 对 C# 和 Visual Studio(或你喜欢的任何 IDE)有基本了解 +- 一个需要进行可访问化的 DOCX 文件(我们将其称为 `input.docx`) + +> **专业提示:** 如果你使用的是免费试用版,请记住生成的 PDF 将包含一个小的 “Evaluation” 水印。 + +## 步骤 1:安装 Aspose.Words NuGet 包 + +在编写任何 C# 代码之前,必须将 Aspose.Words 库添加到项目中。 + +```bash +dotnet add package Aspose.Words +``` + +运行该命令会恢复 `Aspose.Words.dll` 并使命名空间可用。此步骤至关重要,因为 `PdfSaveOptions` 类位于该包中。 + +## 步骤 2:加载源 DOCX 文件 + +第一步是加载你想要转换的 Word 文档。可以把它想象成在编辑页面之前先打开一本书。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **为什么这很重要:** 加载文档会在内存中创建一个包含所有样式、图像和元数据的表示。如果文件损坏,`Document` 将抛出异常——因此在生产代码中可能需要将其包装在 try/catch 块中。 + +## 步骤 3:为可访问性配置 PDF 保存选项 + +Aspose.Words 允许你指定 PDF 合规级别。PDF/UA‑1 是最初的可访问性标准,而 PDF/UA‑2 添加了一些新标签。请选择符合客户需求的版本。 + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **“Compliance” 的作用:** 将 `PdfCompliance.PdfUax1` 设置为该值,告诉 Aspose.Words 嵌入正确的标签、逻辑阅读顺序以及图像的替代文本——这正是屏幕阅读软件所需要的。 + +## 步骤 4:将文档保存为可访问的 PDF + +现在繁重的工作已经完成;我们只需指示 Aspose.Words 使用刚才定义的选项写入 PDF 文件。 + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +执行此行代码后,你将在指定文件夹中找到 `output.pdf`。使用 Adobe Acrobat Reader 打开它,并检查 **File → Properties → Description → PDF/A and PDF/UA** 以验证合规性。 + +## 步骤 5:验证可访问性(可选但推荐) + +虽然代码已保证生成带标签的 PDF,但快速的手动检查有助于发现可能需要额外关注的自定义内容。 + +1. 在 Adobe Acrobat Pro 中打开 `output.pdf`。 +2. 前往 **Tools → Accessibility → Full Check**。 +3. 运行检查并查看任何警告(例如,自定义图像缺少 alt 文本)。 + +如果报告未显示错误,则表示你已成功 **创建可访问的 PDF**,符合 PDF/UA‑1 标准。 + +## 常见变体与边缘情况 + +### 在循环中转换多个 DOCX 文件 + +如果有一批文档,可将加载‑保存逻辑包装在 `foreach` 循环中。 + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### 切换到 PDF/UA‑2 + +只需更改 `Compliance` 枚举即可: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### 处理自定义字体 + +如果你的 DOCX 使用了服务器上未安装的字体,请将其嵌入: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +嵌入字体可确保 PDF 在任何机器上外观一致——这在将 **docx 导出为 pdf** 给外部利益相关者时是关键细节。 + +## 完整工作示例 + +下面是完整的、可直接运行的程序示例,将所有步骤组合在一起。将其复制粘贴到控制台应用程序中,调整路径后,按 **F5** 运行。 + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**预期结果:** 一个名为 `output.pdf` 的文件,可在任何 PDF 查看器中打开,包含正确的可访问性标签,并可与依赖辅助技术的用户共享。 + +![创建可访问 PDF 示例](/images/create-accessible-pdf.png "显示 PDF/UA‑1 合规文档的截图") + +*图片替代文本:* *创建可访问 pdf 示例 – 在 Adobe Acrobat 中打开的 PDF/UA‑1 合规文档的截图。* + +## 常见问题 + +- **这在 .NET Core 上能工作吗?** + 当然可以。Aspose.Words 是跨平台的,因此相同的代码可在 Windows、Linux 和 macOS 上运行。 + +- **如果我的 DOCX 包含宏怎么办?** + 转换过程中会忽略宏;仅渲染可见内容到 PDF 中。 + +- **我可以添加自定义的 PDF 元数据标题吗?** + 可以——在保存之前设置 `pdfSaveOptions.Metadata.Title = "Your Custom Title";`。 + +- **PDF/UA‑2 被广泛支持吗?** + 大多数现代 PDF 阅读器都支持 PDF/UA‑2,但如果你的目标是较旧的工具,建议使用 PDF/UA‑1。 + +## 结论 + +我们已经演示了如何使用 Aspose.Words **创建可访问的 PDF**,从安装 NuGet 包到验证 PDF/UA 合规性全部覆盖。通过遵循这些步骤,你可以可靠地 **将 Word 转换为 PDF**、**将 Word 保存为 PDF**,以及 **将 docx 导出为 PDF**,同时满足可访问性标准——这是任何从事企业文档流水线的开发者必备的技能。 + +准备好迎接下一个挑战了吗?尝试添加自定义页眉/页脚、嵌入 PDF/A‑2b 标记,或在 ASP.NET Core Web API 中自动化此过程。可能性无穷无尽,而你在此奠定的基础将让你充满信心地应对这些任务。 + +祝编码愉快,愿你的 PDF 始终可读! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/chinese/net/programming-with-markdownsaveoptions/_index.md b/words/chinese/net/programming-with-markdownsaveoptions/_index.md index b59df0a2f7..6f26d57548 100644 --- a/words/chinese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/chinese/net/programming-with-markdownsaveoptions/_index.md @@ -66,10 +66,15 @@ ### [保存 Word 图像 – 使用 Aspose 将 Word 转换为 Markdown](./save-word-images-convert-word-to-markdown-with-aspose/) 使用 Aspose.Words for .NET 提取并保存 Word 文档中的图像,同时将文档转换为 Markdown 格式。 + ### [将 Word 转换为 markdown – 完整 C# 指南(含图像提取)](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) 使用 Aspose.Words for .NET 将 Word 文档转换为 Markdown,并提取嵌入的图像,提供完整的 C# 示例和详细步骤指南。 +### [如何保存图像 – 使用 Aspose.Words 将 DOCX 转换为 Markdown](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) + +使用 Aspose.Words for .NET 将 DOCX 文档中的图像保存并转换为 Markdown,提供完整的 C# 示例和步骤指南。 + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/chinese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..b351f65c38 --- /dev/null +++ b/words/chinese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,242 @@ +--- +category: general +date: 2026-05-04 +description: 了解如何在使用 Aspose.Words 将 DOCX 转换为 Markdown 时保存图像。本指南还展示了如何从 Word 中提取图像以及将 + Word 保存为 Markdown。 +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: zh +og_description: 如何在使用 Aspose.Words 将 DOCX 转换为 Markdown 时保存图像。一步一步的指南,附完整的 C# 代码。 +og_title: 如何保存图像 – 使用 Aspose.Words 将 DOCX 转换为 Markdown +tags: +- Aspose.Words +- C# +- Markdown conversion +title: 如何保存图像 – 使用 Aspose.Words 将 DOCX 转换为 Markdown +url: /zh/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何保存图片 – 使用 Aspose.Words 将 DOCX 转换为 Markdown + +有没有想过 **如何保存图片**,在将 Word 文件转换为 Markdown 时?你并不是唯一遇到这个问题的人。许多开发者在转换过程中会遇到图片变成一堆破碎链接,甚至彻底丢失的情况。好消息是 Aspose.Words 提供了细粒度的控制,你可以从 Word 中提取图片,决定它们的存放位置,同时获得干净的 Markdown 输出。 + +在本教程中,我们将逐步演示一个完整、可直接运行的 C# 示例,展示 **如何保存图片** 到专用文件夹,同时将 `.docx` 转换为 `.md`。在此过程中,我们还会涉及 **convert docx to markdown**、**extract images from word**,以及更广泛的 **how to convert docx**,帮助你 **save word as markdown** 而不丢失任何资源。 + +## 前置条件 + +- .NET 6.0 或更高版本(在 .NET Framework 4.7+ 上 API 行为相同) +- 有效的 Aspose.Words 许可证或免费试用版(免费版会在输出中添加水印,但代码功能相同) +- 已包含图片的 Word 文档(例如 `DocWithImages.docx`) +- Visual Studio 2022 或任何能够构建 C# 项目的编辑器 + +> **专业提示:** 如果使用试用版,仍然可以测试图片保存逻辑;只需记住最终的 PDF/MD 会带有试用水印。 + +## 解决方案概览 + +从宏观上看,整个流程如下: + +1. 使用 `Document` 加载源 `.docx`。 +2. 创建 `MarkdownSaveOptions` 对象并注入 `IResourceSavingCallback`。 +3. 在回调中为每张图片决定文件夹和文件名。 +4. 将文档保存为 Markdown;回调负责将每张图片写入磁盘。 + +这就是在转换过程中 **如何保存图片** 的核心。相同的模式也适用于其他资源类型(字体、CSS 等),如果你需要的话。 + +## 第一步 – 加载包含图片的 DOCX + +首先需要一个指向待转换 Word 文件的 `Document` 实例。这里没有花哨的操作,只是直接调用构造函数。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **为什么重要:** 加载文档是 Aspose 解析 Word XML 的唯一环节,任何缺失的字体或损坏的部分都会在此抛出异常——在我们开始保存图片之前就能捕获问题。 + +## 第二步 – 使用图片保存回调设置 MarkdownSaveOptions + +`MarkdownSaveOptions` 类允许通过 `ResourceSavingCallback` 在保存过程中进行拦截。该回调会为每个外部资源(图片、CSS 等)提供一个 `ResourceSavingArgs` 对象。 + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### 回调实现 + +下面是完整的 `ImageSavingCallback` 实现。它会在 Markdown 文件所在目录旁创建一个 `Images` 子文件夹,为每张图片分配顺序名称(`img_0.png`、`img_1.jpg` …),并可选地将图片流向其他位置(例如云存储桶)。 + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **此实现的价值所在:** 通过自定义 `args.FileName`,你可以精确控制 **如何保存图片**——无论是平铺文件夹、基于日期的层级,甚至是保存到数据库 BLOB。回调会为每张图片执行一次,省去后期手动处理 Markdown 的麻烦。 + +## 第三步 – 将文档保存为 Markdown + +当选项和回调都准备好后,实际的转换只需一行代码。 + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +执行完该行后,你将得到: + +- `Doc.md` – Word 内容的 Markdown 表示。 +- `Images\img_0.png`、`Images\img_1.jpg` … – 从原始 DOCX 中提取的所有图片。 + +## 完整、可直接运行的示例 + +将上述所有代码组合在一起,下面是一个可以复制粘贴到新 C# 项目中的完整控制台应用程序。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### 预期结果 + +运行程序后: + +- 在任意文本编辑器中打开 `C:\Docs\Doc.md`,你会看到类似 `![](Images/img_0.png)` 的 Markdown 图片链接。 +- `Images` 文件夹中会包含每张被提取的图片,名称按顺序排列。 +- 在支持本地图片的任何查看器(VS Code 预览、GitHub 等)中,Markdown 文件都能正确渲染。 + +## 常见问题解答 (FAQs) + +### 这能处理其他图片格式吗(SVG、TIFF)? + +可以。`Path.GetExtension(args.FileName)` 会保留原始扩展名,所以 SVG、TIFF、BMP 甚至 EMF 都会原样保存。唯一需要注意的是部分 Markdown 渲染器可能不直接显示 SVG;此时可以预先将 SVG 转为 PNG。 + +### 如果想把图片嵌入为 Base64 而不是单独文件怎么办? + +在 `ResourceSaving` 回调中,你可以改为写入内存流,然后手动修改 Markdown 链接为 `data:image/...;base64,....`。Aspose 并未提供直接的 “嵌入为 Base64” 开关,但回调让你完全掌控 `args.Stream`。 + +### 与内置的 `ExportImages` 方法有什么区别? + +`ExportImages` 会把所有图片导出到文件夹,但不会生成 Markdown。我们的回调将两者结合,确保图片文件名与 `.md` 中的引用保持一致。这种对应关系是 **如何正确保存图片** 的关键。 + +### 能否批量转换多个 DOCX 文件? + +完全可以。将核心逻辑包装在 `foreach (var file in Directory.GetFiles(..., "*.docx"))` 循环中,调整输出路径,并复用同一个 `ImageSavingCallback`。记得为每个文档创建新的 `MarkdownSaveOptions`,因为 `args.DestinationFileName` 会随迭代而变化。 + +## 边缘情况与最佳实践 + +| 场景 | 需要注意的点 | 推荐解决方案 | +|-----------|----------------------|-----------------| +| **大型 DOCX(数百 MB)** | 加载时可能导致内存压力 | 使用 `LoadOptions` 并设置 `LoadOptions.LoadFormat = LoadFormat.Docx` 进行流式加载 | +| **图片名称冲突** | 若目标文件夹已存在同名 `img_0.png`,会被覆盖 | 在文件名中追加 GUID:`newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **输出文件夹只读** | 保存时抛出 `UnauthorizedAccessException` | 确保进程拥有相应权限或选择可写路径 | +| **非图片资源(CSS、字体)** | 回调同样会收到这些资源 | 使用 `if (args.ResourceType != ResourceType.Image) return;` 进行过滤(示例中已演示) | +| **Unicode 文件名** | 某些文件系统可能处理不了特殊字符 | 使用 `Path.GetInvalidFileNameChars()` 对 `args.FileName` 进行清理后再赋值 | + +## 相关主题,供你进一步探索 + +- **convert docx to markdown** 并自定义标题样式(使用 `MarkdownSaveOptions.ExportImagesAsBase64` 实现内联图片) +- **extract images from word** 使用 `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/chinese/net/working-with-fonts/_index.md b/words/chinese/net/working-with-fonts/_index.md index 560a87059e..41a6367a9c 100644 --- a/words/chinese/net/working-with-fonts/_index.md +++ b/words/chinese/net/working-with-fonts/_index.md @@ -52,6 +52,7 @@ | [获取不带后缀的替换](./get-substitution-without-suffixes/) 在本教程中,学习如何使用 Aspose.Words for .NET 在 Word 文档中获取无后缀覆盖。| | [如何在 Aspose.Words 中捕获字体 – 完整指南](./how-to-capture-fonts-in-aspose-words-complete-guide/) 通过本完整指南学习如何在 Aspose.Words 中捕获字体,确保文档字体完整并避免缺失。| | [如何加载 DOCX 并检测缺失字体 – 完整 C# 指南](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) 通过本完整的 C# 示例学习如何加载 DOCX 文档并检测缺失的字体,确保文档渲染一致。| +| [Aspose 字体替换:检测 Word 文档缺失字体](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) 通过本教程学习如何使用 Aspose.Words for .NET 检测 Word 文档中的缺失字体并进行处理。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/chinese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..5a6fed8e6f --- /dev/null +++ b/words/chinese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-05-04 +description: 学习如何使用 Aspose 字体替换在加载 Word 文档时检测缺失的字体并获取缺失字体的详细信息——一步步指南。 +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: zh +og_description: 精通 Aspose 字体替换,在加载 Word 文档时检测缺失字体,并使用完整的 C# 代码检索缺失字体信息。 +og_title: Aspose 字体替换 – 检测 Word 文档中缺失的字体 +tags: +- Aspose.Words +- C# +- Font Management +title: Aspose 字体替换:检测 Word 文档中缺失的字体 +url: /zh/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose 字体替换 – 检测 Word 文档中缺失的字体 + +有没有想过为什么同一份 Word 文档在不同机器上显示异常?通常是因为缺少字体,而 **Aspose 字体替换** 可以帮助你在问题变成视觉灾难之前发现这些缺口。在本教程中,我们将演示如何在 **加载 Word 文档** 的瞬间 **检测缺失的字体**,以及随后 **检索缺失字体** 的详细信息,以便你进行修复或替换。 + +我们将覆盖从设置警告回调到获取干净的缺失字体列表的全部步骤。完成后,你将拥有一个可直接运行的 C# 代码片段,准确告诉你哪些字体未被找到,并且你会明白这对文档保真度为何如此重要。 + +--- + +## 前置条件 – 开始之前需要准备的内容 + +- **Aspose.Words for .NET**(建议使用 v23.12 或更高版本)。 +- .NET 开发环境(Visual Studio、Rider 或 `dotnet` CLI)。 +- 一个有意使用了你未安装字体的示例 DOCX,命名为 `DocumentWithMissingFont.docx`。 +- 基础的 C# 知识——不需要高级技巧,只要能运行控制台应用即可。 + +如果上述任意项你不熟悉,请暂停并安装 NuGet 包: + +```bash +dotnet add package Aspose.Words +``` + +就这么简单。无需额外字体,也不需要外部服务。 + +--- + +## 步骤 1:加载 Word 文档(并触发字体检查) + +首先要 **加载 Word 文档**。Aspose.Words 会解析文件,如果找不到引用的字体,就会排队一个 *FontSubstitution* 警告。下面的代码演示了加载过程: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **为什么重要:** 及早加载文档让 Aspose 有机会扫描每一段文字、样式和嵌入对象。如果系统或自定义字体文件夹中找不到某个字体,稍后就会收到警告。 + +--- + +## 步骤 2:附加警告回调以捕获替换事件 + +Aspose.Words 使用回调机制通知你诸如缺失字体之类的问题。通过将 `IWarningCallback` 的实现分配给 `doc.WarningCallback`,即可在警告产生时拦截它们。 + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **小技巧:** 你可以通过组合模式包装多个回调(例如日志、UI 更新),但在本教程中使用单一回调即可保持思路清晰。 + +--- + +## 步骤 3:实现字体替换警告回调 + +现在我们定义实际执行工作的类。回调会收到一个 `WarningInfo` 对象;我们筛选 `WarningType.FontSubstitution` 并将描述保存以供后续使用。 + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **正在发生什么:** 当 Aspose 遇到缺失的字体时,会生成类似 “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” 的警告。我们的回调会打印该行并保存下来。 + +--- + +## 步骤 4:处理文档(可选)并收集缺失字体 + +如果你仅需 **检测缺失的字体**,加载步骤已经足够——警告会自动触发。不过,许多开发者在完成某些操作(如保存、转换)后仍需要 **检索缺失字体** 信息。下面我们强制执行一个小操作——保存为 PDF——以确保所有警告都被发出,然后提取收集到的消息。 + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **预期的控制台输出**(示例): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +请注意,每一行都清晰地说明了原始字体以及 Aspose 选择的回退字体。这正是 **aspose font substitution** 报告的核心。 + +--- + +## 步骤 5:进阶 – 使用自定义字体源以减少替换 + +有时你 *确实* 拥有缺失的字体,只是它们不在默认系统文件夹中。Aspose.Words 允许你通过 `FontSettings` 指向自定义目录。添加此步骤可以显著降低替换警告的数量。 + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **为什么要添加?** 如果你在多台机器间分发文档,将所需字体打包到已知文件夹可以确保在任何地方都有相同的视觉效果。它还能让你的 **detect missing fonts** 过程更准确,因为 Aspose 会先检查该文件夹再回退。 + +--- + +## 完整可运行示例 + +将所有代码组合在一起,下面是一个可直接复制粘贴的控制台程序。将其保存为 `Program.cs` 并使用 `dotnet run` 运行。 + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**运行结果示例:** 如果源 DOCX 引用了你未安装的字体,控制台会打印每条替换信息并给出简要汇总。若所有字体均已存在,则会显示 “No missing fonts were detected.” 的提示。 + +--- + +## 常见问题及解决方案 + +| 问题 | 产生原因 | 解决办法 | +|------|----------|----------| +| **未出现任何警告** | 文档仅使用系统字体,或已添加包含缺失字体的自定义文件夹。 | 确认 DOCX 确实引用了不可用的字体。可在 Word 中将段落设置为罕见字体(例如 “Papyrus”)。 | +| **重复的警告信息** | 同一字体在多个文本运行中被使用,导致多次警告。 | 如只需唯一列表,可使用 `Distinct()` 去重。 | +| **大文档性能下降** | 每条警告都在 UI 线程上处理。 | 将加载放在后台任务中执行,或在后处理时使用 `Parallel.ForEach`。 | +| **回退字体不符合品牌** | Aspose 的默认回退字体可能不符合你的品牌要求。 | 设置 `FontSettings.SubstitutionSettings.DefaultFontName` 为首选回退字体(例如 “Calibri”)。 | + +--- + +## 扩展方案 – 将缺失字体导出为 JSON + +如果你在构建需要向客户端报告缺失字体的 Web 服务,序列化列表非常简单: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +现在你的 API 可以返回干净的 JSON 负载,供其他系统消费。 + +--- + +## 结论 + +本指南从头到尾演示了 **Aspose 字体替换**:加载 Word 文档、附加警告回调、捕获每个 *detect missing fonts* 事件,最终 **检索缺失字体** 信息用于报告或修复。通过添加可选的自定义字体文件夹,你可以显著减少替换数量;再加几行代码,还能将结果导出为 JSON。 + +请记住,文档的视觉完整性取决于所使用的字体。使用本教程中的技术,你再也不会因意外的回退字体而感到惊讶。 + +准备好迈出下一步了吗?尝试将此逻辑集成到更大的文档处理流水线中,或探索 Aspose.Words 的其他功能,如字体嵌入(`doc.FontSettings.EmbeddedFonts`)。可能性无限,你的用户也会因更精致的输出而感激不已。 + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/czech/net/ai-powered-document-processing/_index.md b/words/czech/net/ai-powered-document-processing/_index.md index f01dc2b734..cb21a4a674 100644 --- a/words/czech/net/ai-powered-document-processing/_index.md +++ b/words/czech/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ Nakonec nezapomeňte se podívat na naše [Práce s možnostmi shrnutí](./worki | [Práce s modelem umělé inteligence Google](./working-with-google-ai-model/) Zlepšete zpracování dokumentů s Aspose.Words pro .NET a Google AI a vytvářejte stručné shrnutí bez námahy. | | [Práce s modelem otevřené umělé inteligence](./working-with-open-ai-model/) | Získejte efektivní sumarizaci dokumentů pomocí Aspose.Words pro .NET s výkonnými modely OpenAI. Ponořte se do tohoto komplexního průvodce hned teď. | | [Práce s možnostmi shrnutí](./working-with-summarize-options/) | Naučte se efektivně shrnovat dokumenty Wordu pomocí Aspose.Words pro .NET s naším podrobným návodem k integraci modelů umělé inteligence pro rychlý přehled. | +| [Shrňte Word dokument v C# – Kompletní průvodce s využitím Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Naučte se, jak pomocí Aspose.Words a modelu Anthropic Claude automaticky shrnout Word dokumenty v C#. | +| [Jak použít LLM s Aspose.Words – Přepsat odstavce v C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Naučte se, jak pomocí LLM v Aspose.Words přepsat odstavce v C# pro vylepšený obsah a styl dokumentů. | +| [Jak zkontrolovat gramatiku v C# – Kompletní průvodce pro Word dokumenty](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Naučte se, jak pomocí Aspose.Words pro .NET a C# kontrolovat gramatiku ve Word dokumentech a zlepšit kvalitu textu. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/czech/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..4140107446 --- /dev/null +++ b/words/czech/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Naučte se, jak kontrolovat gramatiku ve Word dokumentu pomocí C#. Tento + tutoriál také pokrývá, jak načíst soubor DOCX v C# a použít Aspose.Words AI pro + přesné výsledky. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: cs +og_description: Jak zkontrolovat gramatiku v dokumentu Word pomocí C#? Postupujte + podle tohoto tutoriálu, jak načíst soubor DOCX v C# a spustit kontrolu gramatiky + poháněnou AI pomocí Aspose.Words. +og_title: Jak zkontrolovat gramatiku v C# – Kompletní průvodce krok za krokem +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Jak kontrolovat gramatiku v C# – Kompletní průvodce pro Word dokumenty +url: /cs/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak kontrolovat gramatiku v C# – Kompletní průvodce pro Word dokumenty + +Už jste se někdy zamysleli **jak kontrolovat gramatiku** ve Word dokumentu, aniž byste opustili své IDE? Nejste jediní. Mnoho vývojářů potřebuje ověřovat zprávy generované uživateli, automatické e‑maily nebo dokonce dokumentaci před jejím vydáním. Dobrá zpráva? S Aspose.Words AI to můžete provést programově a celý proces se hladce vejde do typického C# workflow. + +V tomto průvodci projdeme vše, co potřebujete vědět: od načtení DOCX souboru C# po volání AI kontroloru gramatiky a interpretaci výsledků. Na konci budete mít připravený úryvek kódu, který vypíše závažnost, zprávu a navrhovanou náhradu každého problému – žádné ruční kopírování není potřeba. + +## Co se naučíte + +- **Jak kontrolovat gramatiku** ve Word dokumentu pomocí Aspose.Words AI. +- Přesné kroky k **načtení DOCX souboru C#** pomocí třídy `Document`. +- Jak pracovat s objektem `GrammarCheckResult`, iterovat přes problémy a vypisovat užitečnou diagnostiku. +- Běžné úskalí (např. chybějící licence) a tipy, jak udělat řešení připravené do produkce. + +> **Předpoklady:** .NET 6.0+ (nebo .NET Framework 4.6+), Visual Studio 2022 (nebo libovolné IDE dle preference) a licence Aspose.Words for .NET (bezplatná zkušební verze funguje pro testování). Pokud jste ještě nenainstalovali NuGet balíčky, spusťte: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Teď se ponořme do toho. + +## Krok 1: Načtení DOCX souboru v C# + +Než může dojít k jakékoli kontrole gramatiky, musí být dokument načten do paměti. Aspose.Words to zvládne jedním řádkem, ale je tu několik nuancí, na které stojí za to upozornit. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Proč je to důležité:** +- Použití `Path.Combine` zajišťuje kompatibilitu napříč platformami. +- Kontrola existence zabraňuje selhání za běhu, které by jinak zakrylo skutečnou logiku kontroly gramatiky. +- Když **načtete DOCX soubor C#**, Aspose analyzuje všechny styly, hlavičky, patičky a dokonce skrytý text, čímž AI poskytne kompletní obrázek o dokumentu. + +> **Pro tip:** Pokud potřebujete pracovat se streamy (např. soubory nahrávané z webu), můžete volání `new Document(docPath)` nahradit `new Document(stream)`. + +## Krok 2: Výběr AI modelu pro kontrolu gramatiky + +Aspose.Words AI podporuje několik modelů, od lehkých lokálních až po cloudové varianty GPT. Pro většinu scénářů nabízí **GPT‑3.5 Turbo** ideální rovnováhu mezi rychlostí a přesností. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Proč zvolit GPT‑3.5 Turbo?** +- Je dostatečně rychlý pro dávkové zpracování desítek souborů za minutu. +- Cena (pokud používáte placený tarif) je nižší než u GPT‑4 a přesto zachytí většinu běžných chyb. +- API automaticky spravuje limity tokenů, takže nemusíte ručně rozdělovat velké dokumenty. + +Pokud dáváte přednost offline přístupu, nahraďte `AiModelType.Gpt35Turbo` za `AiModelType.Local` (vyžaduje volitelný offline modelový balíček). + +## Krok 3: Iterace přes problémy a zobrazení užitečné zpětné vazby + +Objekt `GrammarCheckResult` obsahuje kolekci objektů `GrammarIssue`. Každý problém poskytuje závažnost, čitelnou zprávu a navrhovanou náhradu. Vytiskněme je přehledně. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Co jednotlivá pole znamenají:** +- `Severity` – obvykle `Info`, `Warning` nebo `Error`. `Error` považujte za nutnost opravit před publikací. +- `Message` – stručný popis problému (např. „Shoda podmětu s přísudkem“). +- `SuggestedReplacement` – doporučená oprava od AI; můžete ji automaticky aplikovat, pokud modelu důvěřujete, nebo ji předložit lidskému recenzentovi. + +> **Edge case:** Některé problémy mohou mít prázdnou hodnotu `SuggestedReplacement` (např. návrhy stylu). V takových případech jen označte místo pro manuální revizi. + +## Kompletní funkční příklad + +Spojením všech částí získáte samostatnou konzolovou aplikaci, kterou můžete zkopírovat do nového .NET projektu. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Očekávaný výstup (ukázka):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Pokud spustíte program proti čistému dokumentu, uvidíte řádek „✅ No grammar issues detected.“ místo toho. + +## Řešení běžných úskalí + +| Problém | Proč k tomu dochází | Rychlé řešení | +|---------|---------------------|---------------| +| **LicenseException** | Knihovny Aspose vyžadují platnou licenci pro produkční použití. | Vložte `License license = new License(); license.SetLicense("Aspose.Words.lic");` na začátek metody `Main`. | +| **Network timeout** | Volání AI modelu dosáhne cloudu a překročí výchozí časový limit 100 s. | Zvyšte timeout pomocí `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` před voláním `CheckGrammar`. | +| **Large documents (> 10 MB)** | Některé cloudové modely oříznou vstup. | Rozdělte dokument na sekce pomocí `document.Sections` a provádějte kontrolu po sekcích, poté agregujte výsledky. | +| **Missing suggestions** | Model nedokázal vygenerovat náhradu (např. nejednoznačná formulace). | Zaznamenejte problém pro manuální revizi; neaplikujte prázdné návrhy automaticky. | + +## Rozšíření řešení + +- **Automatické opravy:** Procházejte `grammarResult.Issues` a nahrazujte text pomocí `document.Range.Replace`. Nezapomeňte nejprve zálohovat originální soubor. +- **Dávkové zpracování:** Zabalte celý tok do `foreach` přes adresář s DOCX soubory. Uložte každou zprávu jako JSON soubor pro pozdější analýzu. +- **Integrace s ASP.NET:** Vytvořte endpoint, který přijme nahraný DOCX, spustí kontrolu a vrátí JSON payload s problémy. + +## Ilustrace + +how to check grammar flow diagram + +*Diagram výše vizualizuje tříkrokový proces: načtení DOCX → spuštění AI kontroly gramatiky → výstup problémů.* + +## Závěr + +Probrali jsme **jak kontrolovat gramatiku** ve Word dokumentu pomocí C#, ukázali přesný kód pro **načtení DOCX souboru C#** a ukázali, jak interpretovat AI‑generovanou zpětnou vazbu. S Aspose.Words AI získáte výkonný, cloud‑podporovaný gramatický engine, který se bez problémů integruje do jakékoli .NET aplikace. + +Další kroky? Vyzkoušejte automatizaci smyčky oprava‑aplikace, experimentujte s novějším `AiModelType.Gpt4` pro ještě přesnější návrhy, nebo zkombinujte toto s knihovnou pro kontrolu pravopisu a vytvořte kompletní korekturní pipeline. Možnosti jsou prakticky neomezené a nyní máte solidní základ, na kterém můžete stavět. + +Máte otázky nebo narazíte na obtížný okrajový případ? Zanechte komentář níže a šťastné programování! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/czech/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/czech/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..7f90aec01f --- /dev/null +++ b/words/czech/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-05-04 +description: Jak používat LLM k úpravě dokumentů s Aspose – naučte se nahrazovat text + odstavců, připojit se k lokálnímu LLM a přepisovat text pomocí AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: cs +og_description: Jak použít LLM k úpravě dokumentů pomocí Aspose. Tento průvodce ukazuje, + jak se připojit k lokálnímu LLM, nahradit text odstavce a přepsat text pomocí AI. +og_title: Jak používat LLM s Aspose.Words – Přepisovat odstavce v C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Jak používat LLM s Aspose.Words – Přepisovat odstavce v C# +url: /cs/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak používat LLM s Aspose.Words – Přepsat odstavce v C# + +Už jste se někdy zamýšleli **jak používat LLM** k vylepšení dokumentu Word, aniž byste jej otevírali ručně? Nejste v tom jediní. Mnoho vývojářů narazí na problém, když potřebují *nahradit text odstavce* programově, ale postrádají čistý AI‑řízený workflow. + +V tomto tutoriálu připojíme lokální velký jazykový model, pošleme mu úryvek ze souboru `.docx`, požádáme jej o **přepsání textu pomocí AI** a nakonec uložíme aktualizovaný dokument — vše pomocí Aspose.Words. Na konci budete mít připravenou spustitelnou C# konzolovou aplikaci, která demonstruje celý proces. + +> **Co získáte:** kompletní, spustitelný příklad, vysvětlení každého kroku, tipy pro okrajové případy a nápady, jak řešení rozšířit. + +## Co budete potřebovat + +- **.NET 6+** (nebo .NET Framework 4.7.2 – kód funguje na obou) +- **Aspose.Words for .NET** (NuGet balíček `Aspose.Words`) +- **lokální LLM server** vystavující jednoduchý HTTP `/generate` endpoint (např. Ollama, LMStudio nebo vlastní Flask službu) +- Základní znalost C# a kódu HTTP klienta + +Žádné další SDK nejsou potřeba; vše ostatní je obsaženo v kódu, který napíšeme společně. + +## Krok 1: Jak používat LLM k nahrazení textu odstavce + +Prvním krokem je identifikovat odstavec, který chceme upravit. Aspose.Words to usnadňuje tím, že poskytuje bohatý objektový model. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Proč je to důležité:** +Výběr správného uzlu zabraňuje neúmyslnému přepsání nadpisů nebo tabulek. Použitím přístupu **replace paragraph text** zachováme strukturu dokumentu nedotčenou a zasáhneme jen do obsahu, který nás zajímá. + +> **Tip:** Pokud má váš dokument sekce proměnné délky, použijte `document.GetChildNodes(NodeType.Paragraph, true)` a LINQ k nalezení odstavce podle jeho textu nebo stylu. + +## Krok 2: Připojení k lokálnímu LLM endpointu + +Nyní, když máme text, musíme jej poslat LLM. Příklad používá jednoduchou obalovou třídu `LocalLargeLanguageModel`, která skrývá HTTP komunikaci. Klidně ji můžete nahradit voláními `HttpClient`, pokud chcete. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Proč se takto připojujeme:** +Nastavení **connect to local llm** eliminuje latenci, udržuje data na místě a vyhýbá se nákladům na API. Obalová třída také zjednodušuje následný kód, což nám umožňuje soustředit se na logiku **rewrite text using ai**. + +## Krok 3: Přepsání textu pomocí AI s Aspose.Words + +S textem odstavce v ruce a připraveným LLM vytvoříme prompt, který modelu přesně řekne, co chceme — přepsat v formálním tónu. Prompt můžete upravit pro jiné styly (přátelský, technický, atd.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Proč to funguje:** +LLM jsou řízeny promptem; poskytnutí explicitních instrukcí (“Rewrite … in a formal tone”) přináší konzistentní výsledky. Krok **rewrite text using ai** je jádrem tutoriálu — ukazuje, jak lze AI vložit přímo do pracovních postupů s dokumenty. + +## Krok 4: Úprava dokumentu a uložení změn + +Nyní nahradíme původní runy novým obsahem. Aspose.Words ukládá text do objektů `Run`, takže jejich předchozí vymazání zabraňuje zbytkům formátování. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Poznámka k okrajovým případům:** +Pokud původní odstavec obsahoval smíšené formátování (tučné, kurzíva), možná budete chtít zachovat styly. V takovém případě vytvořte nový `Run`, zkopírujte nastavení původního `Font` a nastavte jeho `Text` na `revisedText`. + +## Kompletní funkční příklad + +Níže je celý program, který můžete zkopírovat a vložit do konzolového projektu. Nezapomeňte nejprve nainstalovat NuGet balíček Aspose.Words (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Očekávaný výstup + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Otevřete `output.docx` — uvidíte, že třetí odstavec nyní obsahuje vylepšenou verzi. + +## Časté otázky a úskalí + +| Otázka | Odpověď | +|----------|--------| +| **Co když moje LLM vrátí JSON s extra poli?** | Upravte `GenerateText`, aby deserializoval správnou vlastnost, nebo odpověď zpracujte ručně. | +| **Mohu zpracovat více odstavců najednou?** | Ano — iterujte přes `document.FirstSection.Body.Paragraphs` a použijte stejnou logiku promptu, případně přidejte index odstavce do promptu pro kontext. | +| **Můj LLM server používá autentizaci?** | Přidejte hlavičku do `HttpClient` před POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Formátování se po nahrazení ztratí.** | Zachovejte původní nastavení `Run.Font`: vytvořte nový `Run`, zkopírujte `originalRun.Font.Clone()`, a pak nastavte jeho `Text`. | +| **LLM někdy vrací prázdné řetězce.** | Implementujte záložní řešení — pokud `revisedText.Trim().Length == 0`, ponechte původní text nebo zkuste jednodušší prompt. | + +## Rozšíření řešení + +Nyní, když jste zvládli **how to use llm** pro jeden odstavec, zvažte následující kroky: + +- **Batch processing:** Procházet každý odstavec a přepsat jej ve zvoleném stylu (např. „zkrátit celý text“). +- **Style‑aware rewriting:** Předat do promptu název původního stylu odstavce, aby LLM rozpoznal rozdíl mezi nadpisy a tělem textu. +- **Integration with a CI pipeline:** Automatizovat vylepšování dokumentů jako součást procesu sestavení dokumentace. +- **Alternative prompts:** Vyzkoušejte „shrň tento odstavec“ nebo „přelož tento odstavec do španělštiny“, abyste prozkoumali plný potenciál **rewrite text using ai**. + +## Závěr + +Prošli jsme celý proces **how to use llm** s Aspose.Words: načtení dokumentu, **connect to local llm**, extrakci odstavce, **rewrite text using ai**, **replace paragraph text** a nakonec uložení výsledku. Kód je samostatný, funguje ihned a ukazuje praktický způsob, jak spojit AI s tradiční automatizací dokumentů. + +Give it a spin, tweak the prompts, and let + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/czech/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/czech/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..32e1b1fd29 --- /dev/null +++ b/words/czech/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Rychle shrňte dokument Word a přeložte text pomocí Googlu. Naučte se, + jak používat Anthropic Claude, vytvořit souhrn z reportu a přeložit text pomocí + Googlu v jednom C# tutoriálu. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: cs +og_description: Shrňte dokument Word okamžitě a přeložte text pomocí Google. Tento + průvodce ukazuje, jak použít Anthropic Claude a Aspose.Words k vytvoření souhrnu + z reportu. +og_title: Shrňte Word dokument v C# – krok za krokem s Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Shrňte Word dokument v C# – Kompletní průvodce s využitím Anthropic Claude +url: /cs/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Shrnutí Word dokumentu v C# – Kompletní průvodce s využitím Anthropic Claude + +Už jste někdy potřebovali **shrnutí word dokumentu**, ale ztráceli jste se v API a rozsáhlém kódu? Nejste v tom sami. V mnoha projektech – výročních zprávách, právních podáních nebo výzkumných pracích – je získání stručného přehledu každodenní bolestí. Naštěstí kombinace Aspose.Words a Anthropic Claude to udělá hračkou a můžete ještě přidat rychlý překlad pomocí Google. + +V tomto tutoriálu projdeme vše, co potřebujete vědět: načtení velkého .docx, volání modelu Claude V2 pro vygenerování shrnutí, překlad fráze pomocí Google a řešení nejčastějších problémů. Na konci budete schopni **vytvořit shrnutí z reportu** pomocí několika řádků C#. + +## Požadavky + +- .NET 6+ (nebo .NET Core 3.1) nainstalovaný +- Licence Aspose.Words pro .NET (nebo bezplatná zkušební verze) +- Přístup k Anthropic Claude V2 API (budete potřebovat API klíč) +- Internetové připojení pro Google Translator +- Visual Studio 2022 nebo vaše oblíbené C# IDE + +Žádné další NuGet balíčky kromě `Aspose.Words` a `Aspose.Words.AI` nejsou potřeba; třída překladače je součástí stejné knihovny. + +## Krok 1 – Načtení zdrojového Word dokumentu + +Prvním krokem je načíst soubor .docx do paměti. Aspose.Words to dělá jednoduše a díky robustnímu parseru funguje i s komplikovanými rozvrženími, tabulkami a vloženými obrázky. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Proč je to důležité:** Načtení dokumentu hned na začátku vám umožní zkontrolovat vlastnosti (autor, počet slov) a rozhodnout, zda je shrnutí vůbec potřeba. Velké soubory > 10 MB mohou být náročné na paměť, proto zvažte `LoadOptions` s `LoadFormat.Docx`, pokud narazíte na problémy s výkonem. + +## Krok 2 – Shrnutí dokumentu pomocí Anthropic Claude + +Nyní přichází zábavná část: předáme dokument Claude V2. Třída `Summarizer` abstrahuje HTTP volání, práci s tokeny a opakování. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Jak to funguje:** +> 1. **Chunking** – Aspose automaticky rozdělí dokument na zvládnutelné části (≈ 2 KB každá), aby respektoval limit tokenů Claude. +> 2. **Prompt engineering** – Knihovna odesílá prompt jako “Provide a concise executive summary of the following text:” následovaný každým úsekem. +> 3. **Aggregation** – Claude vrátí částečná shrnutí, která jsou spojena do finálního `summaryText`. + +### Okrajové případy a tipy + +- **Velmi velké zprávy** (> 100 stránek) mohou překročit kontextové okno Claude. Pokud vidíte oříznutý výstup, nastavte `SummarizerOptions.MaxChunkSize` na menší hodnoty. +- **Neanglický zdroj** – Claude funguje nejlépe s angličtinou; pro jiné jazyky nejprve přeložte (viz Krok 4) a pak shrňte. +- **Limity rychlosti** – Anthropic uvaluje limity za minutu. Zabalte volání do smyčky s opakováním a exponenciálním back‑offem, pokud obdržíte odpověď `429`. + +## Krok 3 – Ověření výstupu shrnutí + +Než budeme pokračovat, je dobré zkontrolovat, že shrnutí není prázdné a splňuje očekávanou délku (např. 5‑10 % původního počtu slov). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Pokud se poměr zdá příliš nízký (< 2 %), můžete upravit vlastnost `SummarizerOptions.SummaryLength`, aby požadovala delší výstup. + +## Krok 4 – Překlad textu pomocí Google + +Nyní, když máme ostré anglické shrnutí, přidáme rychlý překlad. Třída `Translator` používá veřejný překladový endpoint Googlu (pro krátké fráze není potřeba API klíč, ale pro produkci byste měli přejít na placenou Cloud Translation API). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Proč Google?** Je rychlý, široce podporovaný a bezplatný endpoint zvládne krátké řetězce bez autentizace. Pro hromadné překlady batchujte volání a respektujte limity používání Googlu. + +### Překlad celého shrnutí (volitelné) + +Pokud potřebujete celé shrnutí ve španělštině (nebo jiném jazyce), stačí předat `summaryText` do `Translator.Translate`. Všimněte si limitu velikosti požadavku 5 KB; možná budete muset shrnutí rozdělit na menší úseky. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Krok 5 – Uložení shrnutí zpět do Word souboru (bonus) + +Často uživatel očekává ke stažení dokument místo výstupu v konzoli. Vytvoříme nový `.docx`, který bude obsahovat jak anglickou, tak španělskou verzi. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Praktický tip + +Když vkládáte shrnutí do nového Word souboru, udržujte původní formátování na minimu (použijte styl `Normal`). Komplexní styly ze zdroje mohou způsobit neočekávané posuny rozvržení. + +## Kompletní funkční příklad + +Níže je **úplný, připravený ke zkopírování** program, který vše spojuje. Zkompiluje se jedním `dotnet run` po přidání Aspose balíčků. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Očekávaný výstup v konzoli** (zkrácený pro stručnost): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Často kladené otázky + +| Otázka | Odpověď | +|----------|--------| +| *Mohu použít jiný AI model?* | Ano. Nahraďte `SummarizerModel.AnthropicClaudeV2` za `SummarizerModel.OpenAIGPT4` (vyžaduje OpenAI klíč) nebo jakýkoli jiný poskytovatel uvedený v enumu. | +| *Co když dokument obsahuje chráněné sekce?* | Aspose vyhodí `ProtectedDocumentException`. Nejprve jej odemkněte pomocí `LoadOptions.Password` nebo požádejte o nechráněnou kopii. | +| *Potřebuji placenou licenci Aspose pro produkci?* | Bezplatná zkušební verze funguje až do 20 stránek. Pro větší zprávy licence odstraňuje limit stránek a přidává optimalizace výkonu. | +| *Je Google překladač spolehlivý pro velké bloky?* | Pro krátké řetězce je v pořádku. Pro hromadný překlad přejděte na Cloud Translation API, abyste se vyhnuli limitům velikosti požadavku a získali lepší detekci jazyka. | + +## Závěr + +Právě jsme **shrňuli word dokument** pomocí Aspose.Words a modelu Anthropic Claude V2 a poté **přeložili text pomocí Google** na + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/czech/net/basic-conversions/_index.md b/words/czech/net/basic-conversions/_index.md index c609068d97..8f4a3aeea3 100644 --- a/words/czech/net/basic-conversions/_index.md +++ b/words/czech/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Základní konverze vás provede základními konverzemi dokumentů pomocí knih | [Převod Wordu do PDF v C# pomocí Aspose.Words – Průvodce](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Naučte se, jak převést dokument Word do PDF pomocí Aspose.Words v C#. Praktický návod s ukázkovým kódem. | | [Uložit Word jako PDF pomocí Aspose.Words – Kompletní průvodce C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Naučte se, jak pomocí Aspose.Words převést dokument Word do PDF v C# s podrobným návodem a ukázkovým kódem. | | [Uložit DOCX jako PDF pomocí Aspose.Words – Kompletní průvodce C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Naučte se, jak převést DOCX do PDF pomocí Aspose.Words v C# s podrobným návodem a ukázkovým kódem. | +| [Vytvořit přístupný PDF z DOCX v C# – Jak převést Word do PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Naučte se, jak vytvořit přístupný PDF z DOCX pomocí Aspose.Words pro .NET v C#. Praktický návod s ukázkovým kódem. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/czech/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..b7d5091753 --- /dev/null +++ b/words/czech/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: Vytvořte přístupný PDF ze souboru DOCX v C#. Naučte se, jak převést Word + na PDF, uložit Word jako PDF a exportovat DOCX do PDF s ohledem na přístupnost. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: cs +og_description: Vytvořte přístupný PDF ze souboru DOCX v C#. Postupujte podle tohoto + krok‑za‑krokem tutoriálu, jak převést Word na PDF, uložit Word jako PDF a exportovat + docx do PDF s plnou přístupností. +og_title: Vytvořte přístupný PDF z DOCX v C# – rychlý průvodce +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Vytvořte přístupný PDF z DOCX v C# – Jak převést Word na PDF +url: /cs/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vytvoření přístupného PDF z DOCX v C# – Jak převést Word na PDF + +Už jste někdy potřebovali **vytvořit přístupné PDF** z dokumentu Word, ale nebyli jste si jisti, kterou knihovnu použít? Nejste v tom sami – mnoho vývojářů narazí na stejnou překážku, když musí splňovat standardy PDF/UA pro přístupnost. Dobrou zprávou je, že s Aspose.Words můžete `.docx` převést na souladné PDF během několika řádků kódu a získáte soubor, který čtečky obrazovky skutečně dokážou přečíst. + +V tomto tutoriálu projdeme vše, co potřebujete vědět k **převodu Wordu na PDF**, **uložení Wordu jako PDF** a dokonce **exportu docx do PDF** s dodržením PDF/UA‑1 (nebo PDF/UA‑2). Na konci budete mít připravený úryvek C# kódu, pochopíte, proč je každé nastavení důležité, a budete připraveni řešit běžné okrajové případy, jako chybějící písma nebo vlastní nastavení stránky. + +## Požadavky + +- .NET 6.0 nebo novější (kód funguje také s .NET Framework 4.6+) +- Licence Aspose.Words pro .NET (nebo bezplatný evaluační klíč) +- Základní znalost C# a Visual Studio (nebo libovolného IDE, které preferujete) +- DOCX soubor, který chcete učinit přístupným (budeme ho nazývat `input.docx`) + +> **Pro tip:** Pokud používáte bezplatnou zkušební verzi, pamatujte, že vygenerované PDF bude obsahovat malou vodoznak „Evaluation“. + +## Krok 1: Instalace NuGet balíčku Aspose.Words + +Než napíšeme jakýkoli C# kód, je třeba přidat knihovnu Aspose.Words do projektu. + +```bash +dotnet add package Aspose.Words +``` + +Spuštěním příkazu se stáhne `Aspose.Words.dll` a zpřístupní se potřebné jmenné prostory. Tento krok je nezbytný, protože třída `PdfSaveOptions` se nachází právě v tomto balíčku. + +## Krok 2: Načtení zdrojového souboru DOCX + +Prvním logickým krokem je načíst Word dokument, který chcete transformovat. Představte si to jako otevření knihy před tím, než začnete upravovat její stránky. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Proč je to důležité:** Načtení dokumentu vytvoří v‑paměti reprezentaci, která zahrnuje všechny styly, obrázky a metadata. Pokud je soubor poškozený, `Document` vyhodí výjimku – proto je vhodné tento kód obalit do `try/catch` bloku v produkčním prostředí. + +## Krok 3: Nastavení možností uložení PDF pro přístupnost + +Aspose.Words vám umožňuje specifikovat úroveň souladu PDF. PDF/UA‑1 je původní standard přístupnosti, zatímco PDF/UA‑2 přidává několik nových značek. Vyberte ten, který odpovídá požadavkům vašeho klienta. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Co dělá „Compliance“:** Nastavením `PdfCompliance.PdfUax1` říkáte Aspose.Words, aby vložil správné značky, logické pořadí čtení a alternativní texty k obrázkům – přesně to, co hledá software pro čtení obrazovky. + +## Krok 4: Uložení dokumentu jako přístupné PDF + +Teď už je těžká část za námi; jednoduše instruujeme Aspose.Words, aby pomocí dříve definovaných možností zapsal PDF soubor. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Po provedení tohoto řádku najdete `output.pdf` ve zvoleném adresáři. Otevřete jej v Adobe Acrobat Reader a zkontrolujte **File → Properties → Description → PDF/A and PDF/UA**, abyste ověřili soulad. + +## Krok 5: Ověření přístupnosti (volitelné, ale doporučené) + +I když kód garantuje výstup s označeným PDF, rychlá manuální kontrola pomůže odhalit případný vlastní obsah, který může vyžadovat další úpravy. + +1. Otevřete `output.pdf` v Adobe Acrobat Pro. +2. Zvolte **Tools → Accessibility → Full Check**. +3. Spusťte kontrolu a projděte případná varování (např. chybějící alt text u vlastních obrázků). + +Pokud zpráva neobsahuje žádné chyby, úspěšně jste **vytvořili přístupné PDF**, které splňuje standard PDF/UA‑1. + +## Běžné varianty a okrajové případy + +### Převod více DOCX souborů ve smyčce + +Pokud máte dávku dokumentů, zabalte logiku načtení‑uložení do `foreach` smyčky. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Přepnutí na PDF/UA‑2 + +Stačí změnit enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Práce s vlastními písmy + +Pokud váš DOCX používá písma, která nejsou nainstalována na serveru, vložte je: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Vložení zaručuje, že PDF bude vypadat stejně na jakémkoli počítači – klíčový detail, když **exportujete docx do pdf** pro externí partnery. + +## Kompletní funkční příklad + +Níže je kompletní, připravený program, který spojuje všechny části dohromady. Zkopírujte jej do konzolové aplikace, upravte cesty a stiskněte **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Očekávaný výsledek:** Soubor pojmenovaný `output.pdf`, který se otevře v libovolném PDF prohlížeči, nese správné značky přístupnosti a může být sdílen s uživateli, kteří spoléhají na asistenční technologie. + +![Příklad vytvoření přístupného PDF](/images/create-accessible-pdf.png "Snímek obrazovky ukazující dokument splňující PDF/UA‑1") + +*Alt text obrázku:* *příklad vytvoření přístupného pdf – snímek obrazovky ukazující dokument splňující PDF/UA‑1.* + +## Často kladené otázky + +- **Funguje to s .NET Core?** + Naprosto. Aspose.Words je multiplatformní, takže stejný kód běží na Windows, Linuxu i macOS. + +- **Co když můj DOCX obsahuje makra?** + Makra jsou při konverzi ignorována; do PDF se renderuje pouze viditelný obsah. + +- **Mohu přidat vlastní název PDF metadat?** + Ano – před uložením nastavte `pdfSaveOptions.Metadata.Title = "Váš vlastní název";`. + +- **Je PDF/UA‑2 široce podporováno?** + Většina moderních PDF čteček rozumí PDF/UA‑2, ale pokud cílíte na starší nástroje, držte se PDF/UA‑1. + +## Závěr + +Ukázali jsme vám, jak **vytvořit přístupné PDF** z DOCX souboru pomocí Aspose.Words, od instalace NuGet balíčku až po ověření souladu s PDF/UA. Dodržením těchto kroků můžete spolehlivě **převést Word na PDF**, **uložit Word jako PDF** a **exportovat docx do PDF** při zachování přístupnostních standardů – nezbytná dovednost pro každého vývojáře pracujícího s podnikovými dokumentovými toky. + +Jste připraveni na další výzvu? Zkuste přidat vlastní záhlaví/patičku, vložit značku PDF/A‑2b nebo automatizovat proces v ASP.NET Core web API. Možnosti jsou neomezené a základ, který jste zde postavili, vám umožní je zvládnout s jistotou. + +Šťastné kódování a ať jsou vaše PDF vždy čitelné! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/czech/net/programming-with-markdownsaveoptions/_index.md b/words/czech/net/programming-with-markdownsaveoptions/_index.md index 315442e3d0..4fa08f731a 100644 --- a/words/czech/net/programming-with-markdownsaveoptions/_index.md +++ b/words/czech/net/programming-with-markdownsaveoptions/_index.md @@ -42,6 +42,7 @@ Zpracování textu pomocí MarkdownSaveOptions je podrobný návod, který vás | [Jak exportovat Markdown z DOCX – Kompletní průvodce](./how-to-export-markdown-from-docx-complete-guide/) | Naučte se, jak exportovat Markdown z DOCX pomocí kompletního průvodce. | | [Uložení docx jako markdown s Aspose.Words – Kompletní průvodce v C#](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Naučte se, jak pomocí Aspose.Words převést soubory DOCX do formátu Markdown v kompletním průvodci v C#. | | [Uložení obrázků Word – převod Wordu do Markdownu s Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) | Naučte se ukládat obrázky z dokumentů Word a převádět je do formátu Markdown pomocí Aspose.Words pro .NET. | +| [Jak uložit obrázky – převod DOCX do Markdownu s Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Naučte se ukládat obrázky při převodu DOCX do Markdownu pomocí Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/czech/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..8506f810cf --- /dev/null +++ b/words/czech/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,243 @@ +--- +category: general +date: 2026-05-04 +description: Naučte se, jak ukládat obrázky při převodu DOCX na Markdown pomocí Aspose.Words. + Tento průvodce také ukazuje, jak extrahovat obrázky z Wordu a uložit Word jako Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: cs +og_description: Jak uložit obrázky při převodu DOCX na Markdown pomocí Aspose.Words. + Podrobný návod krok za krokem s kompletním C# kódem. +og_title: Jak uložit obrázky – převést DOCX na Markdown pomocí Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Jak uložit obrázky – převést DOCX na Markdown pomocí Aspose.Words +url: /cs/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak uložit obrázky – převod DOCX do Markdown pomocí Aspose.Words + +Už jste se někdy zamýšleli **jak uložit obrázky**, když potřebujete převést soubor Word do Markdownu? Nejste v tom sami. Mnoho vývojářů narazí na problém, že konverze vytvoří obrázky jako rozbité odkazy nebo je dokonce úplně ztratí. Dobrou zprávou je, že Aspose.Words vám poskytuje jemnou kontrolu, takže můžete extrahovat obrázky z Wordu, rozhodnout, kam je umístíte, a přitom získat čistý výstup v Markdownu. + +V tomto tutoriálu si projdeme kompletní, připravený příklad v C#, který ukazuje **jak uložit obrázky** do vyhrazené složky při převodu `.docx` na `.md`. Přitom se také dotkneme **convert docx to markdown**, **extract images from word** a širší otázky **how to convert docx**, která vám umožní **save word as markdown** bez ztráty jakýchkoli prostředků. + +## Požadavky + +- .NET 6.0 nebo novější (API funguje stejně i na .NET Framework 4.7+) +- Aktivní licence Aspose.Words nebo bezplatná zkušební verze (bezplatná verze přidá vodoznak do výstupu, ale kód funguje stejně) +- Dokument Word, který již obsahuje obrázky (např. `DocWithImages.docx`) +- Visual Studio 2022 nebo jakýkoli editor, který umí sestavit projekty C# + +> **Tip:** Pokud používáte zkušební verzi, můžete i tak testovat logiku ukládání obrázků; jen si pamatujte, že finální PDF/MD bude obsahovat zkušební vodoznak. + +## Přehled řešení + +Na vysoké úrovni proces vypadá takto: + +1. Načtěte zdrojový `.docx` pomocí `Document`. +2. Vytvořte objekt `MarkdownSaveOptions` a připojte `IResourceSavingCallback`. +3. V callbacku určete složku a název souboru pro každý obrázek. +4. Uložte dokument jako Markdown; callback zapíše každý obrázek na disk. + +To je podstata **jak uložit obrázky** během konverze. Stejný vzor funguje i pro jiné typy prostředků (fonty, CSS atd.), pokud je někdy budete potřebovat. + +## Krok 1 – Načtení DOCX obsahujícího obrázky + +Nejprve potřebujeme instanci `Document`, která ukazuje na Word soubor, který chcete převést. Nic zvláštního; jen jednoduché volání konstruktoru. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Proč je to důležité:** Načtení dokumentu je jediný okamžik, kdy Aspose parsuje Word XML, takže jakékoli chybějící fonty nebo poškozené části vyvolají výjimku právě zde – ještě před tím, než začneme ukládat obrázky. + +## Krok 2 – Nastavení MarkdownSaveOptions s callbackem pro ukládání obrázků + +Třída `MarkdownSaveOptions` vám umožní zasáhnout do procesu ukládání pomocí `ResourceSavingCallback`. Tento callback dostane objekt `ResourceSavingArgs` pro každý externí prostředek (obrázky, CSS atd.), který Aspose potřebuje zapsat. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementace callbacku + +Níže je kompletní implementace `ImageSavingCallback`. Vytvoří podadresář `Images` vedle souboru Markdown, pojmenuje každý obrázek sekvenčně (`img_0.png`, `img_1.jpg`, …) a volitelně umožní streamovat obrázek jinam (např. do cloudového bucketu). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Jak vám to pomůže:** Úpravou `args.FileName` přesně řídíte **jak uložit obrázky** – ať už do ploché složky, hierarchie podle data nebo dokonce do databázového BLOBu. Callback se spustí pro každý obrázek, takže nikdy nemusíte později Markdown soubor post‑processovat. + +## Krok 3 – Uložení dokumentu jako Markdown + +Jakmile jsou možnosti a callback připraveny, samotná konverze je jednorázový řádek. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Po dokončení řádku budete mít: + +- `Doc.md` – Markdownová reprezentace vašeho Word obsahu. +- `Images\img_0.png`, `Images\img_1.jpg`, … – každý obrázek extrahovaný z původního DOCX. + +## Kompletní, připravený příklad + +Sestavením všeho dohromady získáte samostatnou konzolovou aplikaci, kterou můžete zkopírovat a vložit do nového C# projektu. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Očekávaný výsledek + +Po spuštění programu: + +- Otevřete `C:\Docs\Doc.md` v libovolném textovém editoru. Uvidíte odkazy na obrázky ve formátu `![](Images/img_0.png)`. +- Složka `Images` bude obsahovat každý extrahovaný obrázek, pojmenovaný sekvenčně. +- Markdown soubor se správně vykreslí v jakémkoli prohlížeči, který podporuje lokální obrázky (VS Code preview, GitHub atd.). + +## Často kladené otázky (FAQ) + +### Funguje to s jinými formáty obrázků (SVG, TIFF)? + +Ano. `Path.GetExtension(args.FileName)` zachovává původní příponu, takže SVG, TIFF, BMP i EMF jsou uloženy beze změny. Jediná výhrada je, že některé Markdown renderery nemusí zobrazovat SVG inline; v takovém případě můžete SVG předem převést na PNG. + +### Co když potřebuji vložit obrázky jako Base64 místo samostatných souborů? + +Uvnitř `ResourceSaving` můžete nahradit zápis do fyzického souboru paměťovým streamem a poté ručně upravit Markdown odkaz. Aspose neexponuje přímý přepínač „embed as Base64“, ale callback vám dává plnou kontrolu nad `args.Stream`. + +### Jak se to liší od vestavěné metody `ExportImages`? + +`ExportImages` extrahuje všechny obrázky do složky **bez** generování Markdownu. Náš callback spojuje obě akce, čímž zaručuje, že názvy souborů obrázků odpovídají odkazům uvnitř `.md`. Toto sladění je klíčem k **jak uložit obrázky** správně během konverze. + +### Můžu převádět více DOCX souborů najednou? + +Určitě. Zabalte jádro logiky do smyčky `foreach (var file in Directory.GetFiles(..., "*.docx"))`, upravte výstupní cesty a znovu použijte stejný `ImageSavingCallback`. Jen nezapomeňte vytvořit čerstvé `MarkdownSaveOptions` pro každý dokument, protože `args.DestinationFileName` se mění při každé iteraci. + +## Okrajové případy a osvědčené postupy + +| Situace | Na co si dát pozor | Doporučené řešení | +|-----------|----------------------|-----------------| +| **Velký DOCX (stovky MB)** | Tlak na paměť při načítání | Použijte `LoadOptions` s `LoadFormat.Docx` a nastavte `LoadOptions.LoadFormat = LoadFormat.Docx` pro stream‑loading částí | +| **Kolize názvů obrázků** | Pokud zdroj už má `img_0.png` v cílové složce, může dojít k přepsání | Přidejte GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Složka jen pro čtení** | Ukládání vyvolá `UnauthorizedAccessException` | Zajistěte, aby proces měl potřebná oprávnění, nebo vyberte zapisovatelnou cestu | +| **Neobrázkové prostředky (CSS, fonty)** | Callback je také dostane | Ochráníte to podmínkou `if (args.ResourceType != ResourceType.Image) return;` (již ukázáno) | +| **Unicode názvy souborů** | Některé souborové systémy špatně zacházejí se znaky | Použijte `Path.GetInvalidFileNameChars()` k sanitaci `args.FileName` před přiřazením | + +## Související témata, která můžete prozkoumat dál + +- **convert docx to markdown** s vlastními styly nadpisů (použijte `MarkdownSaveOptions.ExportImagesAsBase64` pro inline obrázky) +- **extract images from word** pomocí `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/czech/net/working-with-fonts/_index.md b/words/czech/net/working-with-fonts/_index.md index aa361a1da5..9bb5a5fff0 100644 --- a/words/czech/net/working-with-fonts/_index.md +++ b/words/czech/net/working-with-fonts/_index.md @@ -52,7 +52,7 @@ Ať už chcete formátovat text pomocí různých fontů, nastavit pravidla pro | [Jak detekovat písma v Aspose.Words – Zpracování varování a nastavení](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Naučte se, jak detekovat písma, zpracovávat varování a konfigurovat nastavení písem v Aspose.Words pro .NET. | | [Jak zachytit písma v Aspose.Words – kompletní průvodce](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Naučte se, jak zachytit písma v Aspose.Words pomocí kompletního průvodce krok za krokem. | | [Povolit varování o nahrazování písem v Aspose.Words – Kompletní průvodce](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Naučte se, jak povolit varování o nahrazování písem v Aspose.Words pomocí podrobného průvodce krok za krokem. | - +| [Aspose substituce písem: Detekce chybějících písem v dokumentech Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Naučte se, jak detekovat chybějící písma v dokumentech Word pomocí Aspose.Words pro .NET. | | [Jak načíst DOCX a detekovat chybějící písma – Kompletní průvodce C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Naučte se, jak načíst soubor DOCX a zjistit chybějící písma pomocí Aspose.Words pro .NET v tomto kompletním C# průvodci. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/czech/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..8017d158a0 --- /dev/null +++ b/words/czech/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Naučte se, jak použít nahrazování fontů Aspose k detekci chybějících + fontů při načítání dokumentu Word a získání podrobností o chybějících fontech – + krok za krokem průvodce. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: cs +og_description: Ovládněte nahrazování písem v Aspose k detekci chybějících písem při + načítání dokumentu Word a získání informací o chybějících písmenech pomocí kompletního + C# kódu. +og_title: Aspose Náhrada písma – Detekce chybějících písem v dokumentech Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose náhrada písma: Detekce chybějících písem v dokumentech Word' +url: /cs/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose náhrada fontů – Detekce chybějících fontů v dokumentech Word + +Už jste se někdy zamysleli, proč dokument Word vypadá špatně na jiném počítači? Často je viníkem chybějící font a **Aspose font substitution** je nástroj, který vám umožní tyto mezery odhalit dříve, než se stanou vizuální katastrofou. V tomto tutoriálu si projdeme, jak **detekovat chybějící fonty** v okamžiku, kdy **načtete dokument Word**, a poté **získat podrobnosti o chybějících fontech**, abyste je mohli opravit nebo nahradit. + +Probereme vše od nastavení výstražného callbacku až po získání čistého seznamu chybějících fontů. Na konci budete mít připravený spustitelný úryvek C#, který vám přesně řekne, které fonty nebyly nalezeny, a pochopíte, proč je to důležité pro věrnost dokumentu. + +--- + +## Požadavky – Co potřebujete před zahájením + +- **Aspose.Words for .NET** (doporučeno v verzi v23.12 nebo novější). +- Vývojové prostředí .NET (Visual Studio, Rider nebo `dotnet` CLI). +- Ukázkový DOCX, který úmyslně používá font, který nemáte nainstalovaný – nazvěte jej `DocumentWithMissingFont.docx`. +- Základní znalost C# – nic složitého, jen schopnost spustit konzolovou aplikaci. + +Pokud vám některá z těchto položek není známá, pozastavte se a nainstalujte NuGet balíček: + +```bash +dotnet add package Aspose.Words +``` + +To je vše. Žádné extra fonty, žádné externí služby. + +--- + +## Krok 1: Načtení dokumentu Word (a spuštění kontroly fontů) + +První, co uděláte, je **načíst dokument Word**. Aspose.Words soubor parsuje a pokud nenajde odkazovaný font, zařadí varování *FontSubstitution*. Zde je kód, který načítání provádí: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Proč je to důležité:** Načtení dokumentu hned na začátku dává Aspose šanci prozkoumat každý úsek textu, styl i vložený objekt. Pokud font není nalezen v systému ani ve vlastní složce s fonty, dostanete později varování. + +--- + +## Krok 2: Připojení výstražného callbacku pro zachycení událostí náhrady + +Aspose.Words používá mechanismus callbacku, aby vás informoval o problémech, jako jsou chybějící fonty. Přiřazením implementace `IWarningCallback` k `doc.WarningCallback` můžete zachytit každé varování v reálném čase. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Tip:** Můžete připojit více callbacků (např. logování, aktualizace UI) jejich zabalením do kompozitního vzoru, ale pro tento tutoriál jeden callback stačí a udržuje věci přehledné. + +--- + +## Krok 3: Implementace callbacku pro varování o náhradě fontu + +Nyní definujeme třídu, která skutečně provádí práci. Callback přijímá objekt `WarningInfo`; filtrujeme `WarningType.FontSubstitution` a ukládáme popis pro pozdější použití. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Co se děje:** Když Aspose narazí na chybějící font, vytvoří varování typu „Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.“ Náš callback tuto řádku vytiskne a uloží. + +--- + +## Krok 4: Zpracování dokumentu (volitelné) a sběr chybějících fontů + +Pokud potřebujete jen **detekovat chybějící fonty**, stačí krok načtení – varování se spustí automaticky. Mnoho vývojářů však potřebuje **získat informace o chybějících fontech** po provedení dalších operací (např. uložení, konverze). Níže vynutíme malou operaci – uložení do PDF – aby se všechna varování vyprodukovala, a pak vyzvedneme nasbírané zprávy. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Očekávaný výstup v konzoli** (příklad): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Všimněte si, že každá řádka jasně uvádí původní font a náhradní font, který Aspose zvolil. To je podstata **aspose font substitution** reportování. + +--- + +## Krok 5: Pokročilé – Použití vlastních zdrojů fontů ke snížení náhrad + +Někdy *má* chybějící fonty, jen nejsou ve výchozí systémové složce. Aspose.Words vám umožní nasměrovat vlastní adresář pomocí `FontSettings`. Přidání tohoto kroku může dramaticky snížit počet varování o náhradě. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Proč to přidat?** Pokud distribuujete dokumenty mezi různými počítači, zabalení potřebných fontů do známé složky zajišťuje stejný vizuální vzhled všude. Také to činí vaši **detekci chybějících fontů** přesnější, protože Aspose nejprve zkontroluje tuto složku, než použije náhradní font. + +--- + +## Kompletní funkční příklad + +Sestavíme vše dohromady v jednom připraveném programu pro konzoli. Uložte jej jako `Program.cs` a spusťte pomocí `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Co byste měli vidět:** Pokud zdrojový DOCX odkazuje na fonty, které nemáte, konzole vypíše každou řádku náhrady následovanou stručným souhrnem. Pokud jsou všechny fonty přítomny, zobrazí se zpráva „No missing fonts were detected.“. + +--- + +## Časté problémy a jak se jim vyhnout + +| Problém | Proč k němu dochází | Řešení | +|-------|----------------|-----| +| **Neobjeví se žádná varování** | Dokument používá jen systémové fonty, nebo jste již přidali vlastní složku obsahující chybějící fonty. | Ověřte, že DOCX skutečně odkazuje na nedostupný font. V Wordu můžete změnit odstavec na raritní font (např. „Papyrus“). | +| **Duplicitní zprávy** | Ten samý font je použit ve více úsecích, což způsobí více varování. | Odstraňte duplicity pomocí `Distinct()`, pokud potřebujete jen jedinečnou sadu. | +| **Pokles výkonu u velkých dokumentů** | Každé varování se zpracovává na UI vlákně. | Načítání spusťte v background úkolu nebo použijte `Parallel.ForEach` pro následné zpracování. | +| **Špatný náhradní font** | Výchozí náhrada Aspose nemusí odpovídat vaší značce. | Nastavte `FontSettings.SubstitutionSettings.DefaultFontName` na preferovaný náhradní font (např. „Calibri“). | + +--- + +## Rozšíření řešení – Export chybějících fontů do JSON + +Pokud budujete webovou službu, která musí klientovi vracet informace o chybějících fontech, serializace seznamu je triviální: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Nyní může vaše API vrátit čistý JSON payload, který může spotřebovat jiný systém. + +--- + +## Závěr + +V tomto průvodci jsme ukázali **Aspose font substitution** od začátku až do konce: načtení dokumentu Word, připojení výstražného callbacku, zachycení každé události *detekce chybějících fontů* a nakonec **získání informací o chybějících fontech** pro reportování nebo nápravu. Přidáním volitelných vlastních složek s fonty můžete snížit počet náhrad a několika řádky kódu můžete dokonce exportovat výsledky jako JSON. + +Pamatujte, že vizuální integrita vašich dokumentů závisí na použitém fontu. S technikou popsanou zde už vás nikdy nepřekvapí neočekávaná náhrada. + +Jste připraveni na další krok? Zkuste integrovat tuto logiku do většího pipeline pro zpracování dokumentů, nebo prozkoumejte další funkce Aspose.Words, jako je vkládání fontů (`doc.FontSettings.EmbeddedFonts`). Možnosti jsou neomezené a vaši uživatelé vám poděkují za dokonalý výstup. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/dutch/net/ai-powered-document-processing/_index.md b/words/dutch/net/ai-powered-document-processing/_index.md index 683722b1e3..054ecc2760 100644 --- a/words/dutch/net/ai-powered-document-processing/_index.md +++ b/words/dutch/net/ai-powered-document-processing/_index.md @@ -39,9 +39,12 @@ Vergeet ten slotte niet om onze [Werken met samenvattingsopties](./working-with- | Titel | Beschrijving | | --- | --- | | [Werken met een AI-model](./working-with-ai-model/) | Leer hoe u Aspose.Words voor .NET kunt gebruiken om documenten samen te vatten met AI. Eenvoudige stappen voor het verbeteren van documentbeheer. | -| [Werken met het Google AI-model](./working-with-google-ai-model/) Verbeter uw documentverwerking met Aspose.Words voor .NET en Google AI om moeiteloos beknopte samenvattingen te maken. | +| [Werken met het Google AI-model](./working-with-google-ai-model/) | Verbeter uw documentverwerking met Aspose.Words voor .NET en Google AI om moeiteloos beknopte samenvattingen te maken. | | [Werken met een open AI-model](./working-with-open-ai-model/) | Ontgrendel efficiënte documentsamenvattingen met Aspose.Words voor .NET met de krachtige modellen van OpenAI. Duik nu in deze uitgebreide handleiding. | | [Werken met samenvattingsopties](./working-with-summarize-options/) | Leer hoe u Word-documenten effectief samenvat met Aspose.Words voor .NET met onze stapsgewijze handleiding voor het integreren van AI-modellen voor snelle inzichten. | +| [Samenvatten van Word-document in C# – Complete gids met Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Leer hoe u Word-documenten samenvat in C# met Anthropic Claude voor snelle inzichten. | +| [Hoe LLM te gebruiken met Aspose.Words – Alinea's herschrijven in C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Leer hoe u met LLM's en Aspose.Words alinea's automatisch kunt herschrijven in C# voor efficiëntere documentbewerking. | +| [Hoe grammatica te controleren in C# – Complete gids voor Word-documenten](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Leer hoe u grammatica controleert in C# voor Word-documenten met Aspose.Words, inclusief stapsgewijze voorbeelden. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/dutch/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..b5fa5be82f --- /dev/null +++ b/words/dutch/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Leer hoe je grammatica controleert in een Word‑document met C#. Deze + tutorial behandelt ook hoe je een DOCX‑bestand laadt met C# en Aspose.Words AI gebruikt + voor nauwkeurige resultaten. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: nl +og_description: Hoe controleer je grammatica in een Word‑document met C#? Volg deze + tutorial om een DOCX‑bestand te laden met C# en AI‑aangedreven grammaticacontroles + uit te voeren met Aspose.Words. +og_title: Hoe grammatica te controleren in C# – Volledige stap‑voor‑stap gids +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Hoe controleer je grammatica in C# – Complete gids voor Word‑documenten +url: /nl/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe grammatica te controleren in C# – Complete gids voor Word‑documenten + +Heb je je ooit afgevraagd **hoe je grammatica kunt controleren** in een Word‑document zonder je IDE te verlaten? Je bent niet de enige. Veel ontwikkelaars moeten door gebruikersgegenereerde rapporten, geautomatiseerde e‑mails of zelfs documentatie valideren voordat deze wordt verzonden. Het goede nieuws? Met Aspose.Words AI kun je dit programmatisch doen, en het hele proces past netjes in een typische C#‑workflow. + +In deze gids lopen we alles door wat je moet weten: van het laden van een DOCX‑bestand C# tot het aanroepen van de AI‑grammatica‑checker en het interpreteren van de resultaten. Aan het einde heb je een kant‑klaar fragment dat de ernst, het bericht en de voorgestelde vervanging van elk probleem afdrukt – geen handmatig kopiëren‑plakken meer nodig. + +## Wat je zult leren + +- **Hoe je grammatica kunt controleren** in een Word‑document met Aspose.Words AI. +- De exacte stappen om **een DOCX‑bestand C# te laden** met de `Document`‑klasse. +- Hoe je het `GrammarCheckResult`‑object afhandelt, over problemen itereert en nuttige diagnostiek output. +- Veelvoorkomende valkuilen (zoals ontbrekende licenties) en tips om de oplossing productieklaar te maken. + +> **Voorvereisten:** .NET 6.0+ (of .NET Framework 4.6+), Visual Studio 2022 (of elke IDE die je verkiest), en een Aspose.Words for .NET‑licentie (de gratis proefversie werkt voor testen). Als je de NuGet‑pakketten nog niet hebt geïnstalleerd, voer dan uit: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Nu, laten we erin duiken. + +## Stap 1: Een DOCX‑bestand laden in C# + +Voordat er grammatica‑controle kan plaatsvinden, moet het document in het geheugen worden geladen. Aspose.Words maakt hiervan een één‑regel‑code, maar er zijn een paar nuances die het vermelden waard zijn. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Waarom dit belangrijk is:** +- Het gebruik van `Path.Combine` zorgt voor cross‑platform compatibiliteit. +- De bestaan‑check voorkomt een runtime‑crash die anders de echte grammatica‑controle‑logica zou verbergen. +- Wanneer je **een DOCX‑bestand C# laadt**, parseert Aspose alle stijlen, kop‑ en voetteksten, en zelfs verborgen tekst, waardoor de AI een volledig beeld van het document krijgt. + +> **Pro tip:** Als je met streams moet werken (bijv. bestanden die via een web‑upload binnenkomen), kun je de aanroep `new Document(docPath)` vervangen door `new Document(stream)`. + +## Stap 2: Het AI‑model kiezen voor grammatica‑controle + +Aspose.Words AI ondersteunt verschillende modellen, van lichte lokale tot cloud‑gebaseerde GPT‑varianten. Voor de meeste scenario's biedt **GPT‑3.5 Turbo** een goede balans tussen snelheid en nauwkeurigheid. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Waarom kiezen voor GPT‑3.5 Turbo?** +- Het is snel genoeg voor batch‑verwerking van tientallen bestanden per minuut. +- De kosten (als je een betaald abonnement hebt) zijn lager dan GPT‑4, terwijl het nog steeds de meeste veelvoorkomende fouten oppikt. +- De API handelt token‑limieten automatisch af, zodat je enorme documenten niet handmatig hoeft te splitsen. + +Als je de voorkeur geeft aan een offline aanpak, vervang dan `AiModelType.Gpt35Turbo` door `AiModelType.Local` (vereist het optionele offline model‑pakket). + +## Stap 3: Over problemen itereren en nuttige feedback weergeven + +Het `GrammarCheckResult` bevat een collectie van `GrammarIssue`‑objecten. Elk probleem geeft je een ernst, een menselijk leesbaar bericht en een voorgestelde vervanging. Laten we ze netjes afdrukken. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Wat de velden betekenen:** +- `Severity` – meestal `Info`, `Warning` of `Error`. Beschouw `Error` als een must‑fix vóór publicatie. +- `Message` – een beknopte beschrijving van het probleem (bijv. “Subject‑verb agreement”). +- `SuggestedReplacement` – de door de AI aanbevolen correctie; je kunt deze automatisch toepassen als je het model vertrouwt, of aan een menselijke reviewer tonen. + +> **Randgeval:** Sommige problemen kunnen een lege `SuggestedReplacement` hebben (bijv. stijlsuggesties). Markeer in die gevallen de locatie voor handmatige controle. + +## Volledig werkend voorbeeld + +Alles bij elkaar genomen, hier is een zelfstandige console‑app die je kunt kopiëren‑plakken in een nieuw .NET‑project. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Verwachte output (voorbeeld):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Als je het programma uitvoert tegen een schoon document, zie je in plaats daarvan de regel “✅ No grammar issues detected.”. + +## Veelvoorkomende valkuilen behandelen + +| Probleem | Waarom het gebeurt | Snelle oplossing | +|----------|-------------------|------------------| +| **LicenseException** | Aspose‑bibliotheken vereisen een geldige licentie voor productiegebruik. | Voeg `License license = new License(); license.SetLicense("Aspose.Words.lic");` toe aan het begin van `Main`. | +| **Network timeout** | Het AI‑model‑verzoek bereikt de cloud en overschrijdt de standaard timeout van 100 s. | Verhoog de timeout via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` vóór het aanroepen van `CheckGrammar`. | +| **Large documents (> 10 MB)** | Sommige cloud‑modellen knippen de invoer af. | Splits het document in secties met `document.Sections` en voer per sectie controles uit, daarna de resultaten aggregeren. | +| **Missing suggestions** | Het model kon geen vervanging genereren (bijv. dubbelzinnige formulering). | Log het probleem voor handmatige controle; pas lege suggesties niet automatisch toe. | + +## De oplossing uitbreiden + +- **Automatisch repareren:** Loop door `grammarResult.Issues` en vervang tekst met `document.Range.Replace`. Zorg ervoor dat je eerst een back‑up van het originele bestand maakt. +- **Batch‑verwerking:** Wikkel de volledige flow in een `foreach` over een map met DOCX‑bestanden. Sla elk rapport op als een JSON‑bestand voor latere analyse. +- **Integreren met ASP.NET:** Bied een endpoint aan dat een geüpload DOCX accepteert, de controle uitvoert en een JSON‑payload met problemen retourneert. + +## Image Illustration + +diagram van hoe grammatica te controleren + +*Het diagram hierboven visualiseert het drie‑stappen‑proces: DOCX laden → AI‑grammatica‑check uitvoeren → problemen outputten.* + +## Conclusie + +We hebben behandeld **hoe je grammatica kunt controleren** in een Word‑document met C#, de exacte code getoond om **een DOCX‑bestand C# te laden**, en laten zien hoe je de AI‑gegenereerde feedback moet interpreteren. Met Aspose.Words AI krijg je een krachtige, cloud‑ondersteunde grammaticamotor die naadloos integreert in elke .NET‑applicatie. + +Volgende stappen? Probeer de fix‑apply‑lus te automatiseren, experimenteer met het nieuwere `AiModelType.Gpt4` voor nog scherpere suggesties, of combineer dit met een spellings‑check‑bibliotheek voor een volledige proeflees‑pipeline. De mogelijkheden zijn praktisch eindeloos, en je hebt nu een solide basis om op voort te bouwen. + +Heb je vragen of loop je tegen een lastig randgeval aan? Laat een reactie achter hieronder, en happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/dutch/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/dutch/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..159cefbdd0 --- /dev/null +++ b/words/dutch/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Hoe je LLM gebruikt om documenten te bewerken met Aspose – leer alinea‑tekst + te vervangen, verbinding te maken met een lokale LLM en tekst te herschrijven met + AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: nl +og_description: Hoe je LLM gebruikt om documenten te bewerken met Aspose. Deze gids + laat zien hoe je verbinding maakt met een lokale LLM, alinea‑tekst vervangt en tekst + herschrijft met AI. +og_title: Hoe LLM te gebruiken met Aspose.Words – Paragrafen herschrijven in C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Hoe LLM te gebruiken met Aspose.Words – Alinea’s herschrijven in C# +url: /nl/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe LLM te gebruiken met Aspose.Words – Alinea’s herschrijven in C# + +Heb je je ooit afgevraagd **hoe je LLM** kunt gebruiken om een Word‑document te polijsten zonder het handmatig te openen? Je bent niet de enige. Veel ontwikkelaars lopen tegen een muur aan wanneer ze *alinea‑tekst* programmatically moeten vervangen, maar geen nette AI‑gedreven workflow hebben. + +In deze tutorial verbinden we een lokaal large language model, voeren we een fragment uit een `.docx`‑bestand in, vragen we het om **tekst te herschrijven met AI**, en slaan we uiteindelijk het bijgewerkte document op — allemaal met Aspose.Words. Aan het einde heb je een kant‑klaar C# console‑applicatie die de volledige pijplijn demonstreert. + +> **Wat je krijgt:** een compleet, uitvoerbaar voorbeeld, uitleg van elke stap, tips voor randgevallen, en ideeën om de oplossing uit te breiden. + +## Wat je nodig hebt + +- **.NET 6+** (of .NET Framework 4.7.2 – de code werkt op beide) +- **Aspose.Words for .NET** (NuGet‑pakket `Aspose.Words`) +- Een **local LLM server** die een eenvoudige HTTP `/generate`‑endpoint blootstelt (bijv. Ollama, LMStudio, of een aangepaste Flask‑service) +- Een basiskennis van C# en HTTP‑clientcode + +Er zijn geen extra SDK's nodig; alles anders zit in de code die we samen gaan schrijven. + +## Stap 1: Hoe LLM te gebruiken om alinea‑tekst te vervangen + +Het eerste wat we moeten doen is de alinea identificeren die we willen aanpassen. Aspose.Words maakt dit een fluitje van een cent door een rijk objectmodel bloot te stellen. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Waarom dit belangrijk is:** +Het selecteren van de juiste node voorkomt dat je per ongeluk koppen of tabellen overschrijft. Door de **replace paragraph text**‑aanpak te gebruiken, behouden we de documentstructuur intact terwijl we alleen de inhoud aanpassen die ons interesseert. + +> **Pro tip:** Als je document secties met variabele lengte heeft, gebruik dan `document.GetChildNodes(NodeType.Paragraph, true)` en LINQ om een alinea te vinden op basis van zijn tekst of stijl. + +## Stap 2: Verbinden met een lokale LLM‑endpoint + +Nu we de tekst hebben, moeten we deze naar de LLM sturen. Het voorbeeld gebruikt een eenvoudige wrapper‑klasse `LocalLargeLanguageModel` die de HTTP‑logica verbergt. Voel je vrij om deze te vervangen door `HttpClient`‑aanroepen als je dat liever hebt. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Waarom we op deze manier verbinden:** +Een **connect to local llm**‑opstelling elimineert latentie, houdt gegevens on‑premise, en voorkomt API‑kosten. De wrapper maakt de latere code ook schoner, zodat we ons kunnen concentreren op de **rewrite text using ai**‑logica. + +## Stap 3: Tekst herschrijven met AI met Aspose.Words + +Met de alinea‑tekst in de hand en de LLM gereed, stellen we een prompt op die het model precies vertelt wat we willen — herschrijven in een formele toon. Je kunt de prompt aanpassen voor andere stijlen (vriendelijk, technisch, enz.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Waarom dit werkt:** +LLM’s zijn prompt‑gedreven; expliciete instructies geven (“Rewrite … in a formal tone”) levert consistente resultaten op. De **rewrite text using ai**‑stap is het hart van de tutorial – het laat zien hoe AI direct in document‑workflows kan worden ingebed. + +## Stap 4: Het document bewerken en wijzigingen opslaan + +Nu vervangen we de oorspronkelijke runs door de nieuwe inhoud. Aspose.Words slaat tekst op in `Run`‑objecten, dus eerst wissen voorkomt achtergebleven opmaak‑artefacten. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Opmerking voor randgevallen:** +Als de oorspronkelijke alinea gemengde opmaak (vet, cursief) bevatte, wil je mogelijk de stijlen behouden. Maak in dat geval een nieuwe `Run`, kopieer de oorspronkelijke `Font`‑instellingen, en stel vervolgens de `Text` in op `revisedText`. + +## Volledig werkend voorbeeld + +Hieronder staat het volledige programma dat je kunt kopiëren‑en‑plakken in een console‑project. Vergeet niet eerst het Aspose.Words‑NuGet‑pakket te installeren (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Verwachte output + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Open `output.docx` – je zult zien dat de derde alinea nu de gepolijste versie bevat. + +## Veelgestelde vragen & valkuilen + +| Question | Answer | +|----------|--------| +| **Wat als mijn LLM JSON retourneert met extra velden?** | Pas `GenerateText` aan om de juiste eigenschap te deserialiseren of parse de respons handmatig. | +| **Kan ik meerdere alinea's tegelijk verwerken?** | Ja – iterate over `document.FirstSection.Body.Paragraphs` en pas dezelfde prompt‑logica toe, eventueel een alinea‑index aan de prompt toevoegen voor context. | +| **Gebruikt mijn LLM‑server authenticatie?** | Voeg een header toe aan de `HttpClient` vóór de POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Opmaak gaat verloren na vervanging.** | Behoud de oorspronkelijke `Run.Font`‑instellingen: maak een nieuwe `Run`, kopieer `originalRun.Font.Clone()`, en stel vervolgens de `Text` in. | +| **De LLM retourneert soms lege strings.** | Implementeer een fallback – als `revisedText.Trim().Length == 0`, behoud dan de oorspronkelijke tekst of probeer opnieuw met een eenvoudigere prompt. | + +## De oplossing uitbreiden + +Nu je **how to use llm** voor een enkele alinea onder de knie hebt, overweeg dan de volgende stappen: + +- **Batch processing:** Loop door elke alinea en herschrijf in een gekozen stijl (bijv. “maak alle tekst beknopt”). +- **Style‑aware rewriting:** Geef de oorspronkelijke alinea‑stijlnamen door in de prompt zodat de LLM koppen versus body‑tekst respecteert. +- **Integration with a CI pipeline:** Automatiseer het polijsten van documenten als onderdeel van een documentatie‑buildproces. +- **Alternative prompts:** Probeer “summarize this paragraph” of “translate this paragraph to Spanish” om de volledige kracht van **rewrite text using ai** te verkennen. + +## Conclusie + +We hebben de volledige stroom van **how to use llm** met Aspose.Words doorlopen: een document laden, **connect to local llm**, een alinea extraheren, **rewrite text using ai**, **replace paragraph text**, en uiteindelijk het resultaat opslaan. De code is zelf‑containend, werkt direct, en laat een praktische manier zien om AI te combineren met traditionele documentautomatisering. + +Probeer het, pas de prompts aan, en laat + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/dutch/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/dutch/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..11a3d2d9a1 --- /dev/null +++ b/words/dutch/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Vat Word‑documenten snel samen en vertaal tekst met Google. Leer hoe + je Anthropic Claude gebruikt, een samenvatting maakt van een rapport, en tekst vertaalt + met Google in één C#‑tutorial. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: nl +og_description: Vat Word-document direct samen en vertaal tekst met Google. Deze gids + laat zien hoe je Anthropic Claude en Aspose.Words kunt gebruiken om een samenvatting + van een rapport te maken. +og_title: Samenvatten van Word‑document in C# – Stap‑voor‑stap met Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Word-document samenvatten in C# – Complete gids met Anthropic Claude +url: /nl/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Samenvatten van Word-document in C# – Complete gids met Anthropic Claude + +Heb je ooit een **samenvatten van een Word-document** nodig gehad maar zat je vast met het jongleren met API's en omslachtige code? Je bent niet alleen. In veel projecten—jaarrapporten, juridische stukken of onderzoeksartikelen—het extraheren van een beknopt overzicht is een dagelijks pijnpunt. Gelukkig maakt de combinatie van Aspose.Words en Anthropic Claude het een fluitje van een cent, en je kunt zelfs een snelle Google‑vertaling toevoegen terwijl je er toch mee bezig bent. + +In deze tutorial lopen we alles door wat je moet weten: een groot .docx laden, het Claude V2‑model aanroepen om een samenvatting te genereren, een zin vertalen met Google, en de meest voorkomende valkuilen afhandelen. Aan het einde kun je **een samenvatting van een rapport maken** met slechts een paar regels C#. + +## Vereisten + +- .NET 6+ (of .NET Core 3.1) geïnstalleerd +- Een Aspose.Words voor .NET-licentie (of een gratis proefversie) +- Toegang tot de Anthropic Claude V2 API (je hebt een API‑sleutel nodig) +- Internetverbinding voor Google Translator +- Visual Studio 2022 of je favoriete C#‑IDE + +Geen extra NuGet‑pakketten zijn vereist naast `Aspose.Words` en `Aspose.Words.AI`; de vertaler‑klasse wordt meegeleverd met dezelfde bibliotheek. + +## Stap 1 – Laad het bron‑Word‑document + +Het eerste wat we moeten doen is het .docx‑bestand in het geheugen laden. Aspose.Words maakt dit eenvoudig en dankzij de robuuste parser werkt het met complexe lay-outs, tabellen en zelfs ingesloten afbeeldingen. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Waarom dit belangrijk is:** Het document vroegtijdig laden stelt je in staat eigenschappen (auteur, woordtelling) te inspecteren en te bepalen of een samenvatting zelfs nodig is. Grote bestanden > 10 MB kunnen veel geheugen verbruiken, dus overweeg `LoadOptions` met `LoadFormat.Docx` als je prestatieproblemen ondervindt. + +## Stap 2 – Samenvatten van het document met Anthropic Claude + +Nu komt het leuke deel: we geven het document door aan Claude V2. De `Summarizer`‑klasse abstraheert de HTTP‑aanroep, token‑afhandeling en retries. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Hoe het werkt:** +> 1. **Chunking** – Aspose splitst automatisch het document in beheersbare stukken (≈ 2 KB elk) om binnen de token‑limieten van Claude te blijven. +> 2. **Prompt engineering** – De bibliotheek stuurt een prompt zoals “Provide a concise executive summary of the following text:” gevolgd door elk stuk. +> 3. **Aggregation** – Claude retourneert gedeeltelijke samenvattingen die aan elkaar worden gekoppeld tot de uiteindelijke `summaryText`. + +### Randgevallen & Tips + +- **Zeer grote rapporten** (> 100 pagina's) kunnen het contextvenster van Claude overschrijden. Als je verkorte output ziet, stel `SummarizerOptions.MaxChunkSize` in op kleinere waarden. +- **Bron in een andere taal dan Engels** – Claude werkt het beste met Engels; voor andere talen eerst vertalen (zie Stap 4) en daarna samenvatten. +- **Rate limits** – Anthropic legt per‑minuut limieten op. Plaats de aanroep in een retry‑lus met exponentiële back‑off als je een `429`‑respons krijgt. + +## Stap 3 – Verifieer de samenvatting + +Voordat we doorgaan, is het een goede gewoonte om te controleren of de samenvatting niet leeg is en voldoet aan de lengte‑verwachtingen (bijv. 5‑10 % van het oorspronkelijke aantal woorden). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Als de verhouding te laag lijkt (< 2 %), wil je misschien de eigenschap `SummarizerOptions.SummaryLength` aanpassen om een langere output aan te vragen. + +## Stap 4 – Tekst vertalen met Google + +Nu we een heldere Engelse samenvatting hebben, laten we een snelle vertaling toevoegen. De `Translator`‑klasse gebruikt Google's openbare vertaal‑endpoint (geen API‑sleutel vereist voor korte zinnen, maar voor productie moet je overstappen op de betaalde Cloud Translation API). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Waarom Google?** Het is snel, breed ondersteund, en het gratis endpoint verwerkt korte strings zonder authenticatie. Voor bulk‑vertalingen, batch de oproepen en respecteer de gebruikslimieten van Google. + +### De volledige samenvatting vertalen (optioneel) + +Als je de volledige samenvatting in het Spaans (of een andere taal) nodig hebt, geef dan `summaryText` door aan `Translator.Translate`. Houd rekening met de limiet van 5 KB per verzoek; je moet de samenvatting mogelijk in kleinere stukken splitsen. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Stap 5 – Sla de samenvatting op in een Word‑bestand (bonus) + +Vaak verwacht de eindgebruiker een downloadbaar document in plaats van console‑output. Laten we een nieuw `.docx`‑bestand maken dat zowel de Engelse als de Spaanse versie bevat. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Praktische tip + +Wanneer je de samenvatting in een nieuw Word‑bestand opneemt, houd de oorspronkelijke opmaak minimaal (gebruik `Normal`‑stijl). Complexe stijlen uit de bron kunnen onverwachte lay‑outverschuivingen veroorzaken. + +## Volledig werkend voorbeeld + +Hieronder staat het **volledige, kant‑klaar‑te‑kopiëren‑en‑plakken** programma dat alles samenbrengt. Het compileert met een enkele `dotnet run` nadat je de Aspose‑pakketten hebt toegevoegd. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Verwachte console‑output** (afgekapt voor beknoptheid): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Veelgestelde vragen + +| Vraag | Antwoord | +|----------|--------| +| *Kan ik een ander AI‑model gebruiken?* | Ja. Vervang `SummarizerModel.AnthropicClaudeV2` door `SummarizerModel.OpenAIGPT4` (vereist een OpenAI‑sleutel) of een andere provider die in de enum staat. | +| *Wat als het document beveiligde secties bevat?* | Aspose zal een `ProtectedDocumentException` werpen. Ontgrendel het eerst met `LoadOptions.Password` of vraag een onbeveiligde kopie aan. | +| *Heb ik een betaalde Aspose‑licentie nodig voor productie?* | De gratis proefversie werkt tot 20 pagina's. Voor grotere rapporten verwijdert een licentie de paginalimiet en voegt prestatie‑optimalisaties toe. | +| *Is de Google‑vertaler betrouwbaar voor grote blokken?* | Voor korte strings is het prima. Voor bulk‑vertaling, schakel over naar de Cloud Translation API om verzoek‑grootte‑limieten te vermijden en betere taalherkenning te krijgen. | + +## Conclusie + +We hebben zojuist **samenvatten van een Word-document** gedaan met Aspose.Words samen met het Anthropic Claude V2‑model, vervolgens **tekst vertalen met Google** naar + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/dutch/net/basic-conversions/_index.md b/words/dutch/net/basic-conversions/_index.md index c69db7f2a6..f763773245 100644 --- a/words/dutch/net/basic-conversions/_index.md +++ b/words/dutch/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Basisconversies begeleidt u door basisdocumentconversies met behulp van de Aspos | [Hoe LaTeX vanuit Word exporteren – Stapsgewijze handleiding](./how-to-export-latex-from-word-step-by-step-guide/) | Leer hoe u LaTeX vanuit Word kunt exporteren met Aspose.Words voor .NET in een stapsgewijze handleiding. | | [Word opslaan als PDF met Aspose.Words – Complete C#-gids](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Leer hoe u Word-documenten naar PDF converteert met Aspose.Words in C# met een volledige stap‑voor‑stap gids. | | [Docx opslaan als PDF met Aspose.Words – Complete C#-gids](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Leer hoe u een DOCX-bestand opslaat als PDF met Aspose.Words in C#, stap‑voor‑stap met voorbeeldcode. | +| [Maak een toegankelijke PDF van DOCX in C# – Hoe Word naar PDF te converteren](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Leer hoe u met C# en Aspose.Words een toegankelijke PDF maakt van een DOCX-bestand. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/dutch/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..73766141f4 --- /dev/null +++ b/words/dutch/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Maak een toegankelijke PDF van een DOCX‑bestand in C#. Leer hoe je Word + naar PDF converteert, Word opslaat als PDF en een docx exporteert naar PDF met naleving + van toegankelijkheidsnormen. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: nl +og_description: Maak een toegankelijke PDF van een DOCX‑bestand in C#. Volg deze stapsgewijze + tutorial om Word naar PDF te converteren, Word op te slaan als PDF en docx naar + PDF te exporteren met volledige toegankelijkheid. +og_title: Maak een toegankelijke PDF van DOCX in C# – Snelle gids +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Maak een toegankelijke PDF van DOCX in C# – Hoe Word naar PDF te converteren +url: /nl/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Maak Toegankelijke PDF van DOCX in C# – Hoe Word naar PDF te Converteren + +Heb je ooit een **toegankelijke PDF** moeten maken van een Word‑document, maar wist je niet welke bibliotheek je kon vertrouwen? Je bent niet de enige—veel ontwikkelaars lopen tegen hetzelfde obstakel aan wanneer ze moeten voldoen aan de PDF/UA‑normen voor toegankelijkheid. Het goede nieuws is dat je met Aspose.Words een `.docx` kunt omzetten naar een conforme PDF met slechts een paar regels code, en je krijgt een bestand dat schermlezers daadwerkelijk kunnen lezen. + +In deze tutorial lopen we alles door wat je moet weten om **Word naar PDF te converteren**, **Word als PDF op te slaan**, en zelfs **docx naar PDF te exporteren** met PDF/UA‑1 (of PDF/UA‑2) conformiteit. Aan het einde heb je een kant‑klaar C#‑fragment, begrijp je waarom elke instelling belangrijk is, en ben je uitgerust om veelvoorkomende randgevallen zoals ontbrekende lettertypen of aangepaste paginainstellingen af te handelen. + +## Prerequisites + +- .NET 6.0 of later (de code werkt ook met .NET Framework 4.6+) +- Een Aspose.Words for .NET licentie (of een gratis evaluatiesleutel) +- Een basisbegrip van C# en Visual Studio (of een IDE naar keuze) +- Een DOCX‑bestand dat je toegankelijk wilt maken (we noemen het `input.docx`) + +> **Pro tip:** Als je de gratis proefversie gebruikt, onthoud dan dat de gegenereerde PDF een klein “Evaluation” watermerk zal bevatten. + +## Step 1: Install Aspose.Words NuGet Package + +Voordat we enige C#‑code kunnen schrijven, moet de Aspose.Words‑bibliotheek aan het project worden toegevoegd. + +```bash +dotnet add package Aspose.Words +``` + +Het uitvoeren van het commando herstelt de `Aspose.Words.dll` en maakt de namespaces beschikbaar. Deze stap is essentieel omdat de `PdfSaveOptions`‑klasse zich in dat pakket bevindt. + +## Step 2: Load the Source DOCX File + +De eerste logische stap is het laden van het Word‑document dat je wilt transformeren. Beschouw dit als het openen van een boek voordat je de pagina's gaat bewerken. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Waarom dit belangrijk is:** Het laden van het document creëert een in‑memory representatie die alle stijlen, afbeeldingen en metadata bevat. Als het bestand corrupt is, zal `Document` een uitzondering gooien—dus je wilt dit wellicht in een try/catch‑blok plaatsen voor productiecodel. + +## Step 3: Configure PDF Save Options for Accessibility + +Aspose.Words laat je het PDF‑conformiteitsniveau specificeren. PDF/UA‑1 is de oorspronkelijke toegankelijkheidsstandaard, terwijl PDF/UA‑2 een paar nieuwere tags toevoegt. Kies degene die past bij de eisen van je klant. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Wat “Compliance” doet:** Het instellen van `PdfCompliance.PdfUax1` vertelt Aspose.Words om de juiste tags, logische leesvolgorde en alternatieve tekst voor afbeeldingen in te sluiten—exact wat screen‑reader‑software zoekt. + +## Step 4: Save the Document as an Accessible PDF + +Nu is het zware werk gedaan; we instrueren simpelweg Aspose.Words om het PDF‑bestand te schrijven met de opties die we zojuist hebben gedefinieerd. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Nadat deze regel is uitgevoerd, vind je `output.pdf` in de opgegeven map. Open het in Adobe Acrobat Reader en controleer **File → Properties → Description → PDF/A and PDF/UA** om de conformiteit te verifiëren. + +## Step 5: Verify Accessibility (Optional but Recommended) + +Hoewel de code een getagde PDF‑output garandeert, helpt een snelle handmatige controle om eventuele aangepaste inhoud die extra aandacht vereist te ontdekken. + +1. Open `output.pdf` in Adobe Acrobat Pro. +2. Ga naar **Tools → Accessibility → Full Check**. +3. Voer de controle uit en bekijk eventuele waarschuwingen (bijv. ontbrekende alt‑tekst voor aangepaste afbeeldingen). + +Als het rapport geen fouten toont, heb je met succes een **toegankelijke PDF** gemaakt die voldoet aan de PDF/UA‑1‑normen. + +## Common Variations & Edge Cases + +### Converting Multiple DOCX Files in a Loop + +Als je een batch documenten hebt, wikkel je de laad‑opsla‑logica in een `foreach`‑loop. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Switching to PDF/UA‑2 + +Verander simpelweg de `Compliance`‑enum: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Handling Custom Fonts + +Als je DOCX lettertypen gebruikt die niet op de server geïnstalleerd zijn, embed ze dan: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Embedding garandeert dat de PDF er op elke machine hetzelfde uitziet—een cruciaal detail wanneer je **docx naar pdf exporteert** voor externe belanghebbenden. + +## Full Working Example + +Hieronder staat het volledige, kant‑klaar programma dat alle onderdelen samenbrengt. Kopieer‑plak het in een console‑app, pas de paden aan, en druk op **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** Een bestand genaamd `output.pdf` dat opent in elke PDF‑viewer, de juiste toegankelijkheidstags bevat, en kan worden gedeeld met gebruikers die afhankelijk zijn van assistieve technologie. + +![Maak toegankelijke PDF voorbeeld](/images/create-accessible-pdf.png "Screenshot van een PDF/UA‑1 conforme document") + +*Afbeeldingsalt‑tekst:* *maak toegankelijke pdf voorbeeld – screenshot van een PDF/UA‑1 conforme document geopend in Adobe Acrobat.* + +## Frequently Asked Questions + +- **Werkt dit met .NET Core?** + Absoluut. Aspose.Words is cross‑platform, dus dezelfde code werkt op Windows, Linux en macOS. + +- **Wat als mijn DOCX macro's bevat?** + Macro's worden genegeerd tijdens de conversie; alleen de zichtbare inhoud wordt naar de PDF gerenderd. + +- **Kan ik een aangepaste PDF‑metadata‑titel toevoegen?** + Ja—stel `pdfSaveOptions.Metadata.Title = "Your Custom Title";` in vóór het opslaan. + +- **Wordt PDF/UA‑2 breed ondersteund?** + De meeste moderne PDF‑lezers begrijpen PDF/UA‑2, maar als je oudere tools target, houd dan PDF/UA‑1. + +## Conclusion + +We hebben je net laten zien hoe je een **toegankelijke PDF** maakt van een DOCX‑bestand met Aspose.Words, van het installeren van het NuGet‑pakket tot het verifiëren van PDF/UA‑conformiteit. Door deze stappen te volgen kun je betrouwbaar **Word naar PDF converteren**, **Word als PDF opslaan**, en **docx naar PDF exporteren** terwijl je voldoet aan toegankelijkheidsnormen—een onmisbare vaardigheid voor elke ontwikkelaar die werkt aan enterprise‑document‑pijplijnen. + +Klaar voor de volgende uitdaging? Probeer een aangepaste header/footer toe te voegen, een PDF/A‑2b‑tag te embedden, of het proces te automatiseren in een ASP.NET Core web‑API. De mogelijkheden zijn eindeloos, en de basis die je hier hebt gelegd stelt je in staat ze met vertrouwen aan te pakken. + +Veel plezier met coderen, en moge je PDF's altijd leesbaar zijn! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/dutch/net/programming-with-markdownsaveoptions/_index.md b/words/dutch/net/programming-with-markdownsaveoptions/_index.md index 968053bfaa..4e72b1eeae 100644 --- a/words/dutch/net/programming-with-markdownsaveoptions/_index.md +++ b/words/dutch/net/programming-with-markdownsaveoptions/_index.md @@ -72,6 +72,8 @@ Leer hoe u afbeeldingen een nieuwe naam geeft tijdens het converteren van DOCX n ### [Opslaan van Word-afbeeldingen – Converteer Word naar Markdown met Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) +### [Hoe afbeeldingen opslaan – Converteer DOCX naar Markdown met Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/dutch/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..5abe81e62c --- /dev/null +++ b/words/dutch/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Leer hoe je afbeeldingen kunt opslaan tijdens het converteren van een + DOCX naar Markdown met Aspose.Words. Deze gids laat ook zien hoe je afbeeldingen + uit Word kunt extraheren en Word als Markdown kunt opslaan. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: nl +og_description: Hoe afbeeldingen opslaan tijdens het converteren van een DOCX naar + Markdown met Aspose.Words. Stapsgewijze handleiding met volledige C#-code. +og_title: Hoe afbeeldingen opslaan – DOCX converteren naar Markdown met Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Hoe afbeeldingen opslaan – DOCX converteren naar Markdown met Aspose.Words +url: /nl/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe afbeeldingen op te slaan – DOCX converteren naar Markdown met Aspose.Words + +Heb je je ooit afgevraagd **hoe je afbeeldingen kunt opslaan** wanneer je een Word‑bestand naar Markdown moet omzetten? Je bent niet de enige. Veel ontwikkelaars lopen tegen een muur aan wanneer de conversie afbeeldingen in een wirwar van kapotte links plaatst, of nog erger—ze volledig verliest. Het goede nieuws is dat Aspose.Words je fijnmazige controle geeft, zodat je afbeeldingen uit Word kunt extraheren, kunt bepalen waar ze terechtkomen, en toch een schone Markdown‑output krijgt. + +In deze tutorial lopen we een compleet, kant‑klaar C#‑voorbeeld door dat laat zien **hoe je afbeeldingen kunt opslaan** in een speciale map terwijl we een `.docx` naar `.md` converteren. Onderweg behandelen we ook **convert docx to markdown**, **extract images from word**, en de bredere vraag **how to convert docx** op een manier die je **save word as markdown** laat doen zonder enige assets te verliezen. + +## Vereisten + +- .NET 6.0 of later (de API werkt hetzelfde op .NET Framework 4.7+) +- Een actieve Aspose.Words‑licentie of een gratis proefversie (de gratis versie voegt een watermerk toe aan de output, maar de code werkt hetzelfde) +- Een Word‑document dat al afbeeldingen bevat (bijv. `DocWithImages.docx`) +- Visual Studio 2022 of een andere editor die C#‑projecten kan bouwen + +> **Pro tip:** Als je een proefversie gebruikt, kun je nog steeds de afbeelding‑opsla logica testen; onthoud alleen dat de uiteindelijke PDF/MD het proef‑watermerk zal bevatten. + +## Overzicht van de oplossing + +Op een hoog niveau ziet het proces er als volgt uit: + +1. Laad de bron‑`.docx` met `Document`. +2. Maak een `MarkdownSaveOptions`‑object aan en koppel een `IResourceSavingCallback`. +3. Bepaal in de callback de map en bestandsnaam voor elke afbeelding. +4. Sla het document op als Markdown; de callback schrijft elke afbeelding naar schijf. + +Dat is de kern van **how to save images** tijdens een conversie. Hetzelfde patroon werkt voor andere type resources (lettertypen, CSS, enz.) als je die ooit nodig hebt. + +## Stap 1 – Laad de DOCX met afbeeldingen + +Eerst hebben we een `Document`‑instantie nodig die wijst naar het Word‑bestand dat je wilt converteren. Niets bijzonders hier; gewoon een eenvoudige constructor‑aanroep. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Waarom dit belangrijk is:** Het laden van het document is de enige plek waar Aspose de Word‑XML parseert, dus ontbrekende lettertypen of corrupte delen zullen nu een uitzondering veroorzaken—voordat we zelfs maar beginnen met het opslaan van afbeeldingen. + +## Stap 2 – Stel MarkdownSaveOptions in met een afbeelding‑opsla callback + +De `MarkdownSaveOptions`‑klasse stelt je in staat om in te haken op het opslaan‑proces via `ResourceSavingCallback`. Die callback ontvangt een `ResourceSavingArgs`‑object voor elke externe resource (afbeeldingen, CSS, enz.) die Aspose moet schrijven. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementatie van de callback + +Hieronder staat de volledige implementatie van `ImageSavingCallback`. Het maakt een `Images`‑submap naast het Markdown‑bestand, geeft elke afbeelding een opeenvolgende naam (`img_0.png`, `img_1.jpg`, …), en laat je optioneel de afbeelding ergens anders streamen (bijv. naar een cloud‑bucket). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Hoe dit je helpt:** Door `args.FileName` aan te passen bepaal je precies **how to save images**—of het nu in een platte map, een datum‑gebaseerde hiërarchie, of zelfs een database‑BLOB is. De callback wordt uitgevoerd voor elke afbeelding, zodat je later nooit het Markdown‑bestand hoeft te post‑processen. + +## Stap 3 – Sla het document op als Markdown + +Nu de opties en callback klaar zijn, is de daadwerkelijke conversie één regel code. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Wanneer de regel voltooid is, heb je: + +- `Doc.md` – de Markdown‑representatie van je Word‑inhoud. +- `Images\img_0.png`, `Images\img_1.jpg`, … – elke afbeelding geëxtraheerd uit de originele DOCX. + +## Volledig, kant‑klaar voorbeeld + +Alles samenvoegend, hier is een zelfstandige console‑app die je kunt kopiëren‑en‑plakken in een nieuw C#‑project. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Verwacht resultaat + +Na het uitvoeren van het programma: + +- Open `C:\Docs\Doc.md` in een teksteditor. Je ziet Markdown‑afbeeldingslinks zoals `![](Images/img_0.png)`. +- De map `Images` zal elke geëxtraheerde afbeelding bevatten, genummerd in volgorde. +- Het Markdown‑bestand wordt correct weergegeven in elke viewer die lokale afbeeldingen ondersteunt (VS Code‑preview, GitHub, enz.). + +## Veelgestelde vragen (FAQ's) + +### Werkt dit met andere afbeeldingsformaten (SVG, TIFF)? + +Ja. `Path.GetExtension(args.FileName)` behoudt de oorspronkelijke extensie, dus SVG, TIFF, BMP en zelfs EMF worden ongewijzigd opgeslagen. Het enige punt van aandacht is dat sommige Markdown‑renderers SVG niet inline weergeven; in dat geval kun je SVG vooraf naar PNG converteren. + +### Wat als ik afbeeldingen moet insluiten als Base64 in plaats van aparte bestanden? + +Binnen `ResourceSaving` kun je het fysieke bestandsschrijven vervangen door een geheugen‑stream en vervolgens de Markdown‑link handmatig aanpassen. Aspose biedt geen directe “embed as Base64”‑schakelaar, maar de callback geeft je volledige controle over `args.Stream`. + +### Hoe verschilt dit van de ingebouwde `ExportImages`‑methode? + +`ExportImages` extraheert alle afbeeldingen naar een map **zonder** Markdown te genereren. Onze callback koppelt de twee acties, waardoor gegarandeerd wordt dat de bestandsnamen van de afbeeldingen overeenkomen met de verwijzingen in de `.md`. Die afstemming is de sleutel tot **how to save images** correct tijdens conversie. + +### Kan ik meerdere DOCX‑bestanden in één batch converteren? + +Zeker. Plaats de kernlogica in een `foreach (var file in Directory.GetFiles(..., "*.docx"))`‑lus, pas de uitvoer‑paden aan, en hergebruik dezelfde `ImageSavingCallback`. Vergeet alleen niet om per document een nieuwe `MarkdownSaveOptions` aan te maken, omdat `args.DestinationFileName` per iteratie verandert. + +## Randgevallen & best practices + +| Situatie | Waar je op moet letten | Aanbevolen oplossing | +|-----------|----------------------|-----------------| +| **Large DOCX (hundreds of MB)** | Geheugendruk tijdens het laden | Gebruik `LoadOptions` met `LoadFormat.Docx` en stel `LoadOptions.LoadFormat = LoadFormat.Docx` in om delen te stream‑laden | +| **Image names collide** | Als de bron al `img_0.png` in de doelmap heeft, kun je overschrijven | Voeg een GUID toe: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Read‑only output folder** | Opslaan veroorzaakt `UnauthorizedAccessException` | Zorg dat het proces de juiste rechten heeft of kies een schrijfbare pad | +| **Non‑image resources (CSS, fonts)** | Callback ontvangt ze ook | Bescherm met `if (args.ResourceType != ResourceType.Image) return;` (al getoond) | +| **Unicode file names** | Sommige bestandssystemen gaan verkeerd om met tekens | Gebruik `Path.GetInvalidFileNameChars()` om `args.FileName` te saniteren vóór toewijzing | + +## Gerelateerde onderwerpen die je nu kunt verkennen + +- **convert docx to markdown** met aangepaste kopstijlen (gebruik `MarkdownSaveOptions.ExportImagesAsBase64` voor inline‑afbeeldingen) +- **extract images from word** met behulp van `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/dutch/net/working-with-fonts/_index.md b/words/dutch/net/working-with-fonts/_index.md index 4432734e17..f8943f4a0a 100644 --- a/words/dutch/net/working-with-fonts/_index.md +++ b/words/dutch/net/working-with-fonts/_index.md @@ -50,7 +50,7 @@ Of u nu tekst wilt opmaken met verschillende lettertypen, regels voor lettertype | [Substitutie verkrijgen zonder achtervoegsels](./get-substitution-without-suffixes/) | In deze tutorial leert u hoe u achtervoegselloze overschrijvingen in een Word-document kunt gebruiken met Aspose.Words voor .NET. | | [Hoe lettertypen detecteren in Aspose.Words – waarschuwingen en instellingen afhandelen](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Leer hoe u ontbrekende of vervangende lettertypen detecteert en waarschuwingen en instellingen beheert met Aspose.Words voor .NET. | | [Hoe lettertypen vast te leggen in Aspose.Words – Complete gids](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Leer hoe u lettertypen kunt vastleggen met Aspose.Words voor .NET in deze uitgebreide stap‑voor‑stap handleiding. | - +| [Aspose Lettertypevervanging: Ontdek ontbrekende lettertypen in Word-documenten](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Leer hoe u ontbrekende lettertypen in Word-documenten detecteert met Aspose.Words voor .NET. | | [DOCX laden en ontbrekende lettertypen detecteren – Complete C#-gids](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Leer hoe u een DOCX-bestand laadt en ontbrekende lettertypen detecteert met Aspose.Words voor .NET in deze stapsgewijze C#-handleiding. | | [Waarschuwingen voor lettertypevervanging inschakelen in Aspose.Words – Complete gids](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Leer hoe u waarschuwingen voor lettertypevervanging inschakelt in Aspose.Words voor .NET met deze stapsgewijze handleiding. | diff --git a/words/dutch/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/dutch/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..a4c54b0f34 --- /dev/null +++ b/words/dutch/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Leer hoe u Aspose-lettertypevervanging kunt gebruiken om ontbrekende + lettertypen te detecteren wanneer u een Word‑document laadt en de details van ontbrekende + lettertypen opvraagt — stapsgewijze handleiding. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: nl +og_description: Beheers Aspose-lettertypevervanging om ontbrekende lettertypen te + detecteren bij het laden van een Word‑document en om ontbrekende lettertype‑informatie + op te halen met volledige C#‑code. +og_title: Aspose-lettertypevervanging – Detecteer ontbrekende lettertypen in Word-documenten +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose Lettertypevervanging: Ontdek ontbrekende lettertypen in Word‑documenten' +url: /nl/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Ontdek ontbrekende lettertypen in Word‑documenten + +Heb je je ooit afgevraagd waarom een Word‑document er anders uitziet op een andere computer? Vaak is de boosdoener een ontbrekend lettertype, en **Aspose font substitution** is de tool die je in staat stelt die leemtes te ontdekken voordat ze een visueel rampzalig resultaat geven. In deze tutorial lopen we stap voor stap door hoe je **ontbrekende lettertypen** kunt **detecteren** op het moment dat je een **Word‑document laadt**, en vervolgens **ontbrekende lettertype**‑details kunt **ophalen** zodat je ze kunt repareren of vervangen. + +We behandelen alles, van het instellen van de waarschuwings‑callback tot het ophalen van een schone lijst met ontbrekende lettertypen. Aan het einde heb je een kant‑klaar C#‑fragment dat precies aangeeft welke lettertypen niet zijn gevonden, en begrijp je waarom dit belangrijk is voor de document‑fidelity. + +--- + +## Voorvereisten – Wat je nodig hebt voordat je begint + +- **Aspose.Words for .NET** (v23.12 of later aanbevolen). +- Een .NET‑ontwikkelomgeving (Visual Studio, Rider, of de `dotnet`‑CLI). +- Een voorbeeld‑DOCX die opzettelijk een lettertype gebruikt dat je niet geïnstalleerd hebt — noem het `DocumentWithMissingFont.docx`. +- Basiskennis van C# — niets ingewikkelds, alleen de mogelijkheid om een console‑applicatie uit te voeren. + +Als een van deze onderdelen je onbekend voorkomt, pauzeer dan en installeer het NuGet‑pakket: + +```bash +dotnet add package Aspose.Words +``` + +Dat is alles. Geen extra lettertypen, geen externe services. + +--- + +## Stap 1: Laad het Word‑document (en activeer lettertypecontroles) + +Het allereerste wat je doet is een **Word‑document laden**. Aspose.Words parseert het bestand en, als het een verwijst naar een lettertype dat niet gevonden kan worden, plaatst het een *FontSubstitution*‑waarschuwing in de wachtrij. Hier is de code die het laden uitvoert: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Waarom dit belangrijk is:** Het vroegtijdig laden van het document geeft Aspose de kans om elke tekst‑run, stijl en ingesloten object te scannen. Als een lettertype niet wordt gevonden op het systeem of in de aangepaste lettertype‑map, krijg je later een waarschuwing. + +--- + +## Stap 2: Koppel een waarschuwingscallback om substitutie‑gebeurtenissen vast te leggen + +Aspose.Words gebruikt een callback‑mechanisme om je te informeren over problemen zoals ontbrekende lettertypen. Door een implementatie van `IWarningCallback` toe te wijzen aan `doc.WarningCallback`, kun je elke waarschuwing onderscheppen op het moment dat deze optreedt. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro tip:** Je kunt meerdere callbacks koppelen (bijv. logging, UI‑updates) door ze in een composiet‑patroon te wikkelen, maar voor deze tutorial houdt één enkele callback de zaken duidelijk. + +--- + +## Stap 3: Implementeer de Font Substitution Warning Callback + +Nu definiëren we de klasse die het werk daadwerkelijk uitvoert. De callback ontvangt een `WarningInfo`‑object; we filteren op `WarningType.FontSubstitution` en slaan de beschrijving op voor later gebruik. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Wat er gebeurt:** Wanneer Aspose een ontbrekend lettertype tegenkomt, maakt het een waarschuwing aan zoals “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Onze callback print die regel en slaat hem op. + +--- + +## Stap 4: Verwerk het document (optioneel) en verzamel ontbrekende lettertypen + +Als je alleen **ontbrekende lettertypen wilt detecteren**, is de laadstap voldoende — de waarschuwingen worden automatisch afgegeven. Veel ontwikkelaars moeten echter ook **ontbrekende lettertype**‑informatie ophalen na het uitvoeren van bepaalde bewerkingen (bijv. opslaan, converteren). Hieronder forceren we een kleine bewerking — opslaan naar PDF — om ervoor te zorgen dat alle waarschuwingen worden uitgegeven, waarna we de verzamelde berichten ophalen. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Verwachte console‑output** (voorbeeld): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Let op hoe elke regel duidelijk het oorspronkelijke lettertype en de door Aspose gekozen fallback aangeeft. Dat is de kern van **aspose font substitution**‑rapportage. + +--- + +## Stap 5: Geavanceerd – Aangepaste lettertype‑bronnen gebruiken om substituties te verminderen + +Soms *heb* je de ontbrekende lettertypen wel, maar niet in de standaard systeemmap. Aspose.Words laat je een aangepaste directory aanwijzen via `FontSettings`. Het toevoegen van deze stap kan het aantal substitutie‑waarschuwingen drastisch verlagen. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Waarom dit toevoegen?** Als je documenten over verschillende machines distribueert, zorgt het bundelen van de benodigde lettertypen in een bekende map ervoor dat de visuele weergave overal gelijk blijft. Het maakt ook je **detect missing fonts**‑routine nauwkeuriger, omdat Aspose die map controleert voordat het fallbackt. + +--- + +## Volledig werkend voorbeeld + +Alles bij elkaar genomen, hier een enkel, copy‑paste‑klaar console‑programma. Sla het op als `Program.cs` en voer het uit met `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Wat je zou moeten zien:** Als de bron‑DOCX lettertypen refereert die je niet hebt, print de console elke substitutie‑regel gevolgd door een beknopte samenvatting. Als alle lettertypen aanwezig zijn, krijg je de boodschap “No missing fonts were detected.” te zien. + +--- + +## Veelvoorkomende valkuilen & hoe ze te vermijden + +| Probleem | Waarom het gebeurt | Oplossing | +|----------|--------------------|-----------| +| **Geen waarschuwingen verschijnen** | Het document gebruikt alleen systeemlettertypen, of je hebt al een aangepaste map toegevoegd die de ontbrekende lettertypen bevat. | Controleer of de DOCX echt een niet‑beschikbaar lettertype aanroept. Je kunt het in Word openen en een alinea wijzigen naar een zeldzaam lettertype (bijv. “Papyrus”). | +| **Dubbele berichten** | Hetzelfde lettertype wordt in meerdere runs gebruikt, waardoor meerdere waarschuwingen ontstaan. | De‑duplicate de lijst met `Distinct()` als je alleen een unieke set nodig hebt. | +| **Prestatieverlies bij grote documenten** | Elke waarschuwing wordt verwerkt op de UI‑thread. | Voer het laden uit in een achtergrondtaak of gebruik `Parallel.ForEach` voor de post‑processing. | +| **Verkeerd fallback‑lettertype** | Aspose’s standaard fallback komt mogelijk niet overeen met je huisstijl. | Stel `FontSettings.SubstitutionSettings.DefaultFontName` in op een voorkeurs‑fallback (bijv. “Calibri”). | + +--- + +## Uitbreiden van de oplossing – Ontbrekende lettertypen exporteren naar JSON + +Als je een webservice bouwt die ontbrekende lettertypen moet rapporteren aan een client, is het serialiseren van de lijst triviaal: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Nu kan je API een nette JSON‑payload teruggeven die een ander systeem kan verwerken. + +--- + +## Conclusie + +In deze gids hebben we **Aspose font substitution** van begin tot eind gedemonstreerd: een Word‑document laden, een waarschuwingscallback koppelen, elke *detect missing fonts*‑gebeurtenis vastleggen, en uiteindelijk **ontbrekende lettertype**‑informatie ophalen voor rapportage of remediering. Door optioneel aangepaste lettertype‑mappen toe te voegen kun je de lijst met substituties verkleinen, en met een paar extra regels kun je de resultaten zelfs als JSON exporteren. + +Onthoud dat de visuele integriteit van je documenten afhankelijk is van de lettertypen die ze gebruiken. Met de hier getoonde techniek word je nooit meer verrast door een onverwachte fallback. + +Klaar voor de volgende stap? Probeer deze logica te integreren in een grotere document‑verwerkings‑pipeline, of verken andere functies van Aspose.Words zoals lettertype‑embedding (`doc.FontSettings.EmbeddedFonts`). De mogelijkheden zijn eindeloos, en je gebruikers zullen je dankbaar zijn voor de gepolijste output. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/ai-powered-document-processing/_index.md b/words/english/net/ai-powered-document-processing/_index.md index 38ab845fcf..7f083ee280 100644 --- a/words/english/net/ai-powered-document-processing/_index.md +++ b/words/english/net/ai-powered-document-processing/_index.md @@ -43,6 +43,9 @@ Finally, don’t forget to check out our [Working With Summarize Options](./work | [Working With Google AI Model](./working-with-google-ai-model/) | Elevate your document processing with Aspose.Words for .NET and Google AI to create concise summaries effortlessly. | | [Working With Open AI Model](./working-with-open-ai-model/) | Unlock efficient document summarization using Aspose.Words for .NET with OpenAI's powerful models. Dive into this comprehensive guide now. | | [Working With Summarize Options](./working-with-summarize-options/) | Learn to effectively summarize Word documents using Aspose.Words for .NET with our step-by-step guide on integrating AI models for quick insights. | +| [How to Use LLM with Aspose.Words – Rewrite Paragraphs in C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Learn to rewrite paragraphs using LLM with Aspose.Words for .NET in C#, enhancing content with AI-driven transformations. | +| [How to Check Grammar in C# – Complete Guide for Word Documents](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Learn to check grammar in Word documents using Aspose.Words for .NET in C#, ensuring accurate content with AI-driven tools. | +| [Summarize Word Document in C# – Complete Guide Using Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Learn to summarize Word documents in C# using Anthropic Claude with Aspose.Words for .NET for accurate, AI-driven summaries. | {{< /blocks/products/pf/tutorial-page-section >}} @@ -52,4 +55,4 @@ Finally, don’t forget to check out our [Working With Summarize Options](./work {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/english/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..9b6edc1c0a --- /dev/null +++ b/words/english/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-05-04 +description: Learn how to check grammar in a Word document using C#. This tutorial + also covers how to load a DOCX file C# and use Aspose.Words AI for accurate results. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: en +og_description: How to check grammar in a Word document using C#? Follow this tutorial + to load a DOCX file C# and run AI‑powered grammar checks with Aspose.Words. +og_title: How to Check Grammar in C# – Full Step‑by‑Step Guide +tags: +- Aspose.Words +- C# +- Grammar Checking +title: How to Check Grammar in C# – Complete Guide for Word Documents +url: /net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Check Grammar in C# – Complete Guide for Word Documents + +Ever wondered **how to check grammar** in a Word document without leaving your IDE? You're not the only one. Many developers need to validate user‑generated reports, automated emails, or even documentation before it ships. The good news? With Aspose.Words AI you can do it programmatically, and the whole process fits neatly into a typical C# workflow. + +In this guide we’ll walk through everything you need to know: from loading a DOCX file C# to invoking the AI grammar checker and interpreting the results. By the end you’ll have a ready‑to‑run snippet that prints each issue’s severity, message, and suggested replacement—no manual copy‑pasting required. + +## What You’ll Learn + +- **How to check grammar** in a Word document using Aspose.Words AI. +- The exact steps to **load a DOCX file C#** with the `Document` class. +- How to handle the `GrammarCheckResult` object, iterate over issues, and output useful diagnostics. +- Common pitfalls (like missing licenses) and tips to make the solution production‑ready. + +> **Prerequisites:** .NET 6.0+ (or .NET Framework 4.6+), Visual Studio 2022 (or any IDE you prefer), and an Aspose.Words for .NET license (the free trial works for testing). If you haven’t installed the NuGet packages yet, run: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Now, let’s dive in. + +## Step 1: Load a DOCX File in C# + +Before any grammar check can happen, the document must be loaded into memory. Aspose.Words makes this a one‑liner, but there are a few nuances worth noting. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Why this matters:** +- Using `Path.Combine` ensures cross‑platform compatibility. +- The existence check prevents a runtime crash that would otherwise obscure the real grammar‑checking logic. +- When you **load a DOCX file C#**, Aspose parses all styles, headers, footers, and even hidden text, giving the AI a complete picture of the document. + +> **Pro tip:** If you need to work with streams (e.g., files coming from a web upload), you can replace the `new Document(docPath)` call with `new Document(stream)`. + +## Step 2: Choose the AI Model for Grammar Checking + +Aspose.Words AI supports several models, from lightweight local ones to cloud‑based GPT variants. For most scenarios, **GPT‑3.5 Turbo** offers a sweet spot between speed and accuracy. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Why pick GPT‑3.5 Turbo?** +- It’s fast enough for batch processing of dozens of files per minute. +- The cost (if you’re on a paid tier) is lower than GPT‑4 while still catching most common errors. +- The API automatically handles token limits, so you don’t need to split huge documents manually. + +If you prefer an offline approach, replace `AiModelType.Gpt35Turbo` with `AiModelType.Local` (requires the optional offline model package). + +## Step 3: Iterate Over Issues and Display Helpful Feedback + +The `GrammarCheckResult` contains a collection of `GrammarIssue` objects. Each issue gives you severity, a human‑readable message, and a suggested replacement. Let’s print them nicely. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**What the fields mean:** +- `Severity` – typically `Info`, `Warning`, or `Error`. Treat `Error` as a must‑fix before publishing. +- `Message` – a concise description of the problem (e.g., “Subject‑verb agreement”). +- `SuggestedReplacement` – the AI’s recommended fix; you can automatically apply it if you trust the model, or present it to a human reviewer. + +> **Edge case:** Some issues may have an empty `SuggestedReplacement` (e.g., style suggestions). In those cases, just flag the location for manual review. + +## Full Working Example + +Putting it all together, here’s a self‑contained console app you can copy‑paste into a new .NET project. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Expected output (sample):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +If you run the program against a clean document, you’ll see the “✅ No grammar issues detected.” line instead. + +## Handling Common Pitfalls + +| Problem | Why It Happens | Quick Fix | +|---------|----------------|-----------| +| **LicenseException** | Aspose libraries require a valid license for production use. | Insert `License license = new License(); license.SetLicense("Aspose.Words.lic");` at the start of `Main`. | +| **Network timeout** | The AI model call reaches the cloud and exceeds the default 100 s timeout. | Increase timeout via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` before calling `CheckGrammar`. | +| **Large documents (> 10 MB)** | Some cloud models truncate input. | Split the document into sections using `document.Sections` and run checks per section, then aggregate results. | +| **Missing suggestions** | The model couldn't generate a replacement (e.g., ambiguous phrasing). | Log the issue for manual review; do not auto‑apply empty suggestions. | + +## Extending the Solution + +- **Automatic fixing:** Loop through `grammarResult.Issues` and replace text using `document.Range.Replace`. Be sure to back up the original file first. +- **Batch processing:** Wrap the whole flow in a `foreach` over a directory of DOCX files. Store each report as a JSON file for later analysis. +- **Integrate with ASP.NET:** Expose an endpoint that accepts an uploaded DOCX, runs the check, and returns a JSON payload of issues. + +## Image Illustration + +how to check grammar flow diagram + +*The diagram above visualizes the three‑step process: load DOCX → run AI grammar check → output issues.* + +## Conclusion + +We’ve covered **how to check grammar** in a Word document using C#, demonstrated the exact code to **load a DOCX file C#**, and showed you how to interpret the AI‑generated feedback. With Aspose.Words AI, you get a powerful, cloud‑backed grammar engine that integrates seamlessly into any .NET application. + +Next steps? Try automating the fix‑apply loop, experiment with the newer `AiModelType.Gpt4` for even sharper suggestions, or combine this with a spell‑checking library for a full‑blown proof‑reading pipeline. The possibilities are practically endless, and you now have a solid foundation to build on. + +Got questions or run into a tricky edge case? Drop a comment below, and happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/english/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..f7e3896226 --- /dev/null +++ b/words/english/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-05-04 +description: How to use LLM to edit documents with Aspose – learn to replace paragraph + text, connect to local LLM, and rewrite text using AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: en +og_description: How to use LLM to edit documents with Aspose. This guide shows how + to connect to a local LLM, replace paragraph text, and rewrite text using AI. +og_title: How to Use LLM with Aspose.Words – Rewrite Paragraphs in C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: How to Use LLM with Aspose.Words – Rewrite Paragraphs in C# +url: /net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Use LLM with Aspose.Words – Rewrite Paragraphs in C# + +Ever wondered **how to use LLM** to polish a Word document without opening it manually? You're not the only one. Many developers hit a wall when they need to *replace paragraph text* programmatically but lack a clean AI‑driven workflow. + +In this tutorial we’ll wire up a local large language model, feed it a snippet from a `.docx` file, ask it to **rewrite text using AI**, and finally save the updated document—all with Aspose.Words. By the end you’ll have a ready‑to‑run C# console app that demonstrates the whole pipeline. + +> **What you’ll get:** a complete, runnable example, explanations of each step, tips for edge cases, and ideas for extending the solution. + +## What You’ll Need + +- **.NET 6+** (or .NET Framework 4.7.2 – the code works on both) +- **Aspose.Words for .NET** (NuGet package `Aspose.Words`) +- A **local LLM server** exposing a simple HTTP `/generate` endpoint (e.g., Ollama, LMStudio, or a custom Flask service) +- A basic familiarity with C# and HTTP client code + +No additional SDKs are required; everything else lives in the code we’ll write together. + +## Step 1: How to Use LLM to Replace Paragraph Text + +The first thing we have to do is identify the paragraph we want to modify. Aspose.Words makes this a breeze by exposing a rich object model. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Why this matters:** +Selecting the right node prevents you from accidentally overwriting headings or tables. By using the **replace paragraph text** approach we keep the document structure intact while only touching the content we care about. + +> **Pro tip:** If your document has variable length sections, use `document.GetChildNodes(NodeType.Paragraph, true)` and LINQ to locate a paragraph by its text or style. + +## Step 2: Connect to a Local LLM Endpoint + +Now that we have the text, we need to send it to the LLM. The example uses a simple wrapper class `LocalLargeLanguageModel` that hides the HTTP plumbing. Feel free to replace it with `HttpClient` calls if you prefer. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Why we connect this way:** +A **connect to local llm** setup eliminates latency, keeps data on‑premise, and avoids API costs. The wrapper also makes the later code cleaner, letting us focus on the **rewrite text using ai** logic. + +## Step 3: Rewrite Text Using AI with Aspose.Words + +With the paragraph text in hand and the LLM ready, we craft a prompt that tells the model exactly what we want—rewrite in a formal tone. You can tweak the prompt for other styles (friendly, technical, etc.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Why this works:** +LLMs are prompt‑driven; giving explicit instructions (“Rewrite … in a formal tone”) yields consistent results. The **rewrite text using ai** step is the heart of the tutorial – it demonstrates how AI can be embedded directly into document workflows. + +## Step 4: Edit the Document and Save Changes + +Now we replace the original runs with the new content. Aspose.Words stores text in `Run` objects, so clearing them first avoids leftover formatting artifacts. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Edge‑case note:** +If the original paragraph contained mixed formatting (bold, italics) you may want to preserve styles. In that case, create a new `Run`, copy the original `Font` settings, then set its `Text` to `revisedText`. + +## Full Working Example + +Below is the entire program you can copy‑paste into a console project. Remember to install the Aspose.Words NuGet package first (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Expected Output + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Open `output.docx` – you’ll see the third paragraph now reads the polished version. + +## Common Questions & Gotchas + +| Question | Answer | +|----------|--------| +| **What if my LLM returns JSON with extra fields?** | Adjust `GenerateText` to deserialize the correct property or parse the response manually. | +| **Can I process multiple paragraphs at once?** | Yes – iterate over `document.FirstSection.Body.Paragraphs` and apply the same prompt logic, perhaps adding a paragraph index to the prompt for context. | +| **My LLM server uses authentication?** | Add a header to the `HttpClient` before the POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Formatting gets lost after replacement.** | Preserve the original `Run.Font` settings: create a new `Run`, copy `originalRun.Font.Clone()`, then set its `Text`. | +| **The LLM sometimes returns empty strings.** | Implement a fallback – if `revisedText.Trim().Length == 0`, keep the original text or retry with a simpler prompt. | + +## Extending the Solution + +Now that you’ve mastered **how to use llm** for a single paragraph, consider these next steps: + +- **Batch processing:** Loop through every paragraph and rewrite in a chosen style (e.g., “make all text concise”). +- **Style‑aware rewriting:** Pass the original paragraph’s style name in the prompt so the LLM can respect headings vs body text. +- **Integration with a CI pipeline:** Automate document polishing as part of a documentation build process. +- **Alternative prompts:** Try “summarize this paragraph” or “translate this paragraph to Spanish” to explore the full power of **rewrite text using ai**. + +## Conclusion + +We’ve walked through the entire flow of **how to use llm** with Aspose.Words: loading a document, **connect to local llm**, extracting a paragraph, **rewrite text using ai**, **replace paragraph text**, and finally saving the result. The code is self‑contained, works out‑of‑the‑box, and showcases a practical way to blend AI with traditional document automation. + +Give it a spin, tweak the prompts, and let + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/english/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..480f75f9a0 --- /dev/null +++ b/words/english/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Summarize Word document quickly and translate text with Google. Learn + how to use Anthropic Claude, create summary from report, and translate text with + Google in a single C# tutorial. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: en +og_description: Summarize Word document instantly and translate text with Google. + This guide shows how to use Anthropic Claude and Aspose.Words to create a summary + from report. +og_title: Summarize Word Document in C# – Step‑by‑Step with Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Summarize Word Document in C# – Complete Guide Using Anthropic Claude +url: /net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Summarize Word Document in C# – Complete Guide Using Anthropic Claude + +Ever needed to **summarize word document** but felt stuck juggling APIs and long‑winded code? You're not alone. In many projects—annual reports, legal briefs, or research papers—extracting a concise overview is a daily pain point. Luckily, the combination of Aspose.Words and Anthropic Claude makes it a piece of cake, and you can even toss in a quick Google translation while you’re at it. + +In this tutorial we’ll walk through everything you need to know: loading a large .docx, calling the Claude V2 model to generate a summary, translating a phrase with Google, and handling the most common gotchas. By the end you’ll be able to **create summary from report** with just a few lines of C#. + +## Prerequisites + +- .NET 6+ (or .NET Core 3.1) installed +- An Aspose.Words for .NET license (or a free trial) +- Access to the Anthropic Claude V2 API (you’ll need an API key) +- Internet connectivity for Google Translator +- Visual Studio 2022 or your favorite C# IDE + +No extra NuGet packages beyond `Aspose.Words` and `Aspose.Words.AI` are required; the translator class ships with the same library. + +## Step 1 – Load the Source Word Document + +The first thing we have to do is bring the .docx file into memory. Aspose.Words makes this trivial and, thanks to its robust parser, it works with complex layouts, tables, and even embedded images. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Why this matters:** Loading the document early lets you inspect properties (author, word count) and decide whether a summary is even necessary. Large files > 10 MB can be memory‑intensive, so consider `LoadOptions` with `LoadFormat.Docx` if you hit performance issues. + +## Step 2 – Summarize the Document with Anthropic Claude + +Now comes the fun part: we hand the document over to Claude V2. The `Summarizer` class abstracts the HTTP call, token handling, and retries. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **How it works:** +> 1. **Chunking** – Aspose automatically splits the document into manageable pieces (≈ 2 KB each) to respect Claude’s token limits. +> 2. **Prompt engineering** – The library sends a prompt like “Provide a concise executive summary of the following text:” followed by each chunk. +> 3. **Aggregation** – Claude returns partial summaries that are stitched together into the final `summaryText`. + +### Edge Cases & Tips + +- **Very large reports** (> 100 pages) may exceed Claude’s context window. If you see truncated output, enable `SummarizerOptions.MaxChunkSize` to smaller values. +- **Non‑English source** – Claude works best with English; for other languages, translate first (see Step 4) then summarize. +- **Rate limits** – Anthropic imposes per‑minute caps. Wrap the call in a retry loop with exponential back‑off if you get a `429` response. + +## Step 3 – Verify the Summary Output + +Before we move on, it’s good practice to validate that the summary isn’t empty and meets length expectations (e.g., 5‑10 % of the original word count). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +If the ratio looks too low (< 2 %), you might want to adjust the `SummarizerOptions.SummaryLength` property to request a longer output. + +## Step 4 – Translate Text with Google + +Now that we have a crisp English summary, let’s sprinkle in a quick translation. The `Translator` class uses Google’s public translation endpoint (no API key required for short phrases, but for production you should switch to the paid Cloud Translation API). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Why Google?** It’s fast, widely supported, and the free endpoint handles short strings without authentication. For bulk translations, batch the calls and respect Google’s usage limits. + +### Translating the Whole Summary (Optional) + +If you need the entire summary in Spanish (or any other language), just feed `summaryText` into `Translator.Translate`. Be aware of the 5 KB request size limit; you may need to split the summary into smaller chunks. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Step 5 – Save the Summary Back to a Word File (Bonus) + +Often the end‑user expects a downloadable document rather than console output. Let’s create a new `.docx` that contains both the English and Spanish versions. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Practical Tip + +When you embed the summary in a new Word file, keep the original formatting minimal (use `Normal` style). Complex styles from the source can cause unexpected layout shifts. + +## Full Working Example + +Below is the **complete, copy‑and‑paste‑ready** program that ties everything together. It compiles with a single `dotnet run` after you’ve added the Aspose packages. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Expected console output** (truncated for brevity): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Frequently Asked Questions + +| Question | Answer | +|----------|--------| +| *Can I use a different AI model?* | Yes. Replace `SummarizerModel.AnthropicClaudeV2` with `SummarizerModel.OpenAIGPT4` (requires an OpenAI key) or any provider listed in the enum. | +| *What if the document contains protected sections?* | Aspose will throw `ProtectedDocumentException`. Unlock it first with `LoadOptions.Password` or request an unprotected copy. | +| *Do I need a paid Aspose license for production?* | The free trial works for up to 20 pages. For larger reports, a license removes the page limit and adds performance optimizations. | +| *Is the Google translator reliable for large blocks?* | For short strings it’s fine. For bulk translation, switch to the Cloud Translation API to avoid request‑size limits and to get better language detection. | + +## Conclusion + +We’ve just **summarize word document** using Aspose.Words together with the Anthropic Claude V2 model, then **translate text with Google** to + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/basic-conversions/_index.md b/words/english/net/basic-conversions/_index.md index 6ebbd57498..2c163d7c86 100644 --- a/words/english/net/basic-conversions/_index.md +++ b/words/english/net/basic-conversions/_index.md @@ -25,6 +25,7 @@ Basic Conversions walks you through basic document conversions using the Aspose. | [Convert Doc To Docx](./doc-to-docx/) | Learn how to convert DOC to DOCX using Aspose.Words for .NET. Step-by-step guide with code examples. Perfect for developers. | | [Convert Docx To Rtf](./docx-to-rtf/) | Learn how to convert DOCX to RTF using Aspose.Words for .NET with our step-by-step guide. Easy conversion for seamless document processing. | | [Convert Word File to PDF](./docx-to-pdf/) | Learn how to easily convert Word files to PDF using Aspose.Words for .NET with our guide. Perfect for developers seeking quick and reliable document conversion. | +| [Create Accessible PDF from DOCX in C# – How to Convert Word to PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Learn how to generate an accessible PDF from a DOCX using Aspose.Words for .NET in C#. Step‑by‑step guide with code examples. | | [Convert Docx To Byte](./docx-to-byte/) | Learn how to convert Docx to byte array in .NET using Aspose.Words for efficient document processing. Step-by-step guide included. | | [Convert Docx To Epub](./docx-to-epub/) | Convert DOCX to EPUB easily with Aspose.Words for .NET. Follow our tutorial for seamless integration into your .NET applications. | | [Convert Docx To Mhtml And Sending Email](./docx-to-mhtml-and-sending-email/) | Learn how to convert DOCX to MHTML and send emails using Aspose.Words for .NET in this step-by-step guide. Boost your productivity with easy automation. | diff --git a/words/english/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/english/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..3aec4f7adf --- /dev/null +++ b/words/english/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: Create accessible PDF from a DOCX file in C#. Learn how to convert Word + to PDF, save Word as PDF, and export docx to PDF with accessibility compliance. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: en +og_description: Create accessible PDF from a DOCX file in C#. Follow this step‑by‑step + tutorial to convert Word to PDF, save Word as PDF, and export docx to PDF with full + accessibility. +og_title: Create Accessible PDF from DOCX in C# – Quick Guide +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Create Accessible PDF from DOCX in C# – How to Convert Word to PDF +url: /net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create Accessible PDF from DOCX in C# – How to Convert Word to PDF + +Ever needed to **create accessible PDF** from a Word document but weren’t sure which library to trust? You’re not alone—many developers hit the same roadblock when they must meet PDF/UA standards for accessibility. The good news is that with Aspose.Words you can turn a `.docx` into a compliant PDF in just a few lines of code, and you’ll get a file that screen readers can actually read. + +In this tutorial we’ll walk through everything you need to know to **convert Word to PDF**, **save Word as PDF**, and even **export docx to PDF** with PDF/UA‑1 (or PDF/UA‑2) compliance. By the end you’ll have a ready‑to‑use C# snippet, understand why each setting matters, and be equipped to handle common edge cases like missing fonts or custom page setups. + +## Prerequisites + +- .NET 6.0 or later (the code works with .NET Framework 4.6+ as well) +- An Aspose.Words for .NET license (or a free evaluation key) +- A basic understanding of C# and Visual Studio (or any IDE you prefer) +- A DOCX file you want to make accessible (we’ll call it `input.docx`) + +> **Pro tip:** If you’re using the free trial, remember that the generated PDF will contain a small “Evaluation” watermark. + +## Step 1: Install Aspose.Words NuGet Package + +Before we can write any C# code, the Aspose.Words library must be added to the project. + +```bash +dotnet add package Aspose.Words +``` + +Running the command restores the `Aspose.Words.dll` and makes the namespaces available. This step is essential because the `PdfSaveOptions` class lives inside that package. + +## Step 2: Load the Source DOCX File + +The first logical step is to load the Word document you want to transform. Think of this as opening a book before you start editing its pages. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Why this matters:** Loading the document creates an in‑memory representation that includes all styles, images, and metadata. If the file is corrupted, `Document` will throw an exception—so you might want to wrap this in a try/catch block for production code. + +## Step 3: Configure PDF Save Options for Accessibility + +Aspose.Words lets you specify the PDF compliance level. PDF/UA‑1 is the original accessibility standard, while PDF/UA‑2 adds a few newer tags. Choose the one that matches your client’s requirements. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **What “Compliance” does:** Setting `PdfCompliance.PdfUax1` tells Aspose.Words to embed proper tags, logical reading order, and alternate text for images—exactly what screen‑reader software looks for. + +## Step 4: Save the Document as an Accessible PDF + +Now the heavy lifting is over; we simply instruct Aspose.Words to write the PDF file using the options we just defined. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +After this line runs, you’ll find `output.pdf` in the specified folder. Open it in Adobe Acrobat Reader and check **File → Properties → Description → PDF/A and PDF/UA** to verify compliance. + +## Step 5: Verify Accessibility (Optional but Recommended) + +While the code guarantees tagged PDF output, a quick manual check helps catch any custom content that might need extra attention. + +1. Open `output.pdf` in Adobe Acrobat Pro. +2. Go to **Tools → Accessibility → Full Check**. +3. Run the check and review any warnings (e.g., missing alt text for custom images). + +If the report shows no errors, you’ve successfully **create accessible PDF** that meets PDF/UA‑1 standards. + +## Common Variations & Edge Cases + +### Converting Multiple DOCX Files in a Loop + +If you have a batch of documents, wrap the load‑save logic inside a `foreach` loop. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Switching to PDF/UA‑2 + +Just change the `Compliance` enum: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Handling Custom Fonts + +If your DOCX uses fonts not installed on the server, embed them: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Embedding guarantees that the PDF looks the same on any machine—a crucial detail when you **export docx to pdf** for external stakeholders. + +## Full Working Example + +Below is the complete, ready‑to‑run program that puts all the pieces together. Copy‑paste it into a console app, adjust the paths, and hit **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** A file named `output.pdf` that opens in any PDF viewer, carries the proper accessibility tags, and can be shared with users who rely on assistive technology. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Image alt text:* *create accessible pdf example – screenshot of a PDF/UA‑1 compliant document opened in Adobe Acrobat.* + +## Frequently Asked Questions + +- **Does this work with .NET Core?** + Absolutely. Aspose.Words is cross‑platform, so the same code runs on Windows, Linux, and macOS. + +- **What if my DOCX contains macros?** + Macros are ignored during conversion; only the visible content is rendered into the PDF. + +- **Can I add a custom PDF metadata title?** + Yes—set `pdfSaveOptions.Metadata.Title = "Your Custom Title";` before saving. + +- **Is PDF/UA‑2 widely supported?** + Most modern PDF readers understand PDF/UA‑2, but if you’re targeting older tools, stick with PDF/UA‑1. + +## Conclusion + +We’ve just shown you how to **create accessible PDF** from a DOCX file using Aspose.Words, covering everything from installing the NuGet package to verifying PDF/UA compliance. By following these steps you can reliably **convert Word to PDF**, **save Word as PDF**, and **export docx to PDF** while meeting accessibility standards—a must‑have skill for any developer working on enterprise document pipelines. + +Ready for the next challenge? Try adding a custom header/footer, embedding a PDF/A‑2b tag, or automating the process in an ASP.NET Core web API. The possibilities are endless, and the foundation you’ve built here will let you tackle them with confidence. + +Happy coding, and may your PDFs always be readable! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/programming-with-markdownsaveoptions/_index.md b/words/english/net/programming-with-markdownsaveoptions/_index.md index dd737d44f7..5eca45b5ae 100644 --- a/words/english/net/programming-with-markdownsaveoptions/_index.md +++ b/words/english/net/programming-with-markdownsaveoptions/_index.md @@ -42,6 +42,7 @@ Words Processing with MarkdownSaveOptions is an in-depth resource that walks you | [How to Save Markdown from Word – Complete Guide](./how-to-save-markdown-from-word-complete-guide/) | Learn how to save Word documents as Markdown using Aspose.Words with a comprehensive step-by-step guide. | | [How to Rename Images When Converting DOCX to Markdown](./how-to-rename-images-when-converting-docx-to-markdown/) | Learn how to rename images during DOCX to Markdown conversion using Aspose.Words for .NET. | | [Save Word Images – Convert Word to Markdown with Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) | | +| [How to Save Images – Convert DOCX to Markdown with Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Learn how to extract and save images while converting DOCX to Markdown using Aspose.Words for .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/english/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/english/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..ed79d66a5e --- /dev/null +++ b/words/english/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,243 @@ +--- +category: general +date: 2026-05-04 +description: Learn how to save images while converting a DOCX to Markdown using Aspose.Words. + This guide also shows how to extract images from Word and save Word as Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: en +og_description: How to save images while converting a DOCX to Markdown using Aspose.Words. + Step‑by‑step guide with complete C# code. +og_title: How to Save Images – Convert DOCX to Markdown with Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: How to Save Images – Convert DOCX to Markdown with Aspose.Words +url: /net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Save Images – Convert DOCX to Markdown with Aspose.Words + +Ever wondered **how to save images** when you need to turn a Word file into Markdown? You're not the only one. Many developers hit a wall when the conversion drops pictures into a mess of broken links, or worse—loses them entirely. The good news is that Aspose.Words gives you fine‑grained control, so you can extract images from Word, decide where they go, and still get clean Markdown output. + +In this tutorial we’ll walk through a complete, ready‑to‑run C# example that shows **how to save images** into a dedicated folder while converting a `.docx` to `.md`. Along the way we’ll also touch on **convert docx to markdown**, **extract images from word**, and the broader question of **how to convert docx** in a way that lets you **save word as markdown** without losing any assets. + +## Prerequisites + +- .NET 6.0 or later (the API works the same on .NET Framework 4.7+) +- An active Aspose.Words license or a free trial (the free version adds a watermark to the output, but the code works the same) +- A Word document that already contains images (e.g., `DocWithImages.docx`) +- Visual Studio 2022 or any editor that can build C# projects + +> **Pro tip:** If you’re using a trial, you can still test the image‑saving logic; just remember the final PDF/MD will contain the trial watermark. + +## Overview of the Solution + +At a high level the process looks like this: + +1. Load the source `.docx` with `Document`. +2. Create a `MarkdownSaveOptions` object and plug in an `IResourceSavingCallback`. +3. In the callback, decide the folder and file name for each image. +4. Save the document as Markdown; the callback writes each image to disk. + +That’s the core of **how to save images** during a conversion. The same pattern works for other resource types (fonts, CSS, etc.) if you ever need them. + +## Step 1 – Load the DOCX Containing Images + +First we need a `Document` instance that points at the Word file you want to convert. Nothing fancy here; just a straight‑forward constructor call. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Why this matters:** Loading the document is the only place where Aspose parses the Word XML, so any missing fonts or corrupted parts will throw an exception right now—before we even start saving images. + +## Step 2 – Set Up MarkdownSaveOptions with an Image‑Saving Callback + +The `MarkdownSaveOptions` class lets you hook into the saving process via `ResourceSavingCallback`. That callback receives a `ResourceSavingArgs` object for every external resource (images, CSS, etc.) that Aspose needs to write. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### The Callback Implementation + +Below is the full implementation of `ImageSavingCallback`. It creates an `Images` sub‑folder next to the Markdown file, gives each picture a sequential name (`img_0.png`, `img_1.jpg`, …), and optionally lets you stream the image elsewhere (e.g., to a cloud bucket). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **How this helps you:** By customizing `args.FileName` you control exactly **how to save images**—whether in a flat folder, a date‑based hierarchy, or even a database BLOB. The callback runs for every image, so you never have to post‑process the Markdown file later. + +## Step 3 – Save the Document as Markdown + +Now that the options and callback are ready, the actual conversion is a one‑liner. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +When the line finishes, you’ll have: + +- `Doc.md` – the Markdown representation of your Word content. +- `Images\img_0.png`, `Images\img_1.jpg`, … – every picture extracted from the original DOCX. + +## Full, Ready‑to‑Run Example + +Putting everything together, here’s a self‑contained console app you can copy‑paste into a new C# project. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Expected Result + +After you run the program: + +- Open `C:\Docs\Doc.md` in any text editor. You’ll see Markdown image links like `![](Images/img_0.png)`. +- The `Images` folder will contain each extracted picture, named sequentially. +- The Markdown file will render correctly in any viewer that supports local images (VS Code preview, GitHub, etc.). + +## Frequently Asked Questions (FAQs) + +### Does this work with other image formats (SVG, TIFF)? + +Yes. `Path.GetExtension(args.FileName)` preserves the original extension, so SVG, TIFF, BMP, and even EMF are saved unchanged. The only caveat is that some Markdown renderers may not display SVG inline; in that case you might convert SVG to PNG beforehand. + +### What if I need to embed images as Base64 instead of separate files? + +Inside `ResourceSaving`, you can replace the physical file write with a memory stream and then modify the Markdown link manually. Aspose doesn’t expose a direct “embed as Base64” switch, but the callback gives you full control over `args.Stream`. + +### How does this differ from the built‑in `ExportImages` method? + +`ExportImages` extracts all images to a folder **without** generating Markdown. Our callback couples the two actions, guaranteeing that the image file names match the references inside the `.md`. That alignment is the key to **how to save images** correctly during conversion. + +### Can I convert multiple DOCX files in a batch? + +Absolutely. Wrap the core logic in a `foreach (var file in Directory.GetFiles(..., "*.docx"))` loop, adjust the output paths, and reuse the same `ImageSavingCallback`. Just remember to create a fresh `MarkdownSaveOptions` per document, because `args.DestinationFileName` changes per iteration. + +## Edge Cases & Best Practices + +| Situation | What to Watch Out For | Recommended Fix | +|-----------|----------------------|-----------------| +| **Large DOCX (hundreds of MB)** | Memory pressure while loading | Use `LoadOptions` with `LoadFormat.Docx` and set `LoadOptions.LoadFormat = LoadFormat.Docx` to stream‑load parts | +| **Image names collide** | If the source already has `img_0.png` in the target folder, you could overwrite | Append a GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Read‑only output folder** | Save throws `UnauthorizedAccessException` | Ensure the process runs with appropriate permissions or choose a writable path | +| **Non‑image resources (CSS, fonts)** | Callback receives them too | Guard with `if (args.ResourceType != ResourceType.Image) return;` (already shown) | +| **Unicode file names** | Some filesystems mishandle characters | Use `Path.GetInvalidFileNameChars()` to sanitize `args.FileName` before assigning | + +## Related Topics You Might Explore Next + +- **convert docx to markdown** with custom heading styles (use `MarkdownSaveOptions.ExportImagesAsBase64` for inline images) +- **extract images from word** using the `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/english/net/working-with-fonts/_index.md b/words/english/net/working-with-fonts/_index.md index 54b41943c2..87bc30d655 100644 --- a/words/english/net/working-with-fonts/_index.md +++ b/words/english/net/working-with-fonts/_index.md @@ -53,6 +53,7 @@ Whether you want to format text with different fonts, set font substitution rule | [Get Substitution Without Suffixes](./get-substitution-without-suffixes/) | In this tutorial, learn how to get suffixless overrides in a Word document with Aspose.Words for .NET. | | [How to Capture Fonts in Aspose.Words – Complete Guide](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Learn how to capture fonts in Aspose.Words with a complete step-by-step guide and code examples. | | [How to Load DOCX and Detect Missing Fonts – Complete C# Guide](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Learn how to load a DOCX file and detect missing fonts using Aspose.Words for .NET in this complete C# guide. | +| [Aspose Font Substitution: Detect Missing Fonts in Word Docs](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Learn how to detect missing fonts in Word documents using Aspose.Words for .NET with this step-by-step guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/english/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/english/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..3102ff6daf --- /dev/null +++ b/words/english/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-05-04 +description: Learn how to use Aspose font substitution to detect missing fonts when + you load a Word document and retrieve missing font details—step‑by‑step guide. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: en +og_description: Master Aspose font substitution to detect missing fonts when loading + a Word document and retrieve missing font information with complete C# code. +og_title: Aspose Font Substitution – Detect Missing Fonts in Word Documents +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose Font Substitution: Detect Missing Fonts in Word Docs' +url: /net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Detect Missing Fonts in Word Documents + +Ever wondered why a Word document looks wrong on a different machine? Often the culprit is a missing font, and **Aspose font substitution** is the tool that lets you spot those gaps before they become a visual disaster. In this tutorial we’ll walk through how to **detect missing fonts** the moment you **load a Word document**, and then **retrieve missing font** details so you can fix or replace them. + +We’ll cover everything from setting up the warning callback to pulling a clean list of missing fonts. By the end, you’ll have a ready‑to‑run C# snippet that tells you exactly which fonts didn’t make the cut, and you’ll understand why this matters for document fidelity. + +--- + +## Prerequisites – What You Need Before You Start + +- **Aspose.Words for .NET** (v23.12 or later recommended). +- A .NET development environment (Visual Studio, Rider, or the `dotnet` CLI). +- A sample DOCX that intentionally uses a font you don’t have installed—call it `DocumentWithMissingFont.docx`. +- Basic C# knowledge—nothing fancy, just the ability to run a console app. + +If any of those sound unfamiliar, pause and install the NuGet package: + +```bash +dotnet add package Aspose.Words +``` + +That’s it. No extra fonts, no external services. + +--- + +## Step 1: Load the Word Document (and Trigger Font Checks) + +The very first thing you do is **load a Word document**. Aspose.Words parses the file and, if it can’t locate a referenced font, it queues a *FontSubstitution* warning. Here’s the code that does the loading: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Why this matters:** Loading the document early gives Aspose a chance to scan every run of text, style, and embedded object. If a font isn’t found on the system or in the custom font folder you’ll get a warning later on. + +--- + +## Step 2: Attach a Warning Callback to Capture Substitution Events + +Aspose.Words uses a callback mechanism to inform you about issues like missing fonts. By assigning an implementation of `IWarningCallback` to `doc.WarningCallback`, you can intercept each warning as it happens. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro tip:** You can attach multiple callbacks (e.g., logging, UI updates) by wrapping them in a composite pattern, but for this tutorial a single callback keeps things clear. + +--- + +## Step 3: Implement the Font Substitution Warning Callback + +Now we define the class that actually does the work. The callback receives a `WarningInfo` object; we filter for `WarningType.FontSubstitution` and store the description for later use. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **What’s happening:** When Aspose encounters a missing font, it creates a warning like “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Our callback prints that line and saves it. + +--- + +## Step 4: Process the Document (Optional) and Gather Missing Fonts + +If you only need to **detect missing fonts**, the loading step is enough—the warnings fire automatically. However, many developers also need to **retrieve missing font** information after performing some operations (e.g., saving, converting). Below we force a tiny operation—saving to PDF—to ensure all warnings are emitted, then we pull the collected messages. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Expected console output** (example): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Notice how each line clearly states the original font and the fallback Aspose chose. That’s the core of **aspose font substitution** reporting. + +--- + +## Step 5: Advanced – Using Custom Font Sources to Reduce Substitutions + +Sometimes you *do* have the missing fonts, just not in the default system folder. Aspose.Words lets you point to a custom directory via `FontSettings`. Adding this step can dramatically lower the number of substitution warnings. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Why add this?** If you’re distributing documents across machines, bundling the required fonts in a known folder ensures the same visual appearance everywhere. It also makes your **detect missing fonts** routine more accurate because Aspose checks that folder before falling back. + +--- + +## Complete Working Example + +Putting it all together, here’s a single, copy‑paste‑ready console program. Save it as `Program.cs` and run it with `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**What you should see:** If the source DOCX references fonts you don’t have, the console prints each substitution line followed by a concise summary. If all fonts are present, you’ll get the “No missing fonts were detected.” message. + +--- + +## Common Pitfalls & How to Avoid Them + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **No warnings appear** | The document uses only system fonts, or you already added a custom folder containing the missing fonts. | Verify the DOCX truly references an unavailable font. You can open it in Word and change a paragraph to a rare font (e.g., “Papyrus”). | +| **Duplicate messages** | The same font is used in multiple runs, causing multiple warnings. | De‑duplicate the list with `Distinct()` if you only need a unique set. | +| **Performance hit on large docs** | Each warning is processed on the UI thread. | Run the loading in a background task or use `Parallel.ForEach` for post‑processing. | +| **Wrong fallback font** | Aspose’s default fallback might not match your branding. | Set `FontSettings.SubstitutionSettings.DefaultFontName` to a preferred fallback (e.g., “Calibri”). | + +--- + +## Extending the Solution – Exporting Missing Fonts to JSON + +If you’re building a web service that needs to report missing fonts back to a client, serializing the list is trivial: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Now your API can return a clean JSON payload that another system can consume. + +--- + +## Conclusion + +In this guide we demonstrated **Aspose font substitution** from start to finish: loading a Word document, attaching a warning callback, capturing each *detect missing fonts* event, and finally **retrieve missing font** information for reporting or remediation. By adding optional custom font folders you can shrink the list of substitutions, and with a few extra lines you can even export the results as JSON. + +Remember, the visual integrity of your documents hinges on the fonts they use. With the technique shown here, you’ll never be surprised by an unexpected fallback again. + +Ready to take the next step? Try integrating this logic into a larger document‑processing pipeline, or explore Aspose.Words’ other features like font embedding (`doc.FontSettings.EmbeddedFonts`). The possibilities are endless, and your users will thank you for the polished output. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/french/net/ai-powered-document-processing/_index.md b/words/french/net/ai-powered-document-processing/_index.md index 74b9abd340..ee59d16281 100644 --- a/words/french/net/ai-powered-document-processing/_index.md +++ b/words/french/net/ai-powered-document-processing/_index.md @@ -39,9 +39,12 @@ Enfin, n'oubliez pas de consulter notre [Travailler avec les options de résumé | Titre | Description | | --- | --- | | [Travailler avec un modèle d'IA](./working-with-ai-model/) | Apprenez à utiliser Aspose.Words pour .NET pour synthétiser des documents avec l'IA. Étapes simples pour améliorer la gestion des documents. | -| [Travailler avec le modèle d'IA de Google](./working-with-google-ai-model/) Améliorez le traitement de vos documents avec Aspose.Words pour .NET et Google AI pour créer des résumés concis sans effort. | +| [Travailler avec le modèle d'IA de Google](./working-with-google-ai-model/) | Améliorez le traitement de vos documents avec Aspose.Words pour .NET et Google AI pour créer des résumés concis sans effort. | | [Travailler avec un modèle d'IA ouvert](./working-with-open-ai-model/) | Bénéficiez d'une synthèse efficace de vos documents grâce à Aspose.Words pour .NET et aux puissants modèles d'OpenAI. Découvrez dès maintenant ce guide complet. | | [Travailler avec les options de résumé](./working-with-summarize-options/) | Apprenez à résumer efficacement des documents Word à l'aide d'Aspose.Words pour .NET avec notre guide étape par étape sur l'intégration de modèles d'IA pour des informations rapides. | +| [Comment utiliser un LLM avec Aspose.Words – Réécrire des paragraphes en C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Utilisez un modèle de langage pour réécrire automatiquement des paragraphes Word en C# avec Aspose.Words. | +| [Comment vérifier la grammaire en C# – Guide complet pour les documents Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Apprenez à vérifier la grammaire des documents Word en C# avec Aspose.Words grâce à ce guide complet. | +| [Résumer un document Word en C# – Guide complet utilisant Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Apprenez à résumer des documents Word en C# avec le modèle Claude d'Anthropic via Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/french/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..b83aeedede --- /dev/null +++ b/words/french/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Apprenez à vérifier la grammaire d’un document Word en utilisant C#. + Ce tutoriel couvre également comment charger un fichier DOCX en C# et utiliser l’IA + Aspose.Words pour des résultats précis. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: fr +og_description: Comment vérifier la grammaire d’un document Word avec C# ? Suivez + ce tutoriel pour charger un fichier DOCX en C# et effectuer des vérifications grammaticales + alimentées par l’IA avec Aspose.Words. +og_title: Comment vérifier la grammaire en C# – Guide complet étape par étape +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Comment vérifier la grammaire en C# – Guide complet pour les documents Word +url: /fr/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment vérifier la grammaire en C# – Guide complet pour les documents Word + +Vous vous êtes déjà demandé **comment vérifier la grammaire** dans un document Word sans quitter votre IDE ? Vous n'êtes pas le seul. De nombreux développeurs doivent valider des rapports générés par les utilisateurs, des e‑mails automatisés ou même de la documentation avant la mise en production. Bonne nouvelle : avec Aspose.Words AI, vous pouvez le faire de façon programmatique, et le processus s’intègre parfaitement dans un workflow C# classique. + +Dans ce guide, nous passerons en revue tout ce que vous devez savoir : du chargement d’un fichier DOCX en C# à l’appel du vérificateur de grammaire IA et à l’interprétation des résultats. À la fin, vous disposerez d’un extrait prêt à l’emploi qui affiche la sévérité, le message et le remplacement suggéré pour chaque problème—sans copier‑coller manuel. + +## Ce que vous allez apprendre + +- **Comment vérifier la grammaire** dans un document Word à l’aide d’Aspose.Words AI. +- Les étapes exactes pour **charger un fichier DOCX C#** avec la classe `Document`. +- Comment manipuler l’objet `GrammarCheckResult`, parcourir les problèmes et afficher des diagnostics utiles. +- Les pièges courants (comme les licences manquantes) et des astuces pour rendre la solution prête pour la production. + +> **Prérequis :** .NET 6.0+ (ou .NET Framework 4.6+), Visual Studio 2022 (ou tout IDE de votre choix) et une licence Aspose.Words for .NET (l’essai gratuit suffit pour les tests). Si vous n’avez pas encore installé les packages NuGet, exécutez : + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Passons maintenant à l’essentiel. + +## Étape 1 : Charger un fichier DOCX en C# + +Avant que la vérification grammaticale puisse s’exécuter, le document doit être chargé en mémoire. Aspose.Words rend cela possible en une seule ligne, mais quelques nuances méritent d’être soulignées. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Pourquoi c’est important :** +- L’utilisation de `Path.Combine` garantit la compatibilité multiplateforme. +- La vérification d’existence évite un plantage à l’exécution qui masquerait autrement la logique de vérification grammaticale. +- Lorsque vous **chargez un fichier DOCX C#**, Aspose analyse tous les styles, en‑têtes, pieds‑de‑page et même le texte masqué, offrant à l’IA une vue complète du document. + +> **Astuce :** Si vous devez travailler avec des flux (par ex. des fichiers provenant d’un téléchargement web), vous pouvez remplacer l’appel `new Document(docPath)` par `new Document(stream)`. + +## Étape 2 : Choisir le modèle IA pour la vérification grammaticale + +Aspose.Words AI prend en charge plusieurs modèles, des versions légères locales aux variantes cloud basées sur GPT. Pour la plupart des scénarios, **GPT‑3.5 Turbo** offre un bon compromis entre rapidité et précision. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Pourquoi choisir GPT‑3.5 Turbo ?** +- Il est suffisamment rapide pour traiter des dizaines de fichiers par minute en batch. +- Le coût (si vous êtes sur un plan payant) est inférieur à celui de GPT‑4 tout en détectant la majorité des erreurs courantes. +- L’API gère automatiquement les limites de tokens, vous n’avez donc pas besoin de découper manuellement les documents volumineux. + +Si vous préférez une approche hors‑ligne, remplacez `AiModelType.Gpt35Turbo` par `AiModelType.Local` (nécessite le package optionnel du modèle hors‑ligne). + +## Étape 3 : Parcourir les problèmes et afficher des retours utiles + +L’objet `GrammarCheckResult` contient une collection d’objets `GrammarIssue`. Chaque problème fournit la sévérité, un message lisible et un remplacement suggéré. Affichons‑les de façon lisible. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Ce que signifient les champs :** +- `Severity` – généralement `Info`, `Warning` ou `Error`. Considérez `Error` comme une correction obligatoire avant la publication. +- `Message` – une description concise du problème (par ex. « Accord sujet‑verbe »). +- `SuggestedReplacement` – la correction proposée par l’IA ; vous pouvez l’appliquer automatiquement si vous avez confiance en le modèle, ou la présenter à un relecteur humain. + +> **Cas limite :** Certains problèmes peuvent avoir un `SuggestedReplacement` vide (par ex. des suggestions de style). Dans ce cas, il suffit de signaler l’emplacement pour une révision manuelle. + +## Exemple complet fonctionnel + +En rassemblant le tout, voici une application console autonome que vous pouvez copier‑coller dans un nouveau projet .NET. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Sortie attendue (exemple) :** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Si vous exécutez le programme sur un document sans faute, vous verrez la ligne « ✅ No grammar issues detected. » à la place. + +## Gestion des pièges courants + +| Problème | Pourquoi cela arrive | Solution rapide | +|----------|----------------------|-----------------| +| **LicenseException** | Les bibliothèques Aspose nécessitent une licence valide pour la production. | Insérez `License license = new License(); license.SetLicense("Aspose.Words.lic");` au début de `Main`. | +| **Network timeout** | L’appel au modèle IA atteint le cloud et dépasse le délai d’attente par défaut de 100 s. | Augmentez le timeout via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` avant d’appeler `CheckGrammar`. | +| **Documents volumineux (> 10 MB)** | Certains modèles cloud tronquent l’entrée. | Divisez le document en sections avec `document.Sections` et exécutez les vérifications par section, puis agrégerez les résultats. | +| **Suggestions manquantes** | Le modèle n’a pas pu générer de remplacement (ex. formulation ambiguë). | Enregistrez le problème pour une révision manuelle ; n’appliquez pas automatiquement les suggestions vides. | + +## Extension de la solution + +- **Correction automatique :** Parcourez `grammarResult.Issues` et remplacez le texte avec `document.Range.Replace`. Pensez à sauvegarder une copie du fichier original au préalable. +- **Traitement en batch :** Enveloppez le flux complet dans un `foreach` sur un répertoire de fichiers DOCX. Enregistrez chaque rapport sous forme de fichier JSON pour une analyse ultérieure. +- **Intégration avec ASP.NET :** Exposez un endpoint qui accepte un DOCX téléchargé, exécute la vérification et renvoie une charge JSON contenant les problèmes. + +## Illustration + +how to check grammar flow diagram + +*Le diagramme ci‑dessus visualise le processus en trois étapes : charger le DOCX → exécuter la vérification grammaticale IA → afficher les problèmes.* + +## Conclusion + +Nous avons couvert **comment vérifier la grammaire** dans un document Word avec C#, démontré le code exact pour **charger un fichier DOCX C#**, et expliqué comment interpréter les retours générés par l’IA. Avec Aspose.Words AI, vous disposez d’un moteur de grammaire puissant, basé sur le cloud, qui s’intègre sans effort à n’importe quelle application .NET. + +Et après ? Essayez d’automatiser la boucle de correction, testez le nouveau `AiModelType.Gpt4` pour des suggestions encore plus précises, ou combinez cela avec une bibliothèque de vérification orthographique pour créer une chaîne de relecture complète. Les possibilités sont pratiquement infinies, et vous avez maintenant une base solide pour construire votre solution. + +Des questions ou un cas particulier qui pose problème ? Laissez un commentaire ci‑dessous, et bon codage ! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/french/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/french/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..c2632ef1fc --- /dev/null +++ b/words/french/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Comment utiliser les LLM pour éditer des documents avec Aspose – apprenez + à remplacer le texte d’un paragraphe, à vous connecter à un LLM local et à réécrire + le texte à l’aide de l’IA. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: fr +og_description: Comment utiliser un LLM pour éditer des documents avec Aspose. Ce + guide montre comment se connecter à un LLM local, remplacer le texte d’un paragraphe + et réécrire le texte à l’aide de l’IA. +og_title: Comment utiliser LLM avec Aspose.Words – Réécrire des paragraphes en C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Comment utiliser LLM avec Aspose.Words – Réécrire des paragraphes en C# +url: /fr/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment utiliser LLM avec Aspose.Words – Réécrire des paragraphes en C# + +Vous êtes-vous déjà demandé **comment utiliser LLM** pour peaufiner un document Word sans l’ouvrir manuellement ? Vous n’êtes pas le seul. De nombreux développeurs se heurtent à un mur lorsqu’ils doivent *remplacer le texte d’un paragraphe* de façon programmatique mais ne disposent pas d’un flux de travail propre basé sur l’IA. + +Dans ce tutoriel, nous allons connecter un modèle de langage de grande taille local, lui fournir un extrait d’un fichier `.docx`, lui demander de **réécrire le texte avec l’IA**, puis enregistrer le document mis à jour — le tout avec Aspose.Words. À la fin, vous disposerez d’une application console C# prête à l’emploi qui démontre l’ensemble du pipeline. + +> **Ce que vous obtiendrez :** un exemple complet et exécutable, des explications pour chaque étape, des astuces pour les cas limites, et des idées pour étendre la solution. + +## Ce dont vous avez besoin + +- **.NET 6+** (ou .NET Framework 4.7.2 – le code fonctionne dans les deux environnements) +- **Aspose.Words for .NET** (package NuGet `Aspose.Words`) +- Un **serveur LLM local** exposant un simple endpoint HTTP `/generate` (par ex. Ollama, LMStudio, ou un service Flask personnalisé) +- Une connaissance de base du C# et du code client HTTP + +Aucun SDK supplémentaire n’est requis ; tout le reste vit dans le code que nous écrirons ensemble. + +## Étape 1 : Comment utiliser LLM pour remplacer le texte d’un paragraphe + +La première chose à faire est d’identifier le paragraphe que nous voulons modifier. Aspose.Words rend cela très simple en exposant un modèle d’objets riche. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Pourquoi c’est important :** +Sélectionner le bon nœud empêche d’écraser accidentellement des titres ou des tableaux. En utilisant l’approche **replace paragraph text**, nous conservons la structure du document tout en ne touchant que le contenu qui nous intéresse. + +> **Astuce :** Si votre document comporte des sections de longueur variable, utilisez `document.GetChildNodes(NodeType.Paragraph, true)` et LINQ pour localiser un paragraphe par son texte ou son style. + +## Étape 2 : Connecter à un endpoint LLM local + +Maintenant que nous avons le texte, nous devons l’envoyer au LLM. L’exemple utilise une classe d’enveloppe simple `LocalLargeLanguageModel` qui masque la plomberie HTTP. Vous pouvez la remplacer par des appels `HttpClient` si vous le préférez. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Pourquoi nous nous connectons ainsi :** +Une configuration **connect to local llm** élimine la latence, garde les données sur site et évite les coûts d’API. L’enveloppe rend également le code ultérieur plus lisible, nous permettant de nous concentrer sur la logique **rewrite text using ai**. + +## Étape 3 : Réécrire le texte avec l’IA via Aspose.Words + +Avec le texte du paragraphe en main et le LLM prêt, nous construisons une invite qui indique exactement au modèle ce que nous voulons — réécrire dans un ton formel. Vous pouvez ajuster l’invite pour d’autres styles (amical, technique, etc.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Pourquoi cela fonctionne :** +Les LLM sont pilotés par des invites ; fournir des instructions explicites (“Rewrite … in a formal tone”) donne des résultats cohérents. L’étape **rewrite text using ai** est le cœur du tutoriel – elle montre comment l’IA peut être intégrée directement dans les flux de travail de documents. + +## Étape 4 : Modifier le document et enregistrer les changements + +Nous remplaçons maintenant les runs originaux par le nouveau contenu. Aspose.Words stocke le texte dans des objets `Run`, donc les vider d’abord évite les artefacts de formatage résiduels. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Note sur les cas limites :** +Si le paragraphe original contenait un formatage mixte (gras, italique) vous voudrez peut‑être préserver les styles. Dans ce cas, créez un nouveau `Run`, copiez les paramètres `Font` d’origine, puis affectez son `Text` à `revisedText`. + +## Exemple complet fonctionnel + +Voici le programme complet que vous pouvez copier‑coller dans un projet console. N’oubliez pas d’installer le package NuGet Aspose.Words d’abord (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Résultat attendu + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Ouvrez `output.docx` – vous verrez que le troisième paragraphe affiche maintenant la version polie. + +## Questions fréquentes & Pièges + +| Question | Réponse | +|----------|--------| +| **Et si mon LLM renvoie du JSON avec des champs supplémentaires ?** | Ajustez `GenerateText` pour désérialiser la propriété correcte ou analysez la réponse manuellement. | +| **Puis‑je traiter plusieurs paragraphes à la fois ?** | Oui – parcourez `document.FirstSection.Body.Paragraphs` et appliquez la même logique d’invite, éventuellement en ajoutant un indice de paragraphe à l’invite pour le contexte. | +| **Mon serveur LLM utilise une authentification ?** | Ajoutez un en‑tête au `HttpClient` avant le POST : `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Le formatage est perdu après le remplacement.** | Conservez les paramètres `Run.Font` d’origine : créez un nouveau `Run`, copiez `originalRun.Font.Clone()`, puis définissez son `Text`. | +| **Le LLM renvoie parfois des chaînes vides.** | Implémentez un fallback – si `revisedText.Trim().Length == 0`, conservez le texte original ou réessayez avec une invite plus simple. | + +## Étendre la solution + +Maintenant que vous avez maîtrisé **how to use llm** pour un seul paragraphe, envisagez les étapes suivantes : + +- **Traitement par lots :** Parcourez chaque paragraphe et réécrivez‑le dans un style choisi (par ex. “rendre tout le texte concis”). +- **Réécriture sensible au style :** Transmettez le nom du style du paragraphe original dans l’invite afin que le LLM respecte les titres vs le corps du texte. +- **Intégration à une pipeline CI :** Automatisez le polissage de documents dans le cadre d’un processus de génération de documentation. +- **Invites alternatives :** Essayez “summarize this paragraph” ou “translate this paragraph to Spanish” pour explorer toute la puissance de **rewrite text using ai**. + +## Conclusion + +Nous avons parcouru l’ensemble du flux **how to use llm** avec Aspose.Words : charger un document, **connect to local llm**, extraire un paragraphe, **rewrite text using ai**, **replace paragraph text**, puis enregistrer le résultat. Le code est autonome, fonctionne immédiatement, et montre une façon concrète de combiner IA et automatisation de documents traditionnelle. + +Essayez, ajustez les invites, et laissez + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/french/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/french/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..cbb494e320 --- /dev/null +++ b/words/french/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Résumez rapidement un document Word et traduisez le texte avec Google. + Apprenez à utiliser Anthropic Claude, à créer un résumé à partir d’un rapport et + à traduire le texte avec Google dans un seul tutoriel C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: fr +og_description: Résumez instantanément un document Word et traduisez le texte avec + Google. Ce guide montre comment utiliser Anthropic Claude et Aspose.Words pour créer + un résumé à partir d’un rapport. +og_title: Résumer un document Word en C# – Étape par étape avec Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Résumer un document Word en C# – Guide complet avec Anthropic Claude +url: /fr/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Résumer un document Word en C# – Guide complet avec Anthropic Claude + +Vous avez déjà eu besoin de **résumer un document Word** mais vous vous êtes senti bloqué à jongler avec les API et du code trop verbeux ? Vous n'êtes pas seul. Dans de nombreux projets—rapports annuels, mémoires juridiques ou articles de recherche—extraire un aperçu concis est un problème quotidien. Heureusement, la combinaison d'Aspose.Words et d'Anthropic Claude rend cela un jeu d'enfant, et vous pouvez même ajouter une traduction rapide avec Google pendant que vous y êtes. + +Dans ce tutoriel, nous passerons en revue tout ce que vous devez savoir : charger un fichier .docx volumineux, appeler le modèle Claude V2 pour générer un résumé, traduire une phrase avec Google, et gérer les problèmes les plus courants. À la fin, vous pourrez **créer un résumé à partir d'un rapport** en quelques lignes de C#. + +## Prérequis + +- .NET 6+ (ou .NET Core 3.1) installé +- Une licence Aspose.Words for .NET (ou un essai gratuit) +- Accès à l'API Anthropic Claude V2 (vous aurez besoin d'une clé API) +- Connectivité Internet pour Google Translator +- Visual Studio 2022 ou votre IDE C# préféré + +Aucun package NuGet supplémentaire au-delà de `Aspose.Words` et `Aspose.Words.AI` n'est requis ; la classe Translator est fournie avec la même bibliothèque. + +## Étape 1 – Charger le document Word source + +La première chose à faire est de charger le fichier .docx en mémoire. Aspose.Words rend cela trivial et, grâce à son analyseur robuste, il fonctionne avec des mises en page complexes, des tableaux et même des images incorporées. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Pourquoi c'est important :** Charger le document tôt vous permet d'inspecter les propriétés (auteur, nombre de mots) et de décider si un résumé est même nécessaire. Les gros fichiers > 10 Mo peuvent être gourmands en mémoire, donc envisagez `LoadOptions` avec `LoadFormat.Docx` si vous rencontrez des problèmes de performances. + +## Étape 2 – Résumer le document avec Anthropic Claude + +Voici la partie amusante : nous transmettons le document à Claude V2. La classe `Summarizer` abstrait l'appel HTTP, la gestion des jetons et les nouvelles tentatives. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Comment ça fonctionne :** +> 1. **Chunking** – Aspose divise automatiquement le document en morceaux gérables (≈ 2 KB chacun) pour respecter les limites de jetons de Claude. +> 2. **Prompt engineering** – La bibliothèque envoie une invite comme « Provide a concise executive summary of the following text: » suivie de chaque morceau. +> 3. **Aggregation** – Claude renvoie des résumés partiels qui sont assemblés pour former le `summaryText` final. + +### Cas limites et conseils + +- **Rapports très volumineux** (> 100 pages) peuvent dépasser la fenêtre de contexte de Claude. Si vous voyez une sortie tronquée, activez `SummarizerOptions.MaxChunkSize` avec des valeurs plus petites. +- **Source non‑anglaise** – Claude fonctionne mieux avec l'anglais ; pour d'autres langues, traduisez d'abord (voir Étape 4) puis résumez. +- **Limites de débit** – Anthropic impose des plafonds par minute. Enveloppez l'appel dans une boucle de nouvelle tentative avec un back‑off exponentiel si vous recevez une réponse `429`. + +## Étape 3 – Vérifier la sortie du résumé + +Avant de continuer, il est recommandé de vérifier que le résumé n'est pas vide et qu'il respecte les attentes de longueur (par ex., 5‑10 % du nombre de mots original). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Si le ratio semble trop bas (< 2 %), vous pourriez vouloir ajuster la propriété `SummarizerOptions.SummaryLength` pour demander une sortie plus longue. + +## Étape 4 – Traduire le texte avec Google + +Maintenant que nous avons un résumé anglais concis, ajoutons une traduction rapide. La classe `Translator` utilise le point d'accès public de traduction de Google (aucune clé API requise pour les courtes phrases, mais en production vous devriez passer à l'API Cloud Translation payante). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Pourquoi Google ?** C’est rapide, largement supporté, et le point d'accès gratuit gère les courtes chaînes sans authentification. Pour les traductions en masse, regroupez les appels et respectez les limites d'utilisation de Google. + +### Traduire le résumé complet (optionnel) + +Si vous avez besoin du résumé complet en espagnol (ou toute autre langue), transmettez simplement `summaryText` à `Translator.Translate`. Soyez conscient de la limite de taille de requête de 5 KB ; vous devrez peut-être diviser le résumé en morceaux plus petits. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Étape 5 – Enregistrer le résumé dans un fichier Word (bonus) + +Souvent, l'utilisateur final s'attend à un document téléchargeable plutôt qu'à une sortie console. Créons un nouveau `.docx` qui contient à la fois les versions anglaise et espagnole. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Astuce pratique + +Lorsque vous intégrez le résumé dans un nouveau fichier Word, conservez le formatage original minimal (utilisez le style `Normal`). Les styles complexes de la source peuvent provoquer des changements de mise en page inattendus. + +## Exemple complet fonctionnel + +Ci-dessous le programme **complet, prêt à copier‑coller** qui assemble tout. Il se compile avec un simple `dotnet run` après avoir ajouté les packages Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Sortie console attendue** (troncée pour plus de concision) : + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Questions fréquentes + +| Question | Réponse | +|----------|--------| +| *Puis-je utiliser un autre modèle d'IA ?* | Oui. Remplacez `SummarizerModel.AnthropicClaudeV2` par `SummarizerModel.OpenAIGPT4` (nécessite une clé OpenAI) ou tout autre fournisseur répertorié dans l'énumération. | +| *Et si le document contient des sections protégées ?* | Aspose lèvera `ProtectedDocumentException`. Déverrouillez‑le d'abord avec `LoadOptions.Password` ou demandez une copie non protégée. | +| *Ai‑je besoin d'une licence Aspose payante pour la production ?* | L'essai gratuit fonctionne jusqu'à 20 pages. Pour des rapports plus volumineux, une licence supprime la limite de pages et ajoute des optimisations de performance. | +| *Le traducteur Google est‑il fiable pour de gros blocs ?* | Pour les courtes chaînes, c'est correct. Pour les traductions en masse, passez à l'API Cloud Translation afin d'éviter les limites de taille de requête et d'obtenir une meilleure détection de la langue. | + +## Conclusion + +Nous venons de **résumer un document Word** en utilisant Aspose.Words avec le modèle Anthropic Claude V2, puis **traduire du texte avec Google** vers + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/french/net/basic-conversions/_index.md b/words/french/net/basic-conversions/_index.md index 2908e53d29..efdbcb73e3 100644 --- a/words/french/net/basic-conversions/_index.md +++ b/words/french/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Conversions de base vous guide dans les conversions de documents de base avec la | [Enregistrer un PDF au format Word (Docx)](./pdf-to-docx/) | Découvrez comment convertir un PDF en document Word (Docx) avec Aspose.Words pour .NET grâce à ce guide détaillé, étape par étape. Idéal pour les développeurs. | | [Convertir Word en PDF en C# avec Aspose.Words – Guide](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Apprenez à convertir un document Word en PDF en C# avec Aspose.Words grâce à ce guide étape par étape. | | [Comment exporter LaTeX depuis Word – Guide étape par étape](./how-to-export-latex-from-word-step-by-step-guide/) | Apprenez à exporter le contenu d'un document Word au format LaTeX avec Aspose.Words pour .NET grâce à ce guide détaillé étape par étape. | +| [Créer un PDF accessible à partir de DOCX en C# – Comment convertir Word en PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Apprenez à générer un PDF accessible depuis un fichier DOCX en C# avec Aspose.Words, incluant les balises d'accessibilité. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/french/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..d3f197238e --- /dev/null +++ b/words/french/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,213 @@ +--- +category: general +date: 2026-05-04 +description: Créer un PDF accessible à partir d’un fichier DOCX en C#. Apprenez comment + convertir Word en PDF, enregistrer Word au format PDF et exporter le DOCX en PDF + avec conformité d’accessibilité. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: fr +og_description: Créez un PDF accessible à partir d’un fichier DOCX en C#. Suivez ce + tutoriel étape par étape pour convertir Word en PDF, enregistrer Word en PDF et + exporter un docx en PDF avec une accessibilité complète. +og_title: Créer un PDF accessible à partir de DOCX en C# – Guide rapide +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Créer un PDF accessible à partir de DOCX en C# – Comment convertir Word en + PDF +url: /fr/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Créer un PDF accessible à partir d'un DOCX en C# – Comment convertir Word en PDF + +Vous avez déjà eu besoin de **créer un PDF accessible** à partir d'un document Word mais vous n'étiez pas sûr de la bibliothèque à choisir ? Vous n'êtes pas seul—de nombreux développeurs rencontrent le même obstacle lorsqu'ils doivent respecter les normes PDF/UA pour l'accessibilité. La bonne nouvelle, c'est qu'avec Aspose.Words, vous pouvez transformer un `.docx` en un PDF conforme en quelques lignes de code seulement, et vous obtiendrez un fichier que les lecteurs d'écran peuvent réellement lire. + +Dans ce tutoriel, nous passerons en revue tout ce que vous devez savoir pour **convertir Word en PDF**, **enregistrer Word en PDF**, et même **exporter docx en PDF** avec conformité PDF/UA‑1 (ou PDF/UA‑2). À la fin, vous disposerez d'un extrait C# prêt à l'emploi, comprendrez pourquoi chaque paramètre est important, et serez équipé pour gérer les cas limites courants tels que les polices manquantes ou les configurations de page personnalisées. + +## Prérequis + +- .NET 6.0 ou ultérieur (le code fonctionne également avec .NET Framework 4.6+) +- Une licence Aspose.Words pour .NET (ou une clé d'évaluation gratuite) +- Une compréhension de base de C# et Visual Studio (ou tout IDE de votre choix) +- Un fichier DOCX que vous souhaitez rendre accessible (nous l'appellerons `input.docx`) + +> **Astuce :** Si vous utilisez la version d'évaluation gratuite, rappelez‑vous que le PDF généré contiendra un petit filigrane « Evaluation ». + +## Étape 1 : Installer le package NuGet Aspose.Words + +Avant de pouvoir écrire du code C#, la bibliothèque Aspose.Words doit être ajoutée au projet. + +```bash +dotnet add package Aspose.Words +``` + +L'exécution de la commande restaure le `Aspose.Words.dll` et rend les espaces de noms disponibles. Cette étape est essentielle car la classe `PdfSaveOptions` se trouve dans ce package. + +## Étape 2 : Charger le fichier DOCX source + +La première étape logique consiste à charger le document Word que vous souhaitez transformer. Considérez cela comme l'ouverture d'un livre avant de commencer à modifier ses pages. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pourquoi c’est important :** Charger le document crée une représentation en mémoire qui inclut tous les styles, images et métadonnées. Si le fichier est corrompu, `Document` lèvera une exception—il peut donc être judicieux d’envelopper cela dans un bloc try/catch pour le code de production. + +## Étape 3 : Configurer les options d’enregistrement PDF pour l’accessibilité + +Aspose.Words vous permet de spécifier le niveau de conformité PDF. PDF/UA‑1 est la norme d’accessibilité originale, tandis que PDF/UA‑2 ajoute quelques balises plus récentes. Choisissez celle qui correspond aux exigences de votre client. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Ce que fait la « Conformité » :** Définir `PdfCompliance.PdfUax1` indique à Aspose.Words d’intégrer les balises appropriées, un ordre de lecture logique et du texte alternatif pour les images—exactement ce que les logiciels de lecteur d’écran recherchent. + +## Étape 4 : Enregistrer le document en tant que PDF accessible + +Le travail lourd est maintenant terminé ; nous indiquons simplement à Aspose.Words d’écrire le fichier PDF en utilisant les options que nous venons de définir. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Après l'exécution de cette ligne, vous trouverez `output.pdf` dans le dossier spécifié. Ouvrez-le avec Adobe Acrobat Reader et vérifiez **File → Properties → Description → PDF/A and PDF/UA** pour confirmer la conformité. + +## Étape 5 : Vérifier l’accessibilité (Optionnel mais recommandé) + +Bien que le code garantisse une sortie PDF balisée, une vérification manuelle rapide aide à détecter tout contenu personnalisé qui pourrait nécessiter une attention supplémentaire. + +1. Ouvrez `output.pdf` dans Adobe Acrobat Pro. +2. Allez dans **Tools → Accessibility → Full Check**. +3. Lancez la vérification et examinez les avertissements éventuels (par ex., texte alternatif manquant pour les images personnalisées). + +Si le rapport ne montre aucune erreur, vous avez réussi à **créer un PDF accessible** qui respecte les normes PDF/UA‑1. + +## Variations courantes et cas limites + +### Conversion de plusieurs fichiers DOCX dans une boucle + +Si vous avez un lot de documents, encapsulez la logique de chargement‑enregistrement dans une boucle `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Passer à PDF/UA‑2 + +Il suffit de changer l’énumération `Compliance` : + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Gestion des polices personnalisées + +Si votre DOCX utilise des polices qui ne sont pas installées sur le serveur, intégrez‑les : + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +L’intégration garantit que le PDF aura le même aspect sur n’importe quelle machine—un détail crucial lorsque vous **exportez docx en pdf** pour des parties prenantes externes. + +## Exemple complet fonctionnel + +Ci‑dessus se trouve le programme complet, prêt à être exécuté, qui assemble toutes les pièces. Copiez‑collez‑le dans une application console, ajustez les chemins, et appuyez sur **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Résultat attendu :** Un fichier nommé `output.pdf` qui s’ouvre dans n’importe quel lecteur PDF, porte les balises d’accessibilité appropriées, et peut être partagé avec des utilisateurs qui dépendent de la technologie d’assistance. + +![Exemple de création de PDF accessible](/images/create-accessible-pdf.png "Capture d'écran montrant un document conforme PDF/UA‑1") + +*Texte alternatif de l'image :* *exemple de création de pdf accessible – capture d'écran d'un document conforme PDF/UA‑1 ouvert dans Adobe Acrobat.* + +## Questions fréquemment posées + +- **Cela fonctionne-t-il avec .NET Core ?** + Absolument. Aspose.Words est multiplateforme, donc le même code s’exécute sous Windows, Linux et macOS. + +- **Et si mon DOCX contient des macros ?** + Les macros sont ignorées pendant la conversion ; seul le contenu visible est rendu dans le PDF. + +- **Puis-je ajouter un titre de métadonnées PDF personnalisé ?** + Oui—définissez `pdfSaveOptions.Metadata.Title = "Your Custom Title";` avant l’enregistrement. + +- **PDF/UA‑2 est-il largement supporté ?** + La plupart des lecteurs PDF modernes comprennent PDF/UA‑2, mais si vous ciblez des outils plus anciens, restez sur PDF/UA‑1. + +## Conclusion + +Nous venons de vous montrer comment **créer un PDF accessible** à partir d’un fichier DOCX en utilisant Aspose.Words, couvrant tout, de l’installation du package NuGet à la vérification de la conformité PDF/UA. En suivant ces étapes, vous pouvez de manière fiable **convertir Word en PDF**, **enregistrer Word en PDF**, et **exporter docx en PDF** tout en respectant les normes d’accessibilité—une compétence indispensable pour tout développeur travaillant sur des pipelines de documents d’entreprise. + +Prêt pour le prochain défi ? Essayez d’ajouter un en‑tête/pied de page personnalisé, d’intégrer une balise PDF/A‑2b, ou d’automatiser le processus dans une API web ASP.NET Core. Les possibilités sont infinies, et les bases que vous avez posées ici vous permettront de les aborder avec confiance. + +Bon codage, et que vos PDF soient toujours lisibles ! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/french/net/programming-with-markdownsaveoptions/_index.md b/words/french/net/programming-with-markdownsaveoptions/_index.md index 62774c531e..5ed33a50ea 100644 --- a/words/french/net/programming-with-markdownsaveoptions/_index.md +++ b/words/french/net/programming-with-markdownsaveoptions/_index.md @@ -71,6 +71,8 @@ Apprenez à enregistrer un document Word au format Markdown avec un guide comple ### [Convertir Word en Markdown en C# – Guide complet avec extraction d'images](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) +### [Comment enregistrer les images – Convertir DOCX en Markdown avec Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/french/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..04d34cd492 --- /dev/null +++ b/words/french/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Apprenez comment enregistrer les images lors de la conversion d’un DOCX + en Markdown avec Aspose.Words. Ce guide montre également comment extraire les images + de Word et enregistrer Word au format Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: fr +og_description: Comment enregistrer les images lors de la conversion d’un DOCX en + Markdown avec Aspose.Words. Guide étape par étape avec le code C# complet. +og_title: Comment enregistrer des images – Convertir DOCX en Markdown avec Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Comment enregistrer des images – Convertir DOCX en Markdown avec Aspose.Words +url: /fr/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment enregistrer les images – Convertir DOCX en Markdown avec Aspose.Words + +Vous vous êtes déjà demandé **comment enregistrer les images** lorsque vous devez transformer un fichier Word en Markdown ? Vous n'êtes pas le seul. De nombreux développeurs se heurtent à un mur lorsque la conversion place les images dans un chaos de liens brisés, voire les perd complètement. La bonne nouvelle, c’est qu’Aspose.Words vous offre un contrôle fin, vous permettant d’extraire les images de Word, de choisir où les placer, et d’obtenir tout de même une sortie Markdown propre. + +Dans ce tutoriel, nous parcourrons un exemple complet, prêt à l’emploi en C#, qui montre **comment enregistrer les images** dans un dossier dédié tout en convertissant un `.docx` en `.md`. En chemin, nous aborderons également **convert docx to markdown**, **extract images from word**, et la question plus large de **how to convert docx** de façon à **save word as markdown** sans perdre aucun actif. + +## Prérequis + +- .NET 6.0 ou version ultérieure (l’API fonctionne de la même façon sur .NET Framework 4.7+) +- Une licence active Aspose.Words ou un essai gratuit (la version gratuite ajoute un filigrane à la sortie, mais le code fonctionne de la même façon) +- Un document Word contenant déjà des images (par ex. `DocWithImages.docx`) +- Visual Studio 2022 ou tout éditeur capable de compiler des projets C# + +> **Astuce pro :** Si vous utilisez une version d’essai, vous pouvez tout de même tester la logique d’enregistrement des images ; il suffit de se rappeler que le PDF/MD final contiendra le filigrane d’essai. + +## Vue d’ensemble de la solution + +À haut niveau, le processus ressemble à ceci : + +1. Charger le `.docx` source avec `Document`. +2. Créer un objet `MarkdownSaveOptions` et y brancher un `IResourceSavingCallback`. +3. Dans le callback, déterminer le dossier et le nom de fichier pour chaque image. +4. Enregistrer le document en Markdown ; le callback écrit chaque image sur le disque. + +C’est le cœur de **how to save images** pendant une conversion. Le même schéma fonctionne pour d’autres types de ressources (polices, CSS, etc.) si vous en avez besoin. + +## Étape 1 – Charger le DOCX contenant les images + +Tout d’abord, nous avons besoin d’une instance `Document` qui pointe vers le fichier Word que vous souhaitez convertir. Rien de compliqué ; juste un appel de constructeur direct. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Pourquoi c’est important :** Le chargement du document est le seul moment où Aspose analyse le XML Word, donc toute police manquante ou toute partie corrompue déclenchera une exception immédiatement—avant même de commencer à enregistrer les images. + +## Étape 2 – Configurer MarkdownSaveOptions avec un callback d’enregistrement d’image + +La classe `MarkdownSaveOptions` vous permet d’intercepter le processus d’enregistrement via `ResourceSavingCallback`. Ce callback reçoit un objet `ResourceSavingArgs` pour chaque ressource externe (images, CSS, etc.) qu’Aspose doit écrire. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implémentation du callback + +Voici l’implémentation complète de `ImageSavingCallback`. Elle crée un sous‑dossier `Images` à côté du fichier Markdown, attribue à chaque image un nom séquentiel (`img_0.png`, `img_1.jpg`, …), et vous laisse éventuellement diffuser l’image ailleurs (par ex. vers un bucket cloud). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Comment cela vous aide :** En personnalisant `args.FileName` vous contrôlez exactement **how to save images**—que ce soit dans un dossier plat, une hiérarchie basée sur la date, ou même un BLOB de base de données. Le callback s’exécute pour chaque image, vous n’avez donc jamais besoin de post‑traiter le fichier Markdown plus tard. + +## Étape 3 – Enregistrer le document en Markdown + +Une fois les options et le callback prêts, la conversion réelle ne tient qu’à une ligne. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Lorsque la ligne se termine, vous obtenez : + +- `Doc.md` – la représentation Markdown de votre contenu Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … – chaque image extraite du DOCX original. + +## Exemple complet, prêt à l’exécution + +En rassemblant le tout, voici une application console autonome que vous pouvez copier‑coller dans un nouveau projet C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Résultat attendu + +Après avoir exécuté le programme : + +- Ouvrez `C:\Docs\Doc.md` dans n’importe quel éditeur de texte. Vous verrez des liens d’image Markdown comme `![](Images/img_0.png)`. +- Le dossier `Images` contiendra chaque image extraite, nommée séquentiellement. +- Le fichier Markdown s’affichera correctement dans n’importe quel visualiseur supportant les images locales (aperçu VS Code, GitHub, etc.). + +## Foire aux questions (FAQ) + +### Cela fonctionne‑t‑il avec d’autres formats d’image (SVG, TIFF) ? + +Oui. `Path.GetExtension(args.FileName)` conserve l’extension d’origine, donc SVG, TIFF, BMP et même EMF sont enregistrés tels quels. La seule mise en garde est que certains rendus Markdown ne peuvent pas afficher SVG en ligne ; dans ce cas, vous pourriez convertir le SVG en PNG au préalable. + +### Et si je dois incorporer les images en Base64 au lieu de fichiers séparés ? + +Dans `ResourceSaving`, vous pouvez remplacer l’écriture physique du fichier par un flux mémoire puis modifier manuellement le lien Markdown. Aspose n’expose pas de commutateur direct “embed as Base64”, mais le callback vous donne le contrôle total sur `args.Stream`. + +### En quoi cela diffère‑t‑il de la méthode intégrée `ExportImages` ? + +`ExportImages` extrait toutes les images vers un dossier **sans** générer de Markdown. Notre callback couple les deux actions, garantissant que les noms de fichiers image correspondent aux références dans le `.md`. Cette correspondance est la clé de **how to save images** correctement pendant la conversion. + +### Puis‑je convertir plusieurs fichiers DOCX en lot ? + +Absolument. Enveloppez la logique principale dans une boucle `foreach (var file in Directory.GetFiles(..., "*.docx"))`, ajustez les chemins de sortie, et réutilisez le même `ImageSavingCallback`. N’oubliez pas de créer un nouveau `MarkdownSaveOptions` pour chaque document, car `args.DestinationFileName` change à chaque itération. + +## Cas limites & bonnes pratiques + +| Situation | Points d’attention | Solution recommandée | +|-----------|----------------------|----------------------| +| **DOCX volumineux (des centaines de Mo)** | Pression mémoire lors du chargement | Utilisez `LoadOptions` avec `LoadFormat.Docx` et définissez `LoadOptions.LoadFormat = LoadFormat.Docx` pour charger les parties en flux | +| **Conflit de noms d’image** | Si la source possède déjà `img_0.png` dans le dossier cible, vous pourriez écraser | Ajoutez un GUID : `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Dossier de sortie en lecture‑seule** | L’enregistrement lève `UnauthorizedAccessException` | Assurez‑vous que le processus possède les permissions adéquates ou choisissez un chemin accessible en écriture | +| **Ressources non‑image (CSS, polices)** | Le callback les reçoit également | Protégez avec `if (args.ResourceType != ResourceType.Image) return;` (déjà montré) | +| **Noms de fichiers Unicode** | Certains systèmes de fichiers mal gèrent les caractères | Utilisez `Path.GetInvalidFileNameChars()` pour nettoyer `args.FileName` avant l’affectation | + +## Sujets connexes à explorer ensuite + +- **convert docx to markdown** avec des styles de titres personnalisés (utilisez `MarkdownSaveOptions.ExportImagesAsBase64` pour les images en ligne) +- **extract images from word** en utilisant `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/french/net/working-with-fonts/_index.md b/words/french/net/working-with-fonts/_index.md index 132e4144d4..740579e66a 100644 --- a/words/french/net/working-with-fonts/_index.md +++ b/words/french/net/working-with-fonts/_index.md @@ -56,6 +56,7 @@ Que vous souhaitiez formater du texte avec différentes polices, définir des r | [Comment détecter les polices dans Aspose.Words – Gérer les avertissements et les paramètres](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Apprenez à détecter les polices, gérer les avertissements de police manquante et configurer les paramètres de police dans Aspose.Words pour .NET. | | [Comment capturer les polices dans Aspose.Words – Guide complet](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Apprenez à capturer les polices utilisées dans vos documents Word avec Aspose.Words pour .NET grâce à ce guide complet étape par étape. | | [Comment charger un DOCX et détecter les polices manquantes – Guide complet C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Apprenez à charger des fichiers DOCX et à identifier les polices manquantes avec Aspose.Words pour .NET en C#. | +| [Substitution de police Aspose : détecter les polices manquantes dans les documents Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Apprenez à détecter les polices manquantes dans les documents Word avec Aspose.Words pour .NET. | | [Activer les avertissements de substitution de police dans Aspose.Words – Guide complet](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Apprenez à activer les avertissements de substitution de police dans Aspose.Words avec ce guide complet étape par étape. | diff --git a/words/french/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/french/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..9b9c2555ee --- /dev/null +++ b/words/french/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-05-04 +description: Apprenez à utiliser la substitution de polices Aspose pour détecter les + polices manquantes lors du chargement d’un document Word et récupérer les détails + des polices manquantes — guide étape par étape. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: fr +og_description: Maîtrisez la substitution de polices Aspose pour détecter les polices + manquantes lors du chargement d’un document Word et récupérer les informations sur + les polices manquantes avec un code C# complet. +og_title: Substitution de polices Aspose – Détecter les polices manquantes dans les + documents Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Substitution de polices Aspose : détecter les polices manquantes dans les + documents Word' +url: /fr/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Détecter les polices manquantes dans les documents Word + +Vous êtes‑vous déjà demandé pourquoi un document Word apparaît incorrect sur une autre machine ? Souvent, le coupable est une police manquante, et **Aspose font substitution** est l’outil qui vous permet de repérer ces lacunes avant qu’elles ne deviennent un désastre visuel. Dans ce tutoriel, nous allons vous montrer comment **detect missing fonts** dès que vous **load a Word document**, puis **retrieve missing font** les détails afin que vous puissiez les corriger ou les remplacer. + +Nous couvrirons tout, de la configuration du rappel d’avertissement à l’obtention d’une liste propre des polices manquantes. À la fin, vous disposerez d’un extrait C# prêt à l’emploi qui indique exactement quelles polices n’ont pas été trouvées, et vous comprendrez pourquoi cela est important pour la fidélité du document. + +--- + +## Prérequis – Ce dont vous avez besoin avant de commencer + +- **Aspose.Words for .NET** (v23.12 ou version ultérieure recommandée). +- Un environnement de développement .NET (Visual Studio, Rider ou le CLI `dotnet`). +- Un fichier DOCX d’exemple qui utilise intentionnellement une police que vous n’avez pas installée — appelez‑le `DocumentWithMissingFont.docx`. +- Connaissances de base en C# — rien de compliqué, juste la capacité d’exécuter une application console. + +Si l’un de ces éléments vous est inconnu, faites une pause et installez le package NuGet : + +```bash +dotnet add package Aspose.Words +``` + +C’est tout. Pas de polices supplémentaires, pas de services externes. + +## Étape 1 : Charger le document Word (et déclencher la vérification des polices) + +La toute première chose à faire est de **load a Word document**. Aspose.Words analyse le fichier et, s’il ne trouve pas une police référencée, il place un avertissement *FontSubstitution*. Voici le code qui effectue le chargement : + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Pourquoi c’est important :** Charger le document dès le départ donne à Aspose la possibilité d’analyser chaque séquence de texte, style et objet incorporé. Si une police n’est pas trouvée sur le système ou dans le dossier de polices personnalisé, vous recevrez un avertissement ultérieurement. + +## Étape 2 : Attacher un rappel d’avertissement pour capturer les événements de substitution + +Aspose.Words utilise un mécanisme de rappel pour vous informer des problèmes tels que les polices manquantes. En assignant une implémentation de `IWarningCallback` à `doc.WarningCallback`, vous pouvez intercepter chaque avertissement au moment où il se produit. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Astuce :** Vous pouvez attacher plusieurs rappels (par ex., journalisation, mises à jour UI) en les encapsulant dans un motif composite, mais pour ce tutoriel, un seul rappel garde les choses claires. + +## Étape 3 : Implémenter le rappel d’avertissement de substitution de police + +Nous définissons maintenant la classe qui effectue réellement le travail. Le rappel reçoit un objet `WarningInfo` ; nous filtrons les éléments de type `WarningType.FontSubstitution` et stockons la description pour une utilisation ultérieure. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Ce qui se passe :** Lorsque Aspose rencontre une police manquante, il crée un avertissement tel que « Font substitution : 'Comic Sans MS' n’a pas été trouvée, utilisation de 'Arial' à la place. ». Notre rappel affiche cette ligne et l’enregistre. + +## Étape 4 : Traiter le document (optionnel) et rassembler les polices manquantes + +Si vous avez seulement besoin de **detect missing fonts**, l’étape de chargement suffit — les avertissements sont déclenchés automatiquement. Cependant, de nombreux développeurs ont également besoin de **retrieve missing font** après avoir effectué certaines opérations (par ex., sauvegarde, conversion). Ci‑dessous, nous forçons une petite opération — la sauvegarde en PDF — pour garantir que tous les avertissements soient émis, puis nous récupérons les messages collectés. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Sortie console attendue** (exemple) : +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Remarquez comment chaque ligne indique clairement la police d’origine et la police de secours choisie par Aspose. C’est le cœur du reporting **aspose font substitution**. + +## Étape 5 : Avancé – Utiliser des sources de polices personnalisées pour réduire les substitutions + +Parfois, vous *avez* les polices manquantes, mais pas dans le dossier système par défaut. Aspose.Words vous permet de pointer vers un répertoire personnalisé via `FontSettings`. Ajouter cette étape peut réduire considérablement le nombre d’avertissements de substitution. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Pourquoi ajouter cela ?** Si vous distribuez des documents sur plusieurs machines, regrouper les polices requises dans un dossier connu garantit la même apparence visuelle partout. Cela rend également votre routine **detect missing fonts** plus précise car Aspose vérifie ce dossier avant de recourir à une police de secours. + +## Exemple complet fonctionnel + +En réunissant tous les éléments, voici un programme console prêt à copier‑coller. Enregistrez‑le sous `Program.cs` et exécutez‑le avec `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Ce que vous devriez voir :** Si le DOCX source référence des polices que vous n’avez pas, la console affiche chaque ligne de substitution suivie d’un résumé concis. Si toutes les polices sont présentes, vous recevrez le message « No missing fonts were detected. ». + +## Écueils courants et comment les éviter + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **Aucun avertissement n’apparaît** | Le document n’utilise que des polices système, ou vous avez déjà ajouté un dossier personnalisé contenant les polices manquantes. | Vérifiez que le DOCX référence réellement une police indisponible. Vous pouvez l’ouvrir dans Word et changer un paragraphe pour une police rare (par ex., « Papyrus »). | +| **Messages dupliqués** | La même police est utilisée dans plusieurs séquences, entraînant plusieurs avertissements. | Dédupliquez la liste avec `Distinct()` si vous avez besoin uniquement d’un ensemble unique. | +| **Impact sur les performances avec de gros documents** | Chaque avertissement est traité sur le thread UI. | Exécutez le chargement dans une tâche en arrière‑plan ou utilisez `Parallel.ForEach` pour le post‑traitement. | +| **Police de secours incorrecte** | Le secours par défaut d’Aspose peut ne pas correspondre à votre identité visuelle. | Définissez `FontSettings.SubstitutionSettings.DefaultFontName` sur une police de secours préférée (par ex., « Calibri »). | + +## Extension de la solution – Exporter les polices manquantes en JSON + +Si vous créez un service web qui doit signaler les polices manquantes à un client, la sérialisation de la liste est triviale : + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Votre API peut maintenant renvoyer une charge utile JSON propre qu’un autre système pourra consommer. + +## Conclusion + +Dans ce guide, nous avons démontré **Aspose font substitution** de bout en bout : charger un document Word, attacher un rappel d’avertissement, capturer chaque événement *detect missing fonts*, et enfin **retrieve missing font** pour le reporting ou la remédiation. En ajoutant des dossiers de polices personnalisés optionnels, vous pouvez réduire la liste des substitutions, et avec quelques lignes supplémentaires, vous pouvez même exporter les résultats en JSON. + +Rappelez‑vous que l’intégrité visuelle de vos documents dépend des polices qu’ils utilisent. Avec la technique présentée ici, vous ne serez plus jamais surpris par un remplacement inattendu. + +Prêt à passer à l’étape suivante ? Essayez d’intégrer cette logique dans un pipeline de traitement de documents plus vaste, ou explorez les autres fonctionnalités d’Aspose.Words comme l’incorporation de polices (`doc.FontSettings.EmbeddedFonts`). Les possibilités sont infinies, et vos utilisateurs vous remercieront pour le rendu soigné. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/german/net/ai-powered-document-processing/_index.md b/words/german/net/ai-powered-document-processing/_index.md index 845cbdf0e8..696af0f745 100644 --- a/words/german/net/ai-powered-document-processing/_index.md +++ b/words/german/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ Und vergessen Sie nicht, einen Blick auf unsere [Arbeiten mit Zusammenfassungsop | [Arbeiten mit dem Google AI-Modell](./working-with-google-ai-model/) Verbessern Sie Ihre Dokumentenverarbeitung mit Aspose.Words für .NET und Google AI, um mühelos prägnante Zusammenfassungen zu erstellen. | | [Arbeiten mit Open AI-Modellen](./working-with-open-ai-model/) | Nutzen Sie die effiziente Dokumentzusammenfassung mit Aspose.Words für .NET und den leistungsstarken Modellen von OpenAI. Tauchen Sie jetzt in diesen umfassenden Leitfaden ein. | | [Arbeiten mit Zusammenfassungsoptionen](./working-with-summarize-options/) | Lernen Sie, Word-Dokumente mit Aspose.Words für .NET effektiv zusammenzufassen, mit unserer Schritt-für-Schritt-Anleitung zur Integration von KI-Modellen für schnelle Erkenntnisse. | +| [LLM mit Aspose.Words verwenden – Absätze in C# umschreiben](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Erfahren Sie, wie Sie mit LLMs und Aspose.Words in C# Absätze neu formulieren, um Inhalte zu verbessern und zu vereinfachen. | +| [Wie man Grammatik in C# prüft – Vollständiger Leitfaden für Word-Dokumente](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET Grammatik in C#-Anwendungen prüfen und Word-Dokumente automatisch korrigieren. | +| [Word-Dokument zusammenfassen in C# – Vollständiger Leitfaden mit Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET und Anthropic Claude Word-Dokumente in C# effizient zusammenfassen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/german/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..be4f925224 --- /dev/null +++ b/words/german/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Erfahren Sie, wie Sie die Grammatik in einem Word‑Dokument mit C# überprüfen. + Dieses Tutorial behandelt außerdem, wie man eine DOCX‑Datei mit C# lädt und Aspose.Words AI + für genaue Ergebnisse verwendet. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: de +og_description: Wie prüft man die Grammatik in einem Word‑Dokument mit C#? Folgen + Sie diesem Tutorial, um eine DOCX‑Datei mit C# zu laden und KI‑gestützte Grammatikprüfungen + mit Aspose.Words durchzuführen. +og_title: Wie man Grammatik in C# prüft – Vollständige Schritt‑für‑Schritt‑Anleitung +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Wie man Grammatik in C# prüft – Vollständiger Leitfaden für Word‑Dokumente +url: /de/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man Grammatik in C# prüft – Vollständiger Leitfaden für Word‑Dokumente + +Haben Sie sich schon einmal gefragt, **wie man Grammatik** in einem Word‑Dokument prüft, ohne die IDE zu verlassen? Sie sind nicht allein. Viele Entwickler müssen benutzergenerierte Berichte, automatisierte E‑Mails oder sogar Dokumentationen validieren, bevor sie ausgeliefert werden. Die gute Nachricht? Mit Aspose.Words AI können Sie das programmatisch erledigen, und der gesamte Prozess fügt sich nahtlos in einen typischen C#‑Workflow ein. + +In diesem Leitfaden gehen wir Schritt für Schritt durch alles, was Sie wissen müssen: vom Laden einer DOCX‑Datei C# bis zum Aufrufen des KI‑Grammatikprüfers und dem Interpretieren der Ergebnisse. Am Ende haben Sie ein sofort ausführbares Snippet, das für jedes Problem die Schwere, die Meldung und den vorgeschlagenen Ersatz ausgibt – ganz ohne manuelles Kopieren und Einfügen. + +## Was Sie lernen werden + +- **Wie man Grammatik** in einem Word‑Dokument mit Aspose.Words AI prüft. +- Die genauen Schritte, um **eine DOCX‑Datei C#** mit der `Document`‑Klasse zu laden. +- Wie man das `GrammarCheckResult`‑Objekt verarbeitet, über Probleme iteriert und nützliche Diagnosen ausgibt. +- Häufige Stolperfallen (wie fehlende Lizenzen) und Tipps, um die Lösung produktionsreif zu machen. + +> **Voraussetzungen:** .NET 6.0+ (oder .NET Framework 4.6+), Visual Studio 2022 (oder jede andere IDE Ihrer Wahl) und eine Aspose.Words for .NET‑Lizenz (die kostenlose Testversion reicht für Tests). Wenn Sie die NuGet‑Pakete noch nicht installiert haben, führen Sie aus: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Jetzt legen wir los. + +## Schritt 1: Eine DOCX‑Datei in C# laden + +Bevor irgendeine Grammatikprüfung stattfinden kann, muss das Dokument in den Speicher geladen werden. Aspose.Words macht das mit einer einzigen Zeile möglich, aber es gibt ein paar Nuancen, die beachtet werden sollten. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Warum das wichtig ist:** +- `Path.Combine` sorgt für plattformübergreifende Kompatibilität. +- Die Existenzprüfung verhindert einen Laufzeitabsturz, der sonst die eigentliche Grammatik‑Logik verdecken würde. +- Wenn Sie **eine DOCX‑Datei C#** **laden**, analysiert Aspose alle Stile, Kopf‑ und Fußzeilen sowie versteckten Text und gibt der KI ein vollständiges Bild des Dokuments. + +> **Pro‑Tipp:** Wenn Sie mit Streams arbeiten (z. B. Dateien, die über einen Web‑Upload kommen), können Sie den Aufruf `new Document(docPath)` durch `new Document(stream)` ersetzen. + +## Schritt 2: Das KI‑Modell für die Grammatikprüfung auswählen + +Aspose.Words AI unterstützt mehrere Modelle, von leichten lokalen Varianten bis zu cloud‑basierten GPT‑Versionen. Für die meisten Szenarien bietet **GPT‑3.5 Turbo** das optimale Gleichgewicht zwischen Geschwindigkeit und Genauigkeit. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Warum GPT‑3.5 Turbo wählen?** +- Es ist schnell genug für die Stapelverarbeitung von Dutzenden Dateien pro Minute. +- Die Kosten (bei einem kostenpflichtigen Tarif) sind niedriger als bei GPT‑4, während die meisten gängigen Fehler dennoch erkannt werden. +- Die API kümmert sich automatisch um Token‑Grenzen, sodass Sie große Dokumente nicht manuell aufteilen müssen. + +Wenn Sie einen Offline‑Ansatz bevorzugen, ersetzen Sie `AiModelType.Gpt35Turbo` durch `AiModelType.Local` (erfordert das optionale Offline‑Modell‑Paket). + +## Schritt 3: Über Probleme iterieren und hilfreiches Feedback anzeigen + +Das `GrammarCheckResult` enthält eine Sammlung von `GrammarIssue`‑Objekten. Jeder Eintrag liefert Ihnen die Schwere, eine menschenlesbare Meldung und einen vorgeschlagenen Ersatz. Lassen Sie uns diese hübsch ausgeben. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Was die Felder bedeuten:** +- `Severity` – typischerweise `Info`, `Warning` oder `Error`. `Error` sollte vor der Veröffentlichung unbedingt behoben werden. +- `Message` – eine knappe Beschreibung des Problems (z. B. „Subjekt‑Verb‑Übereinstimmung“). +- `SuggestedReplacement` – die von der KI empfohlene Korrektur; Sie können sie automatisch anwenden, wenn Sie dem Modell vertrauen, oder einem menschlichen Prüfer zur Verfügung stellen. + +> **Randfall:** Manche Probleme haben ein leeres `SuggestedReplacement` (z. B. Stilvorschläge). In solchen Fällen markieren Sie die Stelle einfach zur manuellen Überprüfung. + +## Vollständiges funktionierendes Beispiel + +Alles zusammengefügt, hier ein eigenständiges Konsolen‑App‑Beispiel, das Sie in ein neues .NET‑Projekt kopieren können. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Erwartete Ausgabe (Beispiel):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Wenn Sie das Programm mit einem fehlerfreien Dokument ausführen, sehen Sie stattdessen die Zeile „✅ Keine Grammatikfehler gefunden.“. + +## Häufige Stolperfallen behandeln + +| Problem | Warum es passiert | Schnelllösung | +|---------|-------------------|---------------| +| **LicenseException** | Aspose‑Bibliotheken benötigen für den Produktionseinsatz eine gültige Lizenz. | Fügen Sie `License license = new License(); license.SetLicense("Aspose.Words.lic");` am Anfang von `Main` ein. | +| **Netzwerk‑Timeout** | Der Aufruf des KI‑Modells erreicht die Cloud und überschreitet das Standard‑Timeout von 100 s. | Erhöhen Sie das Timeout via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` bevor Sie `CheckGrammar` aufrufen. | +| **Große Dokumente (> 10 MB)** | Einige Cloud‑Modelle kürzen die Eingabe. | Teilen Sie das Dokument mit `document.Sections` in Abschnitte und führen Sie Prüfungen pro Abschnitt aus, dann aggregieren Sie die Ergebnisse. | +| **Fehlende Vorschläge** | Das Modell konnte keinen Ersatz generieren (z. B. bei mehrdeutigen Formulierungen). | Protokollieren Sie das Problem zur manuellen Überprüfung; leere Vorschläge nicht automatisch anwenden. | + +## Die Lösung erweitern + +- **Automatisches Korrigieren:** Durchlaufen Sie `grammarResult.Issues` und ersetzen Sie Text mit `document.Range.Replace`. Sichern Sie vorher unbedingt die Originaldatei. +- **Stapelverarbeitung:** Verpacken Sie den gesamten Ablauf in ein `foreach` über ein Verzeichnis von DOCX‑Dateien. Speichern Sie jeden Bericht als JSON‑Datei für spätere Analysen. +- **Integration in ASP.NET:** Stellen Sie einen Endpunkt bereit, der ein hochgeladenes DOCX entgegennimmt, die Prüfung ausführt und ein JSON‑Payload mit den Problemen zurückgibt. + +## Bildliche Darstellung + +Ablaufdiagramm zum Prüfen der Grammatik + +*Das obige Diagramm visualisiert den dreischrittigen Prozess: DOCX laden → KI‑Grammatikprüfung ausführen → Probleme ausgeben.* + +## Fazit + +Wir haben gezeigt, **wie man Grammatik** in einem Word‑Dokument mit C# prüft, den genauen Code zum **Laden einer DOCX‑Datei C#** demonstriert und erklärt, wie man das KI‑generierte Feedback interpretiert. Mit Aspose.Words AI erhalten Sie eine leistungsstarke, cloud‑gestützte Grammatikengine, die sich nahtlos in jede .NET‑Anwendung integrieren lässt. + +Nächste Schritte? Automatisieren Sie die Korrekturschleife, experimentieren Sie mit dem neueren `AiModelType.Gpt4` für noch präzisere Vorschläge oder kombinieren Sie das Ganze mit einer Rechtschreib‑Bibliothek für eine vollwertige Korrektur‑Pipeline. Die Möglichkeiten sind praktisch unbegrenzt, und Sie haben jetzt ein solides Fundament, auf dem Sie aufbauen können. + +Haben Sie Fragen oder stoßen auf einen kniffligen Randfall? Hinterlassen Sie unten einen Kommentar – happy coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/german/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/german/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..d8284b7cf7 --- /dev/null +++ b/words/german/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Wie man LLM verwendet, um Dokumente mit Aspose zu bearbeiten – lernen + Sie, Absatztext zu ersetzen, eine Verbindung zu einem lokalen LLM herzustellen und + Text mithilfe von KI neu zu schreiben. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: de +og_description: Wie man ein LLM verwendet, um Dokumente mit Aspose zu bearbeiten. + Dieser Leitfaden zeigt, wie man eine lokale LLM verbindet, Absatztext ersetzt und + Text mithilfe von KI neu schreibt. +og_title: Wie man LLM mit Aspose.Words nutzt – Absätze in C# umschreiben +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Wie man LLM mit Aspose.Words verwendet – Absätze in C# neu schreiben +url: /de/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man LLM mit Aspose.Words verwendet – Absätze in C# neu schreiben + +Haben Sie sich jemals gefragt, **wie man LLM** nutzt, um ein Word‑Dokument zu verfeinern, ohne es manuell zu öffnen? Sie sind nicht allein. Viele Entwickler stoßen auf ein Problem, wenn sie *Absatztext* programmgesteuert ersetzen wollen, aber keinen sauberen, KI‑gesteuerten Workflow haben. + +In diesem Tutorial verbinden wir ein lokales Large Language Model, übergeben ihm einen Ausschnitt aus einer `.docx`‑Datei, lassen es **Text mit KI neu schreiben** und speichern schließlich das aktualisierte Dokument – alles mit Aspose.Words. Am Ende haben Sie eine lauffähige C#‑Konsolenanwendung, die die gesamte Pipeline demonstriert. + +> **Was Sie erhalten:** ein vollständiges, ausführbares Beispiel, Erklärungen zu jedem Schritt, Tipps für Sonderfälle und Ideen zur Erweiterung der Lösung. + +## Was Sie benötigen + +- **.NET 6+** (oder .NET Framework 4.7.2 – der Code funktioniert in beiden) +- **Aspose.Words for .NET** (NuGet‑Paket `Aspose.Words`) +- Ein **lokaler LLM‑Server**, der einen einfachen HTTP‑`/generate`‑Endpoint bereitstellt (z. B. Ollama, LMStudio oder ein eigener Flask‑Dienst) +- Grundlegende Kenntnisse in C# und HTTP‑Client‑Code + +Weitere SDKs sind nicht nötig; alles andere befindet sich im Code, den wir gemeinsam schreiben. + +## Schritt 1: Wie man LLM verwendet, um Absatztext zu ersetzen + +Das Erste, was wir tun müssen, ist den Absatz zu identifizieren, den wir ändern wollen. Aspose.Words macht das dank seines umfangreichen Objektmodells kinderleicht. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Warum das wichtig ist:** +Die richtige Node auszuwählen verhindert, dass Sie versehentlich Überschriften oder Tabellen überschreiben. Durch den **replace paragraph text**‑Ansatz bleibt die Dokumentstruktur erhalten, während nur der relevante Inhalt geändert wird. + +> **Pro‑Tipp:** Wenn Ihr Dokument Abschnitte variabler Länge enthält, verwenden Sie `document.GetChildNodes(NodeType.Paragraph, true)` und LINQ, um einen Absatz anhand seines Textes oder Stils zu finden. + +## Schritt 2: Verbindung zu einem lokalen LLM‑Endpoint herstellen + +Jetzt, wo wir den Text haben, müssen wir ihn an das LLM senden. Das Beispiel nutzt eine einfache Wrapper‑Klasse `LocalLargeLanguageModel`, die das HTTP‑Handling verbirgt. Sie können sie durch direkte `HttpClient`‑Aufrufe ersetzen, wenn Sie möchten. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Warum wir so verbinden:** +Ein **connect to local llm**‑Setup eliminiert Latenz, hält Daten on‑premise und vermeidet API‑Kosten. Der Wrapper macht den späteren Code zudem übersichtlicher, sodass wir uns auf die **rewrite text using ai**‑Logik konzentrieren können. + +## Schritt 3: Text mit KI und Aspose.Words neu schreiben + +Mit dem Absatztext und dem bereitstehenden LLM formulieren wir einen Prompt, der dem Modell genau sagt, was wir wollen – eine formelle Umschreibung. Sie können den Prompt für andere Stile anpassen (freundlich, technisch usw.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Warum das funktioniert:** +LLMs reagieren auf Prompts; klare Anweisungen („Rewrite … in a formal tone“) führen zu konsistenten Ergebnissen. Der **rewrite text using ai**‑Schritt ist das Herzstück des Tutorials – er zeigt, wie KI direkt in Dokument‑Workflows eingebettet werden kann. + +## Schritt 4: Das Dokument bearbeiten und Änderungen speichern + +Jetzt ersetzen wir die ursprünglichen Runs durch den neuen Inhalt. Aspose.Words speichert Text in `Run`‑Objekten, daher verhindert das vorherige Leeren von Runs verbleibende Formatierungsartefakte. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Hinweis zu Sonderfällen:** +Enthält der ursprüngliche Absatz gemischte Formatierungen (fett, kursiv), möchten Sie vielleicht die Stile beibehalten. Erstellen Sie in diesem Fall einen neuen `Run`, kopieren Sie die ursprünglichen `Font`‑Einstellungen und setzen Sie anschließend dessen `Text` auf `revisedText`. + +## Vollständiges funktionierendes Beispiel + +Unten finden Sie das komplette Programm, das Sie in ein Konsolenprojekt kopieren‑und‑einfügen können. Denken Sie daran, zuerst das Aspose.Words‑NuGet‑Paket zu installieren (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Erwartete Ausgabe + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Öffnen Sie `output.docx` – Sie werden sehen, dass der dritte Absatz nun die überarbeitete Version enthält. + +## Häufige Fragen & Stolperfallen + +| Frage | Antwort | +|----------|--------| +| **Was, wenn mein LLM JSON mit zusätzlichen Feldern zurückgibt?** | Passen Sie `GenerateText` an, um die richtige Eigenschaft zu deserialisieren, oder parsen Sie die Antwort manuell. | +| **Kann ich mehrere Absätze gleichzeitig verarbeiten?** | Ja – iterieren Sie über `document.FirstSection.Body.Paragraphs` und wenden Sie dieselbe Prompt‑Logik an, ggf. mit einem Absatz‑Index im Prompt für Kontext. | +| **Mein LLM‑Server verwendet Authentifizierung?** | Fügen Sie vor dem POST einen Header zum `HttpClient` hinzu: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Die Formatierung geht nach dem Ersetzen verloren.** | Bewahren Sie die ursprünglichen `Run.Font`‑Einstellungen: erstellen Sie einen neuen `Run`, kopieren Sie `originalRun.Font.Clone()`, und setzen Sie dann dessen `Text`. | +| **Das LLM liefert manchmal leere Strings.** | Implementieren Sie ein Fallback – wenn `revisedText.Trim().Length == 0`, behalten Sie den Originaltext bei oder versuchen Sie es mit einem einfacheren Prompt erneut. | + +## Erweiterung der Lösung + +Jetzt, wo Sie **how to use llm** für einen einzelnen Absatz beherrschen, denken Sie an folgende nächste Schritte: + +- **Batch‑Verarbeitung:** Durchlaufen Sie jeden Absatz und schreiben Sie ihn in einem gewünschten Stil neu (z. B. „make all text concise“). +- **Stil‑bewusste Umschreibung:** Übergeben Sie den Namen des ursprünglichen Absatz‑Stils im Prompt, damit das LLM Überschriften von Fließtext unterscheiden kann. +- **Integration in eine CI‑Pipeline:** Automatisieren Sie die Dokumenten‑Politur als Teil eines Dokumentations‑Build‑Prozesses. +- **Alternative Prompts:** Probieren Sie „summarize this paragraph“ oder „translate this paragraph to Spanish“ aus, um die volle Leistungsfähigkeit von **rewrite text using ai** zu erkunden. + +## Fazit + +Wir haben den gesamten Ablauf von **how to use llm** mit Aspose.Words durchlaufen: Dokument laden, **connect to local llm**, Absatz extrahieren, **rewrite text using ai**, **replace paragraph text** und schließlich das Ergebnis speichern. Der Code ist eigenständig, funktioniert sofort und zeigt, wie KI praktisch mit traditioneller Dokumenten‑Automatisierung kombiniert werden kann. + +Probieren Sie es aus, passen Sie die Prompts an und lassen Sie + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/german/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/german/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..1e72330045 --- /dev/null +++ b/words/german/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Fassen Sie Word‑Dokumente schnell zusammen und übersetzen Sie Texte mit + Google. Lernen Sie, wie Sie Anthropic Claude nutzen, eine Zusammenfassung aus einem + Bericht erstellen und Texte mit Google in einem einzigen C#‑Tutorial übersetzen. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: de +og_description: Fassen Sie Word-Dokumente sofort zusammen und übersetzen Sie Texte + mit Google. Dieser Leitfaden zeigt, wie Sie Anthropic Claude und Aspose.Words verwenden, + um eine Zusammenfassung aus einem Bericht zu erstellen. +og_title: Word‑Dokument in C# zusammenfassen – Schritt für Schritt mit Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Word‑Dokument in C# zusammenfassen – Vollständige Anleitung mit Anthropic Claude +url: /de/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word‑Dokument in C# zusammenfassen – Komplettanleitung mit Anthropic Claude + +Haben Sie schon einmal ein **Word‑Dokument zusammenfassen** müssen und waren dabei von APIs und umständlichem Code überfordert? Sie sind nicht allein. In vielen Projekten – Jahresberichte, juristische Gutachten oder Forschungsarbeiten – ist das Extrahieren einer knappen Übersicht ein täglicher Schmerzpunkt. Zum Glück macht die Kombination aus Aspose.Words und Anthropic Claude das Ganze zum Kinderspiel, und Sie können sogar noch eine schnelle Google‑Übersetzung hinzufügen. + +In diesem Tutorial gehen wir Schritt für Schritt durch alles, was Sie wissen müssen: ein großes .docx laden, das Claude‑V2‑Modell aufrufen, um eine Zusammenfassung zu erzeugen, einen Satz mit Google übersetzen und die häufigsten Stolperfallen behandeln. Am Ende können Sie **eine Zusammenfassung aus einem Bericht** mit nur wenigen Zeilen C# erstellen. + +## Voraussetzungen + +- .NET 6+ (oder .NET Core 3.1) installiert +- Eine Aspose.Words for .NET‑Lizenz (oder ein kostenloser Test) +- Zugriff auf die Anthropic Claude V2 API (Sie benötigen einen API‑Key) +- Internetverbindung für Google Translator +- Visual Studio 2022 oder Ihre bevorzugte C#‑IDE + +Keine zusätzlichen NuGet‑Pakete außer `Aspose.Words` und `Aspose.Words.AI` sind nötig; die Translator‑Klasse wird mit derselben Bibliothek ausgeliefert. + +## Schritt 1 – Das Quell‑Word‑Dokument laden + +Zuerst müssen wir die .docx‑Datei in den Speicher einlesen. Aspose.Words macht das trivial und dank seines robusten Parsers funktioniert es mit komplexen Layouts, Tabellen und sogar eingebetteten Bildern. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Warum das wichtig ist:** Das frühe Laden des Dokuments ermöglicht das Prüfen von Eigenschaften (Autor, Wortanzahl) und die Entscheidung, ob überhaupt eine Zusammenfassung nötig ist. Große Dateien > 10 MB können speicherintensiv sein, daher sollten Sie `LoadOptions` mit `LoadFormat.Docx` verwenden, falls Leistungsprobleme auftreten. + +## Schritt 2 – Das Dokument mit Anthropic Claude zusammenfassen + +Jetzt kommt der spaßige Teil: Wir übergeben das Dokument an Claude V2. Die `Summarizer`‑Klasse kapselt den HTTP‑Aufruf, das Token‑Handling und Wiederholungen. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Wie es funktioniert:** +> 1. **Chunking** – Aspose teilt das Dokument automatisch in handhabbare Stücke (≈ 2 KB jeweils) auf, um die Token‑Grenzen von Claude einzuhalten. +> 2. **Prompt‑Engineering** – Die Bibliothek sendet einen Prompt wie „Provide a concise executive summary of the following text:“ gefolgt von jedem Chunk. +> 3. **Aggregation** – Claude liefert Teil‑Zusammenfassungen, die zu dem finalen `summaryText` zusammengefügt werden. + +### Sonderfälle & Tipps + +- **Sehr große Berichte** (> 100 Seiten) können das Kontextfenster von Claude überschreiten. Wenn Sie abgeschnittene Ausgaben sehen, reduzieren Sie `SummarizerOptions.MaxChunkSize` auf kleinere Werte. +- **Nicht‑englische Quelle** – Claude arbeitet am besten mit Englisch; bei anderen Sprachen zuerst übersetzen (siehe Schritt 4) und dann zusammenfassen. +- **Rate‑Limits** – Anthropic setzt pro‑Minute‑Grenzen. Verpacken Sie den Aufruf in eine Retry‑Schleife mit exponentiellem Back‑off, falls Sie eine `429`‑Antwort erhalten. + +## Schritt 3 – Die Zusammenfassung prüfen + +Bevor wir fortfahren, ist es gute Praxis, zu prüfen, ob die Zusammenfassung nicht leer ist und die erwartete Länge hat (z. B. 5‑10 % der ursprünglichen Wortzahl). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Wenn das Verhältnis zu niedrig erscheint (< 2 %), können Sie die Eigenschaft `SummarizerOptions.SummaryLength` anpassen, um eine längere Ausgabe anzufordern. + +## Schritt 4 – Text mit Google übersetzen + +Jetzt, wo wir eine prägnante englische Zusammenfassung haben, fügen wir eine schnelle Übersetzung hinzu. Die `Translator`‑Klasse nutzt Googles öffentlichen Übersetzungs‑Endpoint (kein API‑Key nötig für kurze Phrasen, aber für die Produktion sollten Sie zur kostenpflichtigen Cloud Translation API wechseln). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Warum Google?** Es ist schnell, breit unterstützt und der kostenlose Endpoint verarbeitet kurze Zeichenketten ohne Authentifizierung. Für Massentranslationen sollten Sie die Aufrufe stapeln und Googles Nutzungsbeschränkungen beachten. + +### Die gesamte Zusammenfassung übersetzen (optional) + +Wenn Sie die komplette Zusammenfassung auf Spanisch (oder eine andere Sprache) benötigen, übergeben Sie einfach `summaryText` an `Translator.Translate`. Beachten Sie das Limit von 5 KB pro Anfrage; Sie müssen die Zusammenfassung ggf. in kleinere Stücke aufteilen. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Schritt 5 – Die Zusammenfassung wieder in eine Word‑Datei speichern (Bonus) + +Oft erwartet der End‑User ein herunterladbares Dokument statt einer Konsolenausgabe. Erstellen wir ein neues `.docx`, das sowohl die englische als auch die spanische Version enthält. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Praktischer Tipp + +Wenn Sie die Zusammenfassung in ein neues Word‑Dokument einbetten, halten Sie das ursprüngliche Layout minimal (verwenden Sie den `Normal`‑Stil). Komplexe Stile aus der Quelle können unerwartete Layout‑Verschiebungen verursachen. + +## Vollständiges Beispiel + +Unten finden Sie das **komplette, copy‑and‑paste‑fertige** Programm, das alles zusammenführt. Es lässt sich mit einem einzigen `dotnet run` kompilieren, nachdem Sie die Aspose‑Pakete hinzugefügt haben. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Erwartete Konsolenausgabe** (gekürzt zur Übersicht): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Häufig gestellte Fragen + +| Frage | Antwort | +|-------|----------| +| *Kann ich ein anderes KI‑Modell verwenden?* | Ja. Ersetzen Sie `SummarizerModel.AnthropicClaudeV2` durch `SummarizerModel.OpenAIGPT4` (erfordert einen OpenAI‑Key) oder ein beliebiges im Enum aufgeführtes Modell. | +| *Was, wenn das Dokument geschützte Abschnitte enthält?* | Aspose wirft `ProtectedDocumentException`. Entschlüsseln Sie es zuerst mit `LoadOptions.Password` oder fordern Sie eine ungeschützte Kopie an. | +| *Brauche ich für die Produktion eine kostenpflichtige Aspose‑Lizenz?* | Die kostenlose Testversion funktioniert bis zu 20 Seiten. Für größere Berichte entfernt eine Lizenz das Seitenlimit und bietet Performance‑Optimierungen. | +| *Ist der Google‑Translator für große Textblöcke zuverlässig?* | Für kurze Zeichenketten ist er in Ordnung. Für Massentranslationen sollten Sie zur Cloud Translation API wechseln, um Anfrage‑Größen‑Limits zu umgehen und eine bessere Spracherkennung zu erhalten. | + +## Fazit + +Wir haben gerade **Word‑Dokumente zusammengefasst** mit Aspose.Words und dem Anthropic Claude V2‑Modell, anschließend **Text mit Google übersetzt** und dabei gezeigt, wie man das Ergebnis wieder in ein Word‑Dokument speichert. + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/german/net/basic-conversions/_index.md b/words/german/net/basic-conversions/_index.md index d527cbf9ad..f0e489ad9e 100644 --- a/words/german/net/basic-conversions/_index.md +++ b/words/german/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [Wie man LaTeX aus Word exportiert – Schritt‑für‑Schritt‑Anleitung](./how-to-export-latex-from-word-step-by-step-guide/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET LaTeX aus Word-Dokumenten exportieren – detaillierte Anleitung mit Codebeispielen. | | [Word als PDF speichern mit Aspose.Words – Vollständige C#‑Anleitung](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Erfahren Sie, wie Sie Word-Dokumente mit Aspose.Words in C# einfach als PDF speichern – Schritt‑für‑Schritt‑Anleitung. | | [Docx als PDF speichern mit Aspose.Words – Vollständige C#‑Anleitung](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Erfahren Sie, wie Sie DOCX‑Dateien mit Aspose.Words in C# einfach als PDF speichern – Schritt‑für‑Schritt‑Anleitung. | +| [Barrierefreies PDF aus DOCX in C# erstellen – So konvertieren Sie Word zu PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET ein barrierefreies PDF aus DOCX in C# erstellen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/german/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..1d6ec94c7a --- /dev/null +++ b/words/german/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Erstellen Sie ein barrierefreies PDF aus einer DOCX-Datei in C#. Erfahren + Sie, wie Sie Word in PDF konvertieren, Word als PDF speichern und docx in PDF mit + Barrierefreiheits‑Konformität exportieren. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: de +og_description: Erstellen Sie ein barrierefreies PDF aus einer DOCX‑Datei in C#. Folgen + Sie dieser Schritt‑für‑Schritt‑Anleitung, um Word in PDF zu konvertieren, Word als + PDF zu speichern und docx mit voller Barrierefreiheit in PDF zu exportieren. +og_title: Barrierefreies PDF aus DOCX in C# erstellen – Schnellleitfaden +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Erstelle ein barrierefreies PDF aus DOCX in C# – Wie man Word in PDF konvertiert +url: /de/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Erstellen eines barrierefreien PDFs aus DOCX in C# – Wie man Word in PDF konvertiert + +Haben Sie jemals **ein barrierefreies PDF** aus einem Word‑Dokument erstellen müssen, waren sich aber nicht sicher, welcher Bibliothek Sie vertrauen können? Sie sind nicht allein – viele Entwickler stoßen auf dasselbe Problem, wenn sie die PDF/UA‑Standards für Barrierefreiheit einhalten müssen. Die gute Nachricht ist, dass Sie mit Aspose.Words eine `.docx` in ein konformes PDF mit nur wenigen Codezeilen verwandeln können und eine Datei erhalten, die Screen‑Reader tatsächlich lesen können. + +In diesem Tutorial führen wir Sie durch alles, was Sie wissen müssen, um **Word in PDF zu konvertieren**, **Word als PDF zu speichern** und sogar **docx nach PDF zu exportieren** mit PDF/UA‑1 (oder PDF/UA‑2) Konformität. Am Ende haben Sie ein sofort einsatzbereites C#‑Snippet, verstehen, warum jede Einstellung wichtig ist, und sind gerüstet, gängige Sonderfälle wie fehlende Schriftarten oder benutzerdefinierte Seiteneinstellungen zu behandeln. + +## Voraussetzungen + +- .NET 6.0 oder höher (der Code funktioniert auch mit .NET Framework 4.6+) +- Eine Aspose.Words for .NET Lizenz (oder ein kostenloser Evaluierungsschlüssel) +- Grundlegende Kenntnisse in C# und Visual Studio (oder einer anderen IDE Ihrer Wahl) +- Eine DOCX‑Datei, die Sie barrierefrei machen möchten (wir nennen sie `input.docx`) + +> **Pro‑Tipp:** Wenn Sie die kostenlose Testversion verwenden, denken Sie daran, dass das erzeugte PDF ein kleines „Evaluation“ Wasserzeichen enthält. + +## Schritt 1: Aspose.Words NuGet‑Paket installieren + +Bevor wir irgendeinen C#‑Code schreiben können, muss die Aspose.Words‑Bibliothek dem Projekt hinzugefügt werden. + +```bash +dotnet add package Aspose.Words +``` + +Der Befehl stellt die `Aspose.Words.dll` wieder her und macht die Namespaces verfügbar. Dieser Schritt ist essenziell, weil die Klasse `PdfSaveOptions` in diesem Paket enthalten ist. + +## Schritt 2: Die Quell‑DOCX‑Datei laden + +Der erste logische Schritt besteht darin, das Word‑Dokument zu laden, das Sie transformieren möchten. Denken Sie dabei an das Öffnen eines Buches, bevor Sie dessen Seiten bearbeiten. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Warum das wichtig ist:** Das Laden des Dokuments erzeugt eine In‑Memory‑Repräsentation, die alle Stile, Bilder und Metadaten enthält. Ist die Datei beschädigt, wirft `Document` eine Ausnahme – Sie sollten diesen Vorgang also in produktivem Code in einen try/catch‑Block einbetten. + +## Schritt 3: PDF‑Speicheroptionen für Barrierefreiheit konfigurieren + +Aspose.Words ermöglicht Ihnen, das PDF‑Konformitätslevel festzulegen. PDF/UA‑1 ist der ursprüngliche Barrierefreiheitsstandard, während PDF/UA‑2 einige neuere Tags hinzufügt. Wählen Sie das aus, das den Anforderungen Ihres Kunden entspricht. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Was “Compliance” bewirkt:** Das Setzen von `PdfCompliance.PdfUax1` teilt Aspose.Words mit, korrekte Tags, logische Lesereihenfolge und Alternativtexte für Bilder einzubetten – genau das, wonach Screen‑Reader‑Software sucht. + +## Schritt 4: Das Dokument als barrierefreies PDF speichern + +Jetzt ist die schwere Arbeit erledigt; wir weisen Aspose.Words lediglich an, die PDF‑Datei mit den zuvor definierten Optionen zu schreiben. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Nachdem diese Zeile ausgeführt wurde, finden Sie `output.pdf` im angegebenen Ordner. Öffnen Sie die Datei in Adobe Acrobat Reader und prüfen Sie **Datei → Eigenschaften → Beschreibung → PDF/A und PDF/UA**, um die Konformität zu verifizieren. + +## Schritt 5: Barrierefreiheit prüfen (optional, aber empfohlen) + +Obwohl der Code ein getaggtes PDF erzeugt, hilft ein kurzer manueller Check, benutzerdefinierte Inhalte zu entdecken, die zusätzliche Aufmerksamkeit benötigen. + +1. Öffnen Sie `output.pdf` in Adobe Acrobat Pro. +2. Gehen Sie zu **Werkzeuge → Barrierefreiheit → Vollständige Prüfung**. +3. Führen Sie die Prüfung aus und überprüfen Sie etwaige Warnungen (z. B. fehlender Alt‑Text für benutzerdefinierte Bilder). + +Zeigt der Bericht keine Fehler, haben Sie erfolgreich **ein barrierefreies PDF** erstellt, das den PDF/UA‑1‑Standard erfüllt. + +## Häufige Varianten & Sonderfälle + +### Mehrere DOCX‑Dateien in einer Schleife konvertieren + +Wenn Sie eine Stapelverarbeitung haben, wickeln Sie die Lade‑/Speichlogik in eine `foreach`‑Schleife ein. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Wechsel zu PDF/UA‑2 + +Ändern Sie einfach das `Compliance`‑Enum: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Umgang mit benutzerdefinierten Schriftarten + +Verwendet Ihr DOCX Schriftarten, die nicht auf dem Server installiert sind, betten Sie diese ein: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Das Einbetten stellt sicher, dass das PDF auf jeder Maschine gleich aussieht – ein entscheidendes Detail, wenn Sie **docx nach pdf exportieren** für externe Stakeholder. + +## Vollständiges funktionierendes Beispiel + +Unten finden Sie das komplette, sofort ausführbare Programm, das alle Bausteine zusammenführt. Kopieren Sie es in eine Konsolen‑App, passen Sie die Pfade an und drücken Sie **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Erwartetes Ergebnis:** Eine Datei namens `output.pdf`, die in jedem PDF‑Betrachter geöffnet werden kann, die richtigen Barrierefreiheits‑Tags enthält und mit Benutzern geteilt werden kann, die auf unterstützende Technologien angewiesen sind. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Bildbeschreibung:* *Erstellen eines barrierefreien PDF‑Beispiels – Screenshot eines PDF/UA‑1 konformen Dokuments, das in Adobe Acrobat geöffnet ist.* + +## Häufig gestellte Fragen + +- **Funktioniert das mit .NET Core?** + Absolut. Aspose.Words ist plattformübergreifend, sodass derselbe Code unter Windows, Linux und macOS läuft. + +- **Was passiert, wenn mein DOCX Makros enthält?** + Makros werden bei der Konvertierung ignoriert; nur der sichtbare Inhalt wird in das PDF übernommen. + +- **Kann ich einen benutzerdefinierten PDF‑Metadaten‑Titel hinzufügen?** + Ja – setzen Sie `pdfSaveOptions.Metadata.Title = "Your Custom Title";` vor dem Speichern. + +- **Ist PDF/UA‑2 weit verbreitet unterstützt?** + Die meisten modernen PDF‑Reader verstehen PDF/UA‑2, aber wenn Sie ältere Werkzeuge ansprechen, bleiben Sie bei PDF/UA‑1. + +## Fazit + +Wir haben Ihnen gezeigt, wie Sie **ein barrierefreies PDF** aus einer DOCX‑Datei mit Aspose.Words erstellen, von der Installation des NuGet‑Pakets bis zur Überprüfung der PDF/UA‑Konformität. Mit diesen Schritten können Sie zuverlässig **Word in PDF konvertieren**, **Word als PDF speichern** und **docx nach PDF exportieren**, während Sie die Barrierefreiheits‑Standards einhalten – eine unverzichtbare Fähigkeit für jeden Entwickler, der an Unternehmens‑Dokumenten‑Pipelines arbeitet. + +Bereit für die nächste Herausforderung? Versuchen Sie, einen benutzerdefinierten Header/Footer hinzuzufügen, ein PDF/A‑2b‑Tag einzubetten oder den Prozess in einer ASP.NET Core Web‑API zu automatisieren. Die Möglichkeiten sind endlos, und das Fundament, das Sie hier gelegt haben, ermöglicht Ihnen, sie mit Zuversicht anzugehen. + +Viel Spaß beim Coden und mögen Ihre PDFs stets lesbar sein! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/german/net/programming-with-markdownsaveoptions/_index.md b/words/german/net/programming-with-markdownsaveoptions/_index.md index 13cb7cb648..7aa71356ac 100644 --- a/words/german/net/programming-with-markdownsaveoptions/_index.md +++ b/words/german/net/programming-with-markdownsaveoptions/_index.md @@ -71,6 +71,9 @@ Erfahren Sie, wie Sie Bilder beim Export von DOCX nach Markdown umbenennen, um k ### [Word‑Bilder speichern – Word in Markdown konvertieren mit Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) Erfahren Sie, wie Sie Bilder aus Word‑Dokumenten extrahieren und beim Konvertieren nach Markdown mit Aspose beibehalten. +### [Wie man Bilder speichert – DOCX zu Markdown mit Aspose.Words konvertieren](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) +Erfahren Sie, wie Sie Bilder aus DOCX extrahieren und beim Konvertieren nach Markdown mit Aspose.Words speichern. + ### [Word in Markdown konvertieren – Vollständige C#‑Anleitung mit Bildextraktion](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) Erfahren Sie, wie Sie Word‑Dateien in Markdown konvertieren und dabei Bilder extrahieren – umfassende Schritt‑für‑Schritt‑Anleitung in C#. diff --git a/words/german/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/german/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..9a73d418ef --- /dev/null +++ b/words/german/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Erfahren Sie, wie Sie Bilder beim Konvertieren einer DOCX-Datei in Markdown + mit Aspose.Words speichern können. Dieser Leitfaden zeigt außerdem, wie Sie Bilder + aus Word extrahieren und Word als Markdown speichern. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: de +og_description: Wie man Bilder beim Konvertieren einer DOCX‑Datei zu Markdown mit + Aspose.Words speichert. Schritt‑für‑Schritt‑Anleitung mit vollständigem C#‑Code. +og_title: Wie man Bilder speichert – DOCX in Markdown konvertieren mit Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Wie man Bilder speichert – DOCX in Markdown konvertieren mit Aspose.Words +url: /de/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man Bilder speichert – DOCX in Markdown mit Aspose.Words konvertieren + +Haben Sie sich jemals gefragt, **wie man Bilder speichert**, wenn Sie eine Word‑Datei in Markdown umwandeln müssen? Sie sind nicht allein. Viele Entwickler stoßen auf ein Problem, wenn die Konvertierung Bilder in ein Durcheinander aus defekten Links verwandelt oder – schlimmer noch – sie vollständig verliert. Die gute Nachricht: Aspose.Words bietet Ihnen feinkörnige Kontrolle, sodass Sie Bilder aus Word extrahieren, den Zielort bestimmen und trotzdem sauberen Markdown‑Output erhalten können. + +In diesem Tutorial führen wir Sie durch ein vollständiges, sofort ausführbares C#‑Beispiel, das **zeigt, wie man Bilder** in einen eigenen Ordner speichert, während ein `.docx` nach `.md` konvertiert wird. Dabei gehen wir auch auf **convert docx to markdown**, **extract images from word** und die übergeordnete Frage ein, **wie man docx konvertiert**, sodass Sie **Word als Markdown speichern** können, ohne Assets zu verlieren. + +## Voraussetzungen + +- .NET 6.0 oder höher (die API funktioniert identisch unter .NET Framework 4.7+) +- Eine aktive Aspose.Words‑Lizenz oder ein kostenloser Test (die kostenlose Version fügt dem Ergebnis ein Wasserzeichen hinzu, aber der Code funktioniert gleich) +- Ein Word‑Dokument, das bereits Bilder enthält (z. B. `DocWithImages.docx`) +- Visual Studio 2022 oder ein beliebiger Editor, der C#‑Projekte bauen kann + +> **Pro‑Tipp:** Wenn Sie eine Testversion verwenden, können Sie die Bild‑Speicher‑Logik trotzdem testen; denken Sie nur daran, dass das endgültige PDF/MD das Test‑Wasserzeichen enthält. + +## Überblick über die Lösung + +Auf hoher Ebene sieht der Prozess folgendermaßen aus: + +1. Laden Sie das Quell‑`.docx` mit `Document`. +2. Erzeugen Sie ein `MarkdownSaveOptions`‑Objekt und hängen Sie ein `IResourceSavingCallback` an. +3. Im Callback bestimmen Sie den Ordner und Dateinamen für jedes Bild. +4. Speichern Sie das Dokument als Markdown; der Callback schreibt jedes Bild auf die Festplatte. + +Das ist das Kernprinzip, **wie man Bilder speichert** während einer Konvertierung. Das gleiche Muster funktioniert für andere Ressourcentypen (Schriften, CSS usw.), falls Sie diese jemals benötigen. + +## Schritt 1 – Laden des DOCX mit Bildern + +Zuerst benötigen wir eine `Document`‑Instanz, die auf die Word‑Datei zeigt, die Sie konvertieren möchten. Nichts Besonderes – einfach ein direkter Konstruktoraufruf. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Warum das wichtig ist:** Das Laden des Dokuments ist der einzige Ort, an dem Aspose das Word‑XML parst. Fehlende Schriften oder beschädigte Teile werfen sofort eine Ausnahme – noch bevor wir mit dem Speichern von Bildern beginnen. + +## Schritt 2 – MarkdownSaveOptions mit einem Bild‑Speicher‑Callback einrichten + +Die Klasse `MarkdownSaveOptions` ermöglicht es Ihnen, über `ResourceSavingCallback` in den Speicherprozess einzugreifen. Dieser Callback erhält für jede externe Ressource (Bilder, CSS usw.) ein `ResourceSavingArgs`‑Objekt, das Aspose schreiben muss. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementierung des Callbacks + +Unten finden Sie die vollständige Implementierung von `ImageSavingCallback`. Sie erstellt einen Unterordner `Images` neben der Markdown‑Datei, vergibt für jedes Bild einen fortlaufenden Namen (`img_0.png`, `img_1.jpg`, …) und ermöglicht optional das Streamen des Bildes an einen anderen Ort (z. B. in einen Cloud‑Bucket). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Wie Ihnen das hilft:** Durch Anpassen von `args.FileName` bestimmen Sie exakt **wie man Bilder speichert** – ob in einem flachen Ordner, einer datumsbasierten Hierarchie oder sogar in einem Datenbank‑BLOB. Der Callback wird für jedes Bild ausgeführt, sodass Sie die Markdown‑Datei später nie nachbearbeiten müssen. + +## Schritt 3 – Dokument als Markdown speichern + +Jetzt, wo Optionen und Callback bereitstehen, ist die eigentliche Konvertierung ein Einzeiler. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Wenn die Zeile abgeschlossen ist, haben Sie: + +- `Doc.md` – die Markdown‑Darstellung Ihres Word‑Inhalts. +- `Images\img_0.png`, `Images\img_1.jpg`, … – jedes Bild, das aus dem ursprünglichen DOCX extrahiert wurde. + +## Vollständiges, sofort ausführbares Beispiel + +Alles zusammengeführt, hier eine eigenständige Konsolen‑App, die Sie in ein neues C#‑Projekt kopieren‑und‑einfügen können. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Erwartetes Ergebnis + +Nach dem Ausführen des Programms: + +- Öffnen Sie `C:\Docs\Doc.md` in einem beliebigen Text‑Editor. Sie sehen Markdown‑Bildverweise wie `![](Images/img_0.png)`. +- Der Ordner `Images` enthält jedes extrahierte Bild, fortlaufend benannt. +- Die Markdown‑Datei wird in jedem Viewer, der lokale Bilder unterstützt (VS Code‑Vorschau, GitHub usw.), korrekt dargestellt. + +## Häufig gestellte Fragen (FAQs) + +### Funktioniert das mit anderen Bildformaten (SVG, TIFF)? + +Ja. `Path.GetExtension(args.FileName)` bewahrt die ursprüngliche Erweiterung, sodass SVG, TIFF, BMP und sogar EMF unverändert gespeichert werden. Der einzige Hinweis: Einige Markdown‑Renderer zeigen SVG nicht inline an; in diesem Fall können Sie SVG vorher nach PNG konvertieren. + +### Was, wenn ich Bilder als Base64 einbetten statt als separate Dateien möchte? + +Innerhalb von `ResourceSaving` können Sie das Schreiben in eine physische Datei durch einen Memory‑Stream ersetzen und den Markdown‑Link manuell anpassen. Aspose bietet keinen direkten „embed as Base64“-Schalter, aber der Callback gibt Ihnen die volle Kontrolle über `args.Stream`. + +### Wie unterscheidet sich das vom integrierten `ExportImages`‑Verfahren? + +`ExportImages` extrahiert alle Bilder in einen Ordner **ohne** Markdown zu erzeugen. Unser Callback koppelt beide Aktionen, sodass die Bilddateinamen exakt den Verweisen in der `.md` entsprechen. Diese Abstimmung ist der Schlüssel, **wie man Bilder korrekt speichert** während der Konvertierung. + +### Kann ich mehrere DOCX‑Dateien stapelweise konvertieren? + +Absolut. Verpacken Sie die Kernlogik in eine Schleife wie `foreach (var file in Directory.GetFiles(..., "*.docx"))`, passen Sie die Ausgabepfade an und verwenden Sie denselben `ImageSavingCallback`. Denken Sie nur daran, für jedes Dokument ein frisches `MarkdownSaveOptions`‑Objekt zu erzeugen, da `args.DestinationFileName` pro Durchlauf variiert. + +## Randfälle & bewährte Vorgehensweisen + +| Situation | Worauf Sie achten sollten | Empfohlene Lösung | +|-----------|---------------------------|-------------------| +| **Großes DOCX (hunderte MB)** | Speicherbelastung beim Laden | Verwenden Sie `LoadOptions` mit `LoadFormat.Docx` und setzen Sie `LoadOptions.LoadFormat = LoadFormat.Docx`, um Teile zu streamen | +| **Bildnamen kollidieren** | Wenn im Zielordner bereits `img_0.png` existiert, könnte überschrieben werden | GUID anhängen: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Ausgabeordner schreibgeschützt** | Save wirft `UnauthorizedAccessException` | Stellen Sie sicher, dass der Prozess über passende Berechtigungen verfügt oder wählen Sie einen beschreibbaren Pfad | +| **Nicht‑Bild‑Ressourcen (CSS, Schriften)** | Callback erhält sie ebenfalls | Mit `if (args.ResourceType != ResourceType.Image) return;` abfangen (wie bereits gezeigt) | +| **Unicode‑Dateinamen** | Einige Dateisysteme verarbeiten Sonderzeichen nicht korrekt | Mit `Path.GetInvalidFileNameChars()` `args.FileName` vor der Zuweisung bereinigen | + +## Verwandte Themen, die Sie als Nächstes erkunden könnten + +- **convert docx to markdown** mit benutzerdefinierten Überschriftenstilen (verwenden Sie `MarkdownSaveOptions.ExportImagesAsBase64` für Inline‑Bilder) +- **extract images from word** mittels `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/german/net/working-with-fonts/_index.md b/words/german/net/working-with-fonts/_index.md index ad6dc08b4e..96e1654f3f 100644 --- a/words/german/net/working-with-fonts/_index.md +++ b/words/german/net/working-with-fonts/_index.md @@ -52,6 +52,7 @@ Egal, ob Sie Text mit unterschiedlichen Schriftarten formatieren, Regeln für di | [Wie man Schriftarten in Aspose.Words erfasst – Komplettanleitung](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET Schriftarten erfassen und in Ihren Word-Dokumenten verwalten. | | [Wie man DOCX lädt und fehlende Schriftarten erkennt – Vollständige C#-Anleitung](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.Words für .NET DOCX-Dateien laden und fehlende Schriftarten erkennen. | | [Warnungen für Schriftartenersetzung in Aspose.Words aktivieren – Komplettanleitung](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Erfahren Sie, wie Sie in Aspose.Words für .NET Warnungen bei der Schriftartenersetzung aktivieren und verwalten. | +| [Aspose‑Schriftartenersetzung: Fehlende Schriftarten in Word‑Dokumenten erkennen](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET fehlende Schriftarten in Word‑Dokumenten erkennen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/german/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..773c2e4f11 --- /dev/null +++ b/words/german/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-05-04 +description: Erfahren Sie, wie Sie die Aspose‑Schriftart‑Substitution verwenden, um + fehlende Schriftarten zu erkennen, wenn Sie ein Word‑Dokument laden, und fehlende + Schriftartdetails abrufen – Schritt‑für‑Schritt‑Anleitung. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: de +og_description: Meistern Sie die Aspose-Schriftart-Substitution, um fehlende Schriftarten + beim Laden eines Word‑Dokuments zu erkennen und fehlende Schriftartinformationen + mit vollständigem C#‑Code abzurufen. +og_title: Aspose Schriftart-Substitution – Fehlende Schriftarten in Word-Dokumenten + erkennen +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose-Schriftart-Substitution: Fehlende Schriftarten in Word‑Dokumenten erkennen' +url: /de/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Fehlende Schriften in Word-Dokumenten erkennen + +Haben Sie sich jemals gefragt, warum ein Word-Dokument auf einem anderen Rechner falsch aussieht? Oft ist die Ursache eine fehlende Schrift, und **Aspose Font Substitution** ist das Werkzeug, das Ihnen ermöglicht, diese Lücken zu erkennen, bevor sie zu einer visuellen Katastrophe werden. In diesem Tutorial zeigen wir Ihnen, wie Sie **fehlende Schriften** sofort beim **Laden eines Word-Dokuments** **erkennen** und anschließend **Details zu fehlenden Schriften** abrufen können, um sie zu beheben oder zu ersetzen. + +Wir behandeln alles, von der Einrichtung des Warn‑Callbacks bis zum Abrufen einer sauberen Liste fehlender Schriften. Am Ende haben Sie ein sofort einsatzbereites C#‑Snippet, das Ihnen genau anzeigt, welche Schriften nicht gefunden wurden, und Sie verstehen, warum das für die Dokumententreue wichtig ist. + +--- + +## Voraussetzungen – Was Sie vor dem Start benötigen + +- **Aspose.Words for .NET** (v23.12 oder höher empfohlen). +- Eine .NET‑Entwicklungsumgebung (Visual Studio, Rider oder die `dotnet`‑CLI). +- Ein Beispiel‑DOCX, das absichtlich eine Schrift verwendet, die nicht installiert ist – nennen wir es `DocumentWithMissingFont.docx`. +- Grundkenntnisse in C# – nichts Aufwändiges, nur die Fähigkeit, eine Konsolen‑App auszuführen. + +Falls Ihnen etwas davon unbekannt ist, halten Sie kurz inne und installieren Sie das NuGet‑Paket: + +```bash +dotnet add package Aspose.Words +``` + +Das war’s. Keine zusätzlichen Schriften, keine externen Dienste. + +## Schritt 1: Word-Dokument laden (und Schriftprüfungen auslösen) + +Das allererste, was Sie tun, ist ein **Word‑Dokument laden**. Aspose.Words analysiert die Datei und wenn es eine referenzierte Schrift nicht finden kann, wird eine *FontSubstitution*‑Warnung in die Warteschlange gestellt. Hier ist der Code, der das Laden übernimmt: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Warum das wichtig ist:** Durch das frühe Laden des Dokuments erhält Aspose die Möglichkeit, jeden Textlauf, Stil und eingebettetes Objekt zu prüfen. Wenn eine Schrift nicht im System oder im benutzerdefinierten Schriftordner gefunden wird, erhalten Sie später eine Warnung. + +## Schritt 2: Einen Warn‑Callback anhängen, um Substitutions‑Ereignisse zu erfassen + +Aspose.Words verwendet einen Callback‑Mechanismus, um Sie über Probleme wie fehlende Schriften zu informieren. Durch das Zuweisen einer Implementierung von `IWarningCallback` zu `doc.WarningCallback` können Sie jede Warnung in Echtzeit abfangen. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro‑Tipp:** Sie können mehrere Callbacks (z. B. Logging, UI‑Updates) anhängen, indem Sie sie in einem Composite‑Pattern bündeln, aber für dieses Tutorial sorgt ein einzelner Callback für Klarheit. + +## Schritt 3: Das Font‑Substitution‑Warn‑Callback implementieren + +Jetzt definieren wir die Klasse, die die eigentliche Arbeit übernimmt. Der Callback erhält ein `WarningInfo`‑Objekt; wir filtern nach `WarningType.FontSubstitution` und speichern die Beschreibung für die spätere Verwendung. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Was passiert:** Wenn Aspose auf eine fehlende Schrift stößt, erzeugt es eine Warnung wie „Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.“ Unser Callback gibt diese Zeile aus und speichert sie. + +## Schritt 4: Dokument verarbeiten (optional) und fehlende Schriften sammeln + +Wenn Sie nur **fehlende Schriften erkennen** müssen, reicht der Ladeschritt aus – die Warnungen werden automatisch ausgelöst. Viele Entwickler benötigen jedoch nach bestimmten Vorgängen (z. B. Speichern, Konvertieren) **Informationen zu fehlenden Schriften**. Im Folgenden erzwingen wir eine kleine Operation – das Speichern als PDF – um sicherzustellen, dass alle Warnungen ausgegeben werden, und holen dann die gesammelten Meldungen. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Erwartete Konsolenausgabe** (Beispiel): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Beachten Sie, dass jede Zeile eindeutig die ursprüngliche Schrift und die von Aspose gewählte Ersatzschrift angibt. Das ist das Kernprinzip der **Aspose Font Substitution**‑Berichterstattung. + +## Schritt 5: Fortgeschritten – Benutzerdefinierte Schriftquellen verwenden, um Substitutionen zu reduzieren + +Manchmal haben Sie die fehlenden Schriften *eigentlich* vorhanden, jedoch nicht im Standard‑Systemordner. Aspose.Words ermöglicht es Ihnen, über `FontSettings` auf ein benutzerdefiniertes Verzeichnis zu verweisen. Dieser Schritt kann die Anzahl der Substitutions‑Warnungen erheblich reduzieren. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Warum das hinzufügen?** Wenn Sie Dokumente auf verschiedene Rechner verteilen, sorgt das Bündeln der benötigten Schriften in einem bekannten Ordner für überall dieselbe optische Darstellung. Außerdem wird Ihre **fehlende Schriften erkennen**‑Routine genauer, da Aspose diesen Ordner prüft, bevor es auf eine Ersatzschrift zurückgreift. + +## Vollständiges funktionierendes Beispiel + +Alles zusammengeführt, hier ein einzelnes, kopier‑und‑einfüge‑fertiges Konsolenprogramm. Speichern Sie es als `Program.cs` und führen Sie es mit `dotnet run` aus. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Was Sie sehen sollten:** Wenn das Quell‑DOCX Schriften referenziert, die Sie nicht besitzen, gibt die Konsole jede Substitutionszeile gefolgt von einer kurzen Zusammenfassung aus. Sind alle Schriften vorhanden, erhalten Sie die Meldung „No missing fonts were detected.“ + +## Häufige Fallstricke & wie man sie vermeidet + +| Problem | Warum es passiert | Lösung | +|-------|----------------|-----| +| **Keine Warnungen erscheinen** | Das Dokument verwendet nur Systemschriften oder Sie haben bereits einen benutzerdefinierten Ordner mit den fehlenden Schriften hinzugefügt. | Überprüfen Sie, ob das DOCX tatsächlich eine nicht verfügbare Schrift referenziert. Öffnen Sie es in Word und ändern Sie einen Absatz zu einer seltenen Schrift (z. B. „Papyrus“). | +| **Doppelte Meldungen** | Die gleiche Schrift wird in mehreren Runs verwendet, was zu mehreren Warnungen führt. | Entfernen Sie Duplikate aus der Liste mit `Distinct()`, wenn Sie nur ein eindeutiges Set benötigen. | +| **Leistungsprobleme bei großen Dokumenten** | Jede Warnung wird im UI‑Thread verarbeitet. | Laden Sie das Dokument in einem Hintergrund‑Task oder verwenden Sie `Parallel.ForEach` für die Nachbearbeitung. | +| **Falsche Ersatzschrift** | Asposes Standard‑Ersatzschrift entspricht möglicherweise nicht Ihrem Branding. | Setzen Sie `FontSettings.SubstitutionSettings.DefaultFontName` auf eine bevorzugte Ersatzschrift (z. B. „Calibri“). | + +## Erweiterung der Lösung – Fehlende Schriften nach JSON exportieren + +Wenn Sie einen Web‑Service erstellen, der fehlende Schriften an einen Client melden muss, ist das Serialisieren der Liste trivial: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Jetzt kann Ihre API ein sauberes JSON‑Payload zurückgeben, das ein anderes System verarbeiten kann. + +## Fazit + +In diesem Leitfaden haben wir **Aspose Font Substitution** von Anfang bis Ende demonstriert: ein Word‑Dokument laden, einen Warn‑Callback anhängen, jedes *fehlende Schrift erkennen*‑Ereignis erfassen und schließlich **Informationen zu fehlenden Schriften** für Berichte oder Korrekturen abrufen. Durch das Hinzufügen optionaler benutzerdefinierter Schriftordner können Sie die Liste der Substitutionen verkleinern, und mit ein paar zusätzlichen Zeilen können Sie die Ergebnisse sogar als JSON exportieren. + +Denken Sie daran, dass die visuelle Integrität Ihrer Dokumente von den verwendeten Schriften abhängt. Mit der hier gezeigten Technik werden Sie nie wieder von einer unerwarteten Ersatzschrift überrascht. + +Bereit für den nächsten Schritt? Versuchen Sie, diese Logik in eine größere Dokument‑Verarbeitungspipeline zu integrieren, oder erkunden Sie weitere Funktionen von Aspose.Words wie das Einbetten von Schriften (`doc.FontSettings.EmbeddedFonts`). Die Möglichkeiten sind endlos, und Ihre Nutzer werden Ihnen für das hochwertige Ergebnis danken. + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/ai-powered-document-processing/_index.md b/words/greek/net/ai-powered-document-processing/_index.md index 6ec35473e6..f92f622d33 100644 --- a/words/greek/net/ai-powered-document-processing/_index.md +++ b/words/greek/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ | [Εργασία με το μοντέλο τεχνητής νοημοσύνης της Google](./working-with-google-ai-model/) Αναβαθμίστε την επεξεργασία εγγράφων με το Aspose.Words για .NET και Google AI για να δημιουργήσετε συνοπτικές περιλήψεις χωρίς κόπο. | | [Εργασία με ανοιχτό μοντέλο τεχνητής νοημοσύνης](./working-with-open-ai-model/) | Ξεκλειδώστε αποτελεσματική σύνοψη εγγράφων χρησιμοποιώντας το Aspose.Words για .NET με τα ισχυρά μοντέλα του OpenAI. Βουτήξτε σε αυτόν τον ολοκληρωμένο οδηγό τώρα. | | [Εργασία με επιλογές σύνοψης](./working-with-summarize-options/) | Μάθετε να συνοψίζετε αποτελεσματικά έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με τον αναλυτικό οδηγό μας για την ενσωμάτωση μοντέλων AI για γρήγορες πληροφορίες. | +| [Σύνοψη εγγράφου Word σε C# – Πλήρης οδηγός με χρήση του Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Μάθετε πώς να χρησιμοποιήσετε το μοντέλο Anthropic Claude για να συνοψίσετε έγγραφα Word σε C# με το Aspose.Words. | +| [Πώς να χρησιμοποιήσετε LLM με το Aspose.Words – Επαναγράψτε παραγράφους σε C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Μάθετε πώς να ενσωματώσετε μοντέλα γλώσσας για την επαναγραφή παραγράφων σε έγγραφα Word χρησιμοποιώντας C# και Aspose.Words. | +| [Πώς να ελέγξετε τη γραμματική σε C# – Πλήρης οδηγός για έγγραφα Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Μάθετε πώς να ενσωματώσετε έλεγχο γραμματικής σε έγγραφα Word χρησιμοποιώντας Aspose.Words για .NET και C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/greek/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..53bb154c8f --- /dev/null +++ b/words/greek/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Μάθετε πώς να ελέγχετε τη γραμματική σε ένα έγγραφο Word χρησιμοποιώντας + C#. Αυτό το σεμινάριο καλύπτει επίσης πώς να φορτώνετε ένα αρχείο DOCX με C# και + να χρησιμοποιείτε το Aspose.Words AI για ακριβή αποτελέσματα. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: el +og_description: Πώς να ελέγξετε τη γραμματική σε ένα έγγραφο Word χρησιμοποιώντας + C#; Ακολουθήστε αυτό το σεμινάριο για να φορτώσετε ένα αρχείο DOCX με C# και να + εκτελέσετε ελέγχους γραμματικής με τεχνητή νοημοσύνη χρησιμοποιώντας το Aspose.Words. +og_title: Πώς να ελέγξετε τη γραμματική σε C# – Πλήρης οδηγός βήμα‑προς‑βήμα +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Πώς να ελέγξετε τη γραμματική σε C# – Πλήρης οδηγός για έγγραφα Word +url: /el/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να Ελέγξετε τη Γραμματική σε C# – Πλήρης Οδηγός για Έγγραφα Word + +Έχετε αναρωτηθεί ποτέ **πώς να ελέγξετε τη γραμματική** σε ένα έγγραφο Word χωρίς να αφήσετε το IDE σας; Δεν είστε οι μόνοι. Πολλοί προγραμματιστές χρειάζεται να επικυρώσουν αναφορές που δημιουργούνται από χρήστες, αυτοματοποιημένα email ή ακόμη και τεκμηρίωση πριν την κυκλοφορία. Τα καλά νέα; Με το Aspose.Words AI μπορείτε να το κάνετε προγραμματιστικά, και όλη η διαδικασία εντάσσεται άψογα σε μια τυπική ροή εργασίας C#. + +Σε αυτόν τον οδηγό θα περάσουμε από όλα όσα χρειάζεται να γνωρίζετε: από τη φόρτωση ενός αρχείου DOCX C# μέχρι την κλήση του AI ελεγκτή γραμματικής και την ερμηνεία των αποτελεσμάτων. Στο τέλος θα έχετε ένα έτοιμο κομμάτι κώδικα που εκτυπώνει τη σοβαρότητα, το μήνυμα και την προτεινόμενη αντικατάσταση για κάθε πρόβλημα — χωρίς χειροκίνητη αντιγραφή‑επικόλληση. + +## Τι Θα Μάθετε + +- **Πώς να ελέγξετε τη γραμματική** σε ένα έγγραφο Word χρησιμοποιώντας Aspose.Words AI. +- Τα ακριβή βήματα για **φόρτωση αρχείου DOCX C#** με την κλάση `Document`. +- Πώς να διαχειριστείτε το αντικείμενο `GrammarCheckResult`, να επαναλάβετε τα ζητήματα και να εμφανίσετε χρήσιμες διαγνώσεις. +- Συνηθισμένες παγίδες (όπως η έλλειψη αδειών) και συμβουλές για να κάνετε τη λύση έτοιμη για παραγωγή. + +> **Προαπαιτούμενα:** .NET 6.0+ (ή .NET Framework 4.6+), Visual Studio 2022 (ή οποιοδήποτε IDE προτιμάτε) και άδεια Aspose.Words for .NET (η δωρεάν δοκιμή λειτουργεί για δοκιμές). Αν δεν έχετε εγκαταστήσει ακόμη τα πακέτα NuGet, τρέξτε: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Τώρα, ας βουτήξουμε. + +## Βήμα 1: Φόρτωση Αρχείου DOCX σε C# + +Πριν μπορέσει να γίνει οποιοσδήποτε έλεγχος γραμματικής, το έγγραφο πρέπει να φορτωθεί στη μνήμη. Το Aspose.Words το κάνει με μία γραμμή κώδικα, αλλά υπάρχουν μερικές λεπτομέρειες που αξίζει να σημειωθούν. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Γιατί είναι σημαντικό:** +- Η χρήση του `Path.Combine` εξασφαλίζει συμβατότητα μεταξύ πλατφορμών. +- Ο έλεγχος ύπαρξης αποτρέπει ένα σφάλμα χρόνου εκτέλεσης που διαφορετικά θα κρύβει τη λογική του ελέγχου γραμματικής. +- Όταν **φορτώνετε ένα αρχείο DOCX C#**, το Aspose αναλύει όλα τα στυλ, τις κεφαλίδες, τα υποσέλιδα και ακόμη και το κρυφό κείμενο, δίνοντας στην AI μια πλήρη εικόνα του εγγράφου. + +> **Pro tip:** Αν χρειάζεται να δουλέψετε με streams (π.χ. αρχεία που προέρχονται από ανέβασμα στο web), μπορείτε να αντικαταστήσετε την κλήση `new Document(docPath)` με `new Document(stream)`. + +## Βήμα 2: Επιλογή του AI Μοντέλου για Έλεγχο Γραμματικής + +Το Aspose.Words AI υποστηρίζει διάφορα μοντέλα, από ελαφριά τοπικά μέχρι cloud‑based παραλλαγές GPT. Για τις περισσότερες περιπτώσεις, το **GPT‑3.5 Turbo** προσφέρει ένα καλό ισοζύγιο μεταξύ ταχύτητας και ακρίβειας. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Γιατί να διαλέξετε το GPT‑3.5 Turbo;** +- Είναι αρκετά γρήγορο για επεξεργασία δεκάδων αρχείων ανά λεπτό. +- Το κόστος (αν έχετε πληρωμένο πλάνο) είναι χαμηλότερο από το GPT‑4, ενώ εξακολουθεί να εντοπίζει τις περισσότερες κοινές λανθασμένες. +- Το API διαχειρίζεται αυτόματα τα όρια token, οπότε δεν χρειάζεται να χωρίσετε μεγάλα έγγραφα χειροκίνητα. + +Αν προτιμάτε μια offline προσέγγιση, αντικαταστήστε το `AiModelType.Gpt35Turbo` με `AiModelType.Local` (απαιτεί το προαιρετικό πακέτο offline μοντέλου). + +## Βήμα 3: Επανάληψη Στα Ζητήματα και Εμφάνιση Χρήσιμων Ανατροφοδοτήσεων + +Το `GrammarCheckResult` περιέχει μια συλλογή αντικειμένων `GrammarIssue`. Κάθε ζήτημα παρέχει σοβαρότητα, ανθρώπινο μήνυμα και προτεινόμενη αντικατάσταση. Ας τα εκτυπώσουμε με ωραίο τρόπο. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Τι σημαίνουν τα πεδία:** +- `Severity` – συνήθως `Info`, `Warning` ή `Error`. Θεωρήστε το `Error` ως κάτι που πρέπει να διορθωθεί πριν τη δημοσίευση. +- `Message` – μια σύντομη περιγραφή του προβλήματος (π.χ. “Συμφωνία υποκειμένου‑ρήματος”). +- `SuggestedReplacement` – η προτεινόμενη διόρθωση από την AI· μπορείτε να την εφαρμόσετε αυτόματα αν εμπιστεύεστε το μοντέλο, ή να την παρουσιάσετε σε ανθρώπινο ελεγκτή. + +> **Edge case:** Κάποια ζητήματα μπορεί να έχουν κενό `SuggestedReplacement` (π.χ. προτάσεις στυλ). Σε αυτές τις περιπτώσεις, σημαδέψτε την τοποθεσία για χειροκίνητη ανασκόπηση. + +## Πλήρες Παράδειγμα Εφαρμογής + +Συνδυάζοντας όλα τα παραπάνω, εδώ είναι μια αυτόνομη εφαρμογή console που μπορείτε να αντιγράψετε‑επικολλήσετε σε ένα νέο .NET project. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Αναμενόμενη έξοδος (παράδειγμα):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Αν τρέξετε το πρόγραμμα σε ένα καθαρό έγγραφο, θα δείτε τη γραμμή “✅ No grammar issues detected.” αντί αυτού. + +## Διαχείριση Συνηθισμένων Παγίδων + +| Πρόβλημα | Γιατί Συμβαίνει | Γρήγορη Λύση | +|----------|----------------|--------------| +| **LicenseException** | Οι βιβλιοθήκες Aspose απαιτούν έγκυρη άδεια για παραγωγική χρήση. | Προσθέστε `License license = new License(); license.SetLicense("Aspose.Words.lic");` στην αρχή του `Main`. | +| **Network timeout** | Η κλήση στο AI μοντέλο φτάνει στο cloud και υπερβαίνει το προεπιλεγμένο όριο 100 s. | Αυξήστε το timeout με `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` πριν καλέσετε το `CheckGrammar`. | +| **Large documents (> 10 MB)** | Κάποια cloud μοντέλα περικόπτουν την είσοδο. | Χωρίστε το έγγραφο σε ενότητες χρησιμοποιώντας `document.Sections` και τρέξτε ελέγχους ανά ενότητα, έπειτα ενοποιήστε τα αποτελέσματα. | +| **Missing suggestions** | Το μοντέλο δεν μπόρεσε να δημιουργήσει αντικατάσταση (π.χ. ασαφές στυλ). | Καταγράψτε το ζήτημα για χειροκίνητη ανασκόπηση· μην εφαρμόζετε αυτόματα κενές προτάσεις. | + +## Επέκταση της Λύσης + +- **Αυτόματη διόρθωση:** Περάστε από `grammarResult.Issues` και αντικαταστήστε το κείμενο με `document.Range.Replace`. Φροντίστε να δημιουργήσετε αντίγραφο ασφαλείας του αρχικού αρχείου πρώτα. +- **Batch processing:** Τυλίξτε όλη τη ροή σε ένα `foreach` πάνω από έναν φάκελο με αρχεία DOCX. Αποθηκεύστε κάθε αναφορά ως αρχείο JSON για μετέπειτα ανάλυση. +- **Ενσωμάτωση με ASP.NET:** Εκθέστε ένα endpoint που δέχεται ανεβασμένο DOCX, τρέχει τον έλεγχο και επιστρέφει ένα JSON payload με τα ζητήματα. + +## Εικονογραφική Παράσταση + +διάγραμμα ροής ελέγχου γραμματικής + +*Το παραπάνω διάγραμμα οπτικοποιεί τη διαδικασία τριών βημάτων: φόρτωση DOCX → εκτέλεση AI ελέγχου γραμματικής → έξοδος ζητημάτων.* + +## Συμπέρασμα + +Καλύψαμε **πώς να ελέγξετε τη γραμματική** σε ένα έγγραφο Word χρησιμοποιώντας C#, παρουσιάσαμε τον ακριβή κώδικα για **φόρτωση αρχείου DOCX C#** και δείξαμε πώς να ερμηνεύσετε την ανατροφοδότηση που παράγει η AI. Με το Aspose.Words AI αποκτάτε μια ισχυρή, cloud‑backed μηχανή γραμματικού ελέγχου που ενσωματώνεται άψογα σε οποιαδήποτε εφαρμογή .NET. + +Τι θα κάνετε στη συνέχεια; Δοκιμάστε να αυτοματοποιήσετε το βρόχο διόρθωσης‑εφαρμογής, πειραματιστείτε με το νεότερο `AiModelType.Gpt4` για ακόμη πιο ακριβείς προτάσεις, ή συνδυάστε το με μια βιβλιοθήκη ελέγχου ορθογραφίας για μια πλήρη αλυσίδα επιμέλειας. Οι δυνατότητες είναι πρακτικά απεριόριστες, και τώρα έχετε μια σταθερή βάση για να χτίσετε πάνω της. + +Έχετε ερωτήσεις ή αντιμετωπίζετε κάποιο περίπλοκο edge case; Αφήστε ένα σχόλιο παρακάτω, και καλή προγραμματιστική! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/greek/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..fffaa6b60f --- /dev/null +++ b/words/greek/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-05-04 +description: Πώς να χρησιμοποιήσετε το LLM για την επεξεργασία εγγράφων με το Aspose + – μάθετε πώς να αντικαθιστάτε κείμενο παραγράφων, να συνδέεστε με το τοπικό LLM + και να ξαναγράφετε κείμενο χρησιμοποιώντας AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: el +og_description: Πώς να χρησιμοποιήσετε LLM για την επεξεργασία εγγράφων με το Aspose. + Αυτός ο οδηγός δείχνει πώς να συνδεθείτε σε ένα τοπικό LLM, να αντικαταστήσετε το + κείμενο παραγράφου και να ξαναγράψετε το κείμενο χρησιμοποιώντας AI. +og_title: Πώς να χρησιμοποιήσετε το LLM με το Aspose.Words – Επαναγραφή παραγράφων + σε C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Πώς να χρησιμοποιήσετε το LLM με το Aspose.Words – Επαναγράψτε παραγράφους + σε C# +url: /el/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να Χρησιμοποιήσετε LLM με το Aspose.Words – Επανάληψη Παραγράφων σε C# + +Έχετε αναρωτηθεί ποτέ **πώς να χρησιμοποιήσετε LLM** για να βελτιώσετε ένα έγγραφο Word χωρίς να το ανοίξετε χειροκίνητα; Δεν είστε ο μόνος. Πολλοί προγραμματιστές συναντούν πρόβλημα όταν χρειάζεται να *αντικαταστήσουν το κείμενο μιας παραγράφου* προγραμματιστικά αλλά δεν έχουν μια καθαρή ροή εργασίας βασισμένη σε AI. + +Σε αυτό το tutorial θα συνδέσουμε ένα τοπικό μεγάλο μοντέλο γλώσσας, θα του δώσουμε ένα απόσπασμα από ένα αρχείο `.docx`, θα του ζητήσουμε να **επαναγράψει το κείμενο χρησιμοποιώντας AI**, και τελικά θα αποθηκεύσουμε το ενημερωμένο έγγραφο—όλα με το Aspose.Words. Στο τέλος θα έχετε μια έτοιμη προς εκτέλεση εφαρμογή C# console που δείχνει ολόκληρη τη διαδικασία. + +> **Τι θα λάβετε:** ένα πλήρες, εκτελέσιμο παράδειγμα, εξηγήσεις για κάθε βήμα, συμβουλές για ειδικές περιπτώσεις, και ιδέες για επέκταση της λύσης. + +## Τι Θα Χρειαστείτε + +- **.NET 6+** (ή .NET Framework 4.7.2 – ο κώδικας λειτουργεί και στα δύο) +- **Aspose.Words for .NET** (πακέτο NuGet `Aspose.Words`) +- Ένας **τοπικός διακομιστής LLM** που εκθέτει ένα απλό HTTP `/generate` endpoint (π.χ., Ollama, LMStudio, ή μια προσαρμοσμένη υπηρεσία Flask) +- Βασική εξοικείωση με C# και κώδικα HTTP client + +Δεν απαιτούνται πρόσθετα SDKs· όλα τα υπόλοιπα βρίσκονται στον κώδικα που θα γράψουμε μαζί. + +## Βήμα 1: Πώς να Χρησιμοποιήσετε LLM για να Αντικαταστήσετε το Κείμενο Παραγράφου + +Το πρώτο που πρέπει να κάνουμε είναι να εντοπίσουμε την παράγραφο που θέλουμε να τροποποιήσουμε. Το Aspose.Words το κάνει εύκολο, εκθέτοντας ένα πλούσιο αντικειμενοστραφές μοντέλο. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Γιατί είναι σημαντικό:** +Η επιλογή του σωστού κόμβου αποτρέπει την τυχαία αντικατάσταση τίτλων ή πινάκων. Χρησιμοποιώντας την προσέγγιση **replace paragraph text** διατηρούμε τη δομή του εγγράφου αμετάβλητη, ενώ επεξεργαζόμαστε μόνο το περιεχόμενο που μας ενδιαφέρει. + +> **Pro tip:** Εάν το έγγραφό σας περιέχει ενότητες μεταβλητού μήκους, χρησιμοποιήστε `document.GetChildNodes(NodeType.Paragraph, true)` και LINQ για να εντοπίσετε μια παράγραφο με βάση το κείμενό της ή το στυλ. + +## Βήμα 2: Σύνδεση με Τοπικό Endpoint LLM + +Τώρα που έχουμε το κείμενο, πρέπει να το στείλουμε στο LLM. Το παράδειγμα χρησιμοποιεί μια απλή κλάση περιτύλιξης `LocalLargeLanguageModel` που κρύβει τις λεπτομέρειες του HTTP. Μπορείτε να την αντικαταστήσετε με κλήσεις `HttpClient` αν προτιμάτε. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Γιατί συνδέουμε με αυτόν τον τρόπο:** +Μια ρύθμιση **connect to local llm** εξαλείφει την καθυστέρηση, διατηρεί τα δεδομένα εντός της υποδομής και αποφεύγει τα κόστη API. Η κλάση περιτύλιξης κάνει επίσης τον επόμενο κώδικα πιο καθαρό, επιτρέποντάς μας να εστιάσουμε στη λογική **rewrite text using ai**. + +## Βήμα 3: Επανάληψη Κειμένου Χρησιμοποιώντας AI με το Aspose.Words + +Με το κείμενο της παραγράφου στα χέρια και το LLM έτοιμο, δημιουργούμε ένα prompt που λέει στο μοντέλο ακριβώς τι θέλουμε — επανάληψη σε επίσημο τόνο. Μπορείτε να προσαρμόσετε το prompt για άλλες μορφές (φιλικό, τεχνικό κ.λπ.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Γιατί λειτουργεί:** +Τα LLM λειτουργούν με prompts· η παροχή σαφών οδηγιών (“Rewrite … in a formal tone”) αποδίδει συνεπή αποτελέσματα. Το βήμα **rewrite text using ai** είναι η καρδιά του tutorial – δείχνει πώς το AI μπορεί να ενσωματωθεί άμεσα σε ροές εργασίας εγγράφων. + +## Βήμα 4: Επεξεργασία του Εγγράφου και Αποθήκευση Αλλαγών + +Τώρα αντικαθιστούμε τα αρχικά runs με το νέο περιεχόμενο. Το Aspose.Words αποθηκεύει το κείμενο σε αντικείμενα `Run`, οπότε η εκκαθάριση τους πρώτα αποτρέπει υπολειπόμενα σφάλματα μορφοποίησης. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Σημείωση για ειδικές περιπτώσεις:** +Εάν η αρχική παράγραφος περιείχε μικτή μορφοποίηση (έντονα, πλάγια), ίσως θέλετε να διατηρήσετε τα στυλ. Σε αυτήν την περίπτωση, δημιουργήστε ένα νέο `Run`, αντιγράψτε τις αρχικές ρυθμίσεις `Font`, και στη συνέχεια ορίστε το `Text` του σε `revisedText`. + +## Πλήρες Παράδειγμα Λειτουργίας + +Παρακάτω βρίσκεται ολόκληρο το πρόγραμμα που μπορείτε να αντιγράψετε‑επικολλήσετε σε ένα console project. Θυμηθείτε να εγκαταστήσετε πρώτα το πακέτο NuGet Aspose.Words (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Αναμενόμενο Αποτέλεσμα + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Ανοίξτε το `output.docx` – θα δείτε ότι η τρίτη παράγραφος τώρα εμφανίζει την επεξεργασμένη έκδοση. + +## Συχνές Ερωτήσεις & Προβλήματα + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Τι γίνεται αν το LLM μου επιστρέφει JSON με επιπλέον πεδία;** | Προσαρμόστε το `GenerateText` ώστε να αποσυμπιέζει τη σωστή ιδιότητα ή να αναλύει την απάντηση χειροκίνητα. | +| **Μπορώ να επεξεργαστώ πολλές παραγράφους ταυτόχρονα;** | Ναι – επαναλάβετε πάνω στο `document.FirstSection.Body.Paragraphs` και εφαρμόστε την ίδια λογική prompt, ίσως προσθέτοντας έναν δείκτη παραγράφου στο prompt για συμφραζόμενα. | +| **Ο διακομιστής LLM μου χρησιμοποιεί έλεγχο ταυτότητας;** | Προσθέστε ένα header στο `HttpClient` πριν το POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Η μορφοποίηση χάνεται μετά την αντικατάσταση.** | Διατηρήστε τις αρχικές ρυθμίσεις `Run.Font`: δημιουργήστε ένα νέο `Run`, αντιγράψτε το `originalRun.Font.Clone()`, και στη συνέχεια ορίστε το `Text`. | +| **Το LLM μερικές φορές επιστρέφει κενές συμβολοσειρές.** | Υλοποιήστε fallback – αν `revisedText.Trim().Length == 0`, διατηρήστε το αρχικό κείμενο ή δοκιμάστε ξανά με πιο απλό prompt. | + +## Επέκταση της Λύσης + +Τώρα που έχετε κατακτήσει **how to use llm** για μια μόνο παράγραφο, σκεφτείτε τα επόμενα βήματα: + +- **Batch processing:** Επανάληψη σε κάθε παράγραφο και επαναγραφή σε επιλεγμένο στυλ (π.χ., “κάντε όλο το κείμενο συνοπτικό”). +- **Style‑aware rewriting:** Περάστε το όνομα του αρχικού στυλ παραγράφου στο prompt ώστε το LLM να σέβεται τίτλους vs κείμενο σώματος. +- **Integration with a CI pipeline:** Αυτοματοποιήστε την επεξεργασία εγγράφων ως μέρος της διαδικασίας δημιουργίας τεκμηρίωσης. +- **Alternative prompts:** Δοκιμάστε “summarize this paragraph” ή “translate this paragraph to Spanish” για να εξερευνήσετε τη πλήρη δύναμη του **rewrite text using ai**. + +## Συμπέρασμα + +Διασχίσαμε όλη τη ροή του **how to use llm** με το Aspose.Words: φόρτωση εγγράφου, **connect to local llm**, εξαγωγή παραγράφου, **rewrite text using ai**, **replace paragraph text**, και τελικά αποθήκευση του αποτελέσματος. Ο κώδικας είναι αυτόνομος, λειτουργεί αμέσως, και παρουσιάζει έναν πρακτικό τρόπο ενσωμάτωσης AI σε παραδοσιακή αυτοματοποίηση εγγράφων. + +Δοκιμάστε το, προσαρμόστε τα prompts, και αφήστε + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/greek/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..a6fa08f8ac --- /dev/null +++ b/words/greek/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Συνοψίστε γρήγορα ένα έγγραφο Word και μεταφράστε κείμενο με το Google. + Μάθετε πώς να χρησιμοποιείτε το Anthropic Claude, να δημιουργείτε σύνοψη από αναφορά + και να μεταφράζετε κείμενο με το Google σε ένα ενιαίο tutorial C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: el +og_description: Συνοψίστε άμεσα ένα έγγραφο Word και μεταφράστε κείμενο με το Google. + Αυτός ο οδηγός δείχνει πώς να χρησιμοποιήσετε το Anthropic Claude και το Aspose.Words + για να δημιουργήσετε μια σύνοψη από την αναφορά. +og_title: Συνοψίστε έγγραφο Word σε C# – Βήμα‑βήμα με τον Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Σύνοψη εγγράφου Word σε C# – Πλήρης οδηγός με χρήση του Anthropic Claude +url: /el/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Συνοψίστε Έγγραφο Word σε C# – Πλήρης Οδηγός Χρήσης του Anthropic Claude + +Κάποτε χρειάστηκε να **συνοψίσετε ένα έγγραφο word** αλλά νιώσατε κολλημένοι με τα API και τον πολύπλοκο κώδικα; Δεν είστε μόνοι. Σε πολλά έργα—ετήσιες εκθέσεις, νομικές σημειώσεις ή ερευνητικές εργασίες—η εξαγωγή μιας σύντομης επισκόπησης είναι καθημερινό πρόβλημα. Ευτυχώς, ο συνδυασμός Aspose.Words και Anthropic Claude το κάνει παιχνιδάκι, και μπορείτε ακόμη να προσθέσετε μια γρήγορη μετάφραση Google ενώ το κάνετε. + +Σε αυτό το tutorial θα περάσουμε βήμα‑βήμα από όλα όσα χρειάζεστε: φόρτωση ενός μεγάλου .docx, κλήση του μοντέλου Claude V2 για δημιουργία σύνοψης, μετάφραση φράσης με Google, και αντιμετώπιση των πιο συχνών προβλημάτων. Στο τέλος θα μπορείτε να **δημιουργήσετε σύνοψη από αναφορά** με λίγες μόνο γραμμές C#. + +## Προαπαιτούμενα + +- .NET 6+ (ή .NET Core 3.1) εγκατεστημένο +- Άδεια Aspose.Words for .NET (ή δωρεάν δοκιμή) +- Πρόσβαση στο Anthropic Claude V2 API (θα χρειαστείτε κλειδί API) +- Σύνδεση στο Internet για Google Translator +- Visual Studio 2022 ή το αγαπημένο σας IDE για C# + +Δεν απαιτούνται επιπλέον πακέτα NuGet πέρα από `Aspose.Words` και `Aspose.Words.AI`; η κλάση μεταφραστή περιλαμβάνεται στην ίδια βιβλιοθήκη. + +## Βήμα 1 – Φόρτωση του Πηγαίου Εγγράφου Word + +Το πρώτο που πρέπει να κάνουμε είναι να φέρουμε το αρχείο .docx στη μνήμη. Το Aspose.Words το κάνει αυτό εύκολα και, χάρη στον ισχυρό του parser, λειτουργεί με πολύπλοκες διατάξεις, πίνακες και ακόμη ενσωματωμένες εικόνες. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Γιατί είναι σημαντικό:** Η φόρτωση του εγγράφου νωρίς σας επιτρέπει να ελέγξετε ιδιότητες (συγγραφέας, αριθμός λέξεων) και να αποφασίσετε αν χρειάζεται σύνοψη. Μεγάλα αρχεία > 10 MB μπορεί να είναι απαιτητικά σε μνήμη, οπότε σκεφτείτε να χρησιμοποιήσετε `LoadOptions` με `LoadFormat.Docx` αν αντιμετωπίσετε προβλήματα απόδοσης. + +## Βήμα 2 – Συνοψίστε το Έγγραφο με Anthropic Claude + +Τώρα έρχεται το διασκεδαστικό μέρος: παραδίδουμε το έγγραφο στον Claude V2. Η κλάση `Summarizer` αφαιρεί την κλήση HTTP, τη διαχείριση token και τις επαναπροσπάθειες. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Πώς λειτουργεί:** +> 1. **Chunking** – Το Aspose χωρίζει αυτόματα το έγγραφο σε διαχειρίσιμα κομμάτια (≈ 2 KB το καθένα) για να σέβεται τα όρια token του Claude. +> 2. **Prompt engineering** – Η βιβλιοθήκη στέλνει ένα prompt όπως “Provide a concise executive summary of the following text:” ακολουθούμενο από κάθε κομμάτι. +> 3. **Aggregation** – Ο Claude επιστρέφει μερικές συνοψίσεις που συνδέονται σε τελικό `summaryText`. + +### Edge Cases & Tips + +- **Πολύ μεγάλες εκθέσεις** (> 100 σελίδες) μπορεί να υπερβούν το παράθυρο συμφραζομένων του Claude. Αν δείτε αποκομμένο αποτέλεσμα, μειώστε το `SummarizerOptions.MaxChunkSize` σε μικρότερες τιμές. +- **Πηγή μη‑Αγγλική** – Ο Claude αποδίδει καλύτερα στα Αγγλικά· για άλλες γλώσσες, μεταφράστε πρώτα (δείτε το Βήμα 4) και μετά συνοψίστε. +- **Περιορισμοί ρυθμού** – Το Anthropic επιβάλλει όρια ανά λεπτό. Τυλίξτε την κλήση σε βρόχο επαναπροσπάθειας με εκθετική καθυστέρηση αν λάβετε απάντηση `429`. + +## Βήμα 3 – Επαλήθευση της Εξόδου της Σύνοψης + +Πριν προχωρήσουμε, είναι καλή πρακτική να ελέγξετε ότι η σύνοψη δεν είναι κενή και ότι πληροί τις προσδοκίες μήκους (π.χ. 5‑10 % του αρχικού αριθμού λέξεων). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Αν το ποσοστό φαίνεται πολύ χαμηλό (< 2 %), ίσως χρειαστεί να προσαρμόσετε την ιδιότητα `SummarizerOptions.SummaryLength` για να ζητήσετε μεγαλύτερη έξοδο. + +## Βήμα 4 – Μετάφραση Κειμένου με Google + +Τώρα που έχουμε μια σαφή Αγγλική σύνοψη, ας προσθέσουμε μια γρήγορη μετάφραση. Η κλάση `Translator` χρησιμοποιεί το δημόσιο endpoint μετάφρασης της Google (δεν απαιτεί κλειδί API για σύντομες φράσεις, αλλά για παραγωγική χρήση θα πρέπει να μεταβείτε στο επί πληρωμή Cloud Translation API). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Γιατί Google;** Είναι γρήγορο, ευρέως υποστηριζόμενο, και το δωρεάν endpoint διαχειρίζεται σύντομες συμβολοσειρές χωρίς αυθεντικοποίηση. Για μαζικές μεταφράσεις, ομαδοποιήστε τις κλήσεις και σεβαστείτε τα όρια χρήσης της Google. + +### Μετάφραση Ολόκληρης της Σύνοψης (Προαιρετικό) + +Αν χρειάζεστε ολόκληρη τη σύνοψη στα Ισπανικά (ή οποιαδήποτε άλλη γλώσσα), απλώς περάστε το `summaryText` στη `Translator.Translate`. Να θυμάστε το όριο μεγέθους αιτήματος 5 KB· ίσως χρειαστεί να χωρίσετε τη σύνοψη σε μικρότερα κομμάτια. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Βήμα 5 – Αποθήκευση της Σύνοψης Πίσω σε Αρχείο Word (Bonus) + +Συχνά ο τελικός χρήστης αναμένει ένα αρχείο που μπορεί να κατεβάσει αντί για έξοδο στην κονσόλα. Ας δημιουργήσουμε ένα νέο `.docx` που περιέχει τόσο την Αγγλική όσο και την Ισπανική έκδοση. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Πρακτική Συμβουλή + +Όταν ενσωματώνετε τη σύνοψη σε νέο αρχείο Word, κρατήστε την αρχική μορφοποίηση ελάχιστη (χρησιμοποιήστε το στυλ `Normal`). Πολύπλοκα στυλ από την πηγή μπορεί να προκαλέσουν απρόσμενες αλλαγές διάταξης. + +## Πλήρες Παράδειγμα Εργασίας + +Παρακάτω βρίσκεται το **πλήρες, έτοιμο‑για‑αντιγραφή** πρόγραμμα που ενώνει όλα τα παραπάνω. Συγκεντρώνεται με ένα μόνο `dotnet run` αφού προσθέσετε τα πακέτα Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Αναμενόμενη έξοδος στην κονσόλα** (κομμένη για συντομία): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Συχνές Ερωτήσεις + +| Ερώτηση | Απάντηση | +|----------|--------| +| *Μπορώ να χρησιμοποιήσω διαφορετικό μοντέλο AI;* | Ναι. Αντικαταστήστε το `SummarizerModel.AnthropicClaudeV2` με `SummarizerModel.OpenAIGPT4` (απαιτεί κλειδί OpenAI) ή οποιονδήποτε πάροχο που εμφανίζεται στο enum. | +| *Τι γίνεται αν το έγγραφο περιέχει προστατευμένες ενότητες;* | Το Aspose θα ρίξει `ProtectedDocumentException`. Ξεκλειδώστε το πρώτα με `LoadOptions.Password` ή ζητήστε ένα μη‑προστατευμένο αντίγραφο. | +| *Χρειάζεται πληρωμένη άδεια Aspose για παραγωγή;* | Η δωρεάν δοκιμή λειτουργεί μέχρι 20 σελίδες. Για μεγαλύτερες εκθέσεις, η άδεια αφαιρεί το όριο σελίδων και προσθέτει βελτιώσεις απόδοσης. | +| *Είναι αξιόπιστος ο μεταφραστής Google για μεγάλα τμήματα;* | Για σύντομες συμβολοσειρές είναι εντάξει. Για μαζική μετάφραση, μεταβείτε στο Cloud Translation API ώστε να αποφύγετε τα όρια μεγέθους αιτήματος και να έχετε καλύτερη ανίχνευση γλώσσας. | + +## Συμπέρασμα + +Μόλις **συνοψίσαμε ένα έγγραφο word** χρησιμοποιώντας το Aspose.Words μαζί με το μοντέλο Anthropic Claude V2, και μετά **μεταφράσαμε κείμενο με Google** σε + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/basic-conversions/_index.md b/words/greek/net/basic-conversions/_index.md index 08ead9accd..d150bccffa 100644 --- a/words/greek/net/basic-conversions/_index.md +++ b/words/greek/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [Μετατροπή Word σε PDF σε C# χρησιμοποιώντας το Aspose.Words – Οδηγός](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Μάθετε πώς να μετατρέπετε αρχεία Word σε PDF χρησιμοποιώντας το Aspose.Words για .NET σε C# με οδηγίες βήμα‑βήμα. | | [Αποθήκευση Word ως PDF με Aspose.Words – Πλήρης Οδηγός C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Μάθετε πώς να αποθηκεύετε έγγραφα Word ως PDF χρησιμοποιώντας το Aspose.Words σε C# με πλήρη οδηγό βήμα‑βήμα. | | [Αποθήκευση docx ως pdf με Aspose.Words – Πλήρης Οδηγός C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Μάθετε πώς να αποθηκεύετε αρχεία docx ως PDF χρησιμοποιώντας το Aspose.Words σε C# με πλήρη οδηγό βήμα‑βήμα. | +| [Δημιουργία Προσβάσιμου PDF από DOCX σε C# – Πώς να Μετατρέψετε Word σε PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Μάθετε πώς να δημιουργήσετε προσβάσιμο PDF από DOCX χρησιμοποιώντας Aspose.Words για .NET σε C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/greek/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..397a5f11bb --- /dev/null +++ b/words/greek/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Δημιουργήστε προσβάσιμο PDF από αρχείο DOCX σε C#. Μάθετε πώς να μετατρέψετε + το Word σε PDF, να αποθηκεύσετε το Word ως PDF και να εξάγετε το docx σε PDF με + συμμόρφωση προσβασιμότητας. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: el +og_description: Δημιουργήστε προσβάσιμο PDF από αρχείο DOCX σε C#. Ακολουθήστε αυτό + το βήμα‑βήμα οδηγό για να μετατρέψετε το Word σε PDF, να αποθηκεύσετε το Word ως + PDF και να εξάγετε το docx σε PDF με πλήρη προσβασιμότητα. +og_title: Δημιουργία Προσβάσιμου PDF από DOCX σε C# – Σύντομος Οδηγός +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Δημιουργία Προσβάσιμου PDF από DOCX σε C# – Πώς να Μετατρέψετε το Word σε PDF +url: /el/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Δημιουργία Προσβάσιμου PDF από DOCX σε C# – Πώς να Μετατρέψετε Word σε PDF + +Έχετε ποτέ χρειαστεί να **δημιουργήσετε προσβάσιμο PDF** από ένα έγγραφο Word αλλά δεν ήσασταν σίγουροι ποια βιβλιοθήκη να εμπιστευτείτε; Δεν είστε μόνοι—πολλοί προγραμματιστές αντιμετωπίζουν το ίδιο εμπόδιο όταν πρέπει να πληρούν τα πρότυπα PDF/UA για προσβασιμότητα. Τα καλά νέα είναι ότι με το Aspose.Words μπορείτε να μετατρέψετε ένα `.docx` σε ένα συμβατό PDF με λίγες μόνο γραμμές κώδικα, και θα έχετε ένα αρχείο που οι αναγνώστες οθόνης μπορούν πραγματικά να διαβάσουν. + +Σε αυτό το tutorial θα περάσουμε από όλα όσα χρειάζεται να γνωρίζετε για να **μετατρέψετε Word σε PDF**, **αποθηκεύσετε Word ως PDF**, και ακόμη **εξάγετε docx σε PDF** με συμμόρφωση PDF/UA‑1 (ή PDF/UA‑2). Στο τέλος θα έχετε ένα έτοιμο προς χρήση απόσπασμα C#, θα καταλάβετε γιατί κάθε ρύθμιση είναι σημαντική, και θα είστε εξοπλισμένοι να αντιμετωπίσετε κοινές περιπτώσεις όπως ελλιπείς γραμματοσειρές ή προσαρμοσμένες ρυθμίσεις σελίδας. + +## Προαπαιτούμενα + +- .NET 6.0 ή νεότερο (ο κώδικας λειτουργεί επίσης με .NET Framework 4.6+) +- Άδεια Aspose.Words for .NET (ή ένα δωρεάν κλειδί αξιολόγησης) +- Βασική κατανόηση του C# και του Visual Studio (ή οποιοδήποτε IDE προτιμάτε) +- Ένα αρχείο DOCX που θέλετε να κάνετε προσβάσιμο (θα το ονομάσουμε `input.docx`) + +> **Συμβουλή:** Αν χρησιμοποιείτε τη δωρεάν δοκιμή, θυμηθείτε ότι το παραγόμενο PDF θα περιέχει ένα μικρό υδατογράφημα «Evaluation». + +## Βήμα 1: Εγκατάσταση του πακέτου NuGet Aspose.Words + +Πριν γράψουμε οποιονδήποτε κώδικα C#, η βιβλιοθήκη Aspose.Words πρέπει να προστεθεί στο έργο. + +```bash +dotnet add package Aspose.Words +``` + +Η εκτέλεση της εντολής επαναφέρει το `Aspose.Words.dll` και κάνει διαθέσιμα τα namespaces. Αυτό το βήμα είναι ουσιώδες επειδή η κλάση `PdfSaveOptions` βρίσκεται μέσα σε αυτό το πακέτο. + +## Βήμα 2: Φόρτωση του Πηγαίου Αρχείου DOCX + +Το πρώτο λογικό βήμα είναι η φόρτωση του εγγράφου Word που θέλετε να μετατρέψετε. Σκεφτείτε το ως το άνοιγμα ενός βιβλίου πριν αρχίσετε να επεξεργάζεστε τις σελίδες του. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Γιατί είναι σημαντικό:** Η φόρτωση του εγγράφου δημιουργεί μια αναπαράσταση στη μνήμη που περιλαμβάνει όλα τα στυλ, τις εικόνες και τα μεταδεδομένα. Αν το αρχείο είναι κατεστραμμένο, το `Document` θα ρίξει μια εξαίρεση—οπότε ίσως θελήσετε να το τυλίξετε σε μπλοκ try/catch για κώδικα παραγωγής. + +## Βήμα 3: Διαμόρφωση των Επιλογών Αποθήκευσης PDF για Προσβασιμότητα + +Το Aspose.Words σας επιτρέπει να καθορίσετε το επίπεδο συμμόρφωσης PDF. Το PDF/UA‑1 είναι το αρχικό πρότυπο προσβασιμότητας, ενώ το PDF/UA‑2 προσθέτει μερικές νεότερες ετικέτες. Επιλέξτε αυτό που ταιριάζει στις απαιτήσεις του πελάτη σας. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Τι κάνει η “Συμμόρφωση”:** Ορίζοντας `PdfCompliance.PdfUax1` λέει στο Aspose.Words να ενσωματώσει τις σωστές ετικέτες, τη λογική σειρά ανάγνωσης και το εναλλακτικό κείμενο για τις εικόνες—ακριβώς αυτό που ψάχνει το λογισμικό ανάγνωσης οθόνης. + +## Βήμα 4: Αποθήκευση του Εγγράφου ως Προσβάσιμο PDF + +Τώρα το βαριά έργο έχει ολοκληρωθεί· απλώς δίνουμε εντολή στο Aspose.Words να γράψει το αρχείο PDF χρησιμοποιώντας τις επιλογές που μόλις ορίσαμε. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Μετά την εκτέλεση αυτής της γραμμής, θα βρείτε το `output.pdf` στον καθορισμένο φάκελο. Ανοίξτε το στο Adobe Acrobat Reader και ελέγξτε **File → Properties → Description → PDF/A and PDF/UA** για να επαληθεύσετε τη συμμόρφωση. + +## Βήμα 5: Επαλήθευση Προσβασιμότητας (Προαιρετικό αλλά Συνιστάται) + +Αν και ο κώδικας εγγυάται την έξοδο PDF με ετικέτες, ένας γρήγορος χειροκίνητος έλεγχος βοηθά να εντοπιστεί τυχόν προσαρμοσμένο περιεχόμενο που μπορεί να χρειάζεται επιπλέον προσοχή. + +1. Ανοίξτε το `output.pdf` στο Adobe Acrobat Pro. +2. Μεταβείτε στο **Tools → Accessibility → Full Check**. +3. Εκτελέστε τον έλεγχο και ελέγξτε τυχόν προειδοποιήσεις (π.χ., ελλιπές alt text για προσαρμοσμένες εικόνες). + +Αν η αναφορά δεν εμφανίζει σφάλματα, έχετε δημιουργήσει επιτυχώς **προσβάσιμο PDF** που πληροί τα πρότυπα PDF/UA‑1. + +## Κοινές Παραλλαγές & Ακραίες Περιπτώσεις + +### Μετατροπή Πολλαπλών Αρχείων DOCX σε Βρόχο + +Αν έχετε μια δέσμη εγγράφων, τυλίξτε τη λογική φόρτωσης‑αποθήκευσης μέσα σε έναν βρόχο `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Μετάβαση σε PDF/UA‑2 + +Απλώς αλλάξτε το enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Διαχείριση Προσαρμοσμένων Γραμματοσειρών + +Αν το DOCX σας χρησιμοποιεί γραμματοσειρές που δεν είναι εγκατεστημένες στον διακομιστή, ενσωματώστε τις: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Η ενσωμάτωση εγγυάται ότι το PDF θα φαίνεται το ίδιο σε οποιονδήποτε υπολογιστή—ένα κρίσιμο στοιχείο όταν **εξάγετε docx σε pdf** για εξωτερικούς ενδιαφερόμενους. + +## Πλήρες Παράδειγμα Λειτουργίας + +Παρακάτω είναι το πλήρες, έτοιμο‑για‑εκτέλεση πρόγραμμα που συνδυάζει όλα τα κομμάτια. Αντιγράψτε‑και‑επικολλήστε το σε μια εφαρμογή κονσόλας, προσαρμόστε τις διαδρομές, και πατήστε **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Αναμενόμενο αποτέλεσμα:** Ένα αρχείο με όνομα `output.pdf` που ανοίγει σε οποιονδήποτε προβολέα PDF, περιέχει τις σωστές ετικέτες προσβασιμότητας, και μπορεί να μοιραστεί με χρήστες που βασίζονται σε βοηθητική τεχνολογία. + +![Παράδειγμα δημιουργίας προσβάσιμου PDF](/images/create-accessible-pdf.png "Στιγμιότυπο οθόνης που δείχνει ένα έγγραφο συμβατό με PDF/UA‑1") + +*Κείμενο alt εικόνας:* *παράδειγμα δημιουργίας προσβάσιμου pdf – στιγμιότυπο οθόνης ενός εγγράφου συμβατού με PDF/UA‑1.* + +## Συχνές Ερωτήσεις + +- **Λειτουργεί αυτό με .NET Core;** + Απόλυτα. Το Aspose.Words είναι cross‑platform, έτσι ο ίδιος κώδικας εκτελείται σε Windows, Linux και macOS. + +- **Τι γίνεται αν το DOCX μου περιέχει μακροεντολές;** + Οι μακροεντολές αγνοούνται κατά τη μετατροπή· μόνο το ορατό περιεχόμενο αποδίδεται στο PDF. + +- **Μπορώ να προσθέσω προσαρμοσμένο τίτλο μεταδεδομένων PDF;** + Ναι—ορίστε `pdfSaveOptions.Metadata.Title = "Your Custom Title";` πριν την αποθήκευση. + +- **Υποστηρίζεται ευρέως το PDF/UA‑2;** + Οι περισσότεροι σύγχρονοι αναγνώστες PDF κατανοούν το PDF/UA‑2, αλλά αν στοχεύετε σε παλαιότερα εργαλεία, παραμείνετε στο PDF/UA‑1. + +## Συμπέρασμα + +Μόλις σας δείξαμε πώς να **δημιουργήσετε προσβάσιμο PDF** από ένα αρχείο DOCX χρησιμοποιώντας το Aspose.Words, καλύπτοντας τα πάντα από την εγκατάσταση του πακέτου NuGet μέχρι την επαλήθευση της συμμόρφωσης PDF/UA. Ακολουθώντας αυτά τα βήματα μπορείτε αξιόπιστα να **μετατρέψετε Word σε PDF**, **αποθηκεύσετε Word ως PDF**, και **εξάγετε docx σε PDF** ενώ τηρείτε τα πρότυπα προσβασιμότητας—μια απαραίτητη δεξιότητα για κάθε προγραμματιστή που εργάζεται σε επιχειρησιακές ροές εγγράφων. + +Έτοιμοι για την επόμενη πρόκληση; Δοκιμάστε να προσθέσετε προσαρμοσμένη κεφαλίδα/υποσέλιδο, να ενσωματώσετε ετικέτα PDF/A‑2b, ή να αυτοματοποιήσετε τη διαδικασία σε ένα ASP.NET Core web API. Οι δυνατότητες είναι ατελείωτες, και η βάση που έχετε χτίσει εδώ θα σας επιτρέψει να τις αντιμετωπίσετε με σιγουριά. + +Καλή προγραμματιστική, και τα PDF σας να είναι πάντα αναγνώσιμα! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/programming-with-markdownsaveoptions/_index.md b/words/greek/net/programming-with-markdownsaveoptions/_index.md index 86265e28a6..f81134196e 100644 --- a/words/greek/net/programming-with-markdownsaveoptions/_index.md +++ b/words/greek/net/programming-with-markdownsaveoptions/_index.md @@ -43,6 +43,7 @@ | [Πώς να μετονομάσετε εικόνες κατά τη μετατροπή DOCX σε Markdown](./how-to-rename-images-when-converting-docx-to-markdown/) | Μάθετε πώς να μετονομάσετε εικόνες κατά τη μετατροπή DOCX σε Markdown χρησιμοποιώντας Aspose.Words για .NET. | | [Αποθήκευση docx ως markdown με Aspose.Words – Πλήρης Οδηγός C#](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Μάθετε πώς να μετατρέψετε αρχεία docx σε markdown χρησιμοποιώντας Aspose.Words με πλήρη οδηγό C#. | | [Αποθήκευση εικόνων Word – Μετατροπή Word σε Markdown με Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) | Μάθετε πώς να αποθηκεύσετε εικόνες από έγγραφα Word και να τα μετατρέψετε σε Markdown με Aspose.Words. | +| [Αποθήκευση εικόνων – Μετατροπή DOCX σε Markdown με Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Μάθετε πώς να αποθηκεύσετε εικόνες από DOCX κατά τη μετατροπή σε Markdown με Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/greek/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..e00b6eaf4b --- /dev/null +++ b/words/greek/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Μάθετε πώς να αποθηκεύετε εικόνες κατά τη μετατροπή ενός DOCX σε Markdown + χρησιμοποιώντας το Aspose.Words. Αυτός ο οδηγός δείχνει επίσης πώς να εξάγετε εικόνες + από το Word και να αποθηκεύσετε το Word ως Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: el +og_description: Πώς να αποθηκεύσετε εικόνες κατά τη μετατροπή ενός DOCX σε Markdown + χρησιμοποιώντας το Aspose.Words. Οδηγός βήμα‑προς‑βήμα με πλήρη κώδικα C#. +og_title: Πώς να αποθηκεύσετε εικόνες – Μετατρέψτε DOCX σε Markdown με το Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Πώς να αποθηκεύσετε εικόνες – Μετατροπή DOCX σε Markdown με το Aspose.Words +url: /el/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να Αποθηκεύσετε Εικόνες – Μετατροπή DOCX σε Markdown με Aspose.Words + +Έχετε αναρωτηθεί ποτέ **πώς να αποθηκεύσετε εικόνες** όταν χρειάζεται να μετατρέψετε ένα αρχείο Word σε Markdown; Δεν είστε οι μόνοι. Πολλοί προγραμματιστές συναντούν προβλήματα όταν η μετατροπή αφήνει τις εικόνες σε ένα χάος σπασμένων συνδέσμων ή, χειρότερα, τις χάνει εντελώς. Τα καλά νέα είναι ότι το Aspose.Words σας δίνει λεπτομερή έλεγχο, ώστε να μπορείτε να εξάγετε τις εικόνες από το Word, να αποφασίσετε πού θα τοποθετηθούν και να λάβετε καθαρό αποτέλεσμα σε Markdown. + +Σε αυτό το tutorial θα περάσουμε βήμα‑βήμα από ένα πλήρες, έτοιμο προς εκτέλεση παράδειγμα C# που δείχνει **πώς να αποθηκεύσετε εικόνες** σε έναν αφιερωμένο φάκελο κατά τη μετατροπή ενός `.docx` σε `.md`. Καθ' οδόν θα αγγίξουμε επίσης **convert docx to markdown**, **extract images from word** και το ευρύτερο ερώτημα **how to convert docx** με τρόπο που να σας επιτρέπει **save word as markdown** χωρίς να χάσετε κανένα στοιχείο. + +## Προαπαιτούμενα + +- .NET 6.0 ή νεότερο (το API λειτουργεί το ίδιο και σε .NET Framework 4.7+) +- Ένα ενεργό license του Aspose.Words ή μια δωρεάν δοκιμή (η δωρεάν έκδοση προσθέτει υδατογράφημα στο αποτέλεσμα, αλλά ο κώδικας λειτουργεί το ίδιο) +- Ένα έγγραφο Word που περιέχει ήδη εικόνες (π.χ., `DocWithImages.docx`) +- Visual Studio 2022 ή οποιονδήποτε επεξεργαστή που μπορεί να δημιουργήσει έργα C# + +> **Pro tip:** Αν χρησιμοποιείτε δοκιμαστική έκδοση, μπορείτε ακόμη να δοκιμάσετε τη λογική αποθήκευσης εικόνων· απλώς θυμηθείτε ότι το τελικό PDF/MD θα περιέχει το υδατογράφημα της δοκιμής. + +## Επισκόπηση της Λύσης + +Σε υψηλό επίπεδο η διαδικασία μοιάζει με αυτή: + +1. Φορτώστε το πηγαίο `.docx` με το `Document`. +2. Δημιουργήστε ένα αντικείμενο `MarkdownSaveOptions` και συνδέστε ένα `IResourceSavingCallback`. +3. Στο callback, αποφασίστε το φάκελο και το όνομα αρχείου για κάθε εικόνα. +4. Αποθηκεύστε το έγγραφο ως Markdown· το callback γράφει κάθε εικόνα στο δίσκο. + +Αυτή είναι η ουσία του **πώς να αποθηκεύσετε εικόνες** κατά τη μετατροπή. Το ίδιο μοτίβο λειτουργεί και για άλλους τύπους πόρων (γραμματοσειρές, CSS κ.λπ.) αν τα χρειαστείτε. + +## Βήμα 1 – Φόρτωση του DOCX που Περιέχει Εικόνες + +Πρώτα χρειαζόμαστε μια παρουσία `Document` που δείχνει στο αρχείο Word που θέλετε να μετατρέψετε. Τίποτα περίπλοκο· απλώς μια απλή κλήση κατασκευής. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Γιατί είναι σημαντικό:** Η φόρτωση του εγγράφου είναι το μόνο σημείο όπου το Aspose αναλύει το XML του Word, έτσι οποιαδήποτε έλλειψη γραμματοσειρών ή κατεστραμμένα τμήματα θα ρίξουν εξαίρεση αμέσως—πριν καν αρχίσουμε να αποθηκεύουμε εικόνες. + +## Βήμα 2 – Ρύθμιση του MarkdownSaveOptions με Callback Αποθήκευσης Εικόνας + +Η κλάση `MarkdownSaveOptions` σας επιτρέπει να συνδέσετε κώδικα στη διαδικασία αποθήκευσης μέσω του `ResourceSavingCallback`. Αυτό το callback λαμβάνει ένα αντικείμενο `ResourceSavingArgs` για κάθε εξωτερικό πόρο (εικόνες, CSS, κ.λπ.) που το Aspose χρειάζεται να γράψει. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Υλοποίηση του Callback + +Παρακάτω είναι η πλήρης υλοποίηση του `ImageSavingCallback`. Δημιουργεί έναν υπο‑φάκελο `Images` δίπλα στο αρχείο Markdown, δίνει σε κάθε εικόνα ένα διαδοχικό όνομα (`img_0.png`, `img_1.jpg`, …) και προαιρετικά σας επιτρέπει να στείλετε την εικόνα κάπου αλλού (π.χ., σε cloud bucket). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Πώς σας βοηθά:** Προσαρμόζοντας το `args.FileName` ελέγχετε ακριβώς **πώς να αποθηκεύσετε εικόνες**—είτε σε επίπεδο φάκελο, ιεραρχία βάσει ημερομηνίας ή ακόμη και σε BLOB βάσης δεδομένων. Το callback εκτελείται για κάθε εικόνα, έτσι δεν χρειάζεται ποτέ να επεξεργαστείτε το αρχείο Markdown αργότερα. + +## Βήμα 3 – Αποθήκευση του Εγγράφου ως Markdown + +Τώρα που οι επιλογές και το callback είναι έτοιμα, η πραγματική μετατροπή είναι μια γραμμή κώδικα. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Όταν η γραμμή ολοκληρωθεί, θα έχετε: + +- `Doc.md` – η αναπαράσταση σε Markdown του περιεχομένου του Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … – κάθε εικόνα που εξήχθη από το αρχικό DOCX. + +## Πλήρες, Έτοιμο για Εκτέλεση Παράδειγμα + +Συνδυάζοντας τα παραπάνω, εδώ είναι μια αυτόνομη εφαρμογή κονσόλας που μπορείτε να αντιγράψετε‑επικολλήσετε σε ένα νέο έργο C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Αναμενόμενο Αποτέλεσμα + +Μετά την εκτέλεση του προγράμματος: + +- Ανοίξτε το `C:\Docs\Doc.md` σε οποιονδήποτε επεξεργαστή κειμένου. Θα δείτε συνδέσμους εικόνων Markdown όπως `![](Images/img_0.png)`. +- Ο φάκελος `Images` θα περιέχει κάθε εξαγόμενη εικόνα, ονομασμένη διαδοχικά. +- Το αρχείο Markdown θα αποδίδει σωστά σε οποιονδήποτε προβολέα που υποστηρίζει τοπικές εικόνες (π.χ., προεπισκόπηση VS Code, GitHub, κ.λπ.). + +## Συχνές Ερωτήσεις (FAQs) + +### Λειτουργεί αυτό με άλλες μορφές εικόνας (SVG, TIFF); + +Ναι. Η `Path.GetExtension(args.FileName)` διατηρεί την αρχική επέκταση, έτσι SVG, TIFF, BMP και ακόμη EMF αποθηκεύονται αμετάβλητα. Η μόνη προειδοποίηση είναι ότι ορισμένοι προβολείς Markdown μπορεί να μην εμφανίζουν SVG ενσωματωμένα· σε αυτήν την περίπτωση μπορείτε να μετατρέψετε το SVG σε PNG εκ των προτέρων. + +### Τι γίνεται αν θέλω να ενσωματώσω εικόνες ως Base64 αντί για ξεχωριστά αρχεία; + +Μέσα στο `ResourceSaving` μπορείτε να αντικαταστήσετε τη φυσική εγγραφή αρχείου με ένα memory stream και στη συνέχεια να τροποποιήσετε το σύνδεσμο Markdown χειροκίνητα. Το Aspose δεν παρέχει άμεσο «embed as Base64» κουμπί, αλλά το callback σας δίνει πλήρη έλεγχο του `args.Stream`. + +### Πώς διαφέρει αυτό από τη ενσωματωμένη μέθοδο `ExportImages`; + +`ExportImages` εξάγει όλες τις εικόνες σε φάκελο **χωρίς** να δημιουργεί Markdown. Το δικό μας callback συνδυάζει τις δύο ενέργειες, εξασφαλίζοντας ότι τα ονόματα αρχείων εικόνας ταιριάζουν με τις αναφορές μέσα στο `.md`. Αυτή η ευθυγράμμιση είναι το κλειδί για **πώς να αποθηκεύσετε εικόνες** σωστά κατά τη μετατροπή. + +### Μπορώ να μετατρέψω πολλαπλά αρχεία DOCX σε batch; + +Απολύτως. Τυλίξτε τη βασική λογική σε έναν βρόχο `foreach (var file in Directory.GetFiles(..., "*.docx"))`, προσαρμόστε τις διαδρομές εξόδου και επαναχρησιμοποιήστε το ίδιο `ImageSavingCallback`. Θυμηθείτε να δημιουργείτε νέο `MarkdownSaveOptions` για κάθε έγγραφο, επειδή το `args.DestinationFileName` αλλάζει ανά επανάληψη. + +## Ακραίες Περιπτώσεις & Καλές Πρακτικές + +| Κατάσταση | Τι Πρέπει να Προσέξετε | Προτεινόμενη Διόρθωση | +|-----------|----------------------|----------------------| +| **Μεγάλο DOCX (εκατοντάδες MB)** | Πίεση μνήμης κατά τη φόρτωση | Χρησιμοποιήστε `LoadOptions` με `LoadFormat.Docx` και ορίστε `LoadOptions.LoadFormat = LoadFormat.Docx` για να φορτώνετε τμήματα σε ροή | +| **Σύγκρουση ονομάτων εικόνων** | Αν ο προορισμός έχει ήδη `img_0.png`, μπορεί να αντικατασταθεί | Προσθέστε GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Φάκελος εξόδου μόνο για ανάγνωση** | Η αποθήκευση ρίχνει `UnauthorizedAccessException` | Βεβαιωθείτε ότι η διαδικασία τρέχει με κατάλληλα δικαιώματα ή επιλέξτε εγγράψιμη διαδρομή | +| **Μη‑εικόνες πόροι (CSS, γραμματοσειρές)** | Το callback τα λαμβάνει επίσης | Προστατέψτε με `if (args.ResourceType != ResourceType.Image) return;` (ήδη φαίνεται) | +| **Ονόματα αρχείων Unicode** | Κάποια συστήματα αρχείων αντιμετωπίζουν προβλήματα | Χρησιμοποιήστε `Path.GetInvalidFileNameChars()` για να καθαρίσετε το `args.FileName` πριν το αναθέσετε | + +## Σχετικά Θέματα που Μπορείτε να Εξερευνήσετε Στη Σειρά σας + +- **convert docx to markdown** με προσαρμοσμένα στυλ επικεφαλίδων (χρησιμοποιήστε `MarkdownSaveOptions.ExportImagesAsBase64` για ενσωματωμένες εικόνες) +- **extract images from word** χρησιμοποιώντας το `Document.GetChildNodes(NodeType.Shape, true)` + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/working-with-fonts/_index.md b/words/greek/net/working-with-fonts/_index.md index 827746376c..23d1253935 100644 --- a/words/greek/net/working-with-fonts/_index.md +++ b/words/greek/net/working-with-fonts/_index.md @@ -29,7 +29,7 @@ | [Λήψη απόστασης γραμματοσειράς](./get-font-line-spacing/) | Μάθετε πώς να βρείτε απόσταση μεταξύ γραμματοσειρών χρησιμοποιώντας το Aspose.Words για .NET με αυτό το βήμα προς βήμα σεμινάριο. Ιδανικό για προγραμματιστές. | | [Έλεγχος εφέ κειμένου DrawingML](./check-drawingml-text-effect/) Μάθετε πώς να ελέγχετε τα εφέ κειμένου DrawingML σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με τον λεπτομερής, βήμα προς βήμα οδηγό μας. Βελτιώστε τα έγγραφά σας με ευκολία. | | [Ορισμός μορφοποίησης γραμματοσειράς](./set-font-formatting/) | Μάθετε πώς να ορίζετε τη μορφοποίηση γραμματοσειρών σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET. Ακολουθήστε τον λεπτομερή οδηγό μας βήμα προς βήμα για να βελτιώσετε την αυτοματοποίηση των εγγράφων σας. | -| [Έλεγχος εφέ κειμένου DrawingML](./check-drawingml-text-effect/) Μάθετε πώς να ελέγχετε τα εφέ κειμένου DrawingML σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με τον λεπτομερή, βήμα προς βήμα οδηγό μας. Βελτιώστε τα έγγραφά σας με ευκολία. | +| [Έλεγχος εφέ κειμένου DrawingML](./check-drawingml-text-effect/) Μάθετε πώς να ελέγχετε τα εφέ κειμένου DrawingML σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με τον λεπτομερής, βήμα προς βήμα οδηγό μας. Βελτιώστε τα έγγραφά σας με ευκολία. | | [Ορισμός μορφοποίησης γραμματοσειράς](./set-font-formatting/) | Μάθετε πώς να ορίζετε τη μορφοποίηση γραμματοσειρών σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET. Ακολουθήστε τον λεπτομερής οδηγό μας βήμα προς βήμα για να βελτιώσετε την αυτοματοποίηση των εγγράφων σας. | | [Ορισμός σημαδιού έμφασης γραμματοσειράς](./set-font-emphasis-mark/) | Μάθετε πώς να ορίζετε σημάδια έμφασης γραμματοσειράς σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με αυτόν τον λεπτομερής οδηγό βήμα προς βήμα. Ιδανικό για προγραμματιστές .NET. | | [Ορισμός φακέλων γραμματοσειρών](./set-fonts-folders/) | Μάθετε πώς να ορίζετε προσαρμοσμένους φακέλους γραμματοσειρών στο Aspose.Words για .NET με αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. Ιδανικό για προγραμματιστές που θέλουν να βελτιώσουν τις γραμματοσειρές εγγράφων. | @@ -53,14 +53,12 @@ | [Λήψη αντικατάστασης χωρίς επιθήματα](./get-substitution-without-suffixes/) | Σε αυτό το σεμινάριο, μάθετε πώς να λαμβάνετε παρακάμψεις χωρίς επιθήματα σε ένα έγγραφο του Word με το Aspose.Words για .NET. | | [Πώς να ανιχνεύσετε γραμματοσειρές στο Aspose.Words – Διαχείριση προειδοποιήσεων & ρυθμίσεων](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Μάθετε πώς να εντοπίζετε γραμματοσειρές, να διαχειρίζεστε προειδοποιήσεις και να ρυθμίζετε τις επιλογές γραμματοσειρών στο Aspose.Words. | | [Πώς να φορτώσετε DOCX και να εντοπίσετε ελλιπείς γραμματοσειρές – Πλήρης οδηγός C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Μάθετε πώς να φορτώσετε αρχεία DOCX και να εντοπίσετε ελλιπείς γραμματοσειρές με το Aspose.Words για .NET σε πλήρη οδηγό C#. | - | [Πώς να Καταγράψετε Γραμματοσειρές στο Aspose.Words – Πλήρης Οδηγός](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Μάθετε πώς να εντοπίζετε και να αποθηκεύετε όλες τις γραμματοσειρές ενός εγγράφου Word χρησιμοποιώντας το Aspose.Words για .NET. | +| [Αντικατάσταση Γραμματοσειρών Aspose: Εντοπισμός Ελλιπών Γραμματοσειρών σε Έγγραφα Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Μάθετε πώς να εντοπίζετε ελλιπείς γραμματοσειρές σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET. | {{< /blocks/products/pf/tutorial-page-section >}} - {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} - {{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/greek/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/greek/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..d6a4d7f0de --- /dev/null +++ b/words/greek/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,284 @@ +--- +category: general +date: 2026-05-04 +description: Μάθετε πώς να χρησιμοποιείτε την αντικατάσταση γραμματοσειρών Aspose + για να εντοπίζετε τις ελλιπείς γραμματοσειρές όταν φορτώνετε ένα έγγραφο Word και + να ανακτάτε λεπτομέρειες για τις ελλιπείς γραμματοσειρές — οδηγός βήμα‑προς‑βήμα. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: el +og_description: Αποκτήστε πλήρη έλεγχο της αντικατάστασης γραμματοσειρών Aspose για + την ανίχνευση ελλιπών γραμματοσειρών κατά τη φόρτωση ενός εγγράφου Word και την + ανάκτηση πληροφοριών ελλιπών γραμματοσειρών με πλήρη κώδικα C#. +og_title: Αντικατάσταση Γραμματοσειρών Aspose – Εντοπισμός Ελλειπουσών Γραμματοσειρών + σε Έγγραφα Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Αντικατάσταση γραμματοσειρών Aspose: Εντοπισμός ελλιπών γραμματοσειρών σε + έγγραφα Word' +url: /el/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Εντοπισμός Ελλειπουσών Γραμματοσειρών σε Έγγραφα Word + +Έχετε αναρωτηθεί ποτέ γιατί ένα έγγραφο Word φαίνεται λανθασμένο σε διαφορετικό υπολογιστή; Συχνά ο ένοχος είναι μια ελλιπής γραμματοσειρά, και η **Aspose font substitution** είναι το εργαλείο που σας επιτρέπει να εντοπίζετε αυτά τα κενά πριν γίνουν οπτική καταστροφή. Σε αυτό το tutorial θα δούμε πώς να **εντοπίσετε ελλιπείς γραμματοσειρές** τη στιγμή που **φορτώνετε ένα έγγραφο Word**, και στη συνέχεια να **ανακτήσετε λεπτομέρειες ελλιπούσας γραμματοσειράς** ώστε να μπορείτε να τις διορθώσετε ή να τις αντικαταστήσετε. + +Θα καλύψουμε τα πάντα, από τη ρύθμιση του callback προειδοποίησης μέχρι την εξαγωγή μιας καθαρής λίστας ελλιπούσων γραμματοσειρών. Στο τέλος, θα έχετε ένα έτοιμο προς εκτέλεση απόσπασμα C# που σας λέει ακριβώς ποιες γραμματοσειρές δεν βρέθηκαν, και θα καταλάβετε γιατί αυτό είναι σημαντικό για την πιστότητα του εγγράφου. + +--- + +## Προαπαιτήσεις – Τι Χρειάζεστε Πριν Ξεκινήσετε + +- **Aspose.Words for .NET** (συνιστάται η έκδοση v23.12 ή νεότερη). +- Ένα .NET περιβάλλον ανάπτυξης (Visual Studio, Rider ή το `dotnet` CLI). +- Ένα δείγμα DOCX που σκόπιμα χρησιμοποιεί μια γραμματοσειρά που δεν έχετε εγκατεστημένη — ονομάστε το `DocumentWithMissingFont.docx`. +- Βασικές γνώσεις C# — τίποτα περίπλοκο, μόνο η δυνατότητα εκτέλεσης μιας εφαρμογής κονσόλας. + +Αν κάτι από τα παραπάνω σας φαίνεται άγνωστο, κάντε παύση και εγκαταστήστε το πακέτο NuGet: + +```bash +dotnet add package Aspose.Words +``` + +Αυτό είναι όλο. Δεν χρειάζονται επιπλέον γραμματοσειρές, ούτε εξωτερικές υπηρεσίες. + +--- + +## Βήμα 1: Φόρτωση του Εγγράφου Word (και Έναρξη Ελέγχων Γραμματοσειρών) + +Το πρώτο πράγμα που κάνετε είναι **να φορτώσετε ένα έγγραφο Word**. Το Aspose.Words αναλύει το αρχείο και, αν δεν μπορεί να εντοπίσει μια αναφερόμενη γραμματοσειρά, προσθέτει μια προειδοποίηση *FontSubstitution*. Ακολουθεί ο κώδικας που κάνει τη φόρτωση: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Γιατί είναι σημαντικό:** Η πρώιμη φόρτωση του εγγράφου δίνει στο Aspose την ευκαιρία να σαρώσει κάθε τμήμα κειμένου, στυλ και ενσωματωμένο αντικείμενο. Αν μια γραμματοσειρά δεν βρεθεί στο σύστημα ή στον προσαρμοσμένο φάκελο γραμματοσειρών, θα λάβετε προειδοποίηση αργότερα. + +--- + +## Βήμα 2: Σύνδεση Callback Προειδοποίησης για Καταγραφή Συμβάντων Αντικατάστασης + +Το Aspose.Words χρησιμοποιεί έναν μηχανισμό callback για να σας ενημερώνει για προβλήματα όπως ελλιπείς γραμματοσειρές. Αναθέτοντας μια υλοποίηση του `IWarningCallback` στο `doc.WarningCallback`, μπορείτε να παγιδεύετε κάθε προειδοποίηση καθώς συμβαίνει. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro tip:** Μπορείτε να συνδέσετε πολλαπλά callbacks (π.χ. logging, ενημερώσεις UI) τυλίγοντας τα σε ένα σύνθετο pattern, αλλά για αυτό το tutorial ένα μόνο callback κρατά τα πράγματα σαφή. + +--- + +## Βήμα 3: Υλοποίηση του Callback Προειδοποίησης για Αντικατάσταση Γραμματοσειρών + +Τώρα ορίζουμε την κλάση που πραγματικά κάνει τη δουλειά. Το callback λαμβάνει ένα αντικείμενο `WarningInfo`; φιλτράρουμε για `WarningType.FontSubstitution` και αποθηκεύουμε την περιγραφή για μετέπειτα χρήση. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Τι συμβαίνει:** Όταν το Aspose συναντά μια ελλιπή γραμματοσειρά, δημιουργεί μια προειδοποίηση όπως “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Το callback μας εκτυπώνει αυτή τη γραμμή και την αποθηκεύει. + +--- + +## Βήμα 4: Επεξεργασία του Εγγράφου (Προαιρετικό) και Συλλογή Ελλιπούσων Γραμματοσειρών + +Αν χρειάζεστε μόνο **εντοπισμό ελλιπούσων γραμματοσειρών**, το βήμα φόρτωσης είναι αρκετό — οι προειδοποιήσεις εκδίδονται αυτόματα. Ωστόσο, πολλοί προγραμματιστές χρειάζονται επίσης **ανάκτηση πληροφοριών ελλιπούσας γραμματοσειράς** μετά από κάποιες ενέργειες (π.χ. αποθήκευση, μετατροπή). Παρακάτω αναγκάζουμε μια μικρή ενέργεια — αποθήκευση σε PDF — ώστε να διασφαλίσουμε ότι όλες οι προειδοποιήσεις έχουν εκδοθεί, και στη συνέχεια παίρνουμε τα συλλεγμένα μηνύματα. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Αναμενόμενη έξοδος κονσόλας** (παράδειγμα): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Παρατηρήστε πώς κάθε γραμμή δηλώνει σαφώς τη αρχική γραμματοσειρά και τη εναλλακτική που επέλεξε το Aspose. Αυτό αποτελεί τον πυρήνα της αναφοράς **aspose font substitution**. + +--- + +## Βήμα 5: Προχωρημένο – Χρήση Προσαρμοσμένων Πηγών Γραμματοσειρών για Μείωση των Αντικαταστάσεων + +Μερικές φορές *έχετε* τις ελλιπείς γραμματοσειρές, απλώς δεν βρίσκονται στον προεπιλεγμένο φάκελο συστήματος. Το Aspose.Words σας επιτρέπει να δείξετε σε έναν προσαρμοσμένο κατάλογο μέσω `FontSettings`. Η προσθήκη αυτού του βήματος μπορεί να μειώσει δραστικά τον αριθμό των προειδοποιήσεων αντικατάστασης. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Γιατί να το προσθέσετε;** Αν διανέμετε έγγραφα σε διαφορετικούς υπολογιστές, η συσσωμάτωση των απαιτούμενων γραμματοσειρών σε έναν γνωστό φάκελο εξασφαλίζει την ίδια οπτική εμφάνιση παντού. Επίσης κάνει τη ρουτίνα **detect missing fonts** πιο ακριβή, επειδή το Aspose ελέγχει αυτόν τον φάκελο πριν καταφύγει σε εναλλακτική. + +--- + +## Πλήρες Παράδειγμα Λειτουργίας + +Συνδυάζοντας όλα τα παραπάνω, εδώ είναι ένα πλήρες, έτοιμο για αντιγραφή πρόγραμμα κονσόλας. Αποθηκεύστε το ως `Program.cs` και τρέξτε το με `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Τι θα δείτε:** Αν το πηγαίο DOCX αναφέρει γραμματοσειρές που δεν έχετε, η κονσόλα θα εκτυπώσει κάθε γραμμή αντικατάστασης ακολουθούμενη από μια σύντομη σύνοψη. Αν όλες οι γραμματοσειρές είναι παρούσες, θα εμφανιστεί το μήνυμα “No missing fonts were detected.”. + +--- + +## Συνηθισμένα Προβλήματα & Πώς να τα Αποφύγετε + +| Πρόβλημα | Γιατί Συμβαίνει | Διόρθωση | +|----------|----------------|----------| +| **Δεν εμφανίζονται προειδοποιήσεις** | Το έγγραφο χρησιμοποιεί μόνο σύστημα γραμματοσειρών, ή έχετε ήδη προσθέσει έναν προσαρμοσμένο φάκελο που περιέχει τις ελλιπείς γραμματοσειρές. | Επαληθεύστε ότι το DOCX πράγματι αναφέρει μια μη διαθέσιμη γραμματοσειρά. Μπορείτε να το ανοίξετε στο Word και να αλλάξετε μια παράγραφο σε μια σπάνια γραμματοσειρά (π.χ. “Papyrus”). | +| **Διπλότυπα μηνύματα** | Η ίδια γραμματοσειρά χρησιμοποιείται σε πολλαπλές εκτελέσεις, προκαλώντας πολλαπλές προειδοποιήσεις. | Απο-διπλοεπιλέξτε τη λίστα με `Distinct()` αν χρειάζεστε μόνο ένα μοναδικό σύνολο. | +| **Πρόσπτωση στην απόδοση σε μεγάλα έγγραφα** | Κάθε προειδοποίηση επεξεργάζεται στο UI thread. | Εκτελέστε τη φόρτωση σε ένα background task ή χρησιμοποιήστε `Parallel.ForEach` για την επεξεργασία μετά. | +| **Λάθος εναλλακτική γραμματοσειρά** | Η προεπιλεγμένη εναλλακτική του Aspose μπορεί να μην ταιριάζει με το branding σας. | Ορίστε `FontSettings.SubstitutionSettings.DefaultFontName` σε μια προτιμώμενη εναλλακτική (π.χ. “Calibri”). | + +--- + +## Επέκταση της Λύσης – Εξαγωγή Ελλιπούσων Γραμματοσειρών σε JSON + +Αν δημιουργείτε μια web υπηρεσία που πρέπει να αναφέρει τις ελλιπείς γραμματοσειρές σε έναν πελάτη, η σειριοποίηση της λίστας είναι τετριμμένη: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Τώρα το API σας μπορεί να επιστρέψει ένα καθαρό JSON payload που ένα άλλο σύστημα μπορεί να καταναλώσει. + +--- + +## Συμπέρασμα + +Σε αυτόν τον οδηγό παρουσιάσαμε την **Aspose font substitution** από την αρχή μέχρι το τέλος: φόρτωση ενός εγγράφου Word, σύνδεση ενός callback προειδοποίησης, καταγραφή κάθε συμβάντος *detect missing fonts*, και τελικά **retrieve missing font** πληροφορίες για αναφορά ή αποκατάσταση. Προσθέτοντας προαιρετικούς προσαρμοσμένους φακέλους γραμματοσειρών μπορείτε να μειώσετε τη λίστα των αντικαταστάσεων, και με λίγες επιπλέον γραμμές μπορείτε ακόμη και να εξάγετε τα αποτελέσματα ως JSON. + +Θυμηθείτε, η οπτική ακεραιότητα των εγγράφων σας εξαρτάται από τις γραμματοσειρές που χρησιμοποιούν. Με την τεχνική που παρουσιάστηκε εδώ, δεν θα εκπλαγείτε ξανά από μια απρόσμενη εναλλακτική. + +Έτοιμοι για το επόμενο βήμα; Δοκιμάστε να ενσωματώσετε αυτή τη λογική σε μια μεγαλύτερη αλυσίδα επεξεργασίας εγγράφων, ή εξερευνήστε άλλες δυνατότητες του Aspose.Words όπως η ενσωμάτωση γραμματοσειρών (`doc.FontSettings.EmbeddedFonts`). Οι δυνατότητες είναι ατελείωτες, και οι χρήστες σας θα σας ευχαριστήσουν για το άψογο αποτέλεσμα. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hindi/net/ai-powered-document-processing/_index.md b/words/hindi/net/ai-powered-document-processing/_index.md index f79ec9c470..8aa36c6ad1 100644 --- a/words/hindi/net/ai-powered-document-processing/_index.md +++ b/words/hindi/net/ai-powered-document-processing/_index.md @@ -17,7 +17,7 @@ ## परिचय -जब दस्तावेज़ प्रसंस्करण की बात आती है, तो Aspose.Words for .NET एक पावरहाउस है जो आपके काम को अगले स्तर तक ले जा सकता है। लेकिन आप कहाँ से शुरू करें? मुझे आपको आश्वस्त करने की अनुमति दें कि इन ट्यूटोरियल को नेविगेट करना बहुत आसान है, भले ही आप तकनीकी जादूगर न हों। चाहे आप दस्तावेज़ों को सारांशित करना चाहते हों, फ़ॉर्मेटिंग को बढ़ाना चाहते हों, या कार्यों को स्वचालित करना चाहते हों, हमारी ट्यूटोरियल लिस्टिंग आपके लिए विशेष रूप से तैयार किए गए चरण-दर-चरण मार्गदर्शिकाएँ प्रदान करती हैं। +जब दस्तावेज़ प्रसंस्करण की बात आती है, तो Aspose.Words for .NET एक पावरहाउस है जो आपके काम को अगले स्तर तक ले जा सकता है। लेकिन आप कहाँ से शुरू करें? मुझे आपको आश्वस्त करने की अनुमति दें कि इन ट्यूटोरियल को नेविगेट करना बहुत आसान है, भले ही आप तकनीकी जादूगर न हों। चाहे आप दस्तावेज़ों को सारांशित करना चाहते हों, फ़ॉर्मेटिंग को बढ़ाना चाहते हों, या कार्यों को स्वचालित करना चाहते हों, हमारी ट्यूटोरियल लिस्टिंग आपके लिए विशेष रूप से तैयार किए गए चरण-दर-स्टेप मार्गदर्शिकाएँ प्रदान करती हैं। ## एआई मॉडल के साथ शुरुआत करना @@ -41,7 +41,10 @@ | [एआई मॉडल के साथ काम करना](./working-with-ai-model/) | AI के साथ दस्तावेज़ों को सारांशित करने के लिए .NET के लिए Aspose.Words का उपयोग करना सीखें। दस्तावेज़ प्रबंधन को बेहतर बनाने के लिए आसान कदम। | | [गूगल AI मॉडल के साथ काम करना](./working-with-google-ai-model/) .NET और Google AI के लिए Aspose.Words के साथ अपने दस्तावेज़ प्रसंस्करण को उन्नत करें और आसानी से संक्षिप्त सारांश बनाएं। | | [ओपन एआई मॉडल के साथ काम करना](./working-with-open-ai-model/) | OpenAI के शक्तिशाली मॉडल के साथ .NET के लिए Aspose.Words का उपयोग करके कुशल दस्तावेज़ सारांश अनलॉक करें। अब इस व्यापक गाइड में गोता लगाएँ। | -| [सारांश विकल्पों के साथ कार्य करना](./working-with-summarize-options/) | त्वरित जानकारी के लिए AI मॉडल को एकीकृत करने पर हमारे चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों को प्रभावी ढंग से सारांशित करना सीखें। | +| [सारांश विकल्पों के साथ कार्य करना](./working-with-summarize-options/) | त्वरित जानकारी के लिए AI मॉडल को एकीकृत करने पर हमारे चरण-दर-स्टेप मार्गदर्शिका के साथ .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों को प्रभावी ढंग से सारांशित करना सीखें। | +| [C# में व्याकरण जांच कैसे करें – Word दस्तावेज़ों के लिए पूर्ण गाइड](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | C# में Aspose.Words का उपयोग करके Word दस्तावेज़ों में व्याकरण जांच करने की पूरी प्रक्रिया सीखें। | +| [LLM के साथ Aspose.Words का उपयोग कैसे करें – C# में पैराग्राफ पुनर्लेखन](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | C# में Aspose.Words के साथ LLM का उपयोग करके पैराग्राफ को पुनर्लेखित करने की प्रक्रिया सीखें। | +| [C# में Word दस्तावेज़ का सारांश – Anthropic Claude का उपयोग करके पूर्ण गाइड](./summarize-word-document-in-c-complete-guide-using-anthropic/) | C# में Aspose.Words और Anthropic Claude का उपयोग करके Word दस्तावेज़ को प्रभावी रूप से सारांशित करने की पूरी प्रक्रिया सीखें। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/hindi/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..8f367ae227 --- /dev/null +++ b/words/hindi/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: C# का उपयोग करके Word दस्तावेज़ में व्याकरण कैसे जांचें, सीखें। यह ट्यूटोरियल + यह भी बताता है कि C# में DOCX फ़ाइल कैसे लोड करें और सटीक परिणामों के लिए Aspose.Words + AI का उपयोग कैसे करें। +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: hi +og_description: C# का उपयोग करके Word दस्तावेज़ में व्याकरण कैसे जांचें? इस ट्यूटोरियल + का पालन करें ताकि आप C# में DOCX फ़ाइल लोड कर सकें और Aspose.Words के साथ AI‑संचालित + व्याकरण जांच चला सकें। +og_title: C# में व्याकरण कैसे जांचें – पूर्ण चरण‑दर‑चरण मार्गदर्शिका +tags: +- Aspose.Words +- C# +- Grammar Checking +title: C# में व्याकरण जांच कैसे करें – वर्ड दस्तावेज़ों के लिए पूर्ण मार्गदर्शिका +url: /hi/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में व्याकरण कैसे जांचें – Word दस्तावेज़ों के लिए पूर्ण गाइड + +क्या आपने कभी सोचा है **व्याकरण कैसे जांचें** को Word दस्तावेज़ में बिना अपने IDE को छोड़े जांचना? आप अकेले नहीं हैं। कई डेवलपर्स को उपयोगकर्ता‑जनित रिपोर्ट, स्वचालित ईमेल, या यहाँ तक कि दस्तावेज़ीकरण को शिप करने से पहले सत्यापित करने की आवश्यकता होती है। अच्छी खबर? Aspose.Words AI के साथ आप इसे प्रोग्रामेटिकली कर सकते हैं, और पूरी प्रक्रिया एक सामान्य C# वर्कफ़्लो में सुगमता से फिट हो जाती है। + +इस गाइड में हम सब कुछ कवर करेंगे: DOCX फ़ाइल C# को लोड करने से लेकर AI व्याकरण जाँच को कॉल करने और परिणामों की व्याख्या करने तक। अंत तक आपके पास एक तैयार‑से‑चलाने वाला स्निपेट होगा जो प्रत्येक समस्या की गंभीरता, संदेश, और सुझाए गए प्रतिस्थापन को प्रिंट करेगा—कोई मैन्युअल कॉपी‑पेस्टिंग नहीं। + +## आप क्या सीखेंगे + +- **व्याकरण कैसे जांचें** Word दस्तावेज़ में Aspose.Words AI का उपयोग करके। +- `Document` क्लास के साथ **DOCX फ़ाइल C# लोड करने** के सटीक चरण। +- `GrammarCheckResult` ऑब्जेक्ट को कैसे संभालें, समस्याओं पर इटररेट करें, और उपयोगी डायग्नोस्टिक्स आउटपुट करें। +- सामान्य pitfalls (जैसे लाइसेंस की कमी) और समाधान को production‑ready बनाने के टिप्स। + +> **Prerequisites:** .NET 6.0+ (या .NET Framework 4.6+), Visual Studio 2022 (या आपका पसंदीदा कोई भी IDE), और Aspose.Words for .NET लाइसेंस (टेस्टिंग के लिए फ्री ट्रायल काम करता है)। यदि आपने अभी तक NuGet पैकेज इंस्टॉल नहीं किए हैं, तो चलाएँ: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +अब, चलिए शुरू करते हैं। + +## Step 1: C# में DOCX फ़ाइल लोड करें + +किसी भी व्याकरण जाँच से पहले, दस्तावेज़ को मेमोरी में लोड करना आवश्यक है। Aspose.Words इसे एक‑लाइनर बनाता है, लेकिन कुछ बारीकियों पर ध्यान देना ज़रूरी है। + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Why this matters:** +- `Path.Combine` का उपयोग करने से क्रॉस‑प्लेटफ़ॉर्म संगतता सुनिश्चित होती है। +- अस्तित्व जाँच रन‑टाइम क्रैश को रोकती है, जिससे वास्तविक व्याकरण‑जाँच लॉजिक स्पष्ट रहता है। +- जब आप **DOCX फ़ाइल C# लोड** करते हैं, तो Aspose सभी स्टाइल, हेडर, फुटर, और यहाँ तक कि छिपा टेक्स्ट भी पार्स करता है, जिससे AI को दस्तावेज़ की पूरी तस्वीर मिलती है। + +> **Pro tip:** यदि आपको स्ट्रीम्स के साथ काम करना है (जैसे वेब अपलोड से आने वाली फ़ाइलें), तो आप `new Document(docPath)` कॉल को `new Document(stream)` से बदल सकते हैं। + +## Step 2: व्याकरण जाँच के लिए AI मॉडल चुनें + +Aspose.Words AI कई मॉडलों का समर्थन करता है, हल्के लोकल मॉडल से लेकर क्लाउड‑आधारित GPT वेरिएंट तक। अधिकांश परिदृश्यों के लिए, **GPT‑3.5 Turbo** गति और सटीकता के बीच एक अच्छा संतुलन प्रदान करता है। + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Why pick GPT‑3.5 Turbo?** +- यह कई फ़ाइलों को प्रति मिनट बैच प्रोसेस करने के लिए पर्याप्त तेज़ है। +- यदि आप पेड टियर पर हैं, तो लागत GPT‑4 से कम है जबकि अधिकांश सामान्य त्रुटियों को पकड़ लेता है। +- API टोकन लिमिट्स को स्वचालित रूप से संभालती है, इसलिए आपको बड़े दस्तावेज़ को मैन्युअल रूप से विभाजित करने की ज़रूरत नहीं है। + +यदि आप ऑफ़लाइन दृष्टिकोण पसंद करते हैं, तो `AiModelType.Gpt35Turbo` को `AiModelType.Local` से बदलें (वैकल्पिक ऑफ़लाइन मॉडल पैकेज आवश्यक है)। + +## Step 3: समस्याओं पर इटररेट करें और उपयोगी फीडबैक दिखाएँ + +`GrammarCheckResult` में `GrammarIssue` ऑब्जेक्ट्स का एक संग्रह होता है। प्रत्येक समस्या आपको गंभीरता, मानव‑पठनीय संदेश, और सुझाए गए प्रतिस्थापन देती है। चलिए उन्हें सुंदर रूप से प्रिंट करते हैं। + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**What the fields mean:** +- `Severity` – आमतौर पर `Info`, `Warning`, या `Error`। `Error` को प्रकाशित करने से पहले अनिवार्य रूप से ठीक करना चाहिए। +- `Message` – समस्या का संक्षिप्त विवरण (जैसे “Subject‑verb agreement”)। +- `SuggestedReplacement` – AI द्वारा सुझाया गया सुधार; यदि आप मॉडल पर भरोसा करते हैं तो इसे स्वचालित रूप से लागू कर सकते हैं, या मानव समीक्षक को दिखा सकते हैं। + +> **Edge case:** कुछ समस्याओं में `SuggestedReplacement` खाली हो सकता है (जैसे स्टाइल सुझाव)। ऐसे मामलों में, केवल स्थान को मैन्युअल समीक्षा के लिए फ़्लैग करें। + +## Full Working Example + +सब कुछ मिलाकर, यहाँ एक स्वतंत्र कंसोल एप्लिकेशन है जिसे आप नई .NET प्रोजेक्ट में कॉपी‑पेस्ट कर सकते हैं। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Expected output (sample):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +यदि आप प्रोग्राम को एक साफ़ दस्तावेज़ के खिलाफ चलाते हैं, तो आपको “✅ No grammar issues detected.” लाइन दिखाई देगी। + +## Handling Common Pitfalls + +| समस्या | क्यों होता है | त्वरित समाधान | +|---------|----------------|-----------| +| **LicenseException** | Aspose लाइब्रेरीज़ को उत्पादन उपयोग के लिए वैध लाइसेंस चाहिए। | `License license = new License(); license.SetLicense("Aspose.Words.lic");` को `Main` की शुरुआत में डालें। | +| **Network timeout** | AI मॉडल कॉल क्लाउड तक पहुँचती है और डिफ़ॉल्ट 100 s टाइमआउट को पार कर देती है। | `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` को `CheckGrammar` कॉल से पहले सेट करें। | +| **Large documents (> 10 MB)** | कुछ क्लाउड मॉडल इनपुट को ट्रंकेट कर देते हैं। | `document.Sections` का उपयोग करके दस्तावेज़ को सेक्शन में विभाजित करें और प्रत्येक सेक्शन पर जाँच चलाएँ, फिर परिणामों को एकत्रित करें। | +| **Missing suggestions** | मॉडल प्रतिस्थापन नहीं बना सका (जैसे अस्पष्ट वाक्यांश)। | समस्या को मैन्युअल समीक्षा के लिए लॉग करें; खाली सुझावों को ऑटो‑अप्लाई न करें। | + +## Extending the Solution + +- **ऑटोमैटिक फिक्सिंग:** `grammarResult.Issues` पर लूप करें और `document.Range.Replace` का उपयोग करके टेक्स्ट बदलें। पहले मूल फ़ाइल का बैकअप ज़रूर रखें। +- **बैच प्रोसेसिंग:** पूरे फ्लो को एक डायरेक्टरी में मौजूद कई DOCX फ़ाइलों के `foreach` में रैप करें। प्रत्येक रिपोर्ट को बाद में विश्लेषण के लिए JSON फ़ाइल के रूप में स्टोर करें। +- **ASP.NET के साथ इंटीग्रेशन:** एक एंडपॉइंट बनाएं जो अपलोड किए गए DOCX को स्वीकार करे, जाँच चलाए, और समस्याओं का JSON पेलोड रिटर्न करे। + +## Image Illustration + +व्याकरण जांच प्रवाह आरेख + +*ऊपर का आरेख तीन‑स्टेप प्रक्रिया को दर्शाता है: DOCX लोड → AI व्याकरण जाँच चलाएँ → समस्याएँ आउटपुट करें।* + +## Conclusion + +हमने **व्याकरण कैसे जांचें** को C# में Word दस्तावेज़ के साथ कवर किया, **DOCX फ़ाइल C# लोड** करने के सटीक कोड को दिखाया, और AI‑जनित फीडबैक की व्याख्या की। Aspose.Words AI के साथ, आपको एक शक्तिशाली, क्लाउड‑बैक्ड व्याकरण इंजन मिलता है जो किसी भी .NET एप्लिकेशन में सहजता से इंटीग्रेट हो जाता है। + +अगले कदम? फिक्स‑अप्लाई लूप को ऑटोमेट करें, तेज़ सुझावों के लिए नए `AiModelType.Gpt4` के साथ प्रयोग करें, या इसको स्पेल‑चेकिंग लाइब्रेरी के साथ मिलाकर पूर्ण‑प्रूफ़रीडिंग पाइपलाइन बनाएं। संभावनाएँ लगभग अनंत हैं, और अब आपके पास निर्माण के लिए एक ठोस आधार है। + +कोई प्रश्न या कठिन edge case आया? नीचे टिप्पणी करें, और खुशहाल कोडिंग! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hindi/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/hindi/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..9d9dbc9690 --- /dev/null +++ b/words/hindi/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Aspose के साथ दस्तावेज़ संपादित करने के लिए LLM का उपयोग कैसे करें – + पैराग्राफ़ टेक्स्ट को बदलना सीखें, स्थानीय LLM से कनेक्ट करें, और AI का उपयोग करके + टेक्स्ट को पुनर्लेखन करें। +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: hi +og_description: Aspose के साथ दस्तावेज़ों को संपादित करने के लिए LLM का उपयोग कैसे + करें। यह गाइड दिखाता है कि स्थानीय LLM से कैसे कनेक्ट करें, पैराग्राफ़ टेक्स्ट को + बदलें, और AI का उपयोग करके टेक्स्ट को पुनः लिखें। +og_title: Aspose.Words के साथ LLM का उपयोग कैसे करें – C# में पैराग्राफ पुनर्लेखन +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Aspose.Words के साथ LLM का उपयोग कैसे करें – C# में पैराग्राफ पुनर्लेखन +url: /hi/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words के साथ LLM का उपयोग कैसे करें – C# में पैराग्राफ पुनर्लेखन + +क्या आपने कभी **LLM का उपयोग** करके Word दस्तावेज़ को बिना मैन्युअली खोले पॉलिश करने के बारे में सोचा है? आप अकेले नहीं हैं। कई डेवलपर्स को प्रोग्रामेटिकली *पैराग्राफ टेक्स्ट बदलने* की ज़रूरत पड़ती है, लेकिन उनके पास एक साफ़ AI‑ड्रिवेन वर्कफ़्लो नहीं होता। + +इस ट्यूटोरियल में हम एक लोकल बड़े भाषा मॉडल को जोड़ेंगे, `.docx` फ़ाइल से एक स्निपेट फीड करेंगे, उसे **AI का उपयोग करके टेक्स्ट पुनर्लेखन** के लिए कहेंगे, और अंत में अपडेटेड दस्तावेज़ को सहेजेंगे—सब कुछ Aspose.Words के साथ। अंत तक आपके पास एक तैयार‑चलाने योग्य C# कंसोल एप्लिकेशन होगा जो पूरे पाइपलाइन को दर्शाता है। + +> **आपको क्या मिलेगा:** एक पूर्ण, चलाने योग्य उदाहरण, प्रत्येक चरण की व्याख्याएँ, एज केस के लिए टिप्स, और समाधान को विस्तारित करने के विचार। + +## आपको क्या चाहिए + +- **.NET 6+** (या .NET Framework 4.7.2 – कोड दोनों पर काम करता है) +- **Aspose.Words for .NET** (NuGet पैकेज `Aspose.Words`) +- एक **लोकल LLM सर्वर** जो साधारण HTTP `/generate` एन्डपॉइंट एक्सपोज़ करता हो (जैसे Ollama, LMStudio, या कस्टम Flask सर्विस) +- C# और HTTP क्लाइंट कोड की बुनियादी समझ + +कोई अतिरिक्त SDK आवश्यक नहीं; बाकी सब कोड में ही लिखा जाएगा। + +## चरण 1: पैराग्राफ टेक्स्ट बदलने के लिए LLM का उपयोग कैसे करें + +सबसे पहले हमें उस पैराग्राफ की पहचान करनी होगी जिसे हम संशोधित करना चाहते हैं। Aspose.Words एक रिच ऑब्जेक्ट मॉडल प्रदान करके इसे बहुत आसान बनाता है। + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**यह क्यों महत्वपूर्ण है:** +सही नोड का चयन करने से आप अनजाने में हेडिंग या टेबल को ओवरराइट नहीं करेंगे। **पैराग्राफ टेक्स्ट बदलने** के तरीके से हम दस्तावेज़ की संरचना को बरकरार रखते हैं और केवल आवश्यक कंटेंट को ही छूते हैं। + +> **प्रो टिप:** यदि आपके दस्तावेज़ में वैरिएबल लंबाई वाले सेक्शन हैं, तो `document.GetChildNodes(NodeType.Paragraph, true)` और LINQ का उपयोग करके पैराग्राफ को उसके टेक्स्ट या स्टाइल के आधार पर लोकेट करें। + +## चरण 2: लोकल LLM एन्डपॉइंट से कनेक्ट करें + +अब जब हमारे पास टेक्स्ट है, हमें उसे LLM को भेजना होगा। उदाहरण में एक सरल रैपर क्लास `LocalLargeLanguageModel` का उपयोग किया गया है जो HTTP प्लंबिंग को छुपाता है। यदि आप चाहें तो इसे `HttpClient` कॉल्स से बदल सकते हैं। + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**हम इस तरह कनेक्ट क्यों करते हैं:** +**लोकल LLM से कनेक्ट** करने से लेटेंसी कम होती है, डेटा ऑन‑प्रेमाइज़ रहता है, और API लागत से बचा जा सकता है। रैपर बाद के कोड को भी साफ़ बनाता है, जिससे हम **AI का उपयोग करके टेक्स्ट पुनर्लेखन** लॉजिक पर ध्यान केंद्रित कर सकते हैं। + +## चरण 3: Aspose.Words के साथ AI का उपयोग करके टेक्स्ट पुनर्लेखन + +पैराग्राफ टेक्स्ट हाथ में और LLM तैयार होने पर, हम एक प्रॉम्प्ट बनाते हैं जो मॉडल को ठीक‑ठीक बताता है कि हमें क्या चाहिए—औपचारिक टोन में पुनर्लेखन। आप प्रॉम्प्ट को अन्य स्टाइल (फ्रेंडली, टेक्निकल आदि) के लिए भी बदल सकते हैं। + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**यह क्यों काम करता है:** +LLM प्रॉम्प्ट‑ड्रिवेन होते हैं; स्पष्ट निर्देश (“Rewrite … in a formal tone”) देने से सुसंगत परिणाम मिलते हैं। **AI का उपयोग करके टेक्स्ट पुनर्लेखन** चरण ट्यूटोरियल का मुख्य भाग है – यह दिखाता है कि AI को सीधे दस्तावेज़ वर्कफ़्लो में कैसे एम्बेड किया जा सकता है। + +## चरण 4: दस्तावेज़ को एडिट करें और बदलाव सहेजें + +अब हम मूल `Run` को नए कंटेंट से बदलते हैं। Aspose.Words टेक्स्ट को `Run` ऑब्जेक्ट्स में स्टोर करता है, इसलिए पहले उन्हें साफ़ करने से फ़ॉर्मेटिंग के अवशेष नहीं बचते। + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**एज‑केस नोट:** +यदि मूल पैराग्राफ में मिश्रित फ़ॉर्मेटिंग (बोल्ड, इटैलिक) थी, तो आप स्टाइल को बरकरार रखना चाहेंगे। ऐसे में एक नया `Run` बनाएं, मूल `Font` सेटिंग्स कॉपी करें, फिर उसका `Text` को `revisedText` से सेट करें। + +## पूर्ण कार्यशील उदाहरण + +नीचे पूरा प्रोग्राम दिया गया है जिसे आप कंसोल प्रोजेक्ट में कॉपी‑पेस्ट कर सकते हैं। पहले Aspose.Words NuGet पैकेज इंस्टॉल करना याद रखें (`dotnet add package Aspose.Words`)। + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### अपेक्षित आउटपुट + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +`output.docx` खोलें – आपको तीसरा पैराग्राफ अब पॉलिश्ड संस्करण में दिखेगा। + +## सामान्य प्रश्न और समस्याएँ + +| प्रश्न | उत्तर | +|----------|--------| +| **यदि मेरा LLM अतिरिक्त फ़ील्ड्स के साथ JSON रिटर्न करता है तो?** | `GenerateText` को संशोधित करके सही प्रॉपर्टी को डीसिरियलाइज़ करें या रिस्पॉन्स को मैन्युअली पार्स करें। | +| **क्या मैं एक साथ कई पैराग्राफ प्रोसेस कर सकता हूँ?** | हाँ – `document.FirstSection.Body.Paragraphs` पर इटरेट करें और वही प्रॉम्प्ट लॉजिक लागू करें, संभवतः संदर्भ के लिए पैराग्राफ इंडेक्स जोड़ें। | +| **मेरे LLM सर्वर को ऑथेंटिकेशन चाहिए?** | POST करने से पहले `HttpClient` में हेडर जोड़ें: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");` | +| **रिप्लेसमेंट के बाद फ़ॉर्मेटिंग खो जाती है।** | मूल `Run.Font` सेटिंग्स को बरकरार रखें: नया `Run` बनाएं, `originalRun.Font.Clone()` कॉपी करें, फिर उसका `Text` सेट करें। | +| **LLM कभी‑कभी खाली स्ट्रिंग रिटर्न करता है।** | फॉलबैक इम्प्लीमेंट करें – यदि `revisedText.Trim().Length == 0` हो तो मूल टेक्स्ट रखें या सरल प्रॉम्प्ट के साथ रीट्राई करें। | + +## समाधान का विस्तार + +अब जब आप **LLM का उपयोग** करके एक पैराग्राफ को पुनर्लेखन कर चुके हैं, तो इन अगले कदमों पर विचार करें: + +- **बैच प्रोसेसिंग:** हर पैराग्राफ पर लूप चलाएँ और चुने हुए स्टाइल में पुनर्लेखन करें (जैसे “सभी टेक्स्ट को संक्षिप्त बनाएं”)। +- **स्टाइल‑अवेयर पुनर्लेखन:** प्रॉम्प्ट में मूल पैराग्राफ की स्टाइल नेम पास करें ताकि LLM हेडिंग बनाम बॉडी टेक्स्ट का सम्मान कर सके। +- **CI पाइपलाइन के साथ इंटीग्रेशन:** दस्तावेज़ पॉलिशिंग को डॉक्यूमेंटेशन बिल्ड प्रोसेस का हिस्सा बनाकर ऑटोमेट करें। +- **वैकल्पिक प्रॉम्प्ट:** “इस पैराग्राफ का सारांश बनाएं” या “इस पैराग्राफ को स्पेनिश में अनुवाद करें” आज़माएँ ताकि **AI का उपयोग करके टेक्स्ट पुनर्लेखन** की पूरी शक्ति को एक्सप्लोर कर सकें। + +## निष्कर्ष + +हमने **LLM का उपयोग** करके Aspose.Words के साथ पूरी प्रक्रिया को कवर किया: दस्तावेज़ लोड करना, **लोकल LLM से कनेक्ट** करना, पैराग्राफ निकालना, **AI का उपयोग करके टेक्स्ट पुनर्लेखन**, **पैराग्राफ टेक्स्ट बदलना**, और अंत में परिणाम सहेजना। कोड स्व-निहित है, तुरंत चलाने योग्य है, और AI को पारंपरिक दस्तावेज़ ऑटोमेशन के साथ मिलाने का एक व्यावहारिक तरीका दर्शाता है। + +इसे चलाएँ, प्रॉम्प्ट को ट्यून करें, और... + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hindi/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/hindi/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..d661d757f6 --- /dev/null +++ b/words/hindi/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Word दस्तावेज़ को जल्दी से सारांशित करें और Google से पाठ का अनुवाद करें। + जानिए कैसे Anthropic Claude का उपयोग करें, रिपोर्ट से सारांश बनाएं, और एक ही C# + ट्यूटोरियल में Google से पाठ का अनुवाद करें। +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: hi +og_description: Word दस्तावेज़ को तुरंत सारांशित करें और गूगल से पाठ का अनुवाद करें। + यह गाइड दिखाता है कि कैसे Anthropic Claude और Aspose.Words का उपयोग करके रिपोर्ट + से सारांश बनाया जाए। +og_title: C# में Word दस्तावेज़ का सारांश – Anthropic Claude के साथ चरण‑दर‑चरण +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: C# में Word दस्तावेज़ का सारांश – Anthropic Claude का उपयोग करके पूर्ण मार्गदर्शिका +url: /hi/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# में Word दस्तावेज़ का सारांश बनाना – Anthropic Claude का उपयोग करके पूर्ण गाइड + +क्या आपको कभी **Word दस्तावेज़ का सारांश** करने की ज़रूरत पड़ी है लेकिन APIज़ और लंबा‑कोड संभालते‑समय अटके हुए महसूस किया? आप अकेले नहीं हैं। कई प्रोजेक्ट्स—वार्षिक रिपोर्ट, कानूनी ब्रीफ़, या शोध पत्र—में संक्षिप्त सार निकालना एक दैनिक समस्या है। सौभाग्य से, Aspose.Words और Anthropic Claude का संयोजन इसे बहुत आसान बना देता है, और आप इसमें एक तेज़ Google अनुवाद भी जोड़ सकते हैं। + +इस ट्यूटोरियल में हम आपको वह सब बताएंगे जो आपको जानना चाहिए: बड़े .docx को लोड करना, Claude V2 मॉडल को कॉल करके सारांश बनाना, Google से एक वाक्यांश का अनुवाद करना, और सबसे सामान्य समस्याओं को संभालना। अंत तक आप केवल कुछ पंक्तियों के C# कोड से **create summary from report** करने में सक्षम होंगे। + +## आवश्यकताएँ + +- .NET 6+ (या .NET Core 3.1) स्थापित +- Aspose.Words for .NET लाइसेंस (या फ्री ट्रायल) +- Anthropic Claude V2 API तक पहुँच (आपको API कुंजी चाहिए) +- Google Translator के लिए इंटरनेट कनेक्टिविटी +- Visual Studio 2022 या आपका पसंदीदा C# IDE + +`Aspose.Words` और `Aspose.Words.AI` के अलावा कोई अतिरिक्त NuGet पैकेज आवश्यक नहीं है; ट्रांसलेटर क्लास उसी लाइब्रेरी के साथ आती है। + +## चरण 1 – स्रोत Word दस्तावेज़ लोड करें + +सबसे पहला काम है .docx फ़ाइल को मेमोरी में लाना। Aspose.Words इसे बहुत आसान बनाता है और अपने मजबूत पार्सर की वजह से यह जटिल लेआउट, तालिकाएँ, और एम्बेडेड इमेज़ के साथ भी काम करता है। + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **यह क्यों महत्वपूर्ण है:** दस्तावेज़ को जल्दी लोड करने से आप उसकी प्रॉपर्टीज़ (लेखक, शब्द गिनती) देख सकते हैं और तय कर सकते हैं कि सारांश वाकई आवश्यक है या नहीं। बड़े फ़ाइलें > 10 MB मेमोरी‑गहन हो सकती हैं, इसलिए यदि प्रदर्शन संबंधी समस्याएँ आती हैं तो `LoadOptions` के साथ `LoadFormat.Docx` पर विचार करें। + +## चरण 2 – Anthropic Claude के साथ दस्तावेज़ का सारांश बनाएं + +अब मज़े का हिस्सा आता है: हम दस्तावेज़ को Claude V2 को देते हैं। `Summarizer` क्लास HTTP कॉल, टोकन हैंडलिंग, और रीट्राइज़ को एब्स्ट्रैक्ट करती है। + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **यह कैसे काम करता है:** +> 1. **Chunking** – Aspose स्वचालित रूप से दस्तावेज़ को प्रबंधनीय हिस्सों (≈ 2 KB प्रत्येक) में विभाजित करता है ताकि Claude की टोकन सीमा का सम्मान किया जा सके। +> 2. **Prompt engineering** – लाइब्रेरी एक प्रॉम्प्ट भेजती है जैसे “Provide a concise executive summary of the following text:” और उसके बाद प्रत्येक चंक। +> 3. **Aggregation** – Claude आंशिक सारांश लौटाता है जिन्हें अंतिम `summaryText` में जोड़ दिया जाता है। + +### किनारे के मामलों और सुझाव + +- **बहुत बड़े रिपोर्ट** (> 100 पृष्ठ) Claude के कॉन्टेक्स्ट विंडो से अधिक हो सकते हैं। यदि आप कटे हुए आउटपुट देखते हैं, तो `SummarizerOptions.MaxChunkSize` को छोटे मान पर सेट करें। +- **Non‑English source** – Claude अंग्रेज़ी के साथ सबसे अच्छा काम करता है; अन्य भाषाओं के लिए पहले अनुवाद करें (Step 4 देखें) फिर सारांश बनाएं। +- **Rate limits** – Anthropic प्रति मिनट सीमाएँ लगाता है। यदि आपको `429` प्रतिक्रिया मिलती है तो कॉल को एक्सपोनेंशियल बैक‑ऑफ़ के साथ रीट्राइ लूप में रखें। + +## चरण 3 – सारांश आउटपुट की जाँच करें + +आगे बढ़ने से पहले, यह अच्छा अभ्यास है कि आप सत्यापित करें कि सारांश खाली नहीं है और लंबाई की अपेक्षाओं को पूरा करता है (जैसे, मूल शब्द गिनती का 5‑10 %). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +यदि अनुपात बहुत कम दिखता है (< 2 %), तो आप `SummarizerOptions.SummaryLength` प्रॉपर्टी को समायोजित करके लंबा आउटपुट मांग सकते हैं। + +## चरण 4 – Google के साथ टेक्स्ट का अनुवाद + +अब हमारे पास एक स्पष्ट अंग्रेज़ी सारांश है, चलिए एक तेज़ अनुवाद जोड़ते हैं। `Translator` क्लास Google के सार्वजनिक अनुवाद एन्डपॉइंट का उपयोग करती है (छोटे वाक्यांशों के लिए कोई API कुंजी आवश्यक नहीं, लेकिन प्रोडक्शन में आपको पेड Cloud Translation API पर स्विच करना चाहिए)। + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **यह क्यों Google?** यह तेज़, व्यापक रूप से समर्थित, और मुफ्त एन्डपॉइंट बिना प्रमाणीकरण के छोटे स्ट्रिंग्स को संभालता है। बड़े पैमाने पर अनुवाद के लिए, कॉल को बैच करें और Google की उपयोग सीमाओं का सम्मान करें। + +### पूरे सारांश का अनुवाद (वैकल्पिक) + +यदि आपको पूरा सारांश स्पेनिश (या किसी अन्य भाषा) में चाहिए, तो बस `summaryText` को `Translator.Translate` में पास करें। 5 KB अनुरोध आकार सीमा का ध्यान रखें; आपको सारांश को छोटे हिस्सों में विभाजित करना पड़ सकता है। + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## चरण 5 – सारांश को Word फ़ाइल में वापस सहेजें (बोनस) + +अक्सर अंतिम उपयोगकर्ता को कंसोल आउटपुट के बजाय डाउनलोड करने योग्य दस्तावेज़ चाहिए होता है। चलिए एक नया `.docx` बनाते हैं जिसमें अंग्रेज़ी और स्पेनिश दोनों संस्करण हों। + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### व्यावहारिक टिप + +जब आप सारांश को नई Word फ़ाइल में एम्बेड करते हैं, तो मूल फ़ॉर्मेटिंग को न्यूनतम रखें (`Normal` स्टाइल का उपयोग करें)। स्रोत की जटिल शैलियाँ अप्रत्याशित लेआउट बदलाव कर सकती हैं। + +## पूर्ण कार्यशील उदाहरण + +नीचे **पूर्ण, कॉपी‑एंड‑पेस्ट‑तैयार** प्रोग्राम है जो सब कुछ जोड़ता है। Aspose पैकेज जोड़ने के बाद यह एक ही `dotnet run` से कंपाइल हो जाता है। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**अपेक्षित कंसोल आउटपुट** (संक्षिप्त रूप में): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## अक्सर पूछे जाने वाले प्रश्न + +| प्रश्न | उत्तर | +|----------|--------| +| *क्या मैं कोई अलग AI मॉडल उपयोग कर सकता हूँ?* | हाँ। `SummarizerModel.AnthropicClaudeV2` को `SummarizerModel.OpenAIGPT4` से बदलें (OpenAI कुंजी आवश्यक) या enum में सूचीबद्ध किसी भी प्रदाता से। | +| *यदि दस्तावेज़ में संरक्षित सेक्शन हों तो क्या होगा?* | Aspose `ProtectedDocumentException` फेंकेगा। पहले `LoadOptions.Password` से अनलॉक करें या एक अनप्रोटेक्टेड कॉपी का अनुरोध करें। | +| *क्या उत्पादन के लिए मुझे पेड Aspose लाइसेंस चाहिए?* | फ्री ट्रायल अधिकतम 20 पृष्ठों तक काम करता है। बड़े रिपोर्टों के लिए, लाइसेंस पेज सीमा हटाता है और प्रदर्शन अनुकूलन जोड़ता है। | +| *क्या Google अनुवादक बड़े ब्लॉकों के लिए भरोसेमंद है?* | छोटे स्ट्रिंग्स के लिए यह ठीक है। बड़े पैमाने पर अनुवाद के लिए, अनुरोध‑आकार सीमाओं से बचने और बेहतर भाषा पहचान के लिए Cloud Translation API पर स्विच करें। | + +## निष्कर्ष + +हमने अभी-अभी Aspose.Words को Anthropic Claude V2 मॉडल के साथ उपयोग करके **summarize word document** किया, फिर **translate text with Google** करके + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hindi/net/basic-conversions/_index.md b/words/hindi/net/basic-conversions/_index.md index 3360b70d7c..b35292226a 100644 --- a/words/hindi/net/basic-conversions/_index.md +++ b/words/hindi/net/basic-conversions/_index.md @@ -24,9 +24,9 @@ | [Docx को Docx में बदलें](./doc-to-docx/) | .NET के लिए Aspose.Words का उपयोग करके DOC को DOCX में बदलने का तरीका जानें। कोड उदाहरणों के साथ चरण-दर-चरण मार्गदर्शिका। डेवलपर्स के लिए बिल्कुल सही। | | [Docx को Rtf में बदलें](./docx-to-rtf/) | हमारे चरण-दर-चरण गाइड के साथ .NET के लिए Aspose.Words का उपयोग करके DOCX को RTF में परिवर्तित करना सीखें। सहज दस्तावेज़ प्रसंस्करण के लिए आसान रूपांतरण। | | [वर्ड फ़ाइल को पीडीएफ में बदलें](./docx-to-pdf/) हमारे गाइड के साथ .NET के लिए Aspose.Words का उपयोग करके आसानी से Word फ़ाइलों को PDF में कनवर्ट करना सीखें। त्वरित और विश्वसनीय दस्तावेज़ रूपांतरण चाहने वाले डेवलपर्स के लिए बिल्कुल सही। | -| [Docx को बाइट में बदलें](./docx-to-byte/) | कुशल दस्तावेज़ प्रसंस्करण के लिए Aspose.Words का उपयोग करके .NET में Docx को बाइट सरणी में परिवर्तित करना सीखें। चरण-दर-चरण मार्गदर्शिका शामिल है। | +| [Docx को बाइट में बदलें](./docx-to-byte/) | कुशल दस्तावेज़ प्रसंस्करण के लिए Aspose.Words का उपयोग करके .NET में Docx को बाइट सरणी में परिवर्तित करना सीखें। चरण-दर-स्टेप मार्गदर्शिका शामिल है। | | [Docx को Epub में बदलें](./docx-to-epub/) | .NET के लिए Aspose.Words के साथ आसानी से DOCX को EPUB में बदलें। अपने .NET अनुप्रयोगों में सहज एकीकरण के लिए हमारे ट्यूटोरियल का पालन करें। | -| [Docx को Mhtml में बदलें और ईमेल भेजें](./docx-to-mhtml-and-sending-email/) | इस चरण-दर-चरण मार्गदर्शिका में जानें कि DOCX को MHTML में कैसे बदलें और .NET के लिए Aspose.Words का उपयोग करके ईमेल कैसे भेजें। आसान स्वचालन के साथ अपनी उत्पादकता बढ़ाएँ। | +| [Docx को Mhtml में बदलें और ईमेल भेजें](./docx-to-mhtml-and-sending-email/) | इस चरण-दर-स्टेप मार्गदर्शिका में जानें कि DOCX को MHTML में कैसे बदलें और .NET के लिए Aspose.Words का उपयोग करके ईमेल कैसे भेजें। आसान स्वचालन के साथ अपनी उत्पादकता बढ़ाएँ। | | [Docx फ़ाइल को Markdown में बदलें](./docx-to-markdown/) | .NET के लिए Aspose.Words का उपयोग करके DOCX फ़ाइलों को Markdown में परिवर्तित करना सीखें। अपने .NET अनुप्रयोगों में सहज एकीकरण के लिए हमारी विस्तृत मार्गदर्शिका का पालन करें। | | [Docx को Txt में बदलें](./docx-to-txt/) हमारे चरण-दर-चरण गाइड के साथ .NET के लिए Aspose.Words का उपयोग करके DOCX को TXT में बदलें। दस्तावेज़ों को कुशलतापूर्वक और आसानी से बदलना सीखें। | | [टेक्स्ट फ़ाइल को वर्ड डॉक्यूमेंट में बदलें](./txt-to-docx/) | .NET के लिए Aspose.Words का उपयोग करके टेक्स्ट फ़ाइलों को Word दस्तावेज़ों में परिवर्तित करना सीखें। हमारे व्यापक गाइड के साथ दस्तावेज़ रूपांतरणों को कुशलतापूर्वक प्रबंधित करें। | @@ -36,6 +36,7 @@ | [C# में Aspose.Words का उपयोग करके वर्ड को PDF में बदलें – गाइड](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | C# में Aspose.Words से Word फ़ाइल को PDF में बदलने की चरण‑दर‑स्टेप गाइड। | | [Aspose.Words के साथ Word को PDF के रूप में सहेजें – पूर्ण C# गाइड](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Aspose.Words का उपयोग करके C# में Word फ़ाइल को PDF में सहेजने की पूरी गाइड। | | [Aspose.Words के साथ docx को pdf के रूप में सहेजें – पूर्ण C# गाइड](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | .NET के लिए Aspose.Words का उपयोग करके Docx को PDF में बदलने की पूरी C# गाइड। चरण‑दर‑स्टेप मार्गदर्शन। | +| [C# में DOCX से सुलभ PDF बनाएं – Word को PDF में कैसे बदलें](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | .NET के लिए Aspose.Words का उपयोग करके DOCX से सुलभ PDF बनाने की चरण‑दर‑स्टेप गाइड। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/hindi/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..a9eb7073fb --- /dev/null +++ b/words/hindi/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: C# में DOCX फ़ाइल से सुलभ PDF बनाएं। जानें कि Word को PDF में कैसे बदलें, + Word को PDF के रूप में कैसे सहेजें, और एक्सेसिबिलिटी अनुपालन के साथ DOCX को PDF + में निर्यात करें। +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: hi +og_description: C# में DOCX फ़ाइल से सुलभ PDF बनाएं। वर्ड को PDF में बदलने, वर्ड को + PDF के रूप में सहेजने और पूर्ण एक्सेसिबिलिटी के साथ DOCX को PDF में निर्यात करने + के लिए इस चरण‑दर‑चरण ट्यूटोरियल का पालन करें। +og_title: C# में DOCX से सुलभ PDF बनाएं – त्वरित गाइड +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: C# में DOCX से सुलभ PDF बनाएं – वर्ड को PDF में कैसे बदलें +url: /hi/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create Accessible PDF from DOCX in C# – How to Convert Word to PDF + +क्या आपको कभी **एक्सेसिबल PDF** बनाने की ज़रूरत पड़ी है Word दस्तावेज़ से, लेकिन यह नहीं पता था कि कौन सी लाइब्रेरी भरोसेमंद है? आप अकेले नहीं हैं—कई डेवलपर्स को वही समस्या आती है जब उन्हें PDF/UA मानकों के अनुसार एक्सेसिबिलिटी सुनिश्चित करनी होती है। अच्छी खबर यह है कि Aspose.Words के साथ आप केवल कुछ लाइनों के कोड में `.docx` को एक कंप्लायंट PDF में बदल सकते हैं, और आपको ऐसा फ़ाइल मिलेगा जिसे स्क्रीन रीडर वास्तव में पढ़ सके। + +इस ट्यूटोरियल में हम **Word को PDF में बदलने**, **Word को PDF के रूप में सेव करने**, और यहाँ तक कि **docx को PDF में एक्सपोर्ट करने** के सभी पहलुओं को PDF/UA‑1 (या PDF/UA‑2) कंप्लायंस के साथ कवर करेंगे। अंत तक आपके पास उपयोग के लिए तैयार C# स्निपेट होगा, समझेंगे कि प्रत्येक सेटिंग क्यों महत्वपूर्ण है, और फ़ॉन्ट की कमी या कस्टम पेज सेटअप जैसी सामान्य एज़ केस को कैसे संभालें, यह भी जानेंगे। + +## Prerequisites + +- .NET 6.0 या बाद का संस्करण (कोड .NET Framework 4.6+ के साथ भी काम करता है) +- Aspose.Words for .NET लाइसेंस (या एक फ्री इवैल्यूएशन की) +- C# और Visual Studio (या आपका पसंदीदा IDE) का बुनियादी ज्ञान +- एक DOCX फ़ाइल जिसे आप एक्सेसिबल बनाना चाहते हैं (हम इसे `input.docx` कहेंगे) + +> **Pro tip:** यदि आप फ्री ट्रायल का उपयोग कर रहे हैं, तो याद रखें कि जेनरेटेड PDF में एक छोटा “Evaluation” वॉटरमार्क होगा। + +## Step 1: Install Aspose.Words NuGet Package + +कोड लिखने से पहले, Aspose.Words लाइब्रेरी को प्रोजेक्ट में जोड़ना होगा। + +```bash +dotnet add package Aspose.Words +``` + +यह कमांड चलाने से `Aspose.Words.dll` रिस्टोर हो जाता है और नेमस्पेस उपलब्ध हो जाते हैं। यह स्टेप ज़रूरी है क्योंकि `PdfSaveOptions` क्लास उसी पैकेज में मौजूद है। + +## Step 2: Load the Source DOCX File + +पहला लॉजिकल कदम वह Word डॉक्यूमेंट लोड करना है जिसे आप ट्रांसफ़ॉर्म करना चाहते हैं। इसे एक किताब खोलने के समान समझें, फिर आप उसके पेज़ एडिट करना शुरू करेंगे। + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Why this matters:** डॉक्यूमेंट को लोड करने से एक इन‑मेमोरी रिप्रेज़ेंटेशन बनता है जिसमें सभी स्टाइल, इमेज़ और मेटाडेटा शामिल होते हैं। यदि फ़ाइल करप्ट है, तो `Document` एक्सेप्शन फेंकेगा—इसलिए प्रोडक्शन कोड में इसे try/catch ब्लॉक में रैप करना अच्छा रहेगा। + +## Step 3: Configure PDF Save Options for Accessibility + +Aspose.Words आपको PDF कंप्लायंस लेवल सेट करने की अनुमति देता है। PDF/UA‑1 मूल एक्सेसिबिलिटी स्टैंडर्ड है, जबकि PDF/UA‑2 में कुछ नए टैग जोड़े गए हैं। वह चुनें जो आपके क्लाइंट की आवश्यकताओं से मेल खाता हो। + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **What “Compliance” does:** `PdfCompliance.PdfUax1` सेट करने से Aspose.Words उचित टैग, लॉजिकल रीडिंग ऑर्डर, और इमेज़ के लिए ऑल्टरनेट टेक्स्ट एम्बेड करता है—वही चीज़ जो स्क्रीन‑रीडर सॉफ़्टवेयर ढूँढता है। + +## Step 4: Save the Document as an Accessible PDF + +अब भारी काम हो चुका है; हम सिर्फ Aspose.Words को उन विकल्पों के साथ PDF फ़ाइल लिखने के लिए निर्देश देते हैं जो हमने अभी सेट किए हैं। + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +इस लाइन के चलने के बाद, आप निर्दिष्ट फ़ोल्डर में `output.pdf` पाएँगे। इसे Adobe Acrobat Reader में खोलें और **File → Properties → Description → PDF/A and PDF/UA** चेक करके कंप्लायंस वेरिफ़ाई करें। + +## Step 5: Verify Accessibility (Optional but Recommended) + +कोड टैग्ड PDF आउटपुट की गारंटी देता है, लेकिन एक त्वरित मैनुअल चेक किसी भी कस्टम कंटेंट को पकड़ने में मदद कर सकता है जिसे अतिरिक्त ध्यान की जरूरत हो। + +1. `output.pdf` को Adobe Acrobat Pro में खोलें। +2. **Tools → Accessibility → Full Check** पर जाएँ। +3. चेक चलाएँ और किसी भी वार्निंग की समीक्षा करें (जैसे कस्टम इमेज़ के लिए मिसिंग alt टेक्स्ट)। + +यदि रिपोर्ट में कोई एरर नहीं दिखता, तो आपने सफलतापूर्वक **create accessible PDF** बना लिया है जो PDF/UA‑1 मानकों को पूरा करता है। + +## Common Variations & Edge Cases + +### Converting Multiple DOCX Files in a Loop + +यदि आपके पास कई डॉक्यूमेंट्स हैं, तो लोड‑सेव लॉजिक को `foreach` लूप में रैप करें। + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Switching to PDF/UA‑2 + +सिर्फ `Compliance` एन्‍युम को बदलें: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Handling Custom Fonts + +यदि आपका DOCX ऐसे फ़ॉन्ट्स उपयोग करता है जो सर्वर पर इंस्टॉल नहीं हैं, तो उन्हें एम्बेड करें: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +एम्बेड करने से PDF किसी भी मशीन पर समान दिखेगा—एक महत्वपूर्ण बात जब आप **export docx to pdf** बाहरी स्टेकहोल्डर्स के लिए कर रहे हों। + +## Full Working Example + +नीचे पूरा, रन‑टाइम तैयार प्रोग्राम है जो सभी हिस्सों को जोड़ता है। इसे कॉपी‑पेस्ट करके एक कंसोल ऐप में डालें, पाथ्स को एडजस्ट करें, और **F5** दबाएँ। + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** `output.pdf` नाम की फ़ाइल जो किसी भी PDF व्यूअर में खुलेगी, सही एक्सेसिबिलिटी टैग्स रखेगी, और उन उपयोगकर्ताओं के साथ शेयर की जा सकेगी जो असिस्टिव टेक्नोलॉजी पर निर्भर हैं। + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Image alt text:* *create accessible pdf example – screenshot of a PDF/UA‑1 compliant document opened in Adobe Acrobat.* + +## Frequently Asked Questions + +- **Does this work with .NET Core?** + Absolutely. Aspose.Words cross‑platform है, इसलिए वही कोड Windows, Linux, और macOS पर चलता है। + +- **What if my DOCX contains macros?** + मैक्रोज़ कन्वर्ज़न के दौरान इग्नोर हो जाते हैं; केवल विज़िबल कंटेंट PDF में रेंडर होता है। + +- **Can I add a custom PDF metadata title?** + हाँ—सेव करने से पहले `pdfSaveOptions.Metadata.Title = "Your Custom Title";` सेट करें। + +- **Is PDF/UA‑2 widely supported?** + अधिकांश आधुनिक PDF रीडर्स PDF/UA‑2 को समझते हैं, लेकिन यदि आप पुराने टूल्स को टार्गेट कर रहे हैं, तो PDF/UA‑1 ही उपयोग करें। + +## Conclusion + +हमने दिखाया कि कैसे Aspose.Words का उपयोग करके DOCX फ़ाइल से **create accessible PDF** बनाया जाता है, पैकेज इंस्टॉल करने से लेकर PDF/UA कंप्लायंस वेरिफ़ाई करने तक। इन स्टेप्स को फॉलो करके आप भरोसेमंद रूप से **convert Word to PDF**, **save Word as PDF**, और **export docx to PDF** कर सकते हैं, साथ ही एक्सेसिबिलिटी मानकों को भी पूरा कर सकते हैं—जो किसी भी एंटरप्राइज़ डॉक्यूमेंट पाइपलाइन पर काम करने वाले डेवलपर के लिए आवश्यक कौशल है। + +अगली चुनौती के लिए तैयार हैं? कस्टम हेडर/फ़ूटर जोड़ें, PDF/A‑2b टैग एम्बेड करें, या ASP.NET Core वेब API में प्रोसेस को ऑटोमेट करें। संभावनाएँ अनंत हैं, और यहाँ बनाई गई बुनियाद आपको आत्मविश्वास के साथ आगे बढ़ने में मदद करेगी। + +Happy coding, and may your PDFs always be readable! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hindi/net/programming-with-markdownsaveoptions/_index.md b/words/hindi/net/programming-with-markdownsaveoptions/_index.md index e783bae3f5..47e1eba955 100644 --- a/words/hindi/net/programming-with-markdownsaveoptions/_index.md +++ b/words/hindi/net/programming-with-markdownsaveoptions/_index.md @@ -31,23 +31,24 @@ MarkdownSaveOptions के साथ वर्ड प्रोसेसिंग | [DOCX को मार्कडाउन में सहेजें – LaTeX समीकरणों के साथ पूर्ण C# गाइड](./save-docx-as-markdown-complete-c-guide-with-latex-equations/) | C# में LaTeX समीकरणों के साथ DOCX को Markdown में बदलने की पूरी गाइड। | | [DOCX को मार्कडाउन के रूप में सहेजें – इमेज एक्सट्रैक्शन के साथ पूर्ण C# गाइड](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | इमेज एक्सट्रैक्शन के साथ DOCX को Markdown में बदलने की पूरी गाइड। C# में चरण‑दर‑चरण प्रक्रिया। | | [DOCX को मार्कडाउन में सहेजें – LaTeX समीकरणों के साथ पूर्ण C# गाइड](./save-docx-as-markdown-complete-c-guide-with-latex-equations/) | C# में LaTeX समीकरणों के साथ DOCX को मार्कडाउन में बदलने की पूरी गाइड। | -| [DOCX को मार्कडाउन के रूप में सहेजें – इमेज एक्सट्रैक्शन के साथ पूर्ण C# गाइड](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | इमेज एक्सट्रैक्शन के साथ DOCX को मार्कडाउन में बदलने की पूरी गाइड। C# में चरण‑दर‑चरण प्रक्रिया। | +| [DOCX को मार्कडाउन के रूप में सहेजें – इमेज एक्सट्रैक्शन के साथ पूर्ण C# गाइड](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | इमेज एक्सट्रैक्शन के साथ DOCX को Markdown में बदलने की पूरी गाइड। C# में चरण‑दर‑चरण प्रक्रिया। | | [Word को Markdown में बदलें – इमेज एक्सट्रैक्शन के साथ पूर्ण C# गाइड](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) | इमेज एक्सट्रैक्शन के साथ Word को Markdown में बदलने की पूरी गाइड। C# में चरण‑दर‑चरण प्रक्रिया। | | [Word से Markdown निर्यात कैसे करें – पूर्ण C# गाइड](./how-to-export-markdown-from-word-complete-c-guide/) | Word दस्तावेज़ को Markdown में निर्यात करने की पूरी C# गाइड | | [DOCX को मार्कडाउन में सहेजें – LaTeX समीकरणों के साथ पूर्ण C# गाइड](./save-docx-as-markdown-complete-c-guide-with-latex-equations/) | C# में LaTeX समीकरणों के साथ DOCX को मार्कडाउन में बदलने की पूरी गाइड। | -| [DOCX को मार्कडाउन में सहेजें – इमेज एक्सट्रैक्शन के साथ पूर्ण C# गाइड](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | इमेज एक्सट्रैक्शन के साथ DOCX को मार्कडाउन में बदलने की पूरी गाइड। C# में चरण‑दर‑चरण प्रक्रिया। | +| [DOCX को मार्कडाउन में सहेजें – इमेज एक्सट्रैक्शन के साथ पूर्ण C# गाइड](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | इमेज एक्सट्रैक्शन के साथ DOCX को Markdown में बदलने की पूरी गाइड। C# में चरण‑दर‑चरण प्रक्रिया। | | [Word से Markdown निर्यात कैसे करें – पूर्ण C# गाइड](./how-to-export-markdown-from-word-complete-c-guide/) | Word दस्तावेज़ को Markdown में निर्यात करने की पूरी C# गाइड | | [DOCX को मार्कडाउन में बदलें – चरण‑दर‑चरण गाइड](./how-to-save-markdown-from-docx-step-by-step-guide/) | DOCX फ़ाइल को मार्कडाउन में बदलने की चरण‑दर‑चरण प्रक्रिया सीखें। | | [DOCX से Markdown निर्यात कैसे करें – पूरी गाइड](./how-to-export-markdown-from-docx-complete-guide/) | DOCX फ़ाइल को Markdown में निर्यात करने की विस्तृत चरण‑दर‑चरण गाइड। | | [Word से LaTeX निर्यात कैसे करें: Aspose के साथ DOCX को Markdown में बदलें](./how-to-export-latex-from-word-convert-docx-to-markdown-with/) | Aspose.Words का उपयोग करके Word दस्तावेज़ से LaTeX निर्यात करके DOCX को Markdown में परिवर्तित करने की चरण‑दर‑चरण गाइड। | | [Word को Markdown में बदलें – छवियों को Base64 के रूप में एम्बेड करें](./convert-word-to-markdown-embed-images-as-base64/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों को Markdown में बदलें और छवियों को Base64 एन्कोडेड रूप में एम्बेड करें। | -| [मार्कडाउन का उपयोग कैसे करें: LaTeX समीकरणों के साथ DOCX को मार्कडाउन में परिवर्तित करें](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | DOCX फ़ाइलों को LaTeX समीकरणों के साथ मार्कडाउन में बदलने की चरण-दर-स्तर मार्गदर्शिका। | +| [मार्कडाउन का उपयोग कैसे करें: LaTeX समीकरणों के साथ DOCX को मार्कडाउन में परिवर्तित करें](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | DOCX फ़ाइलों को LaTeX समीकरणों के साथ मार्कडाउन में बदलने की चरण‑दर‑स्तर मार्गदर्शिका। | | [DOCX को मार्कडाउन में बदलें – चरण‑दर‑चरण C# गाइड](./convert-docx-to-markdown-step-by-step-c-guide/) | DOCX फ़ाइलों को C# में चरण‑दर‑चरण मार्कडाउन में बदलने की गाइड। | | [Word से Markdown कैसे सहेजें – पूर्ण C# गाइड](./how-to-save-markdown-from-word-complete-c-guide/) | .NET के लिए Aspose.Words का उपयोग करके Word को Markdown में सहेजने की पूरी गाइड | | [Word से Markdown कैसे सहेजें – पूर्ण गाइड](./how-to-save-markdown-from-word-complete-guide/) | .NET के लिए Aspose.Words का उपयोग करके Word को Markdown में सहेजने की पूरी गाइड | | [LaTeX निर्यात कैसे करें: DOCX को Markdown और TXT में बदलें](./how-to-export-latex-convert-docx-to-markdown-txt/) | DOCX फ़ाइल को LaTeX के साथ Markdown और TXT फ़ॉर्मेट में निर्यात करने की चरण‑दर‑चरण गाइड। | | [DOCX को Markdown में बदलते समय छवियों का नाम कैसे बदलें](./how-to-rename-images-when-converting-docx-to-markdown/) | DOCX को Markdown में बदलते समय छवियों के नाम बदलने की प्रक्रिया और कोड उदाहरण। | | [Aspose.Words के साथ docx को markdown में सहेजें – पूर्ण C# गाइड](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Aspose.Words का उपयोग करके C# में docx को markdown में बदलने की पूरी गाइड | +| [छवियों को सहेजें – Aspose.Words के साथ DOCX को Markdown में बदलें](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Aspose.Words का उपयोग करके DOCX फ़ाइल से छवियों को निकालें और उन्हें Markdown में सहेजें। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/hindi/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..519c09a8df --- /dev/null +++ b/words/hindi/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Aspose.Words का उपयोग करके DOCX को Markdown में बदलते समय छवियों को कैसे + सहेजें, सीखें। यह गाइड यह भी दिखाता है कि Word से छवियों को कैसे निकालें और Word + को Markdown के रूप में कैसे सहेजें। +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: hi +og_description: Aspose.Words का उपयोग करके DOCX को Markdown में परिवर्तित करते समय + छवियों को कैसे सहेजें। पूर्ण C# कोड के साथ चरण‑दर‑चरण गाइड। +og_title: इमेज़ कैसे सहेजें – Aspose.Words के साथ DOCX को मार्कडाउन में बदलें +tags: +- Aspose.Words +- C# +- Markdown conversion +title: इमेज़ कैसे सहेजें – Aspose.Words के साथ DOCX को मार्कडाउन में बदलें +url: /hi/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# इमेज़ कैसे सहेजें – Aspose.Words के साथ DOCX को Markdown में कनवर्ट करें + +क्या आपने कभी सोचा है **how to save images** जब आपको एक Word फ़ाइल को Markdown में बदलना हो? आप अकेले नहीं हैं। कई डेवलपर्स को तब समस्या आती है जब कन्वर्ज़न चित्रों को टूटे हुए लिंक के झंझट में डाल देता है, या उससे भी बुरा—पूरी तरह से खो देता है। अच्छी बात यह है कि Aspose.Words आपको सूक्ष्म नियंत्रण देता है, जिससे आप Word से इमेज़ निकाल सकते हैं, तय कर सकते हैं कि वे कहाँ जाएँ, और फिर भी साफ़ Markdown आउटपुट प्राप्त कर सकते हैं। + +इस ट्यूटोरियल में हम एक पूर्ण, तैयार‑चलाने‑योग्य C# उदाहरण के माध्यम से चलेंगे जो **how to save images** को एक समर्पित फ़ोल्डर में सहेजने को दर्शाता है जबकि `.docx` को `.md` में बदल रहा है। इस दौरान हम **convert docx to markdown**, **extract images from word**, और व्यापक प्रश्न **how to convert docx** को भी छुएँगे, जिससे आप **save word as markdown** कर सकें बिना किसी एसेट को खोए। + +## पूर्वापेक्षाएँ + +- .NET 6.0 या बाद का (API .NET Framework 4.7+ पर भी समान काम करता है) +- एक सक्रिय Aspose.Words लाइसेंस या मुफ्त ट्रायल (मुफ्त संस्करण आउटपुट में वॉटरमार्क जोड़ता है, लेकिन कोड समान रूप से काम करता है) +- एक Word दस्तावेज़ जिसमें पहले से इमेज़ हों (उदा., `DocWithImages.docx`) +- Visual Studio 2022 या कोई भी एडिटर जो C# प्रोजेक्ट बना सके + +> **Pro tip:** यदि आप ट्रायल का उपयोग कर रहे हैं, तो आप अभी भी इमेज‑सेविंग लॉजिक का परीक्षण कर सकते हैं; बस याद रखें कि अंतिम PDF/MD में ट्रायल वॉटरमार्क होगा। + +## समाधान का अवलोकन + +उच्च स्तर पर प्रक्रिया इस प्रकार दिखती है: + +1. `Document` के साथ स्रोत `.docx` लोड करें। +2. एक `MarkdownSaveOptions` ऑब्जेक्ट बनाएं और उसमें `IResourceSavingCallback` जोड़ें। +3. कॉलबैक में प्रत्येक इमेज़ के लिए फ़ोल्डर और फ़ाइल नाम तय करें। +4. दस्तावेज़ को Markdown के रूप में सहेजें; कॉलबैक प्रत्येक इमेज़ को डिस्क पर लिखता है। + +यह **how to save images** का मूल है कन्वर्ज़न के दौरान। वही पैटर्न अन्य रिसोर्स प्रकारों (फ़ॉन्ट्स, CSS, आदि) के लिए भी काम करता है यदि आपको उनकी आवश्यकता हो। + +## चरण 1 – इमेज़ वाले DOCX को लोड करें + +पहले हमें एक `Document` इंस्टेंस चाहिए जो उस Word फ़ाइल की ओर इशारा करता है जिसे आप कन्वर्ट करना चाहते हैं। यहाँ कोई जटिलता नहीं है; बस एक सीधा‑सरल कंस्ट्रक्टर कॉल। + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Why this matters:** दस्तावेज़ लोड करना वह एकमात्र स्थान है जहाँ Aspose Word XML को पार्स करता है, इसलिए कोई भी गायब फ़ॉन्ट या भ्रष्ट भाग अभी एक अपवाद फेंकेगा—इमेज़ सहेजने से पहले ही। + +## चरण 2 – Image‑Saving Callback के साथ MarkdownSaveOptions सेट अप करें + +`MarkdownSaveOptions` क्लास आपको `ResourceSavingCallback` के माध्यम से सहेजने की प्रक्रिया में हुक करने देता है। यह कॉलबैक प्रत्येक बाहरी रिसोर्स (इमेज़, CSS, आदि) के लिए एक `ResourceSavingArgs` ऑब्जेक्ट प्राप्त करता है जिसे Aspose को लिखना होता है। + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### कॉलबैक कार्यान्वयन + +नीचे `ImageSavingCallback` का पूर्ण कार्यान्वयन दिया गया है। यह Markdown फ़ाइल के बगल में एक `Images` सब‑फ़ोल्डर बनाता है, प्रत्येक चित्र को क्रमिक नाम (`img_0.png`, `img_1.jpg`, …) देता है, और वैकल्पिक रूप से आपको इमेज़ को कहीं और स्ट्रीम करने की अनुमति देता है (उदा., क्लाउड बकेट में)। + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **How this helps you:** `args.FileName` को कस्टमाइज़ करके आप बिल्कुल **how to save images** नियंत्रित करते हैं—चाहे एक फ्लैट फ़ोल्डर में, तिथि‑आधारित पदानुक्रम में, या यहाँ तक कि डेटाबेस BLOB में। कॉलबैक प्रत्येक इमेज़ के लिए चलता है, इसलिए आपको बाद में Markdown फ़ाइल को पोस्ट‑प्रोसेस करने की आवश्यकता नहीं पड़ेगी। + +## चरण 3 – दस्तावेज़ को Markdown के रूप में सहेजें + +अब जब विकल्प और कॉलबैक तैयार हैं, वास्तविक कन्वर्ज़न एक लाइन का कोड है। + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +जब यह लाइन समाप्त होगी, आपके पास होगा: + +- `Doc.md` – आपके Word कंटेंट का Markdown प्रतिनिधित्व। +- `Images\img_0.png`, `Images\img_1.jpg`, … – मूल DOCX से निकाली गई प्रत्येक चित्र। + +## पूर्ण, तैयार‑चलाने‑योग्य उदाहरण + +सब कुछ मिलाकर, यहाँ एक स्व-समाहित कंसोल ऐप है जिसे आप नई C# प्रोजेक्ट में कॉपी‑पेस्ट कर सकते हैं। + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### अपेक्षित परिणाम + +प्रोग्राम चलाने के बाद: + +- किसी भी टेक्स्ट एडिटर में `C:\Docs\Doc.md` खोलें। आपको Markdown इमेज़ लिंक जैसे `![](Images/img_0.png)` दिखेंगे। +- `Images` फ़ोल्डर में प्रत्येक निकाली गई चित्र क्रमिक नामों के साथ होगी। +- Markdown फ़ाइल किसी भी व्यूअर में सही ढंग से रेंडर होगी जो स्थानीय इमेज़ को सपोर्ट करता है (VS Code प्रीव्यू, GitHub, आदि)। + +## अक्सर पूछे जाने वाले प्रश्न (FAQs) + +### क्या यह अन्य इमेज़ फ़ॉर्मेट (SVG, TIFF) के साथ काम करता है? + +हां। `Path.GetExtension(args.FileName)` मूल एक्सटेंशन को बरकरार रखता है, इसलिए SVG, TIFF, BMP, और यहाँ तक कि EMF भी बिना बदले सहेजे जाते हैं। केवल यह बात ध्यान रखें कि कुछ Markdown रेंडरर SVG को इनलाइन नहीं दिखा सकते; ऐसे में आप पहले SVG को PNG में बदल सकते हैं। + +### यदि मुझे इमेज़ को अलग फ़ाइलों की बजाय Base64 के रूप में एम्बेड करना हो तो क्या करें? + +`ResourceSaving` के अंदर, आप फिजिकल फ़ाइल लिखने को मेमोरी स्ट्रीम से बदल सकते हैं और फिर मैन्युअली Markdown लिंक को संशोधित कर सकते हैं। Aspose सीधे “embed as Base64” स्विच नहीं देता, लेकिन कॉलबैक आपको `args.Stream` पर पूर्ण नियंत्रण देता है। + +### यह बिल्ट‑इन `ExportImages` मेथड से कैसे अलग है? + +`ExportImages` सभी इमेज़ को एक फ़ोल्डर में निकालता है **बिना** Markdown जनरेट किए। हमारा कॉलबैक दोनों कार्यों को जोड़ता है, जिससे इमेज़ फ़ाइल नाम `.md` के भीतर रेफ़रेंसेज़ से मेल खाते हैं। यह संरेखण ही **how to save images** को सही तरीके से कन्वर्ज़न के दौरान करने की कुंजी है। + +### क्या मैं कई DOCX फ़ाइलों को बैच में कन्वर्ट कर सकता हूँ? + +बिल्कुल। कोर लॉजिक को `foreach (var file in Directory.GetFiles(..., "*.docx"))` लूप में रखें, आउटपुट पाथ्स को समायोजित करें, और वही `ImageSavingCallback` पुन: उपयोग करें। बस याद रखें कि प्रत्येक दस्तावेज़ के लिए नया `MarkdownSaveOptions` बनाएं, क्योंकि `args.DestinationFileName` प्रत्येक इटरेशन में बदलता है। + +## एज केस और सर्वोत्तम प्रैक्टिसेज + +| Situation | What to Watch Out For | Recommended Fix | +|-----------|----------------------|-----------------| +| **बड़ा DOCX (सैकड़ों MB)** | लोड करते समय मेमोरी दबाव | Use `LoadOptions` with `LoadFormat.Docx` and set `LoadOptions.LoadFormat = LoadFormat.Docx` to stream‑load parts | +| **इमेज़ नाम टकराते हैं** | यदि स्रोत में पहले से `img_0.png` लक्ष्य फ़ोल्डर में है, तो आप ओवरराइट कर सकते हैं | Append a GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **रीड‑ओनली आउटपुट फ़ोल्डर** | सेव करते समय `UnauthorizedAccessException` फेंकेगा | Ensure the process runs with appropriate permissions or choose a writable path | +| **गैर‑इमेज़ रिसोर्स (CSS, फ़ॉन्ट्स)** | कॉलबैक उन्हें भी प्राप्त करता है | Guard with `if (args.ResourceType != ResourceType.Image) return;` (already shown) | +| **Unicode फ़ाइल नाम** | कुछ फ़ाइल सिस्टम अक्षरों को सही से संभाल नहीं पाते | Use `Path.GetInvalidFileNameChars()` का उपयोग करके `args.FileName` को सैनिटाइज़ करें असाइन करने से पहले | + +## संबंधित विषय जिन्हें आप आगे एक्सप्लोर कर सकते हैं + +- **convert docx to markdown** को कस्टम हेडिंग स्टाइल्स के साथ (इनलाइन इमेज़ के लिए `MarkdownSaveOptions.ExportImagesAsBase64` उपयोग करें) +- **extract images from word** को `Document.GetChildNodes(NodeType.Shape,` का उपयोग करके + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hindi/net/working-with-fonts/_index.md b/words/hindi/net/working-with-fonts/_index.md index a62fd974a6..ad90c3c78e 100644 --- a/words/hindi/net/working-with-fonts/_index.md +++ b/words/hindi/net/working-with-fonts/_index.md @@ -46,12 +46,12 @@ | [उपलब्ध फ़ॉन्ट्स की सूची प्राप्त करें](./get-list-of-available-fonts/) | इस विस्तृत चरण-दर-चरण ट्यूटोरियल में जानें कि .NET के लिए Aspose.Words का उपयोग करके उपलब्ध फ़ॉन्ट की सूची कैसे प्राप्त करें। अपने फ़ॉन्ट प्रबंधन कौशल को बढ़ाएँ। | | [फ़ॉन्ट्स की सूचनाएं प्राप्त करें](./receive-notifications-of-fonts/) | .NET के लिए Aspose.Words का उपयोग करते समय गायब या प्रतिस्थापित फ़ॉन्ट की सूचनाएँ प्राप्त करना सीखें। | | [DOCX लोड करना और लापता फ़ॉन्ट्स का पता लगाना – पूर्ण C# गाइड](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | DOCX फ़ाइल लोड करके लापता फ़ॉन्ट्स की पहचान करने के लिए पूर्ण C# चरण-दर-चरण मार्गदर्शिका। | +| [Aspose फ़ॉन्ट प्रतिस्थापन: Word दस्तावेज़ों में लापता फ़ॉन्ट्स का पता लगाएँ](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों में लापता फ़ॉन्ट्स का पता लगाने की प्रक्रिया सीखें। | | [चेतावनी अधिसूचना प्राप्त करें](./receive-warning-notification/) जानें कि .NET के लिए Aspose.Words का उपयोग करते समय चेतावनी अधिसूचना कैसे प्राप्त करें और अपने दस्तावेज़ों में किसी भी समस्या या चेतावनी का प्रबंधन कैसे करें। | | [संसाधन स्टीम फ़ॉन्ट स्रोत उदाहरण](./resource-steam-font-source-example/) | .NET के लिए Aspose.Words में कस्टम फ़ॉन्ट लोड करने के लिए संसाधन स्ट्रीम फ़ॉन्ट स्रोत का उपयोग करना सीखें। | | [प्रत्यय के बिना प्रतिस्थापन प्राप्त करें](./get-substitution-without-suffixes/) | इस ट्यूटोरियल में, Aspose.Words for .NET के साथ Word दस्तावेज़ में प्रत्यय रहित ओवरराइड प्राप्त करना सीखें। | | [Aspose.Words में फ़ॉन्ट्स का पता कैसे लगाएँ – चेतावनियों और सेटिंग्स को संभालें](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Aspose.Words में फ़ॉन्ट पहचान, चेतावनी प्रबंधन और फ़ॉन्ट सेटिंग्स को कैसे संभालें, इस चरण-दर-चरण मार्गदर्शिका में सीखें। | | [Aspose.Words में फ़ॉन्ट प्रतिस्थापन चेतावनियों को सक्षम करें – पूर्ण गाइड](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | .NET के लिए Aspose.Words का उपयोग करके फ़ॉन्ट प्रतिस्थापन चेतावनियों को सक्षम करने के लिए पूर्ण चरण-दर-चरण गाइड। | - | [Aspose.Words में फ़ॉन्ट्स को कैप्चर करने का तरीका – पूर्ण गाइड](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Aspose.Words के साथ फ़ॉन्ट कैप्चर करने की पूरी प्रक्रिया सीखें, कोड उदाहरण और चरण‑दर‑चरण मार्गदर्शन। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/hindi/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..644960e624 --- /dev/null +++ b/words/hindi/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Aspose फ़ॉन्ट प्रतिस्थापन का उपयोग करके जब आप वर्ड दस्तावेज़ लोड करते + हैं तो गायब फ़ॉन्ट्स का पता लगाना और गायब फ़ॉन्ट विवरण प्राप्त करना सीखें—स्टेप + बाय स्टेप गाइड। +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: hi +og_description: Aspose फ़ॉन्ट प्रतिस्थापन में निपुण बनें ताकि Word दस्तावेज़ लोड करते + समय गायब फ़ॉन्ट का पता लगाया जा सके और पूर्ण C# कोड के साथ गायब फ़ॉन्ट जानकारी प्राप्त + की जा सके। +og_title: Aspose फ़ॉन्ट प्रतिस्थापन – वर्ड दस्तावेज़ों में लापता फ़ॉन्ट का पता लगाएँ +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose फ़ॉन्ट प्रतिस्थापन: वर्ड दस्तावेज़ों में गायब फ़ॉन्ट्स का पता लगाएँ' +url: /hi/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose फ़ॉन्ट प्रतिस्थापन – Word दस्तावेज़ों में लापता फ़ॉन्ट का पता लगाएँ + +क्या आपने कभी सोचा है कि Word दस्तावेज़ दूसरे कंप्यूटर पर क्यों गलत दिखता है? अक्सर इसका कारण लापता फ़ॉन्ट होता है, और **Aspose फ़ॉन्ट प्रतिस्थापन** वह टूल है जो आपको ये गैप्स दृश्य आपदा बनने से पहले ही दिखा देता है। इस ट्यूटोरियल में हम **लापता फ़ॉन्ट का पता लगाने** के लिए दिखाएंगे कि **Word दस्तावेज़ को लोड** करते ही कैसे **लापता फ़ॉन्ट** की जानकारी प्राप्त की जाए ताकि आप उसे ठीक या बदल सकें। + +हम चेतावनी कॉलबैक सेट करने से लेकर लापता फ़ॉन्ट की साफ़ सूची निकालने तक सब कुछ कवर करेंगे। अंत तक, आपके पास एक तैयार‑चलाने‑योग्य C# स्निपेट होगा जो आपको ठीक‑ठीक बताता है कि कौन‑से फ़ॉन्ट नहीं मिले, और आप समझेंगे कि यह दस्तावेज़ की सटीकता के लिए क्यों महत्वपूर्ण है। + +--- + +## पूर्वापेक्षाएँ – शुरू करने से पहले आपको क्या चाहिए + +- **Aspose.Words for .NET** (v23.12 या बाद का संस्करण सुझाया गया)। +- एक .NET विकास वातावरण (Visual Studio, Rider, या `dotnet` CLI)। +- एक नमूना DOCX जो जानबूझकर ऐसे फ़ॉन्ट का उपयोग करता है जो आपके सिस्टम में नहीं है—इसे `DocumentWithMissingFont.docx` कहें। +- बुनियादी C# ज्ञान—कुछ भी जटिल नहीं, बस एक कंसोल ऐप चलाने की क्षमता। + +यदि इनमें से कोई भी चीज़ अपरिचित लगती है, तो रुकें और NuGet पैकेज इंस्टॉल करें: + +```bash +dotnet add package Aspose.Words +``` + +बस इतना ही। कोई अतिरिक्त फ़ॉन्ट नहीं, कोई बाहरी सेवा नहीं। + +--- + +## चरण 1: Word दस्तावेज़ लोड करें (और फ़ॉन्ट जांच ट्रिगर करें) + +सबसे पहला काम है **Word दस्तावेज़ को लोड करना**। Aspose.Words फ़ाइल को पार्स करता है और यदि वह संदर्भित फ़ॉन्ट नहीं ढूँढ़ पाता, तो वह *FontSubstitution* चेतावनी को कतार में रख देता है। यहाँ वह कोड है जो लोडिंग करता है: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **यह क्यों महत्वपूर्ण है:** दस्तावेज़ को जल्दी लोड करने से Aspose को हर टेक्स्ट रन, स्टाइल, और एम्बेडेड ऑब्जेक्ट को स्कैन करने का मौका मिलता है। यदि सिस्टम या कस्टम फ़ॉन्ट फ़ोल्डर में फ़ॉन्ट नहीं मिलता, तो बाद में आपको चेतावनी मिलेगी। + +--- + +## चरण 2: चेतावनी कॉलबैक संलग्न करें ताकि प्रतिस्थापन इवेंट्स को कैप्चर किया जा सके + +Aspose.Words एक कॉलबैक मैकेनिज़्म का उपयोग करता है ताकि आपको लापता फ़ॉन्ट जैसी समस्याओं के बारे में सूचित किया जा सके। `doc.WarningCallback` को `IWarningCallback` की एक इम्प्लीमेंटेशन असाइन करके आप प्रत्येक चेतावनी को वास्तविक‑समय में पकड़ सकते हैं। + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **प्रो टिप:** आप कई कॉलबैक (जैसे लॉगिंग, UI अपडेट) को कॉम्पोज़िट पैटर्न से रैप करके संलग्न कर सकते हैं, लेकिन इस ट्यूटोरियल के लिए एक ही कॉलबैक चीज़ों को स्पष्ट रखता है। + +--- + +## चरण 3: फ़ॉन्ट प्रतिस्थापन चेतावनी कॉलबैक लागू करें + +अब हम वह क्लास परिभाषित करते हैं जो वास्तविक कार्य करता है। कॉलबैक एक `WarningInfo` ऑब्जेक्ट प्राप्त करता है; हम `WarningType.FontSubstitution` के लिए फ़िल्टर करते हैं और विवरण को बाद में उपयोग के लिए संग्रहित करते हैं। + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **क्या हो रहा है:** जब Aspose को लापता फ़ॉन्ट मिलता है, तो वह “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” जैसी चेतावनी बनाता है। हमारा कॉलबैक वह लाइन प्रिंट करता है और उसे सहेजता है। + +--- + +## चरण 4: दस्तावेज़ प्रोसेस करें (वैकल्पिक) और लापता फ़ॉन्ट एकत्र करें + +यदि आपको केवल **लापता फ़ॉन्ट का पता लगाना** है, तो लोडिंग चरण पर्याप्त है—चेतावनियाँ स्वतः फ़ायर हो जाती हैं। हालांकि, कई डेवलपर्स को कुछ ऑपरेशन (जैसे सेविंग, कनवर्टिंग) करने के बाद **लापता फ़ॉन्ट** की जानकारी चाहिए होती है। नीचे हम एक छोटा ऑपरेशन—PDF में सेविंग—को मजबूर करते हैं ताकि सभी चेतावनियाँ उत्पन्न हों, फिर हम संग्रहीत संदेश निकालते हैं। + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **अपेक्षित कंसोल आउटपुट** (उदाहरण): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +ध्यान दें कि प्रत्येक पंक्ति स्पष्ट रूप से मूल फ़ॉन्ट और Aspose द्वारा चुने गए फॉलबैक को बताती है। यही **aspose फ़ॉन्ट प्रतिस्थापन** रिपोर्टिंग का मूल है। + +--- + +## चरण 5: उन्नत – प्रतिस्थापन कम करने के लिए कस्टम फ़ॉन्ट स्रोतों का उपयोग + +कभी‑कभी आपके पास लापता फ़ॉन्ट होते हैं, बस डिफ़ॉल्ट सिस्टम फ़ोल्डर में नहीं होते। Aspose.Words आपको `FontSettings` के माध्यम से एक कस्टम डायरेक्टरी इंगित करने की अनुमति देता है। इस चरण को जोड़ने से प्रतिस्थापन चेतावनियों की संख्या में काफी कमी आ सकती है। + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **यह क्यों जोड़ें?** यदि आप दस्तावेज़ों को कई मशीनों पर वितरित कर रहे हैं, तो आवश्यक फ़ॉन्ट को एक ज्ञात फ़ोल्डर में बंडल करने से हर जगह समान दृश्य रूप मिलता है। यह आपके **detect missing fonts** रूटीन को भी अधिक सटीक बनाता है क्योंकि Aspose पहले उस फ़ोल्डर को चेक करता है, फिर फॉलबैक पर जाता है। + +--- + +## पूर्ण कार्यशील उदाहरण + +सब कुछ एक साथ मिलाकर, यहाँ एक एक‑लाइन‑कॉपी‑पेस्ट‑तैयार कंसोल प्रोग्राम है। इसे `Program.cs` के रूप में सेव करें और `dotnet run` से चलाएँ। + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**आपको क्या दिखना चाहिए:** यदि स्रोत DOCX में ऐसे फ़ॉन्ट हैं जो आपके पास नहीं हैं, तो कंसोल प्रत्येक प्रतिस्थापन लाइन के बाद एक संक्षिप्त सारांश प्रिंट करेगा। यदि सभी फ़ॉन्ट मौजूद हैं, तो आपको “No missing fonts were detected.” संदेश मिलेगा। + +--- + +## सामान्य समस्याएँ एवं उनके समाधान + +| समस्या | क्यों होता है | समाधान | +|-------|----------------|-----| +| **कोई चेतावनी नहीं दिखती** | दस्तावेज़ केवल सिस्टम फ़ॉन्ट उपयोग करता है, या आपने पहले ही कस्टम फ़ोल्डर जोड़ दिया है जिसमें लापता फ़ॉन्ट हैं। | सुनिश्चित करें कि DOCX वास्तव में किसी अनुपलब्ध फ़ॉन्ट का संदर्भ देता है। आप Word में एक पैराग्राफ को दुर्लभ फ़ॉन्ट (जैसे “Papyrus”) में बदल सकते हैं। | +| **डुप्लिकेट संदेश** | वही फ़ॉन्ट कई रन में उपयोग हुआ है, जिससे कई चेतावनियाँ आती हैं। | यदि आपको केवल यूनिक सेट चाहिए तो `Distinct()` से डुप्लिकेशन हटाएँ। | +| **बड़े दस्तावेज़ों पर प्रदर्शन गिरावट** | प्रत्येक चेतावनी UI थ्रेड पर प्रोसेस होती है। | लोडिंग को बैकग्राउंड टास्क में चलाएँ या पोस्ट‑प्रोसेसिंग के लिए `Parallel.ForEach` का उपयोग करें। | +| **गलत फॉलबैक फ़ॉन्ट** | Aspose का डिफ़ॉल्ट फॉलबैक आपके ब्रांडिंग से मेल नहीं खा सकता। | `FontSettings.SubstitutionSettings.DefaultFontName` को अपनी पसंदीदा फ़ॉन्ट (जैसे “Calibri”) पर सेट करें। | + +--- + +## समाधान का विस्तार – लापता फ़ॉन्ट को JSON में निर्यात करना + +यदि आप एक वेब सर्विस बना रहे हैं जिसे क्लाइंट को लापता फ़ॉन्ट की रिपोर्ट करनी है, तो सूची को सीरियलाइज़ करना बहुत आसान है: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +अब आपका API एक साफ़ JSON पेलोड वापस कर सकता है जिसे दूसरा सिस्टम आसानी से उपयोग कर सके। + +--- + +## निष्कर्ष + +इस गाइड में हमने **Aspose फ़ॉन्ट प्रतिस्थापन** को शुरुआत से अंत तक दिखाया: Word दस्तावेज़ लोड करना, चेतावनी कॉलबैक संलग्न करना, प्रत्येक *detect missing fonts* इवेंट को कैप्चर करना, और अंत में **retrieve missing font** जानकारी को रिपोर्ट या सुधार के लिए निकालना। वैकल्पिक कस्टम फ़ॉन्ट फ़ोल्डर जोड़ने से प्रतिस्थापनों की सूची घटती है, और कुछ अतिरिक्त पंक्तियों से आप परिणामों को JSON में भी एक्सपोर्ट कर सकते हैं। + +याद रखें, आपके दस्तावेज़ों की दृश्य अखंडता उनके उपयोग किए गए फ़ॉन्ट पर निर्भर करती है। यहाँ दिखाए गए तकनीक से आप कभी भी अनपेक्षित फॉलबैक से आश्चर्य नहीं करेंगे। + +अगला कदम उठाने के लिए तैयार हैं? इस लॉजिक को बड़े दस्तावेज़‑प्रोसेसिंग पाइपलाइन में इंटीग्रेट करें, या Aspose.Words की अन्य सुविधाओं जैसे फ़ॉन्ट एम्बेडिंग (`doc.FontSettings.EmbeddedFonts`) को एक्सप्लोर करें। संभावनाएँ अनंत हैं, और आपके उपयोगकर्ता आपके परिष्कृत आउटपुट की सराहना करेंगे। + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hongkong/net/ai-powered-document-processing/_index.md b/words/hongkong/net/ai-powered-document-processing/_index.md index 735f28b914..c9666e6f88 100644 --- a/words/hongkong/net/ai-powered-document-processing/_index.md +++ b/words/hongkong/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ | [使用 Google AI 模型](./working-with-google-ai-model/) |使用 Aspose.Words for .NET 和 Google AI 提升您的文件處理能力,輕鬆建立簡潔的摘要。 | | [使用開放的人工智慧模型](./working-with-open-ai-model/) |使用 Aspose.Words for .NET 和 OpenAI 強大的模型實現高效的文檔摘要。立即深入了解這份綜合指南。 | | [使用匯總選項](./working-with-summarize-options/) |透過我們關於整合 AI 模型以獲得快速洞察的逐步指南,學習使用 Aspose.Words for .NET 有效地總結 Word 文件。 | +| [如何使用 LLM 與 Aspose.Words – 在 C# 中改寫段落](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) |使用 Aspose.Words for .NET 結合大型語言模型,在 C# 中自動改寫段落以提升文件品質。 | +| [如何在 C# 中檢查文法 – Word 文件完整指南](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) |使用 Aspose.Words for .NET 結合 AI 檢查 C# 程式碼中的文法,提升 Word 文件品質。 | +| [在 C# 中彙總 Word 文件 – 使用 Anthropic Claude 的完整指南](./summarize-word-document-in-c-complete-guide-using-anthropic/) |使用 Aspose.Words for .NET 結合 Anthropic Claude,在 C# 中高效彙總 Word 文件,提升文件處理效率。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/hongkong/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..d998191436 --- /dev/null +++ b/words/hongkong/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,231 @@ +--- +category: general +date: 2026-05-04 +description: 學習如何使用 C# 檢查 Word 文件的文法。本教學亦說明如何在 C# 中載入 DOCX 檔案,並使用 Aspose.Words AI + 取得精確結果。 +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: zh-hant +og_description: 如何使用 C# 檢查 Word 文件的語法?跟隨本教學載入 DOCX 檔案,並使用 Aspose.Words 執行 AI 驅動的語法檢查。 +og_title: 如何在 C# 中檢查文法 – 完整逐步指南 +tags: +- Aspose.Words +- C# +- Grammar Checking +title: 如何在 C# 中檢查語法 – Word 文件完整指南 +url: /zh-hant/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 C# 中檢查文法 – Word 文件完整指南 + +你是否曾經想過 **如何在不離開 IDE 的情況下檢查 Word 文件的文法**?你並非唯一有此需求的人。許多開發者需要在發佈前驗證使用者產生的報告、自動化電郵,甚至是文件。好消息是?使用 Aspose.Words AI,你可以以程式方式完成,且整個流程能順利融入典型的 C# 工作流程。 + +在本指南中,我們將逐步說明你需要了解的所有內容:從載入 DOCX 檔案 C# 到呼叫 AI 文法檢查器並解讀結果。完成後,你將擁有一段可直接執行的程式碼片段,能列印每個問題的嚴重程度、訊息與建議的取代文字——無需手動複製貼上。 + +## 你將學會 + +- **如何使用 Aspose.Words AI 在 Word 文件中檢查文法**。 +- 使用 `Document` 類別 **在 C# 中載入 DOCX 檔案** 的完整步驟。 +- 如何處理 `GrammarCheckResult` 物件、遍歷問題,並輸出有用的診斷資訊。 +- 常見陷阱(例如缺少授權)以及讓解決方案適合正式環境的技巧。 + +> **先決條件:** .NET 6.0+(或 .NET Framework 4.6+)、Visual Studio 2022(或任何你偏好的 IDE),以及 Aspose.Words for .NET 授權(免費試用版可用於測試)。如果尚未安裝 NuGet 套件,請執行: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +現在,讓我們深入了解。 + +## 步驟 1:在 C# 中載入 DOCX 檔案 + +在執行任何文法檢查之前,必須先將文件載入記憶體。Aspose.Words 只需一行程式碼即可完成,但仍有一些細節值得留意。 + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**為何重要:** +- 使用 `Path.Combine` 可確保跨平台相容性。 +- 存在性檢查可防止執行時崩潰,避免掩蓋真正的文法檢查邏輯。 +- 當你 **在 C# 中載入 DOCX 檔案** 時,Aspose 會解析所有樣式、頁首、頁尾,甚至隱藏文字,讓 AI 獲得文件的完整圖像。 + +> **小技巧:** 若需要使用串流(例如來自網路上傳的檔案),可將 `new Document(docPath)` 呼叫替換為 `new Document(stream)`。 + +## 步驟 2:選擇文法檢查的 AI 模型 + +Aspose.Words AI 支援多種模型,從輕量本機模型到雲端 GPT 變體皆有。對於大多數情境,**GPT‑3.5 Turbo** 在速度與準確度之間提供了最佳平衡。 + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**為何選擇 GPT‑3.5 Turbo?** +- 速度足以每分鐘批次處理數十個檔案。 +- 成本(若使用付費方案)低於 GPT‑4,且仍能捕捉大多數常見錯誤。 +- API 會自動處理 token 限制,無需手動切割大型文件。 + +如果偏好離線方式,可將 `AiModelType.Gpt35Turbo` 替換為 `AiModelType.Local`(需額外安裝離線模型套件)。 + +## 步驟 3:遍歷問題並顯示有用的回饋 + +`GrammarCheckResult` 包含一系列 `GrammarIssue` 物件。每個問題都提供嚴重程度、可讀的訊息以及建議的取代文字。我們將把它們整齊列印出來。 + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**欄位說明:** +- `Severity` – 通常為 `Info`、`Warning` 或 `Error`。在發佈前請將 `Error` 視為必須修正。 +- `Message` – 問題的簡要描述(例如「主詞與動詞不一致」)。 +- `SuggestedReplacement` – AI 建議的修正;若信任模型可自動套用,或交給人工審核。 + +> **邊緣案例:** 某些問題的 `SuggestedReplacement` 可能為空(例如樣式建議)。此時僅需標記位置,供人工檢查。 + +## 完整可執行範例 + +將上述步驟整合起來,以下是一個可自行貼入新 .NET 專案的完整主控台應用程式範例。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**預期輸出(範例):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +如果將程式執行於沒有問題的文件,則會看到「✅ No grammar issues detected.」的訊息。 + +## 處理常見問題 + +| 問題 | 為何發生 | 快速解決方案 | +|---------|----------------|-----------| +| **LicenseException** | Aspose 函式庫在正式環境使用時需要有效授權。 | 在 `Main` 開頭加入 `License license = new License(); license.SetLicense("Aspose.Words.lic");`。 | +| **Network timeout** | AI 模型呼叫到雲端時超過預設 100 秒逾時。 | 在呼叫 `CheckGrammar` 前透過 `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` 增加逾時時間。 | +| **Large documents (> 10 MB)** | 部分雲端模型會截斷輸入。 | 使用 `document.Sections` 將文件分段,逐段檢查後再彙總結果。 | +| **Missing suggestions** | 模型無法產生取代文字(例如語意模糊)。 | 記錄問題以供人工審核;不要自動套用空的建議。 | + +## 擴充解決方案 + +- **自動修正:** 迴圈遍歷 `grammarResult.Issues`,使用 `document.Range.Replace` 取代文字。請先備份原始檔案。 +- **批次處理:** 將整個流程包在對 DOCX 檔案目錄的 `foreach` 中。將每份報告儲存為 JSON 檔以供日後分析。 +- **整合至 ASP.NET:** 提供一個端點接受上傳的 DOCX,執行檢查,並回傳包含問題的 JSON 資料。 + +## 圖示說明 + +文法檢查流程圖 + +*上圖說明了三步驟流程:載入 DOCX → 執行 AI 文法檢查 → 輸出問題。* + +## 結論 + +我們已說明如何使用 C# 在 Word 文件中 **檢查文法**,示範了 **在 C# 中載入 DOCX 檔案** 的完整程式碼,並教你解讀 AI 產生的回饋。藉助 Aspose.Words AI,你將擁有一個強大的雲端文法引擎,能無縫整合至任何 .NET 應用程式。 + +接下來的步驟?試著自動化修正‑套用迴圈,或使用較新的 `AiModelType.Gpt4` 以獲得更精確的建議,亦可結合拼寫檢查函式庫,打造完整的校對管線。可能性幾乎無限,而你現在已具備堅實的基礎可供發展。 + +有任何問題或遇到棘手的邊緣案例嗎?在下方留言,我們會協助你。祝開發愉快! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hongkong/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/hongkong/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..c2099150d6 --- /dev/null +++ b/words/hongkong/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-05-04 +description: 如何使用 LLM 與 Aspose 編輯文件 – 學習取代段落文字、連接本地 LLM,並使用 AI 重寫文字。 +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: zh-hant +og_description: 如何使用 LLM 透過 Aspose 編輯文件。本指南說明如何連接本地 LLM、取代段落文字,並使用 AI 重寫文字。 +og_title: 如何在 Aspose.Words 中使用 LLM – 用 C# 重寫段落 +tags: +- Aspose.Words +- C# +- AI +- LLM +title: 如何在 Aspose.Words 中使用 LLM – 用 C# 重寫段落 +url: /zh-hant/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Aspose.Words 中使用 LLM – 以 C# 重寫段落 + +有沒有想過 **how to use LLM** 來在不手動開啟的情況下潤飾 Word 文件?你並不是唯一有此想法的人。許多開發者在需要以程式方式 *replace paragraph text* 時會卡住,因為缺乏乾淨的 AI 驅動工作流程。 + +在本教學中,我們將連接本地大型語言模型,將 `.docx` 檔案中的片段餵入模型,請它 **rewrite text using AI**,最後儲存更新後的文件——全部使用 Aspose.Words。完成後,你將擁有一個可直接執行的 C# 主控台應用程式,示範整個流程。 + +> **你將獲得:** 完整、可執行的範例、每一步的說明、邊緣情況的提示,以及擴充解決方案的想法。 + +## 需要的環境 + +- **.NET 6+** (或 .NET Framework 4.7.2 – 程式碼兩者皆可執行) +- **Aspose.Words for .NET** (NuGet 套件 `Aspose.Words`) +- 一個 **local LLM server**,提供簡易的 HTTP `/generate` 端點(例如 Ollama、LMStudio,或自訂的 Flask 服務) +- 具備基本的 C# 與 HTTP 客戶端程式碼的熟悉度 + +不需要額外的 SDK;其他所有內容都在我們將共同編寫的程式碼中。 + +## 步驟 1:How to Use LLM to Replace Paragraph Text + +我們首先要做的事是找出想要修改的段落。Aspose.Words 透過提供豐富的物件模型,使這件事變得非常簡單。 + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**為什麼這很重要:** +選擇正確的節點可避免意外覆寫標題或表格。透過使用 **replace paragraph text** 方法,我們在保持文件結構完整的同時,只修改我們關心的內容。 + +> **專業提示:** 若文件中有長度可變的區段,請使用 `document.GetChildNodes(NodeType.Paragraph, true)` 搭配 LINQ 依文字或樣式定位段落。 + +## 步驟 2:Connect to a Local LLM Endpoint + +現在我們已取得文字,需要將它送到 LLM。範例使用一個簡易的封裝類別 `LocalLargeLanguageModel`,隱藏 HTTP 的細節。如果你願意,也可以改用 `HttpClient` 呼叫。 + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**為什麼要這樣連接:** +使用 **connect to local llm** 的設定可消除延遲、將資料保留在本地,且避免 API 成本。此封裝也讓後續程式碼更簡潔,讓我們能專注於 **rewrite text using ai** 的邏輯。 + +## 步驟 3:Rewrite Text Using AI with Aspose.Words + +取得段落文字且 LLM 已就緒後,我們會構造一個提示詞,告訴模型我們的具體需求——以正式語氣重寫。你也可以調整提示詞以符合其他風格(友善、技術性等)。 + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**為什麼這有效:** +LLM 以提示詞驅動;提供明確指示(「Rewrite … in a formal tone」)即可得到一致的結果。**rewrite text using ai** 步驟是本教學的核心——展示了如何將 AI 直接嵌入文件工作流程。 + +## 步驟 4:Edit the Document and Save Changes + +現在我們將原本的 run 替換為新內容。Aspose.Words 以 `Run` 物件儲存文字,先清除它們可避免遺留的格式化痕跡。 + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**邊緣情況說明:** +如果原始段落包含混合格式(粗體、斜體),你可能想保留樣式。此時,建立新的 `Run`,複製原始的 `Font` 設定,然後將其 `Text` 設為 `revisedText`。 + +## 完整範例程式 + +以下是完整程式碼,你可以直接複製貼上到 Console 專案。請先安裝 Aspose.Words NuGet 套件(`dotnet add package Aspose.Words`)。 + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### 預期輸出 + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +開啟 `output.docx` —— 你會看到第三段已變成潤飾過的版本。 + +## 常見問題與注意事項 + +| Question | Answer | +|----------|--------| +| **如果我的 LLM 回傳含有額外欄位的 JSON 會怎樣?** | 調整 `GenerateText` 以反序列化正確的屬性,或手動解析回應。 | +| **我可以一次處理多個段落嗎?** | 可以——遍歷 `document.FirstSection.Body.Paragraphs`,套用相同的提示詞邏輯,必要時在提示詞中加入段落索引以提供上下文。 | +| **我的 LLM 伺服器需要驗證嗎?** | 在 POST 前於 `HttpClient` 加入標頭:`_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`。 | +| **替換後格式遺失。** | 保留原始 `Run.Font` 設定:建立新的 `Run`,複製 `originalRun.Font.Clone()`,再設定其 `Text`。 | +| **LLM 有時會回傳空字串。** | 實作備援機制——若 `revisedText.Trim().Length == 0`,則保留原始文字或以更簡單的提示詞重試。 | + +## 擴充解決方案 + +既然你已掌握 **how to use llm** 於單一段落的技巧,請考慮以下後續步驟: + +- **批次處理:** 迴圈遍歷每個段落,並以選定的風格重寫(例如「使所有文字更簡潔」)。 +- **樣式感知重寫:** 在提示詞中傳入原始段落的樣式名稱,讓 LLM 能區分標題與正文。 +- **整合至 CI 流程:** 將文件潤飾自動化,作為文件建置流程的一部份。 +- **替代提示詞:** 嘗試「summarize this paragraph」或「translate this paragraph to Spanish」以探索 **rewrite text using ai** 的完整威力。 + +## 結論 + +我們已完整說明 **how to use llm** 搭配 Aspose.Words 的全流程:載入文件、**connect to local llm**、擷取段落、**rewrite text using ai**、**replace paragraph text**,最後儲存結果。程式碼自包含、即插即用,展示了將 AI 與傳統文件自動化結合的實用方式。 + +試著執行、調整提示詞,並讓 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hongkong/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/hongkong/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..47f79b8d16 --- /dev/null +++ b/words/hongkong/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-05-04 +description: 快速摘要 Word 文件並使用 Google 翻譯文字。學習如何使用 Anthropic Claude,從報告生成摘要,並在單一 C# 教學中使用 + Google 進行文字翻譯。 +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: zh-hant +og_description: 即時摘要 Word 文件並使用 Google 翻譯文字。本指南示範如何利用 Anthropic Claude 與 Aspose.Words + 從報告中產生摘要。 +og_title: 在 C# 中使用 Anthropic Claude 逐步摘要 Word 文件 +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: 在 C# 中摘要 Word 文件 – 使用 Anthropic Claude 完整指南 +url: /zh-hant/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Summarize Word Document in C# – Complete Guide Using Anthropic Claude + +有沒有曾經需要 **summarize word document**,卻被各種 API 與冗長程式碼卡住?你並不孤單。無論是年度報告、法律簡報,或是研究論文,從大量文字中萃取精簡概述都是日常痛點。幸好,結合 Aspose.Words 與 Anthropic Claude 後,這件事變得輕而易舉,甚至還可以順手拋個 Google 翻譯過去。 + +在本教學中,我們會一步步說明:載入大型 .docx、呼叫 Claude V2 產生摘要、使用 Google 進行翻譯,以及處理常見的坑。完成後,你只需要幾行 C# 程式碼,就能 **create summary from report**。 + +## Prerequisites + +- .NET 6+(或 .NET Core 3.1)已安裝 +- Aspose.Words for .NET 授權(或免費試用版) +- Anthropic Claude V2 API 存取權(需要 API 金鑰) +- Google Translator 的網路連線 +- Visual Studio 2022 或你慣用的 C# IDE + +不需要額外的 NuGet 套件,除了 `Aspose.Words` 與 `Aspose.Words.AI`;翻譯類別已隨同同一套程式庫提供。 + +## Step 1 – Load the Source Word Document + +首先要把 .docx 檔載入記憶體。Aspose.Words 讓這件事變得非常簡單,且因為其強大的解析器,能處理複雜版面、表格,甚至內嵌圖片。 + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Why this matters:** 先載入文件可以讓你檢查屬性(作者、字數),並決定是否真的需要摘要。超過 10 MB 的大型檔案會佔用較多記憶體,若遇到效能問題,可考慮使用 `LoadOptions` 搭配 `LoadFormat.Docx`。 + +## Step 2 – Summarize the Document with Anthropic Claude + +接下來就是重點:把文件交給 Claude V2。`Summarizer` 類別已封裝好 HTTP 呼叫、token 處理與重試機制。 + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **How it works:** +> 1. **Chunking** – Aspose 會自動將文件切成可管理的片段(≈ 2 KB 每段),以符合 Claude 的 token 限制。 +> 2. **Prompt engineering** – 程式庫會傳送類似「Provide a concise executive summary of the following text:」的提示,接著附上每個片段。 +> 3. **Aggregation** – Claude 回傳的部份摘要會被串接成最終的 `summaryText`。 + +### Edge Cases & Tips + +- **Very large reports** (> 100 pages) 可能超出 Claude 的上下文視窗。若出現截斷情況,請將 `SummarizerOptions.MaxChunkSize` 設為較小的值。 +- **Non‑English source** – Claude 在英文上表現最佳;若是其他語言,請先翻譯(見 Step 4)再進行摘要。 +- **Rate limits** – Anthropic 會對每分鐘請求數量設上限。若收到 `429` 回應,請在呼叫外層加上指數退避的重試迴圈。 + +## Step 3 – Verify the Summary Output + +在繼續之前,最好先驗證摘要不是空的,且長度符合預期(例如佔原始字數的 5‑10 %)。 + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +如果比例過低(< 2 %),可以調整 `SummarizerOptions.SummaryLength` 以要求更長的輸出。 + +## Step 4 – Translate Text with Google + +現在我們已取得精簡的英文摘要,接著使用 Google 進行快速翻譯。`Translator` 類別會呼叫 Google 的公共翻譯端點(短字串不需要 API 金鑰,正式環境建議改用付費的 Cloud Translation API)。 + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Why Google?** 它速度快、支援廣,且免費端點可處理短字串而不需驗證。大量翻譯時,請批次呼叫並遵守 Google 的使用限制。 + +### Translating the Whole Summary (Optional) + +若需要將整篇摘要翻成西班牙文(或其他語言),只要把 `summaryText` 傳入 `Translator.Translate` 即可。請留意 5 KB 的請求大小上限,必要時將摘要切成較小的片段。 + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Step 5 – Save the Summary Back to a Word File (Bonus) + +很多使用者會期待下載文件,而非只在主控台看到結果。下面示範如何產生一個新的 `.docx`,同時包含英文與西班牙文版本。 + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Practical Tip + +在新 Word 檔中嵌入摘要時,盡量使用最簡單的格式(`Normal` 樣式)。來源文件的複雜樣式可能會導致版面意外變形。 + +## Full Working Example + +以下是 **完整、可直接複製貼上** 的程式碼範例,加入 Aspose 套件後即可用 `dotnet run` 執行。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Expected console output** (truncated for brevity): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Frequently Asked Questions + +| Question | Answer | +|----------|--------| +| *Can I use a different AI model?* | Yes. Replace `SummarizerModel.AnthropicClaudeV2` with `SummarizerModel.OpenAIGPT4` (requires an OpenAI key) or any provider listed in the enum. | +| *What if the document contains protected sections?* | Aspose will throw `ProtectedDocumentException`. Unlock it first with `LoadOptions.Password` or request an unprotected copy. | +| *Do I need a paid Aspose license for production?* | The free trial works for up to 20 pages. For larger reports, a license removes the page limit and adds performance optimizations. | +| *Is the Google translator reliable for large blocks?* | For short strings it’s fine. For bulk translation, switch to the Cloud Translation API to avoid request‑size limits and to get better language detection. | + +## Conclusion + +We’ve just **summarize word document** using Aspose.Words together with the Anthropic Claude V2 model, then **translate text with Google** to + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hongkong/net/basic-conversions/_index.md b/words/hongkong/net/basic-conversions/_index.md index a802f472b1..919e8cf452 100644 --- a/words/hongkong/net/basic-conversions/_index.md +++ b/words/hongkong/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [將 PDF 儲存為 Word 格式 (Docx)](./pdf-to-docx/) |透過本詳細的逐步指南了解如何使用 Aspose.Words for .NET 將 PDF 轉換為 Word 文件 (Docx)。非常適合開發人員。 | | [使用 Aspose.Words 將 Word 儲存為 PDF – 完整 C# 教學](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | 完整指南教您在 C# 中使用 Aspose.Words 將 Word 檔案儲存為 PDF,提供程式碼範例與最佳實踐。 | | [使用 Aspose.Words 將 Docx 儲存為 PDF – 完整 C# 教學](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | 完整指南教您在 C# 中使用 Aspose.Words 將 Docx 檔案儲存為 PDF,提供程式碼範例與最佳實踐。 | +| [在 C# 中從 DOCX 建立可存取的 PDF – 如何將 Word 轉換為 PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | 了解如何使用 Aspose.Words for .NET 在 C# 中將 DOCX 轉換為符合無障礙標準的 PDF,提供完整步驟與程式碼範例。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/hongkong/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..5efdb2b0bc --- /dev/null +++ b/words/hongkong/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,210 @@ +--- +category: general +date: 2026-05-04 +description: 在 C# 中從 DOCX 檔案建立可存取的 PDF。了解如何將 Word 轉換為 PDF、將 Word 儲存為 PDF,以及在符合可存取性規範的情況下匯出 + docx 為 PDF。 +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: zh-hant +og_description: 在 C# 中從 DOCX 檔案建立可存取的 PDF。跟隨此一步步教學,將 Word 轉換為 PDF、將 Word 儲存為 PDF,並將 + docx 匯出為具備完整可存取性的 PDF。 +og_title: 使用 C# 從 DOCX 建立可存取 PDF – 快速指南 +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: 在 C# 中從 DOCX 建立可存取 PDF – 如何將 Word 轉換為 PDF +url: /zh-hant/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中從 DOCX 建立可存取的 PDF – 如何將 Word 轉換為 PDF + +Ever needed to **建立可存取的 PDF** from a Word document but weren’t sure which library to trust? You’re not alone—many developers hit the same roadblock when they must meet PDF/UA standards for accessibility. The good news is that with Aspose.Words you can turn a `.docx` into a compliant PDF in just a few lines of code, and you’ll get a file that screen readers can actually read. + +In this tutorial we’ll walk through everything you need to know to **convert Word to PDF**, **save Word as PDF**, and even **export docx to PDF** with PDF/UA‑1 (or PDF/UA‑2) compliance. By the end you’ll have a ready‑to‑use C# snippet, understand why each setting matters, and be equipped to handle common edge cases like missing fonts or custom page setups. + +## 前置條件 + +- .NET 6.0 或更新版本(此程式碼亦相容 .NET Framework 4.6 以上) +- Aspose.Words for .NET 授權(或免費評估金鑰) +- 基本的 C# 與 Visual Studio(或您慣用的任何 IDE)知識 +- 一個您想要讓它可存取的 DOCX 檔案(此處稱為 `input.docx`) + +> **Pro tip:** If you’re using the free trial, remember that the generated PDF will contain a small “Evaluation” watermark. + +## 第一步:安裝 Aspose.Words NuGet 套件 + +Before we can write any C# code, the Aspose.Words library must be added to the project. + +```bash +dotnet add package Aspose.Words +``` + +Running the command restores the `Aspose.Words.dll` and makes the namespaces available. This step is essential because the `PdfSaveOptions` class lives inside that package. + +## 第二步:載入來源 DOCX 檔案 + +The first logical step is to load the Word document you want to transform. Think of this as opening a book before you start editing its pages. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Why this matters:** Loading the document creates an in‑memory representation that includes all styles, images, and metadata. If the file is corrupted, `Document` will throw an exception—so you might want to wrap this in a try/catch block for production code. + +## 第三步:設定 PDF 儲存選項以符合可存取性 + +Aspose.Words lets you specify the PDF compliance level. PDF/UA‑1 is the original accessibility standard, while PDF/UA‑2 adds a few newer tags. Choose the one that matches your client’s requirements. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **What “Compliance” does:** Setting `PdfCompliance.PdfUax1` tells Aspose.Words to embed proper tags, logical reading order, and alternate text for images—exactly what screen‑reader software looks for. + +## 第四步:將文件儲存為可存取的 PDF + +Now the heavy lifting is over; we simply instruct Aspose.Words to write the PDF file using the options we just defined. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +After this line runs, you’ll find `output.pdf` in the specified folder. Open it in Adobe Acrobat Reader and check **File → Properties → Description → PDF/A and PDF/UA** to verify compliance. + +## 第五步:驗證可存取性(可選但建議) + +While the code guarantees tagged PDF output, a quick manual check helps catch any custom content that might need extra attention. + +1. Open `output.pdf` in Adobe Acrobat Pro. +2. Go to **Tools → Accessibility → Full Check**. +3. Run the check and review any warnings (e.g., missing alt text for custom images). + +If the report shows no errors, you’ve successfully **建立可存取的 PDF** that meets PDF/UA‑1 standards. + +## 常見變化與邊緣情況 + +### 在迴圈中轉換多個 DOCX 檔案 + +If you have a batch of documents, wrap the load‑save logic inside a `foreach` loop. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### 切換至 PDF/UA‑2 + +Just change the `Compliance` enum: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### 處理自訂字型 + +If your DOCX uses fonts not installed on the server, embed them: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Embedding guarantees that the PDF looks the same on any machine—a crucial detail when you **export docx to pdf** for external stakeholders. + +## 完整範例程式 + +Below is the complete, ready‑to‑run program that puts all the pieces together. Copy‑paste it into a console app, adjust the paths, and hit **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** A file named `output.pdf` that opens in any PDF viewer, carries the proper accessibility tags, and can be shared with users who rely on assistive technology. + +![建立可存取的 PDF 範例](/images/create-accessible-pdf.png "顯示 PDF/UA‑1 相容文件的螢幕截圖") + +*Image alt text:* *建立可存取的 PDF 範例 – 在 Adobe Acrobat 中開啟的 PDF/UA‑1 相容文件螢幕截圖。* + +## 常見問題 + +- **Does this work with .NET Core?** + Absolutely. Aspose.Words is cross‑platform, so the same code runs on Windows, Linux, and macOS. + +- **What if my DOCX contains macros?** + Macros are ignored during conversion; only the visible content is rendered into the PDF. + +- **Can I add a custom PDF metadata title?** + Yes—set `pdfSaveOptions.Metadata.Title = "Your Custom Title";` before saving. + +- **Is PDF/UA‑2 widely supported?** + Most modern PDF readers understand PDF/UA‑2, but if you’re targeting older tools, stick with PDF/UA‑1. + +## 結論 + +We’ve just shown you how to **建立可存取的 PDF** from a DOCX file using Aspose.Words, covering everything from installing the NuGet package to verifying PDF/UA compliance. By following these steps you can reliably **convert Word to PDF**, **save Word as PDF**, and **export docx to PDF** while meeting accessibility standards—a must‑have skill for any developer working on enterprise document pipelines. + +Ready for the next challenge? Try adding a custom header/footer, embedding a PDF/A‑2b tag, or automating the process in an ASP.NET Core web API. The possibilities are endless, and the foundation you’ve built here will let you tackle them with confidence. + +Happy coding, and may your PDFs always be readable! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hongkong/net/programming-with-markdownsaveoptions/_index.md b/words/hongkong/net/programming-with-markdownsaveoptions/_index.md index faadf329d8..7195e3c44c 100644 --- a/words/hongkong/net/programming-with-markdownsaveoptions/_index.md +++ b/words/hongkong/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ | [使用 Aspose.Words 將 docx 儲存為 markdown – 完整 C# 指南](./save-docx-as-markdown-with-aspose-words-full-c-guide/) |示範如何使用 Aspose.Words for .NET 在 C# 中完整將 DOCX 轉換為 Markdown,提供完整步驟與範例程式碼。 | | [儲存 Word 圖像 – 使用 Aspose 將 Word 轉換為 Markdown](./save-word-images-convert-word-to-markdown-with-aspose/) |示範如何使用 Aspose.Words for .NET 從 Word 文件中提取圖像並將其匯出為 Markdown 格式。 | | [將 Word 轉換為 markdown – 完整 C# 指南(含圖像提取)](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) |示範如何使用 Aspose.Words for .NET 在 C# 中將 Word 轉換為 Markdown,並提取圖像。 | +| [如何儲存圖像 – 使用 Aspose.Words 將 DOCX 轉換為 Markdown](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) |示範如何使用 Aspose.Words for .NET 從 DOCX 文件中提取圖像並將其儲存於 Markdown 中。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/hongkong/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..d153a2f56e --- /dev/null +++ b/words/hongkong/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,242 @@ +--- +category: general +date: 2026-05-04 +description: 了解如何在使用 Aspose.Words 將 DOCX 轉換為 Markdown 時保存圖像。本指南亦示範如何從 Word 中提取圖像以及將 + Word 儲存為 Markdown。 +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: zh-hant +og_description: 如何在使用 Aspose.Words 將 DOCX 轉換為 Markdown 時保存圖片。逐步指南,附完整 C# 程式碼。 +og_title: 如何儲存圖片 – 使用 Aspose.Words 將 DOCX 轉換為 Markdown +tags: +- Aspose.Words +- C# +- Markdown conversion +title: 如何儲存圖像 – 使用 Aspose.Words 將 DOCX 轉換為 Markdown +url: /zh-hant/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何儲存圖片 – 使用 Aspose.Words 將 DOCX 轉換為 Markdown + +有沒有想過 **如何儲存圖片**,在把 Word 檔案轉成 Markdown 時?你並不是唯一遇到這個問題的人。許多開發者在轉換時會遇到圖片變成斷掉的連結,甚至完全遺失的情況。好消息是 Aspose.Words 提供了細緻的控制,讓你可以從 Word 中抽取圖片、決定儲存位置,同時產生乾淨的 Markdown 輸出。 + +在本教學中,我們將逐步說明一個完整、可直接執行的 C# 範例,展示 **如何儲存圖片** 到指定資料夾,同時將 `.docx` 轉成 `.md`。過程中也會提及 **convert docx to markdown**、**extract images from word**,以及 **how to convert docx** 的更廣泛議題,讓你 **save word as markdown** 時不會遺失任何資源。 + +## 前置條件 + +- .NET 6.0 或更新版本(API 在 .NET Framework 4.7+ 上的行為相同) +- 有效的 Aspose.Words 授權或免費試用版(免費版會在輸出檔案加上浮水印,但程式碼功能相同) +- 已包含圖片的 Word 文件(例如 `DocWithImages.docx`) +- Visual Studio 2022 或任何能編譯 C# 專案的編輯器 + +> **專業提示:** 若使用試用版,仍可測試圖片儲存的邏輯;只要記得最終產出的 PDF/MD 會帶有試用浮水印。 + +## 解決方案概觀 + +整體流程如下: + +1. 使用 `Document` 載入來源 `.docx`。 +2. 建立 `MarkdownSaveOptions` 物件,並掛接 `IResourceSavingCallback`。 +3. 在回呼中決定每張圖片的資料夾與檔名。 +4. 將文件儲存為 Markdown;回呼會把每張圖片寫入磁碟。 + +這就是 **如何儲存圖片** 在轉換過程中的核心。相同的模式也適用於其他資源類型(字型、CSS 等),如果你有需要的話。 + +## 步驟 1 – 載入包含圖片的 DOCX + +首先,我們需要一個指向欲轉換 Word 檔的 `Document` 實例。這裡不需要特別技巧,只要呼叫建構子即可。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **為什麼重要:** 載入文件時 Aspose 會解析 Word 的 XML,任何缺少的字型或損壞的部分都會在此拋出例外,讓你在開始儲存圖片前就能發現問題。 + +## 步驟 2 – 設定 MarkdownSaveOptions 並加入圖片儲存回呼 + +`MarkdownSaveOptions` 類別允許透過 `ResourceSavingCallback` 在儲存過程中介入。此回呼會為每個外部資源(圖片、CSS 等)收到一個 `ResourceSavingArgs` 物件。 + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### 回呼實作 + +以下是完整的 `ImageSavingCallback` 實作。它會在 Markdown 檔旁建立 `Images` 子資料夾,為每張圖片給予順序名稱(`img_0.png`、`img_1.jpg`…),並可選擇將圖片串流至其他位置(例如雲端儲存桶)。 + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **這對你有何幫助:** 透過自訂 `args.FileName`,你可以精確控制 **如何儲存圖片**——無論是放在單一資料夾、依日期分層,甚至存入資料庫 BLOB。回呼會對每張圖片執行一次,省去事後手動調整 Markdown 的麻煩。 + +## 步驟 3 – 將文件儲存為 Markdown + +當選項與回呼都設定好後,實際的轉換只需要一行程式碼。 + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +執行完畢後,你會得到: + +- `Doc.md` – 你的 Word 內容的 Markdown 版。 +- `Images\img_0.png`、`Images\img_1.jpg`、… – 從原始 DOCX 抽出的每張圖片。 + +## 完整、可直接執行的範例 + +把所有程式碼組合起來,以下是一個可直接貼到新 C# 專案的完整主控台應用程式。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### 預期結果 + +執行程式後: + +- 在任意文字編輯器開啟 `C:\Docs\Doc.md`,會看到類似 `![](Images/img_0.png)` 的 Markdown 圖片連結。 +- `Images` 資料夾會包含每一張抽出的圖片,名稱依序編號。 +- 只要支援本機圖片的 Markdown 檢視器(VS Code 預覽、GitHub 等)都能正確顯示。 + +## 常見問題 (FAQs) + +### 這能支援其他圖片格式嗎(SVG、TIFF)? + +可以。`Path.GetExtension(args.FileName)` 會保留原始副檔名,所以 SVG、TIFF、BMP 甚至 EMF 都會原樣儲存。唯一需要注意的是部分 Markdown 渲染器可能不支援直接顯示 SVG,若有此需求可先將 SVG 轉成 PNG。 + +### 若想把圖片以 Base64 內嵌而不是獨立檔案,該怎麼做? + +在 `ResourceSaving` 內,你可以改寫為寫入記憶體串流,然後自行修改 Markdown 連結。Aspose 並未提供直接「內嵌 Base64」的開關,但回呼讓你完全掌控 `args.Stream`。 + +### 與內建的 `ExportImages` 方法有何不同? + +`ExportImages` 只會把所有圖片抽取到資料夾,**不會**產生 Markdown。使用回呼同時完成兩件事,確保 `.md` 中的圖片檔名與實際檔案一致,這正是 **如何正確儲存圖片** 的關鍵。 + +### 能一次批次轉換多個 DOCX 嗎? + +當然可以。把核心邏輯包在 `foreach (var file in Directory.GetFiles(..., "*.docx"))` 迴圈裡,調整輸出路徑,並重複使用同一個 `ImageSavingCallback`。記得每個文件都要重新建立 `MarkdownSaveOptions`,因為 `args.DestinationFileName` 會隨每次迭代而變化。 + +## 邊緣情況與最佳實踐 + +| 情境 | 需要注意的地方 | 推薦的解決方式 | +|-----------|----------------------|-----------------| +| **大型 DOCX(數百 MB)** | 載入時可能產生記憶體壓力 | 使用 `LoadOptions` 並設定 `LoadOptions.LoadFormat = LoadFormat.Docx` 以串流方式載入部份內容 | +| **圖片名稱衝突** | 若目標資料夾已存在同名 `img_0.png` 可能被覆寫 | 在檔名後加 GUID:`newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **輸出資料夾唯讀** | 儲存時會拋出 `UnauthorizedAccessException` | 確保執行程序具備寫入權限,或改用可寫入的路徑 | +| **非圖片資源(CSS、字型)** | 回呼也會收到這類資源 | 用 `if (args.ResourceType != ResourceType.Image) return;` 進行過濾(範例已示) | +| **Unicode 檔名** | 某些檔案系統可能無法正確處理特殊字元 | 使用 `Path.GetInvalidFileNameChars()` 先清理 `args.FileName` 再指定 | + +## 相關主題推薦 + +- **convert docx to markdown** 搭配自訂標題樣式(使用 `MarkdownSaveOptions.ExportImagesAsBase64` 內嵌圖片) +- **extract images from word** 使用 `Document.GetChildNodes(NodeType.Shape,` + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hongkong/net/working-with-fonts/_index.md b/words/hongkong/net/working-with-fonts/_index.md index 846af5a95e..083b3a29bf 100644 --- a/words/hongkong/net/working-with-fonts/_index.md +++ b/words/hongkong/net/working-with-fonts/_index.md @@ -52,6 +52,7 @@ | [如何偵測 Aspose.Words 中的字體 – 處理警告與設定](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) |了解如何在 Aspose.Words 中偵測字體、處理字體相關警告並設定字體選項。 | | [如何在 Aspose.Words 中捕獲字體 – 完整指南](./how-to-capture-fonts-in-aspose-words-complete-guide/) |了解如何使用 Aspose.Words for .NET 捕獲字體,完整步驟指導,確保文檔字體正確呈現。 | | [如何載入 DOCX 並偵測缺失字型 – 完整 C# 指南](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) |本教學示範如何使用 Aspose.Words for .NET 載入 DOCX 並檢測遺失的字型。 | +| [Aspose 字體替換:偵測 Word 文件中缺失的字體](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) |了解如何使用 Aspose.Words for .NET 偵測 Word 文件中缺失的字體並處理字體替換。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/hongkong/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..5df6e8d806 --- /dev/null +++ b/words/hongkong/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-05-04 +description: 學習如何使用 Aspose 字型替換,在載入 Word 文件時偵測缺失的字型並取得缺失字型的詳細資訊——一步一步指南。 +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: zh-hant +og_description: 精通 Aspose 字型置換,於載入 Word 文件時偵測缺失字型,並以完整的 C# 程式碼取得缺失字型資訊。 +og_title: Aspose 字體替換 – 偵測 Word 文件中缺失的字體 +tags: +- Aspose.Words +- C# +- Font Management +title: Aspose 字體替換:偵測 Word 文件中缺失的字體 +url: /zh-hant/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose 字體替換 – 偵測 Word 文件中缺失的字體 + +有沒有想過為什麼同一個 Word 文件在不同的機器上顯示錯誤?通常是因為缺少字體,而 **Aspose font substitution** 是讓您在問題變成視覺災難之前發現這些缺口的工具。在本教學中,我們將示範如何在 **載入 Word 文件** 的同時 **偵測缺失的字體**,以及 **取得缺失字體** 的詳細資訊,以便您進行修復或替換。 + +我們將涵蓋從設定警告回呼到取得乾淨的缺失字體清單的全部內容。完成後,您將擁有一段可直接執行的 C# 程式碼,精確告訴您哪些字體未被找到,並了解這對文件完整性的影響。 + +--- + +## 前置條件 – 開始前您需要的項目 + +- **Aspose.Words for .NET** (建議使用 v23.12 或更新版本)。 +- .NET 開發環境 (Visual Studio、Rider,或 `dotnet` CLI)。 +- 一個刻意使用未安裝字體的範例 DOCX,命名為 `DocumentWithMissingFont.docx`。 +- 基本的 C# 知識——不需要高深技巧,只要能執行主控台應用程式即可。 + +如果上述任一項目您不熟悉,請先暫停並安裝 NuGet 套件: + +```bash +dotnet add package Aspose.Words +``` + +就這樣。無需額外字體,亦無外部服務。 + +--- + +## 步驟 1:載入 Word 文件(並觸發字體檢查) + +您首先要做的事就是 **載入 Word 文件**。Aspose.Words 會解析檔案,若找不到參考的字體,則會排入 *FontSubstitution* 警告。以下程式碼負責載入文件: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **為何重要:** 及早載入文件讓 Aspose 有機會掃描所有文字、樣式及嵌入物件的執行。如果系統或自訂字體資料夾中找不到字體,稍後會收到警告。 + +--- + +## 步驟 2:附加警告回呼以捕捉替換事件 + +Aspose.Words 使用回呼機制通知您缺少字體等問題。將 `IWarningCallback` 的實作指派給 `doc.WarningCallback`,即可即時攔截每個警告。 + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **專業提示:** 您可以透過組合模式包裝多個回呼(例如記錄、UI 更新),但在本教學中使用單一回呼即可保持簡潔。 + +--- + +## 步驟 3:實作字體替換警告回呼 + +現在我們定義實際執行工作的類別。回呼會收到 `WarningInfo` 物件;我們會篩選 `WarningType.FontSubstitution`,並將說明儲存起來以供之後使用。 + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **發生了什麼:** 當 Aspose 發現缺少字體時,會產生類似「Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.」的警告。我們的回呼會列印該行並儲存。 + +--- + +## 步驟 4:處理文件(可選)並收集缺失字體 + +如果您只需要 **偵測缺失字體**,載入步驟已足夠——警告會自動觸發。然而,許多開發者在執行某些操作(例如儲存、轉換)後仍需 **取得缺失字體** 資訊。以下我們強制執行一個小操作——儲存為 PDF,以確保所有警告都被發出,然後取得收集的訊息。 + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **預期的主控台輸出**(範例): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +請注意,每一行都清楚說明原始字體以及 Aspose 所選擇的備用字體。這就是 **aspose font substitution** 報告的核心。 + +--- + +## 步驟 5:進階 – 使用自訂字體來源以減少替換 + +有時您 *確實* 擁有缺失的字體,只是未放在預設系統資料夾中。Aspose.Words 允許您透過 `FontSettings` 指向自訂目錄。加入此步驟可大幅降低替換警告的數量。 + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **為何加入此步驟?** 若您在多台機器間分發文件,將所需字體打包於已知資料夾可確保所有地方的視覺外觀一致。這也使您的 **detect missing fonts** 程序更精確,因為 Aspose 會先檢查該資料夾再使用備用字體。 + +--- + +## 完整可執行範例 + +將上述所有步驟整合起來,以下是一個可直接複製貼上的主控台程式。將其儲存為 `Program.cs`,並使用 `dotnet run` 執行。 + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**您應該看到的結果:** 若來源 DOCX 參考了您未安裝的字體,主控台會列印每個替換行並附上簡潔摘要。若所有字體皆存在,則會顯示 “No missing fonts were detected.” 訊息。 + +--- + +## 常見陷阱與避免方法 + +| 問題 | 為何會發生 | 解決方式 | +|------|------------|----------| +| **未出現警告** | 文件僅使用系統字體,或您已加入包含缺失字體的自訂資料夾。 | 確認 DOCX 確實參考了不可用的字體。您可以在 Word 中將段落改為罕見字體(例如 “Papyrus”)。 | +| **重複訊息** | 相同字體在多個文字段落中使用,導致多次警告。 | 若只需要唯一集合,可使用 `Distinct()` 去除重複。 | +| **大型文件效能下降** | 每個警告皆在 UI 執行緒上處理。 | 將載入工作放在背景任務中執行,或在後處理時使用 `Parallel.ForEach`。 | +| **備用字體不正確** | Aspose 的預設備用字體可能與您的品牌不符。 | 將 `FontSettings.SubstitutionSettings.DefaultFontName` 設為首選備用字體(例如 “Calibri”)。 | + +--- + +## 延伸解決方案 – 匯出缺失字體為 JSON + +如果您正在構建需要向客戶端回報缺失字體的 Web 服務,將清單序列化相當簡單: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +現在您的 API 可以回傳乾淨的 JSON 資料,供其他系統使用。 + +--- + +## 結論 + +在本指南中,我們從頭到尾示範了 **Aspose font substitution**:載入 Word 文件、附加警告回呼、捕捉每個 *detect missing fonts* 事件,最後 **retrieve missing font** 資訊以供報告或修復。透過加入可選的自訂字體資料夾,您可以縮減替換清單,且只需少量程式碼即可將結果匯出為 JSON。 + +請記住,文件的視覺完整性取決於所使用的字體。使用此技巧後,您再也不會因意外的備用字體而感到驚訝。 +準備好邁出下一步了嗎?試著將此邏輯整合到更大的文件處理管線,或探索 Aspose.Words 的其他功能,例如字體嵌入(`doc.FontSettings.EmbeddedFonts`)。可能性無窮,您的使用者也會感謝您提供的精緻輸出。 + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hungarian/net/ai-powered-document-processing/_index.md b/words/hungarian/net/ai-powered-document-processing/_index.md index 00aeba09ae..45422815a7 100644 --- a/words/hungarian/net/ai-powered-document-processing/_index.md +++ b/words/hungarian/net/ai-powered-document-processing/_index.md @@ -38,10 +38,13 @@ Végül ne felejtsd el megnézni a miénket [Összefoglaló beállítások haszn ## Mesterséges intelligencia által vezérelt dokumentumfeldolgozási oktatóanyagok | Cím | Leírás | | --- | --- | -| [AI-modell használata](./working-with-ai-model/) | Tanulja meg, hogyan használhatja az Aspose.Words for .NET-et dokumentumok mesterséges intelligencia segítségével történő összefoglalására. Egyszerű lépések a dokumentumkezelés fejlesztéséhez. -| [A Google AI modelljével való munka](./working-with-google-ai-model/) Emeld magasabb szintre a dokumentumfeldolgozást az Aspose.Words for .NET és a Google AI segítségével, hogy könnyedén készíthess tömör összefoglalókat. | +| [AI-modell használata](./working-with-ai-model/) | Tanulja meg, hogyan használhatja az Aspose.Words for .NET-et dokumentumok mesterséges intelligencia segítségével történő összefoglalására. Egyszerű lépések a dokumentumkezelés fejlesztéséhez. | +| [A Google AI modelljével való munka](./working-with-google-ai-model/) | Emeld magasabb szintre a dokumentumfeldolgozást az Aspose.Words for .NET és a Google AI segítségével, hogy könnyedén készíthess tömör összefoglalókat. | | [Nyílt mesterséges intelligencia modellel való munka](./working-with-open-ai-model/) | Az Aspose.Words for .NET segítségével hatékony dokumentum-összefoglalókat készíthet az OpenAI hatékony modelljeivel. Merüljön el ebben az átfogó útmutatóban most. | | [Összefoglaló beállítások használata](./working-with-summarize-options/) | Tanulja meg, hogyan foglalhatja össze hatékonyan a Word-dokumentumokat az Aspose.Words for .NET segítségével lépésről lépésre bemutatott útmutatónkkal, amely bemutatja a mesterséges intelligencia modelljeinek integrálását a gyors elemzések érdekében. | +| [Hogyan használjuk az LLM-et az Aspose.Words-szal – Bekezdések átírása C#-ban](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Tanulja meg, hogyan használhatja az LLM-et az Aspose.Words-ben a bekezdések C#-os átírásához. | +| [Hogyan ellenőrzze a nyelvtant C#-ban – Teljes útmutató Word dokumentumokhoz](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Tanulja meg, hogyan használhatja az Aspose.Words for .NET-et a nyelvtani ellenőrzéshez C#-ban Word dokumentumokban. | +| [Word-dokumentum összefoglalása C#-ban – Teljes útmutató az Anthropic Claude használatával](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Ismerje meg, hogyan használhatja az Anthropic Claude modellt Word-dokumentumok C#-os összefoglalásához az Aspose.Words segítségével. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/hungarian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..eb79f43303 --- /dev/null +++ b/words/hungarian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Tanulja meg, hogyan ellenőrizze a nyelvtant egy Word-dokumentumban C# + használatával. Ez az útmutató bemutatja, hogyan töltsön be egy DOCX fájlt C#-ban, + és hogyan használja az Aspose.Words AI-t a pontos eredményekért. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: hu +og_description: Hogyan ellenőrizheted a nyelvtant egy Word dokumentumban C#‑vel? Kövesd + ezt az útmutatót, hogy C#‑ban betölts egy DOCX fájlt, és AI‑alapú nyelvtani ellenőrzéseket + hajts végre az Aspose.Words segítségével. +og_title: Hogyan ellenőrizhetjük a nyelvtant C#‑ban – Teljes lépésről‑lépésre útmutató +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Hogyan ellenőrizhetjük a nyelvtant C#-ban – Teljes útmutató Word dokumentumokhoz +url: /hu/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan ellenőrizhetünk nyelvtant C#‑ban – Teljes útmutató Word dokumentumokhoz + +Gondolt már arra, **hogyan ellenőrizhetjük a nyelvtant** egy Word dokumentumban anélkül, hogy elhagyná az IDE‑jét? Ön nem egyedül van. Sok fejlesztőnek kell ellenőriznie a felhasználók által generált jelentéseket, automatizált e‑maileket vagy akár a dokumentációt is, mielőtt kiadnák. A jó hír? Az Aspose.Words AI‑val programozottan megteheti, és a teljes folyamat szépen illeszkedik egy tipikus C# munkafolyamatba. + +Ebben az útmutatóban mindent végigvezetünk, amit tudnia kell: a DOCX fájl C#‑ban betöltésétől az AI nyelvtani ellenőrző meghívásáig és az eredmények értelmezéséig. A végére egy azonnal futtatható kódrészletet kap, amely kiírja minden hiba súlyosságát, üzenetét és a javasolt helyettesítést – manuális másolás‑beillesztés nélkül. + +## Mit fog megtanulni + +- **Hogyan ellenőrizhetünk nyelvtant** egy Word dokumentumban az Aspose.Words AI használatával. +- A pontos lépések a **DOCX fájl C#‑ban** betöltéséhez a `Document` osztállyal. +- Hogyan kezeljük a `GrammarCheckResult` objektumot, iteráljunk a problémákon, és adjunk ki hasznos diagnosztikát. +- Gyakori buktatók (például hiányzó licencek) és tippek a megoldás production‑készre tétele érdekében. + +> **Előfeltételek:** .NET 6.0+ (vagy .NET Framework 4.6+), Visual Studio 2022 (vagy bármely kedvelt IDE), valamint egy Aspose.Words for .NET licenc (az ingyenes próba verzió teszteléshez is megfelelő). Ha még nem telepítette a NuGet csomagokat, futtassa: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Most merüljünk el. + +## 1. lépés: DOCX fájl betöltése C#‑ban + +Mielőtt bármilyen nyelvtani ellenőrzés megtörténhetne, a dokumentumot be kell tölteni a memóriába. Az Aspose.Words ezt egyetlen sorra redukálja, de van néhány fontos részlet, amit érdemes megemlíteni. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Miért fontos ez:** +- `Path.Combine` használata biztosítja a platformok közötti kompatibilitást. +- A létezés ellenőrzése megakadályoz egy futásidejű összeomlást, amely egyébként elhomályosítaná a tényleges nyelvtani ellenőrzés logikáját. +- Amikor **DOCX fájlt C#‑ban tölt be**, az Aspose minden stílust, fejlécet, láblécet és még a rejtett szöveget is feldolgozza, így az AI teljes képet kap a dokumentumról. + +> **Pro tipp:** Ha stream‑ekkel kell dolgozni (például webes feltöltésből érkező fájlok), a `new Document(docPath)` hívást helyettesítheti `new Document(stream)`‑nel. + +## 2. lépés: AI modell kiválasztása nyelvtani ellenőrzéshez + +Az Aspose.Words AI több modellt támogat, a könnyű helyi megoldásoktól a felhőalapú GPT változatokig. A legtöbb esetben a **GPT‑3.5 Turbo** egy jó egyensúlyt kínál a sebesség és a pontosság között. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Miért válasszuk a GPT‑3.5 Turbo‑t?** +- Elég gyors a tucatnyi fájl percenkénti kötegelt feldolgozásához. +- Az ár (ha fizetős csomagot használ) alacsonyabb, mint a GPT‑4‑é, miközben a legtöbb gyakori hibát is észleli. +- Az API automatikusan kezeli a tokenkorlátokat, így nem kell manuálisan felosztani a hatalmas dokumentumokat. + +Ha inkább offline megoldást szeretne, cserélje le a `AiModelType.Gpt35Turbo` értéket `AiModelType.Local`‑ra (ehhez szükség van a opcionális offline modell csomagra). + +## 3. lépés: Problémák iterálása és hasznos visszajelzés megjelenítése + +A `GrammarCheckResult` egy `GrammarIssue` objektumok gyűjteményét tartalmazza. Minden probléma súlyosságot, emberi olvasásra alkalmas üzenetet és egy javasolt helyettesítést ad. Nyomtassuk ki őket szép formában. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**A mezők jelentése:** +- `Severity` – általában `Info`, `Warning` vagy `Error`. Az `Error`‑t kötelező javítani a közzététel előtt. +- `Message` – a probléma rövid leírása (például „Alany‑állítmány egyeztetés”). +- `SuggestedReplacement` – az AI által javasolt javítás; automatikusan alkalmazhatja, ha bízik a modellben, vagy bemutathatja egy emberi ellenőrzőnek. + +> **Különleges eset:** Egyes problémáknak üres a `SuggestedReplacement` értéke (például stílusjavaslatok). Ilyenkor csak jelölje meg a helyet manuális felülvizsgálatra. + +## Teljes működő példa + +Mindent összevonva, itt egy önálló konzolalkalmazás, amelyet beilleszthet egy új .NET projektbe. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Várható kimenet (példa):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Ha a programot egy tiszta dokumentumon futtatja, akkor a „✅ No grammar issues detected.” sor helyett egy üzenetet fog látni. + +## Gyakori buktatók kezelése + +| Probléma | Miért fordul elő | Gyors megoldás | +|----------|------------------|----------------| +| **LicenseException** | Az Aspose könyvtárakhoz érvényes licenc szükséges a termelési környezetben. | Helyezze be a `License license = new License(); license.SetLicense("Aspose.Words.lic");` kódot a `Main` elejére. | +| **Network timeout** | Az AI modell hívás eléri a felhőt és meghaladja az alapértelmezett 100 s időkorlátot. | Növelje az időkorlátot a `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` beállítással a `CheckGrammar` hívása előtt. | +| **Large documents (> 10 MB)** | Néhány felhőmodell levágja a bemenetet. | Ossza fel a dokumentumot szakaszokra a `document.Sections` használatával, futtassa le az ellenőrzést szakaszonként, majd aggregálja az eredményeket. | +| **Missing suggestions** | A modell nem tudott helyettesítést generálni (például kétértelmű megfogalmazás). | Naplózza a problémát manuális felülvizsgálatra; ne alkalmazzon automatikusan üres javaslatokat. | + +## A megoldás bővítése + +- **Automatikus javítás:** Iteráljon a `grammarResult.Issues` elemein, és cserélje le a szöveget a `document.Range.Replace` használatával. Először mindenképpen készítsen biztonsági másolatot az eredeti fájlról. +- **Kötegelt feldolgozás:** Csomagolja az egész folyamatot egy `foreach`‑be, amely egy DOCX fájlok könyvtárán iterál. Tárolja minden jelentést JSON fájlként későbbi elemzéshez. +- **Integráció ASP.NET‑tel:** Hozzon létre egy végpontot, amely elfogad egy feltöltött DOCX‑et, lefuttatja az ellenőrzést, és JSON payload‑ként visszaadja a problémákat. + +## Kép illusztráció + +hogyan ellenőrizhetünk nyelvtant folyamatábra + +*A fenti diagram a háromlépéses folyamatot ábrázolja: DOCX betöltése → AI nyelvtani ellenőrzés futtatása → problémák kiírása.* + +## Következtetés + +Áttekintettük, **hogyan ellenőrizhetünk nyelvtant** egy Word dokumentumban C#‑ban, bemutattuk a pontos kódot a **DOCX fájl C#‑ban** betöltéséhez, és megmutattuk, hogyan értelmezze az AI által generált visszajelzést. Az Aspose.Words AI egy erőteljes, felhőalapú nyelvtani motor, amely zökkenőmentesen integrálható bármely .NET alkalmazásba. + +Következő lépések? Próbálja meg automatizálni a javítás‑alkalmazás ciklust, kísérletezzen az újabb `AiModelType.Gpt4` modellel a még pontosabb javaslatokért, vagy kombinálja ezt egy helyesírás-ellenőrző könyvtárral egy teljes körű lektorálási folyamathoz. A lehetőségek gyakorlatilag végtelenek, és most már egy szilárd alapja van a további fejlesztéshez. + +Van kérdése vagy nehéz széljegyzetbe ütközött? Hagyjon megjegyzést alább, és jó kódolást! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hungarian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/hungarian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..e9286c4cc0 --- /dev/null +++ b/words/hungarian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-05-04 +description: Hogyan használjuk az LLM-et dokumentumok szerkesztésére az Aspose-szal + – tanulja meg a bekezdés szövegének cseréjét, a helyi LLM-hez való csatlakozást, + és a szöveg AI-val történő újraírását. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: hu +og_description: Hogyan használjuk az LLM-et dokumentumok szerkesztésére az Aspose-szal. + Ez az útmutató megmutatja, hogyan csatlakozzunk egy helyi LLM-hez, cseréljünk be + bekezdés szöveget, és írjuk át a szöveget AI segítségével. +og_title: Hogyan használjuk az LLM-et az Aspose.Words-szal – Bekezdések újraírása + C#-ban +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Hogyan használjunk LLM-et az Aspose.Words-szal – Bekezdések átírása C#-ban +url: /hu/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan használjunk LLM-et az Aspose.Words-szal – Bekezdések átírása C#-ban + +Gondolkodtál már azon, **hogyan használjuk az LLM-et** egy Word dokumentum feljavítására anélkül, hogy manuálisan megnyitnánk? Nem vagy egyedül. Sok fejlesztő akad el, amikor *bekezdés szövegét* kell programozottan cserélni, de nincs tiszta AI‑vezérelt munkafolyamat. + +Ebben az útmutatóban összekapcsolunk egy helyi nagy nyelvi modellt, betáplálunk egy részletet egy `.docx` fájlból, megkérjük, hogy **átírja a szöveget AI segítségével**, majd végül elmentjük a frissített dokumentumot – mindezt az Aspose.Words segítségével. A végére egy kész, futtatható C# konzolalkalmazást kapsz, amely bemutatja az egész folyamatot. + +> **Mit kapsz:** egy teljes, futtatható példát, minden lépés magyarázatát, tippeket a szélhelyzetekhez, és ötleteket a megoldás kibővítéséhez. + +## Amire szükséged lesz + +- **.NET 6+** (vagy .NET Framework 4.7.2 – a kód mindkettőn működik) +- **Aspose.Words for .NET** (NuGet csomag `Aspose.Words`) +- Egy **local LLM server**, amely egy egyszerű HTTP `/generate` végpontot biztosít (pl. Ollama, LMStudio vagy egy egyedi Flask szolgáltatás) +- Alapvető ismeretek C#-ban és HTTP kliens kódban + +Nem szükséges további SDK, minden más a közösen írt kódban található. + +## 1. lépés: Hogyan használjuk az LLM-et a bekezdés szövegének cseréjére + +Az első dolog, amit meg kell tennünk, hogy azonosítsuk a módosítani kívánt bekezdést. Az Aspose.Words ezt könnyedén megoldja a gazdag objektummodelljének köszönhetően. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Miért fontos ez:** +A megfelelő csomópont kiválasztása megakadályozza, hogy véletlenül felülírjuk a címsorokat vagy táblázatokat. A **replace paragraph text** megközelítés használatával a dokumentum szerkezetét érintetlenül hagyjuk, miközben csak a számunkra fontos tartalmat módosítjuk. + +> **Pro tipp:** Ha a dokumentum változó hosszúságú szakaszokat tartalmaz, használd a `document.GetChildNodes(NodeType.Paragraph, true)` és LINQ-et egy bekezdés megtalálásához a szövege vagy a stílusa alapján. + +## 2. lépés: Kapcsolódás egy helyi LLM végponthoz + +Miután megvan a szöveg, el kell küldenünk az LLM-nek. A példa egy egyszerű wrapper osztályt, a `LocalLargeLanguageModel`-t használja, amely elrejti a HTTP részleteket. Nyugodtan cseréld le `HttpClient` hívásokra, ha úgy jobban kedveled. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Miért csatlakozunk így:** +A **connect to local llm** beállítás csökkenti a késleltetést, a adatokat helyben tartja, és elkerüli az API költségeket. A wrapper továbbá tisztábbá teszi a későbbi kódot, lehetővé téve, hogy a **rewrite text using ai** logikára koncentráljunk. + +## 3. lépés: Szöveg átírása AI-val az Aspose.Words segítségével + +A bekezdés szövegével és az LLM-mel a kezedben, egy olyan promptot állítunk össze, amely pontosan megmondja a modellnek, mit akarunk – átírni formális hangnemben. A promptot módosíthatod más stílusokhoz (barátságos, technikai, stb.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Miért működik ez:** +Az LLM-ek prompt‑alapúak; egyértelmű utasítások („Rewrite … in a formal tone”) konzisztens eredményeket adnak. A **rewrite text using ai** lépés a tutorial szíve – bemutatja, hogyan lehet az AI-t közvetlenül a dokumentum munkafolyamatokba ágyazni. + +## 4. lépés: Dokumentum szerkesztése és a változások mentése + +Most lecseréljük az eredeti run-okat az új tartalommal. Az Aspose.Words a szöveget `Run` objektumokban tárolja, ezért először azok törlése elkerüli a maradék formázási maradványokat. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Szélhelyzet megjegyzés:** +Ha az eredeti bekezdés vegyes formázást (félkövér, dőlt) tartalmazott, érdemes megőrizni a stílusokat. Ebben az esetben hozz létre egy új `Run`-t, másold át az eredeti `Font` beállításokat, majd állítsd be a `Text`-et `revisedText`-re. + +## Teljes működő példa + +Az alábbiakban az egész program látható, amelyet beilleszthetsz egy konzolprojekthez. Ne felejtsd el először telepíteni az Aspose.Words NuGet csomagot (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Várható kimenet + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Nyisd meg a `output.docx`-t – a harmadik bekezdés most a feljavított változatot tartalmazza. + +## Gyakori kérdések és buktatók + +| Kérdés | Válasz | +|----------|--------| +| **Mi van, ha az LLM JSON-t ad vissza extra mezőkkel?** | Állítsd be a `GenerateText`-et, hogy a megfelelő tulajdonságot deszerializálja, vagy a választ manuálisan dolgozd fel. | +| **Feldolgozhatok több bekezdést egyszerre?** | Igen – iterálj a `document.FirstSection.Body.Paragraphs`-en, és alkalmazd ugyanazt a prompt logikát, esetleg a prompthoz hozzáadva a bekezdés indexét a kontextusért. | +| **Az LLM szerverem hitelesítést használ?** | Adj hozzá egy fejléct a `HttpClient`-hez a POST előtt: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **A formázás elveszik a csere után.** | Őrizd meg az eredeti `Run.Font` beállításokat: hozz létre egy új `Run`-t, másold a `originalRun.Font.Clone()`-t, majd állítsd be a `Text`-et. | +| **Az LLM néha üres stringet ad vissza.** | Implementálj visszaesést – ha `revisedText.Trim().Length == 0`, tartsd meg az eredeti szöveget vagy próbáld újra egy egyszerűbb prompttal. | + +## A megoldás bővítése + +Miután elsajátítottad a **how to use llm**-et egyetlen bekezdéshez, fontold meg a következő lépéseket: + +- **Kötegelt feldolgozás:** Iterálj minden bekezdésen, és írd át egy kiválasztott stílusban (pl. „rövidítsd le a teljes szöveget”). +- **Stílus‑tudatos átírás:** Add meg az eredeti bekezdés stílusnevét a promptban, hogy az LLM tiszteletben tartsa a címsorokat és a törzsszöveget. +- **Integráció CI pipeline-nal:** Automatizáld a dokumentum feljavítását a dokumentáció építési folyamatának részeként. +- **Alternatív promptok:** Próbáld ki a „summarize this paragraph” vagy a „translate this paragraph to Spanish” promptokat, hogy felfedezd a **rewrite text using ai** teljes erejét. + +## Következtetés + +Áttekintettük a **how to use llm** teljes folyamatát az Aspose.Words-szal: dokumentum betöltése, **connect to local llm**, bekezdés kinyerése, **rewrite text using ai**, **replace paragraph text**, majd a végeredmény mentése. A kód önálló, azonnal működik, és bemutat egy gyakorlati módot az AI és a hagyományos dokumentumautomatizálás összekapcsolására. + +Give it a spin, tweak the prompts, and let + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hungarian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/hungarian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..16a48448e9 --- /dev/null +++ b/words/hungarian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-05-04 +description: Gyorsan összefoglalja a Word-dokumentumot, és a Google-lel fordítja a + szöveget. Tanulja meg, hogyan használja az Anthropic Claude-ot, készítsen összefoglalót + a jelentésből, és fordítsa le a szöveget a Google-lel egyetlen C# oktatóanyagon + belül. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: hu +og_description: Összefoglalja a Word-dokumentumot azonnal, és a Google segítségével + lefordítja a szöveget. Ez az útmutató bemutatja, hogyan használhatja az Anthropic + Claude-ot és az Aspose.Words-ot egy jelentés összefoglalásának elkészítéséhez. +og_title: Word-dokumentum összefoglalása C#‑ban – Lépésről lépésre az Anthropic Claude‑val. +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Word-dokumentum összefoglalása C#‑ban – Teljes útmutató az Anthropic Claude + használatához +url: /hu/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word dokumentum összefoglalása C#‑ban – Teljes útmutató az Anthropic Claude használatával + +Valaha szükséged volt **summarize word document**-ra, de elakadtál az API‑k és a hosszú kódok között? Nem vagy egyedül. Sok projektben—éves jelentések, jogi értekezések vagy kutatási dolgozatok—egy tömör áttekintés kinyerése mindennapi problémát jelent. Szerencsére az Aspose.Words és az Anthropic Claude kombinációja ezt egyszerűvé teszi, ráadásul egy gyors Google fordítást is belevághatsz. + +Ebben az útmutatóban végigvezetünk minden szükséges lépésen: egy nagy .docx betöltése, a Claude V2 modell meghívása az összefoglaló generálásához, egy kifejezés fordítása a Google‑lel, és a leggyakoribb buktatók kezelése. A végére képes leszel **create summary from report** néhány C#‑sorral. + +## Előfeltételek + +- .NET 6+ (vagy .NET Core 3.1) telepítve +- Aspose.Words for .NET licenc (vagy ingyenes próba) +- Hozzáférés az Anthropic Claude V2 API‑hoz (API kulcs szükséges) +- Internetkapcsolat a Google Translator használatához +- Visual Studio 2022 vagy a kedvenc C# IDE‑d + +Nem szükséges további NuGet csomag a `Aspose.Words` és `Aspose.Words.AI` mellett; a fordító osztály ugyanazzal a könyvtárral érkezik. + +## 1. lépés – A forrás Word dokumentum betöltése + +Az első dolog, amit meg kell tennünk, hogy a .docx fájlt memóriába töltjük. Az Aspose.Words ezt egyszerűvé teszi, és robusztus elemzője miatt komplex elrendezésekkel, táblázatokkal és beágyazott képekkel is helytáll. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Miért fontos:** A dokumentum korai betöltése lehetővé teszi a tulajdonságok (szerző, szavak száma) ellenőrzését, és eldöntheted, hogy valóban szükség van‑e összefoglalóra. A > 10 MB‑os nagy fájlok memóriát igényelnek, ezért érdemes `LoadOptions`‑t használni `LoadFormat.Docx`‑szel, ha teljesítményproblémákba ütközöl. + +## 2. lépés – A dokumentum összefoglalása az Anthropic Claude‑dal + +Most jön a szórakoztató rész: átadjuk a dokumentumot a Claude V2‑nek. A `Summarizer` osztály elrejti a HTTP hívást, a tokenkezelést és az újrapróbálkozásokat. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Hogyan működik:** +> 1. **Chunking** – Az Aspose automatikusan a dokumentumot kezelhető darabokra (≈ 2 KB darabonként) bontja, hogy megfeleljen Claude tokenkorlátainak. +> 2. **Prompt engineering** – A könyvtár egy olyan promptot küld, mint például „Provide a concise executive summary of the following text:” majd a darabot. +> 3. **Aggregation** – Claude részleges összefoglalókat ad vissza, amelyeket a végső `summaryText`‑be fűzünk össze. + +### Szélsőséges esetek és tippek + +- **Nagyon nagy jelentések** (> 100 oldal) meghaladhatják Claude kontextusablakát. Ha levágott kimenetet látsz, állítsd be a `SummarizerOptions.MaxChunkSize`‑t kisebb értékre. +- **Nem‑angol forrás** – Claude legjobban angolul működik; más nyelvek esetén először fordíts (lásd 4. lépés), majd összefoglal. +- **Kéréskorlátok** – Az Anthropic percenkénti limitet szab. Ha `429` választ kapsz, csomagold a hívást újrapróbálkozási ciklusba exponenciális visszavonással. + +## 3. lépés – Az összefoglaló kimenetének ellenőrzése + +Mielőtt továbblépnénk, jó gyakorlat ellenőrizni, hogy az összefoglaló nem üres, és megfelel a hosszra vonatkozó elvárásoknak (pl. az eredeti szószám 5‑10 %-a). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Ha az arány túl alacsony (< 2 %), érdemes a `SummarizerOptions.SummaryLength` tulajdonságot módosítani, hogy hosszabb kimenetet kérj. + +## 4. lépés – Szöveg fordítása a Google‑lel + +Most, hogy van egy tiszta angol összefoglalónk, adjunk hozzá egy gyors fordítást. A `Translator` osztály a Google nyilvános fordítási végpontját használja (rövid kifejezésekhez nincs szükség API‑kulcsra, de éles környezetben a fizetős Cloud Translation API‑ra érdemes áttérni). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Miért a Google?** Gyors, széles körben támogatott, és a ingyenes végpont rövid karakterláncokat hitelesítés nélkül kezel. Tömeges fordítások esetén csoportosítsd a hívásokat, és tartsd be a Google használati korlátait. + +### A teljes összefoglaló fordítása (opcionális) + +Ha az egész összefoglalót spanyolra (vagy bármely más nyelvre) szeretnéd, egyszerűen add át a `summaryText`‑et a `Translator.Translate`‑nek. Vedd figyelembe az 5 KB‑os kérésméret‑korlátot; előfordulhat, hogy a szöveget kisebb darabokra kell bontani. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## 5. lépés – Az összefoglaló mentése vissza Word fájlba (bónusz) + +Gyakran a végfelhasználó letölthető dokumentumot vár a konzolkimenet helyett. Hozzunk létre egy új `.docx`‑et, amely tartalmazza az angol és a spanyol változatot is. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Gyakorlati tipp + +Amikor az összefoglalót egy új Word fájlba ágyazod, tartsd minimálisra az eredeti formázást (használd a `Normal` stílust). A forrásból származó komplex stílusok váratlan elrendezés‑eltolódásokat okozhatnak. + +## Teljes működő példa + +Az alább látható **komplett, másolás‑beillesztés‑kész** program, amely mindent összekapcsol. Egyetlen `dotnet run` paranccsal lefordítható, miután hozzáadtad az Aspose csomagokat. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Várható konzolkimenet** (rövidítve a tömörség kedvéért): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Gyakran feltett kérdések + +| Kérdés | Válasz | +|----------|--------| +| *Használhatok más AI modellt?* | Igen. Cseréld le a `SummarizerModel.AnthropicClaudeV2`‑t `SummarizerModel.OpenAIGPT4`‑re (OpenAI kulcs szükséges) vagy bármely, az enum‑ban felsorolt szolgáltatóra. | +| *Mi van, ha a dokumentum védett szekciókat tartalmaz?* | Az Aspose `ProtectedDocumentException`‑t dob. Először oldd fel a `LoadOptions.Password`‑vel, vagy kérj egy védetlen másolatot. | +| *Szükségem van fizetős Aspose licencre a termeléshez?* | Az ingyenes próba legfeljebb 20 oldalra működik. Nagyobb jelentések esetén a licenc eltávolítja az oldalkorlátot és teljesítmény‑optimalizációkat biztosít. | +| *Megbízható a Google fordító nagyobb blokkoknál?* | Rövid karakterláncoknál rendben van. Tömeges fordítás esetén válts a Cloud Translation API‑ra, hogy elkerüld a kérésméret‑korlátokat és jobb nyelvfelismerést kapj. | + +## Következtetés + +Épp most **summarize word document**‑ot valósítottunk meg az Aspose.Words és az Anthropic Claude V2 modell segítségével, majd **translate text with Google**‑t használva + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hungarian/net/basic-conversions/_index.md b/words/hungarian/net/basic-conversions/_index.md index 869c1fbeee..68970f3856 100644 --- a/words/hungarian/net/basic-conversions/_index.md +++ b/words/hungarian/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Az Alapvető konverziók című útmutató végigvezeti Önt az Aspose.Words for | [Word konvertálása PDF-be C#-ban az Aspose.Words – Útmutató](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Tanulja meg, hogyan konvertálhat Word dokumentumokat PDF-be C#-ban az Aspose.Words használatával. | | [Word mentése PDF-be az Aspose.Words segítségével – Teljes C# útmutató](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Tanulja meg, hogyan menthet Word dokumentumokat PDF-be C#-ban az Aspose.Words használatával, részletes lépésekkel. | | [Docx mentése PDF-be az Aspose.Words segítségével – Teljes C# útmutató](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Tanulja meg, hogyan menthet docx fájlokat PDF-be C#-ban az Aspose.Words használatával, részletes lépésekkel. | +| [Hozzon létre akadálymentes PDF-et DOCX-ből C#-ban – Hogyan konvertáljon Word-et PDF-be](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Tanulja meg, hogyan hozhat létre hozzáférhető PDF-et DOCX fájlból C#-ban az Aspose.Words for .NET segítségével. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/hungarian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..0d391b8b52 --- /dev/null +++ b/words/hungarian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,213 @@ +--- +category: general +date: 2026-05-04 +description: Készítsen hozzáférhető PDF-et egy DOCX fájlból C#-ban. Tanulja meg, hogyan + konvertálja a Word-et PDF-be, hogyan mentse a Word-et PDF-ként, és hogyan exportálja + a docx-et PDF-be a hozzáférhetőségi előírásoknak megfelelően. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: hu +og_description: Készítsen hozzáférhető PDF-et DOCX fájlból C#-ban. Kövesse ezt a lépésről‑lépésre + útmutatót a Word PDF‑re konvertálásához, a Word PDF‑ként mentéséhez, és a docx teljesen + hozzáférhető PDF‑be exportálásához. +og_title: Hozzon létre akadálymentes PDF-et DOCX-ből C#-ban – Gyors útmutató +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Akadálymentes PDF létrehozása DOCX‑ből C#‑ban – Hogyan konvertáljuk a Word‑et + PDF‑be +url: /hu/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hozzon létre akadálymentes PDF-et DOCX-ből C#-ban – Hogyan konvertáljon Word-et PDF-be + +Valaha is szüksége volt **akadálymentes PDF** létrehozására egy Word-dokumentumból, de nem tudta, melyik könyvtárban bízhat meg? Nem egyedül van – sok fejlesztő ugyanazzal a problémával szembesül, amikor PDF/UA szabványoknak kell megfelelniük az akadálymentesség érdekében. A jó hír, hogy az Aspose.Words segítségével néhány kódsorral egy `.docx`-et konvertálhat megfelelõ PDF‑be, és egy olyan fájlt kap, amelyet a képernyőolvasók ténylegesen olvasni tudnak. + +Ebben az útmutatóban végigvezetjük mindazt, amit tudnia kell a **Word PDF‑be konvertálásához**, **Word PDF‑ként mentéséhez**, és akár a **docx PDF‑be exportálásához** PDF/UA‑1 (vagy PDF/UA‑2) megfelelőséggel. A végére egy azonnal használható C# kódrészletet kap, megérti, miért fontos minden beállítás, és felkészül a gyakori edge case‑ek kezelésére, például hiányzó betűtípusok vagy egyedi oldalbeállítások esetén. + +## Előfeltételek + +- .NET 6.0 vagy újabb (a kód .NET Framework 4.6+ verzióval is működik) +- Aspose.Words for .NET licenc (vagy egy ingyenes értékelő kulcs) +- Alapvető C# és Visual Studio ismeretek (vagy bármelyik kedvenc IDE) +- Egy DOCX fájl, amelyet akadálymentessé szeretne tenni (ezt `input.docx`‑nek hívjuk) + +> **Pro tipp:** Ha az ingyenes próbaverziót használja, ne feledje, hogy a generált PDF egy kis „Evaluation” vízjelet fog tartalmazni. + +## 1. lépés: Aspose.Words NuGet csomag telepítése + +Mielőtt bármilyen C# kódot írnánk, az Aspose.Words könyvtárat hozzá kell adni a projekthez. + +```bash +dotnet add package Aspose.Words +``` + +A parancs futtatása visszaállítja az `Aspose.Words.dll`‑t, és elérhetővé teszi a névtereket. Ez a lépés elengedhetetlen, mivel a `PdfSaveOptions` osztály ebben a csomagban található. + +## 2. lépés: A forrás DOCX fájl betöltése + +Az első logikus lépés a Word-dokumentum betöltése, amelyet át szeretne alakítani. Gondolja úgy, mint egy könyv kinyitását, mielőtt elkezdené szerkeszteni az oldalait. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Miért fontos:** A dokumentum betöltése egy memóriában létező reprezentációt hoz létre, amely tartalmazza az összes stílust, képet és metaadatot. Ha a fájl sérült, a `Document` kivételt dob – ezért érdemes try/catch blokkba helyezni a termelési kódban. + +## 3. lépés: PDF mentési beállítások konfigurálása az akadálymentességhez + +Az Aspose.Words lehetővé teszi a PDF megfelelőségi szint megadását. A PDF/UA‑1 az eredeti akadálymentességi szabvány, míg a PDF/UA‑2 néhány újabb címkét ad hozzá. Válassza ki azt, amelyik megfelel az ügyfele követelményeinek. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Mit jelent a „Compliance”:** A `PdfCompliance.PdfUax1` beállítása azt mondja az Aspose.Words‑nek, hogy ágyazzon be megfelelő címkéket, logikus olvasási sorrendet és alternatív szöveget a képekhez – pontosan azt, amit a képernyőolvasó szoftver keres. + +## 4. lépés: A dokumentum mentése akadálymentes PDF‑ként + +Most már a nehéz munka véget ért; egyszerűen azt mondjuk az Aspose.Words‑nek, hogy a most definiált beállításokkal írja ki a PDF fájlt. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +A sor futtatása után megtalálja a `output.pdf`‑t a megadott mappában. Nyissa meg az Adobe Acrobat Readerben, és ellenőrizze a **File → Properties → Description → PDF/A and PDF/UA** részt a megfelelőség ellenőrzéséhez. + +## 5. lépés: Az akadálymentesség ellenőrzése (opcionális, de ajánlott) + +Bár a kód garantálja a címkézett PDF kimenetet, egy gyors manuális ellenőrzés segíthet felfedezni az esetleges egyedi tartalmakat, amelyek további figyelmet igényelhetnek. + +1. Nyissa meg a `output.pdf`‑t az Adobe Acrobat Pro‑ban. +2. Navigáljon a **Tools → Accessibility → Full Check** menüpontra. +3. Futtassa az ellenőrzést, és tekintse át a figyelmeztetéseket (pl. hiányzó alternatív szöveg egyedi képekhez). + +Ha a jelentés nem mutat hibákat, akkor sikeresen **létrehozott akadálymentes PDF**‑et, amely megfelel a PDF/UA‑1 szabványnak. + +## Gyakori variációk és edge case‑ek + +### Több DOCX fájl konvertálása ciklusban + +Ha több dokumentumot kell feldolgozni, helyezze a betöltés‑mentés logikát egy `foreach` ciklusba. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Átváltás PDF/UA‑2-re + +Csak módosítsa a `Compliance` enum-ot: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Egyedi betűtípusok kezelése + +Ha a DOCX olyan betűtípusokat használ, amelyek nincsenek telepítve a szerveren, ágyazza be őket: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Az ágyazás garantálja, hogy a PDF minden gépen ugyanúgy nézzen ki – ez kulcsfontosságú, amikor **docx‑t pdf‑be exportál** külső érintettek számára. + +## Teljes működő példa + +Az alábbiakban a teljes, azonnal futtatható program látható, amely összerakja az összes elemet. Másolja be egy konzolos alkalmazásba, állítsa be az elérési útvonalakat, és nyomja meg az **F5**‑öt. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Várható eredmény:** Egy `output.pdf` nevű fájl, amely bármely PDF‑megtekintőben megnyílik, a megfelelő akadálymentességi címkéket tartalmazza, és megosztható azokkal a felhasználókkal, akik segédeszközökre támaszkodnak. + +![Akadálymentes PDF létrehozása példa](/images/create-accessible-pdf.png "Képernyőkép, amely PDF/UA‑1 kompatibilis dokumentumot mutat") + +*Kép alt szöveg:* *akadálymentes pdf példa – képernyőkép egy PDF/UA‑1 kompatibilis dokumentumról.* + +## Gyakran ismételt kérdések + +- **Működik ez .NET Core‑ral?** + Természetesen. Az Aspose.Words platformfüggetlen, így ugyanaz a kód fut Windows, Linux és macOS rendszereken. + +- **Mi van, ha a DOCX makrókat tartalmaz?** + A makrók a konvertálás során figyelmen kívül maradnak; csak a látható tartalom kerül a PDF‑be. + +- **Hozzáadhatok egy egyedi PDF metaadat címet?** + Igen – a mentés előtt állítsa be a `pdfSaveOptions.Metadata.Title = "Your Custom Title";` értéket. + +- **A PDF/UA‑2 széles körben támogatott?** + A legtöbb modern PDF‑olvasó érti a PDF/UA‑2‑t, de ha régebbi eszközökre céloz, maradjon a PDF/UA‑1‑nél. + +## Összegzés + +Most bemutattuk, hogyan **hozzon létre akadálymentes PDF‑et** egy DOCX fájlból az Aspose.Words segítségével, lefedve mindent a NuGet csomag telepítésétől a PDF/UA megfelelőség ellenőrzéséig. E lépések követésével megbízhatóan **konvertálhat Word‑et PDF‑be**, **menthet Word‑et PDF‑ként**, és **exportálhat docx‑t PDF‑be**, miközben megfelel az akadálymentességi szabványoknak – ez egy elengedhetetlen készség minden fejlesztő számára, aki vállalati dokumentumcsővezetékeken dolgozik. + +Készen áll a következő kihívásra? Próbáljon meg egy egyedi fejlécet/láblécet hozzáadni, PDF/A‑2b címkét beágyazni, vagy automatizálni a folyamatot egy ASP.NET Core web API‑ban. A lehetőségek végtelenek, és az itt felépített alap lehetővé teszi, hogy magabiztosan foglalkozzon velük. + +Boldog kódolást, és legyenek a PDF-jei mindig olvashatóak! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hungarian/net/programming-with-markdownsaveoptions/_index.md b/words/hungarian/net/programming-with-markdownsaveoptions/_index.md index 27001bd549..74239bf31e 100644 --- a/words/hungarian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/hungarian/net/programming-with-markdownsaveoptions/_index.md @@ -33,6 +33,7 @@ Ismerje meg, hogyan konvertálhat DOCX fájlokat Markdownba lépésről‑lépé ### [Hogyan exportáljunk LaTeX-et: DOCX konvertálása Markdownba és TXT-be](./how-to-export-latex-convert-docx-to-markdown-txt/) ### [DOCX mentése Markdownba – Teljes C# útmutató képek kinyerésével](./save-docx-as-markdown-full-c-guide-with-image-extraction/) ### [Word képek mentése – Word konvertálása Markdownba Aspose-szal](./save-word-images-convert-word-to-markdown-with-aspose/) +### [Képek mentése – DOCX konvertálása Markdownba Aspose-szal](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) ### [DOCX mentése Markdownba – Teljes C# útmutató Aspose.Words használatával](./save-docx-as-markdown-with-aspose-words-full-c-guide/) ### [Word konvertálása Markdownba C#‑ban – Teljes útmutató képek kinyerésével](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) ### [Hogyan mentse el a Markdown‑t a DOCX‑ből – Lépésről‑lépésre útmutató](./how-to-save-markdown-from-docx-step-by-step-guide/) diff --git a/words/hungarian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/hungarian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..52c32b2900 --- /dev/null +++ b/words/hungarian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,245 @@ +--- +category: general +date: 2026-05-04 +description: Ismerje meg, hogyan menthet képeket a DOCX Markdown formátumba konvertálása + során az Aspose.Words használatával. Ez az útmutató azt is bemutatja, hogyan lehet + képeket kinyerni a Wordből, és a Word dokumentumot Markdown formátumba menteni. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: hu +og_description: Hogyan menthetünk képeket a DOCX Markdown formátumba történő konvertálás + során az Aspose.Words használatával. Lépésről lépésre útmutató teljes C# kóddal. +og_title: Hogyan mentse el a képeket – DOCX konvertálása Markdown formátumba az Aspose.Words + segítségével +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Hogyan mentsünk képeket – DOCX konvertálása Markdownra az Aspose.Words segítségével +url: /hu/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan menthetünk képeket – DOCX konvertálása Markdownra az Aspose.Words segítségével + +Gondolkodtál már azon, **hogyan menthetők a képek**, amikor egy Word fájlt kell Markdownra konvertálni? Nem vagy egyedül. Sok fejlesztő akad el, amikor a konverzió a képeket törött hivatkozások kuszaságába helyezi, vagy még rosszabb, teljesen elveszíti őket. A jó hír, hogy az Aspose.Words finomhangolt vezérlést biztosít, így kinyerheted a képeket a Wordből, eldöntheted, hová kerüljenek, és még mindig tiszta Markdown kimenetet kapsz. + +Ebben az útmutatóban végigvezetünk egy teljes, azonnal futtatható C# példán, amely megmutatja, **hogyan menthetők a képek** egy dedikált mappába a `.docx` `.md`-re konvertálása közben. Útközben érintjük a **convert docx to markdown**, **extract images from word**, és a tágabb kérdést, hogy **how to convert docx** olyan módon, amely lehetővé teszi a **save word as markdown** végrehajtását anélkül, hogy bármilyen eszközt elveszítenénk. + +## Előfeltételek + +- .NET 6.0 vagy újabb (az API ugyanúgy működik a .NET Framework 4.7+ esetén) +- Aktív Aspose.Words licenc vagy ingyenes próba (az ingyenes verzió vízjelet ad a kimenethez, de a kód ugyanúgy működik) +- Olyan Word dokumentum, amely már tartalmaz képeket (pl. `DocWithImages.docx`) +- Visual Studio 2022 vagy bármely szerkesztő, amely képes C# projektek építésére + +> **Pro tipp:** Ha próbaverziót használsz, továbbra is tesztelheted a képek mentésének logikáját; csak ne feledd, hogy a végső PDF/MD a próbavízjelet tartalmazni fog. + +## A megoldás áttekintése + +Általános szinten a folyamat a következőképpen néz ki: + +1. Töltsd be a forrás `.docx` fájlt a `Document` osztállyal. +2. Hozz létre egy `MarkdownSaveOptions` objektumot, és csatlakoztasd az `IResourceSavingCallback`-et. +3. A visszahívásban határozd meg a mappát és a fájlnevet minden egyes képhez. +4. Mentsd a dokumentumot Markdownként; a visszahívás minden képet leír a lemezre. + +Ez a **hogyan menthetők a képek** magja a konverzió során. Ugyanez a minta más erőforrás típusokra (betűkészletek, CSS stb.) is működik, ha szükséged lenne rájuk. + +## 1. lépés – A képeket tartalmazó DOCX betöltése + +Először is szükségünk van egy `Document` példányra, amely a konvertálni kívánt Word fájlra mutat. Itt nincs semmi bonyolult; egyszerű konstruktorhívás. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Miért fontos:** A dokumentum betöltése az egyetlen hely, ahol az Aspose a Word XML-t elemzi, így minden hiányzó betűtípus vagy sérült rész most kivételt dob – még mielőtt elkezdenénk a képek mentését. + +## 2. lépés – MarkdownSaveOptions beállítása képm mentő visszahívással + +A `MarkdownSaveOptions` osztály lehetővé teszi, hogy a mentési folyamatba beavatkozz a `ResourceSavingCallback` segítségével. Ez a visszahívás egy `ResourceSavingArgs` objektumot kap minden külső erőforráshoz (képek, CSS stb.), amelyet az Aspose írni kell. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### A visszahívás megvalósítása + +Alább látható a teljes `ImageSavingCallback` megvalósítás. Létrehoz egy `Images` almappát a Markdown fájl mellett, minden képet sorozatos névvel lát el (`img_0.png`, `img_1.jpg`, …), és opcionálisan lehetővé teszi a kép streamelését más helyre (pl. felhő bucketbe). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Hogyan segít ez:** Az `args.FileName` testreszabásával pontosan irányíthatod, **hogyan menthetők a képek** – legyen szó egy lapos mappáról, dátum alapú hierarchiáról vagy akár adatbázis BLOB-ról. A visszahívás minden képnél lefut, így később soha nem kell utólag feldolgozni a Markdown fájlt. + +## 3. lépés – Dokumentum mentése Markdownként + +Most, hogy a beállítások és a visszahívás készen áll, a tényleges konverzió egyetlen sorban megoldható. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Amikor a sor befejeződik, a következőket kapod: + +- `Doc.md` – a Word tartalmad Markdown reprezentációja. +- `Images\img_0.png`, `Images\img_1.jpg`, … – minden kép, amely az eredeti DOCX‑ből ki lett nyerve. + +## Teljes, azonnal futtatható példa + +Összeállítva mindent, itt egy önálló konzolalkalmazás, amelyet be tudsz másolni egy új C# projektbe. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Várt eredmény + +A program futtatása után: + +- Nyisd meg a `C:\Docs\Doc.md` fájlt bármely szövegszerkesztőben. Látni fogsz Markdown kép hivatkozásokat, például `![](Images/img_0.png)`. +- Az `Images` mappa tartalmazni fogja a kinyert képeket, sorozatos névvel. +- A Markdown fájl helyesen jelenik meg minden olyan megjelenítőben, amely támogatja a helyi képeket (VS Code előnézet, GitHub stb.). + +## Gyakran Ismételt Kérdések (GYIK) + +### Működik ez más képformátumokkal (SVG, TIFF)? + +Igen. A `Path.GetExtension(args.FileName)` megőrzi az eredeti kiterjesztést, így az SVG, TIFF, BMP és még az EMF is változatlanul mentésre kerül. Az egyetlen megjegyzés, hogy egyes Markdown megjelenítők nem támogatják az SVG inline megjelenítését; ebben az esetben érdemes az SVG‑t előre PNG‑re konvertálni. + +### Mit tehetek, ha a képeket Base64‑ként szeretném beágyazni külön fájlok helyett? + +A `ResourceSaving` belsejében helyettesítheted a fizikai fájlírást egy memória stream‑nel, majd manuálisan módosíthatod a Markdown hivatkozást. Az Aspose nem kínál közvetlen „Base64‑ként beágyazás” kapcsolót, de a visszahívás teljes kontrollt ad az `args.Stream` felett. + +### Miben különbözik ez a beépített `ExportImages` metódustól? + +Az `ExportImages` minden képet egy mappába exportál **anélkül**, hogy Markdown‑t generálna. A mi visszahívásunk egyesíti a két műveletet, garantálva, hogy a képfájl nevek megegyeznek a `.md`‑ben lévő hivatkozásokkal. Ez a szinkronizáció a kulcsa annak, **hogyan menthetők a képek** helyesen a konverzió során. + +### Konvertálhatok több DOCX fájlt egyszerre kötegelt módon? + +Természetesen. A fő logikát egy `foreach (var file in Directory.GetFiles(..., "*.docx"))` ciklusba helyezheted, beállíthatod a kimeneti útvonalakat, és újra felhasználhatod ugyanazt az `ImageSavingCallback`‑t. Ne feledd, hogy minden dokumentumhoz friss `MarkdownSaveOptions` példányt kell létrehozni, mivel az `args.DestinationFileName` minden iterációban változik. + +## Szélsőséges esetek és legjobb gyakorlatok + +| Helyzet | Mire kell figyelni | Javasolt megoldás | +|-----------|----------------------|-----------------| +| **Nagy DOCX (százak MB)** | Memória nyomás a betöltéskor | Használd a `LoadOptions`‑t `LoadFormat.Docx`‑szel, és állítsd be `LoadOptions.LoadFormat = LoadFormat.Docx`‑t a részek stream‑betöltéséhez | +| **Képfájl nevek ütköznek** | Ha a forrás már tartalmaz `img_0.png`‑t a célmappában, felülírhatod | Adj hozzá GUID‑ot: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Írásvédett kimeneti mappa** | Mentés `UnauthorizedAccessException`‑t dob | Biztosítsd, hogy a folyamat megfelelő jogosultságokkal fusson, vagy válassz írható útvonalat | +| **Nem‑kép erőforrások (CSS, betűkészletek)** | A visszahívás ezeket is kapja | Szűrd le: `if (args.ResourceType != ResourceType.Image) return;` (már bemutatva) | +| **Unicode fájlnevek** | Egyes fájlrendszerek hibásan kezelik a karaktereket | Használd a `Path.GetInvalidFileNameChars()`‑t az `args.FileName` tisztításához a hozzárendelés előtt | + +## Kapcsolódó témák, amelyeket érdemes felfedezni + +- **convert docx to markdown** egyedi címsor stílusokkal (használd a `MarkdownSaveOptions.ExportImagesAsBase64`‑t inline képekhez) +- **extract images from word** a `Document.GetChildNodes(NodeType.Shape,` segítségével + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/hungarian/net/working-with-fonts/_index.md b/words/hungarian/net/working-with-fonts/_index.md index 95926af9d5..4ca88adcc7 100644 --- a/words/hungarian/net/working-with-fonts/_index.md +++ b/words/hungarian/net/working-with-fonts/_index.md @@ -52,6 +52,7 @@ Akár különböző betűtípusokkal szeretné formázni a szöveget, betűtípu | [Betűk rögzítése az Aspose.Words-ben – Teljes útmutató](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Ismerje meg, hogyan rögzítheti a betűket az Aspose.Words használatával egy részletes, lépésről lépésre útmutatóban. | | [Hogyan töltsön be DOCX-et és észlelje a hiányzó betűtípusokat – Teljes C# útmutató](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Tanulja meg, hogyan tölthet be DOCX fájlokat és észlelheti a hiányzó betűtípusokat az Aspose.Words for .NET segítségével C#-ban. | | [Betűtípus-helyettesítési figyelmeztetések engedélyezése az Aspose.Words-ben – Teljes útmutató](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Ismerje meg, hogyan engedélyezheti a betűtípus-helyettesítési figyelmeztetéseket az Aspose.Words for .NET-ben, részletes, lépésről lépésre útmutatóval. | +| [Aspose betűtípus-helyettesítés: Hiányzó betűtípusok észlelése Word dokumentumokban](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Ismerje meg, hogyan észlelheti a hiányzó betűtípusokat Word dokumentumokban az Aspose.Words for .NET segítségével. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/hungarian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..6d8aefde66 --- /dev/null +++ b/words/hungarian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Tanulja meg, hogyan használja az Aspose betűtípus‑helyettesítést a hiányzó + betűtípusok felismerésére Word dokumentum betöltésekor, és hogyan szerezze meg a + hiányzó betűtípusok részleteit – lépésről‑lépésre útmutató. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: hu +og_description: Mesteri Aspose betűtípus-helyettesítés a hiányzó betűtípusok észleléséhez + Word-dokumentum betöltésekor, valamint a hiányzó betűtípusok információinak lekéréséhez + teljes C# kóddal. +og_title: Aspose betűtípus helyettesítés – Hiányzó betűtípusok észlelése Word dokumentumokban +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose betűtípus helyettesítés: Hiányzó betűtípusok felderítése Word dokumentumokban' +url: /hu/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose betűtípus‑helyettesítés – Hiányzó betűtípusok észlelése Word dokumentumokban + +Gondolkodtál már azon, miért néz ki egy Word dokumentum rosszul egy másik gépen? Gyakran a bűnös egy hiányzó betűtípus, és az **Aspose betűtípus‑helyettesítés** az az eszköz, amely lehetővé teszi, hogy ezeket a hiányosságokat még a vizuális katasztrófa előtt felismerd. Ebben a bemutatóban végigvezetünk, hogyan **észleld a hiányzó betűtípusokat** már a **Word dokumentum betöltésekor**, majd hogyan **szerezd meg a hiányzó betűtípusok** részleteit, hogy kijavíthasd vagy helyettesíthesd őket. + +Mindent lefedünk a figyelmeztetési callback beállításától a hiányzó betűtípusok tiszta listájának lekéréséig. A végére egy kész‑C# kódrészletet kapsz, amely pontosan megmutatja, mely betűtípusok nem kerültek betöltésre, és megérted, miért fontos ez a dokumentum hitelessége szempontjából. + +--- + +## Prerequisites – What You Need Before You Start + +- **Aspose.Words for .NET** (v23.12 vagy újabb ajánlott). +- .NET fejlesztői környezet (Visual Studio, Rider vagy a `dotnet` CLI). +- Egy minta DOCX, amely szándékosan egy olyan betűtípust használ, amely nincs telepítve – nevezzük `DocumentWithMissingFont.docx`‑nek. +- Alapvető C# ismeretek – semmi bonyolult, csak a konzolos alkalmazás futtatásához szükséges tudás. + +Ha bármelyik pont ismeretlen, állj meg és telepítsd a NuGet csomagot: + +```bash +dotnet add package Aspose.Words +``` + +Ennyi. Nincs szükség extra betűtípusokra vagy külső szolgáltatásokra. + +--- + +## Step 1: Load the Word Document (and Trigger Font Checks) + +Az első lépés a **Word dokumentum betöltése**. Az Aspose.Words beolvassa a fájlt, és ha nem találja a hivatkozott betűtípust, egy *FontSubstitution* figyelmeztetést helyez a sorba. Íme a betöltést végző kód: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Miért fontos:** A dokumentum korai betöltése lehetővé teszi az Aspose számára, hogy minden szövegrészt, stílust és beágyazott objektumot átvizsgáljon. Ha egy betűtípus nincs a rendszerben vagy az egyéni betűtípus‑mappában, később figyelmeztetést kapsz. + +--- + +## Step 2: Attach a Warning Callback to Capture Substitution Events + +Az Aspose.Words egy callback mechanizmust használ, hogy tájékoztasson a hiányzó betűtípusokhoz hasonló problémákról. A `doc.WarningCallback`‑hez egy `IWarningCallback` megvalósítást rendelve minden figyelmeztetést elkapunk, amint az bekövetkezik. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro tipp:** Több callback‑et is csatolhatsz (pl. naplózás, UI‑frissítés) egy kompozit mintával, de ebben a bemutatóban egyetlen callback elegendő a tisztaság kedvéért. + +--- + +## Step 3: Implement the Font Substitution Warning Callback + +Most definiáljuk azt az osztályt, amely ténylegesen elvégzi a munkát. A callback egy `WarningInfo` objektumot kap; szűrünk a `WarningType.FontSubstitution` típusra, és a leírást későbbre elmentjük. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Mi történik:** Amikor az Aspose hiányzó betűtípust talál, egy figyelmeztetést hoz létre, például „Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” A callback kiírja ezt a sort, és elmenti. + +--- + +## Step 4: Process the Document (Optional) and Gather Missing Fonts + +Ha csak a **hiányzó betűtípusok észlelésére** van szükséged, a betöltési lépés elegendő – a figyelmeztetések automatikusan aktiválódnak. Sok fejlesztő azonban **hiányzó betűtípus** információt szeretne lekérni valamilyen művelet (pl. mentés, konvertálás) után. Az alábbiakban egy apró műveletet kényszerítünk – PDF‑be mentést – hogy minden figyelmeztetés kibocsátásra kerüljön, majd a gyűjtött üzeneteket kiolvassuk. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Várható konzolkimenet** (példa): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Figyeld meg, hogy minden sor egyértelműen jelzi az eredeti betűtípust és az Aspose által választott helyettesítőt. Ez a **aspose betűtípus‑helyettesítés** jelentésének a lényege. + +--- + +## Step 5: Advanced – Using Custom Font Sources to Reduce Substitutions + +Néha **van** a hiányzó betűtípus, csak nem a rendszer alapértelmezett mappájában. Az Aspose.Words lehetővé teszi, hogy egy egyéni könyvtárra mutass a `FontSettings`‑en keresztül. Ennek hozzáadása drámaian csökkentheti a helyettesítési figyelmeztetések számát. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Miért érdemes:** Ha dokumentumokat osztasz meg gépek között, a szükséges betűtípusok egy ismert mappában való csomagolása biztosítja, hogy mindenhol ugyanaz a vizuális megjelenés legyen. Emellett a **hiányzó betűtípusok észlelése** rutinod pontosabb lesz, mivel az Aspose előbb ezt a mappát ellenőrzi, mielőtt visszaesik a fallback‑re. + +--- + +## Complete Working Example + +Összeállítva, itt egy teljes, másolás‑beillesztés‑kész konzolos program. Mentsd `Program.cs`‑ként, és futtasd a `dotnet run` paranccsal. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Ami meg kell jelenjen:** Ha a forrás DOCX olyan betűtípusokra hivatkozik, amelyek nincsenek telepítve, a konzol minden helyettesítési sort kiír, majd egy tömör összegzést. Ha minden betűtípus jelen van, a „No missing fonts were detected.” üzenetet kapod. + +--- + +## Common Pitfalls & How to Avoid Them + +| Probléma | Miért fordul elő | Megoldás | +|----------|------------------|----------| +| **Nem jelenik meg figyelmeztetés** | A dokumentum csak rendszer‑betűtípusokat használ, vagy már hozzáadtál egy egyéni mappát a hiányzó betűtípusokkal. | Ellenőrizd, hogy a DOCX valóban egy nem elérhető betűtípust hivatkozik. Megnyithatod Word‑ben, és egy ritka betűtípust (pl. „Papyrus”) állíthatsz be egy bekezdésnél. | +| **Duplikált üzenetek** | Ugyanaz a betűtípus több futtatásban is előfordul, így több figyelmeztetés keletkezik. | Használd a `Distinct()`‑t a lista egyedi elemeinek megtartásához, ha csak egyedi betűtípusokra van szükséged. | +| **Teljesítménycsökkenés nagy dokumentumoknál** | Minden figyelmeztetést a UI‑szálon dolgozol fel. | Tedd a betöltést háttérfeladatba, vagy használj `Parallel.ForEach`‑t az utófeldolgozáshoz. | +| **Rossz fallback betűtípus** | Az Aspose alapértelmezett fallbackje nem egyezik a márkád stílusával. | Állítsd be a `FontSettings.SubstitutionSettings.DefaultFontName`‑t egy preferált fallbackre (pl. „Calibri”). | + +--- + +## Extending the Solution – Exporting Missing Fonts to JSON + +Ha egy webszolgáltatást építesz, amelynek a kliensnek kell jelenteni a hiányzó betűtípusokat, a lista sorosítása egyszerű: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Most az API-d egy tiszta JSON payload‑ot adhat vissza, amelyet egy másik rendszer könnyedén felhasználhat. + +--- + +## Conclusion + +Ebben az útmutatóban bemutattuk a **Aspose betűtípus‑helyettesítés** teljes folyamatát: Word dokumentum betöltése, figyelmeztetési callback csatolása, minden *detect missing fonts* esemény elkapása, és végül a **hiányzó betűtípus** információk lekérése jelentés vagy javítás céljából. Az opcionális egyéni betűtárak hozzáadásával csökkentheted a helyettesítések számát, néhány extra sorral pedig JSON‑ba exportálhatod az eredményeket. + +Ne feledd, a dokumentumaid vizuális integritása a betűtípusoktól függ. A bemutatott technikával soha többé nem leszel meglepve egy váratlan fallback‑tel. + +Készen állsz a következő lépésre? Próbáld meg ezt a logikát egy nagyobb dokumentum‑feldolgozó csővezetékbe integrálni, vagy fedezd fel az Aspose.Words további funkcióit, például a betűtípus‑beágyazást (`doc.FontSettings.EmbeddedFonts`). A lehetőségek végtelenek, és a felhasználóid megköszönik a kifinomult kimenetet. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/indonesian/net/ai-powered-document-processing/_index.md b/words/indonesian/net/ai-powered-document-processing/_index.md index 25f2e8c2a3..f659114330 100644 --- a/words/indonesian/net/ai-powered-document-processing/_index.md +++ b/words/indonesian/net/ai-powered-document-processing/_index.md @@ -38,10 +38,13 @@ Terakhir, jangan lupa untuk memeriksa [Bekerja Dengan Opsi Ringkasan](./working- ## Tutorial Pemrosesan Dokumen Bertenaga AI | Judul | Deskripsi | Bahasa Indonesia: --- | --- Bahasa Indonesia: -| [Bekerja dengan Model AI](./working-with-ai-model/) | Pelajari cara menggunakan Aspose.Words untuk .NET guna meringkas dokumen dengan AI. Langkah mudah untuk meningkatkan manajemen dokumen. Bahasa Indonesia: -| [Bekerja Dengan Model AI Google](./working-with-google-ai-model/) Tingkatkan pemrosesan dokumen Anda dengan Aspose.Words untuk .NET dan Google AI untuk membuat ringkasan ringkas dengan mudah. Bahasa Indonesia: -| [Bekerja Dengan Model AI Terbuka](./working-with-open-ai-model/) | Dapatkan ringkasan dokumen yang efisien menggunakan Aspose.Words untuk .NET dengan model-model canggih OpenAI. Pelajari panduan lengkap ini sekarang. Bahasa Indonesia: +| [Bekerja dengan Model AI](./working-with-ai-model/) | Pelajari cara menggunakan Aspose.Words untuk .NET guna meringkas dokumen dengan AI. Langkah mudah untuk meningkatkan manajemen dokumen. Bahasa Indonesia: | +| [Bekerja Dengan Model AI Google](./working-with-google-ai-model/) Tingkatkan pemrosesan dokumen Anda dengan Aspose.Words untuk .NET dan Google AI untuk membuat ringkasan ringkas dengan mudah. Bahasa Indonesia: | +| [Bekerja Dengan Model AI Terbuka](./working-with-open-ai-model/) | Dapatkan ringkasan dokumen yang efisien menggunakan Aspose.Words untuk .NET dengan model-model canggih OpenAI. Pelajari panduan lengkap ini sekarang. Bahasa Indonesia: | | [Bekerja Dengan Opsi Ringkasan](./working-with-summarize-options/) | Pelajari cara meringkas dokumen Word secara efektif menggunakan Aspose.Words untuk .NET dengan panduan langkah demi langkah kami tentang mengintegrasikan model AI untuk wawasan cepat. | +| [Cara Menggunakan LLM dengan Aspose.Words – Menulis Ulang Paragraf dalam C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Pelajari cara menggunakan model bahasa besar (LLM) dengan Aspose.Words untuk menulis ulang paragraf secara otomatis dalam C#. | +| [Cara Memeriksa Tata Bahasa di C# – Panduan Lengkap untuk Dokumen Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Pelajari cara memeriksa tata bahasa dokumen Word menggunakan Aspose.Words untuk .NET dalam C# dengan panduan lengkap. | +| [Ringkas Dokumen Word di C# – Panduan Lengkap Menggunakan Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Pelajari cara merangkum dokumen Word secara otomatis menggunakan model Anthropic Claude dengan Aspose.Words untuk .NET dalam C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/indonesian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..5b0190fc5b --- /dev/null +++ b/words/indonesian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Pelajari cara memeriksa tata bahasa dalam dokumen Word menggunakan C#. + Tutorial ini juga mencakup cara memuat file DOCX dengan C# dan menggunakan Aspose.Words + AI untuk hasil yang akurat. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: id +og_description: Bagaimana cara memeriksa tata bahasa dalam dokumen Word menggunakan + C#? Ikuti tutorial ini untuk memuat file DOCX dengan C# dan menjalankan pemeriksaan + tata bahasa berbasis AI dengan Aspose.Words. +og_title: Cara Memeriksa Tata Bahasa di C# – Panduan Langkah-demi-Langkah Lengkap +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Cara Memeriksa Tata Bahasa di C# – Panduan Lengkap untuk Dokumen Word +url: /id/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Memeriksa Tata Bahasa di C# – Panduan Lengkap untuk Dokumen Word + +Pernah bertanya‑tanya **bagaimana cara memeriksa tata bahasa** dalam dokumen Word tanpa meninggalkan IDE Anda? Anda tidak sendirian. Banyak pengembang perlu memvalidasi laporan yang dihasilkan pengguna, email otomatis, atau bahkan dokumentasi sebelum dirilis. Kabar baiknya? Dengan Aspose.Words AI Anda dapat melakukannya secara programatis, dan seluruh prosesnya cocok dengan alur kerja C# yang tipikal. + +Dalam panduan ini kami akan membahas semua yang perlu Anda ketahui: mulai dari memuat file DOCX C# hingga memanggil pemeriksa tata bahasa AI dan menafsirkan hasilnya. Pada akhir tutorial Anda akan memiliki potongan kode siap‑jalankan yang mencetak tingkat keparahan, pesan, dan saran penggantian untuk setiap masalah—tanpa perlu menyalin‑tempel secara manual. + +## Apa yang Akan Anda Pelajari + +- **Cara memeriksa tata bahasa** dalam dokumen Word menggunakan Aspose.Words AI. +- Langkah‑langkah tepat untuk **memuat file DOCX C#** dengan kelas `Document`. +- Cara menangani objek `GrammarCheckResult`, mengiterasi masalah, dan menghasilkan diagnostik yang berguna. +- Kesulitan umum (seperti lisensi yang hilang) dan tips agar solusi siap produksi. + +> **Prasyarat:** .NET 6.0+ (atau .NET Framework 4.6+), Visual Studio 2022 (atau IDE pilihan Anda), dan lisensi Aspose.Words for .NET (versi percobaan gratis cukup untuk pengujian). Jika belum menginstal paket NuGet, jalankan: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Sekarang, mari kita mulai. + +## Langkah 1: Memuat File DOCX di C# + +Sebelum pemeriksaan tata bahasa dapat dilakukan, dokumen harus dimuat ke memori. Aspose.Words menjadikannya satu baris kode, namun ada beberapa nuansa yang patut diperhatikan. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Mengapa ini penting:** +- Menggunakan `Path.Combine` memastikan kompatibilitas lintas‑platform. +- Pemeriksaan keberadaan file mencegah crash pada runtime yang dapat menyembunyikan logika pemeriksaan tata bahasa yang sebenarnya. +- Saat Anda **memuat file DOCX C#**, Aspose mem-parsing semua gaya, header, footer, dan bahkan teks tersembunyi, memberi AI gambaran lengkap tentang dokumen. + +> **Pro tip:** Jika Anda perlu bekerja dengan stream (misalnya file yang di‑upload lewat web), Anda dapat mengganti pemanggilan `new Document(docPath)` dengan `new Document(stream)`. + +## Langkah 2: Memilih Model AI untuk Pemeriksaan Tata Bahasa + +Aspose.Words AI mendukung beberapa model, mulai dari yang ringan secara lokal hingga varian GPT berbasis cloud. Untuk kebanyakan skenario, **GPT‑3.5 Turbo** menawarkan keseimbangan yang tepat antara kecepatan dan akurasi. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Mengapa memilih GPT‑3.5 Turbo?** +- Cukup cepat untuk pemrosesan batch puluhan file per menit. +- Biayanya (jika Anda berada pada paket berbayar) lebih rendah dibandingkan GPT‑4 sekaligus tetap menangkap sebagian besar kesalahan umum. +- API secara otomatis menangani batas token, sehingga Anda tidak perlu memecah dokumen besar secara manual. + +Jika Anda lebih suka pendekatan offline, ganti `AiModelType.Gpt35Turbo` dengan `AiModelType.Local` (memerlukan paket model offline opsional). + +## Langkah 3: Mengiterasi Masalah dan Menampilkan Umpan Balik yang Berguna + +Objek `GrammarCheckResult` berisi koleksi objek `GrammarIssue`. Setiap masalah memberikan tingkat keparahan, pesan yang dapat dipahami manusia, dan saran penggantian. Mari cetak semuanya dengan rapi. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Makna masing‑masing bidang:** +- `Severity` – biasanya `Info`, `Warning`, atau `Error`. Anggap `Error` sebagai hal yang harus diperbaiki sebelum dipublikasikan. +- `Message` – deskripsi singkat tentang masalah (misalnya “Subject‑verb agreement”). +- `SuggestedReplacement` – perbaikan yang direkomendasikan AI; Anda dapat menerapkannya secara otomatis bila mempercayai model, atau menampilkannya ke reviewer manusia. + +> **Kasus khusus:** Beberapa masalah mungkin memiliki `SuggestedReplacement` kosong (misalnya saran gaya). Dalam situasi tersebut, cukup tandai lokasinya untuk peninjauan manual. + +## Contoh Lengkap yang Berfungsi + +Menggabungkan semua langkah, berikut adalah aplikasi konsol mandiri yang dapat Anda salin‑tempel ke proyek .NET baru. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Output yang diharapkan (contoh):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Jika Anda menjalankan program terhadap dokumen yang bersih, Anda akan melihat baris “✅ No grammar issues detected.” sebagai gantinya. + +## Menangani Kesulitan Umum + +| Masalah | Mengapa Terjadi | Solusi Cepat | +|---------|----------------|--------------| +| **LicenseException** | Perpustakaan Aspose memerlukan lisensi yang valid untuk penggunaan produksi. | Tambahkan `License license = new License(); license.SetLicense("Aspose.Words.lic");` di awal `Main`. | +| **Network timeout** | Pemanggilan model AI ke cloud melebihi batas waktu default 100 s. | Tingkatkan timeout dengan `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` sebelum memanggil `CheckGrammar`. | +| **Dokumen besar (> 10 MB)** | Beberapa model cloud memotong input. | Bagi dokumen menjadi bagian‑bagian menggunakan `document.Sections` dan jalankan pemeriksaan per bagian, lalu gabungkan hasilnya. | +| **Saran kosong** | Model tidak dapat menghasilkan penggantian (misalnya frasa ambigu). | Catat masalah untuk peninjauan manual; jangan terapkan saran kosong secara otomatis. | + +## Memperluas Solusi + +- **Perbaikan otomatis:** Loop melalui `grammarResult.Issues` dan ganti teks menggunakan `document.Range.Replace`. Pastikan Anda mencadangkan file asli terlebih dahulu. +- **Pemrosesan batch:** Bungkus seluruh alur dalam `foreach` yang menelusuri direktori berisi file DOCX. Simpan setiap laporan sebagai file JSON untuk analisis selanjutnya. +- **Integrasi dengan ASP.NET:** Ekspos endpoint yang menerima upload DOCX, menjalankan pemeriksaan, dan mengembalikan payload JSON berisi masalah. + +## Ilustrasi Gambar + +how to check grammar flow diagram + +*Diagram di atas memvisualisasikan proses tiga langkah: muat DOCX → jalankan pemeriksaan tata bahasa AI → keluarkan masalah.* + +## Kesimpulan + +Kami telah membahas **cara memeriksa tata bahasa** dalam dokumen Word menggunakan C#, menunjukkan kode tepat untuk **memuat file DOCX C#**, dan menjelaskan cara menafsirkan umpan balik yang dihasilkan AI. Dengan Aspose.Words AI, Anda mendapatkan mesin tata bahasa berbasis cloud yang kuat dan dapat terintegrasi mulus ke aplikasi .NET apa pun. + +Langkah selanjutnya? Cobalah mengotomatisasi loop perbaikan‑penerapan, bereksperimen dengan `AiModelType.Gpt4` yang lebih baru untuk saran yang lebih tajam, atau gabungkan dengan perpustakaan pemeriksaan ejaan untuk pipeline proofreading yang lengkap. Kemungkinannya hampir tak terbatas, dan Anda kini memiliki fondasi yang solid untuk membangunnya. + +Punya pertanyaan atau menemukan kasus tepi yang rumit? Tinggalkan komentar di bawah, dan selamat coding! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/indonesian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/indonesian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..6d7584396a --- /dev/null +++ b/words/indonesian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-05-04 +description: Cara menggunakan LLM untuk mengedit dokumen dengan Aspose – pelajari + cara mengganti teks paragraf, menghubungkan ke LLM lokal, dan menulis ulang teks + menggunakan AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: id +og_description: Cara menggunakan LLM untuk mengedit dokumen dengan Aspose. Panduan + ini menunjukkan cara menghubungkan ke LLM lokal, mengganti teks paragraf, dan menulis + ulang teks menggunakan AI. +og_title: Cara Menggunakan LLM dengan Aspose.Words – Menulis Ulang Paragraf dalam + C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Cara Menggunakan LLM dengan Aspose.Words – Menulis Ulang Paragraf di C# +url: /id/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Menggunakan LLM dengan Aspose.Words – Menulis Ulang Paragraf dalam C# + +Pernah bertanya-tanya **bagaimana cara menggunakan LLM** untuk memperbaiki dokumen Word tanpa membukanya secara manual? Anda bukan satu-satunya. Banyak pengembang menemui kebuntuan ketika mereka perlu *mengganti teks paragraf* secara programatik tetapi tidak memiliki alur kerja AI yang bersih. + +Dalam tutorial ini kami akan menghubungkan model bahasa besar lokal, memberi potongan dari file `.docx`, meminta **menulis ulang teks menggunakan AI**, dan akhirnya menyimpan dokumen yang diperbarui—semua dengan Aspose.Words. Pada akhir tutorial Anda akan memiliki aplikasi konsol C# yang siap dijalankan dan mendemonstrasikan seluruh pipeline. + +> **Apa yang akan Anda dapatkan:** contoh lengkap yang dapat dijalankan, penjelasan setiap langkah, tip untuk kasus tepi, dan ide untuk memperluas solusi. + +## Apa yang Anda Butuhkan + +- **.NET 6+** (atau .NET Framework 4.7.2 – kode ini bekerja pada keduanya) +- **Aspose.Words for .NET** (paket NuGet `Aspose.Words`) +- **Server LLM lokal** yang menyediakan endpoint HTTP `/generate` sederhana (misalnya Ollama, LMStudio, atau layanan Flask khusus) +- Familiaritas dasar dengan C# dan kode klien HTTP + +Tidak diperlukan SDK tambahan; semua yang lain ada dalam kode yang akan kami tulis bersama. + +## Langkah 1: Cara Menggunakan LLM untuk Mengganti Teks Paragraf + +Hal pertama yang harus kita lakukan adalah mengidentifikasi paragraf yang ingin dimodifikasi. Aspose.Words mempermudah hal ini dengan menyediakan model objek yang kaya. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Mengapa ini penting:** +Memilih node yang tepat mencegah Anda secara tidak sengaja menimpa heading atau tabel. Dengan menggunakan pendekatan **replace paragraph text** kami menjaga struktur dokumen tetap utuh sambil hanya menyentuh konten yang relevan. + +> **Pro tip:** Jika dokumen Anda memiliki bagian dengan panjang variabel, gunakan `document.GetChildNodes(NodeType.Paragraph, true)` dan LINQ untuk menemukan paragraf berdasarkan teks atau gaya-nya. + +## Langkah 2: Menghubungkan ke Endpoint LLM Lokal + +Setelah kita memiliki teks, kita perlu mengirimnya ke LLM. Contoh ini menggunakan kelas pembungkus sederhana `LocalLargeLanguageModel` yang menyembunyikan detail HTTP. Anda dapat menggantinya dengan panggilan `HttpClient` jika lebih suka. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Mengapa kami menghubungkannya dengan cara ini:** +Pengaturan **connect to local llm** menghilangkan latensi, menjaga data tetap di tempat, dan menghindari biaya API. Pembungkus ini juga membuat kode selanjutnya lebih bersih, memungkinkan kami fokus pada logika **rewrite text using ai**. + +## Langkah 3: Menulis Ulang Teks Menggunakan AI dengan Aspose.Words + +Dengan teks paragraf di tangan dan LLM siap, kami menyusun prompt yang memberi tahu model secara tepat apa yang kami inginkan—menulis ulang dengan nada formal. Anda dapat menyesuaikan prompt untuk gaya lain (ramah, teknis, dll.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Mengapa ini berhasil:** +LLM bekerja berdasarkan prompt; memberikan instruksi eksplisit (“Rewrite … in a formal tone”) menghasilkan hasil yang konsisten. Langkah **rewrite text using ai** adalah inti tutorial – ia menunjukkan bagaimana AI dapat disematkan langsung ke alur kerja dokumen. + +## Langkah 4: Mengedit Dokumen dan Menyimpan Perubahan + +Sekarang kami mengganti run asli dengan konten baru. Aspose.Words menyimpan teks dalam objek `Run`, jadi mengosongkannya terlebih dahulu menghindari sisa artefak format. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Catatan kasus tepi:** +Jika paragraf asli berisi format campuran (tebal, miring) Anda mungkin ingin mempertahankan gaya. Dalam hal itu, buat `Run` baru, salin pengaturan `Font` asli, lalu set `Text`‑nya ke `revisedText`. + +## Contoh Kerja Lengkap + +Berikut seluruh program yang dapat Anda salin‑tempel ke proyek konsol. Ingat untuk menginstal paket NuGet Aspose.Words terlebih dahulu (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Output yang Diharapkan + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Buka `output.docx` – Anda akan melihat paragraf ketiga kini berisi versi yang telah dipoles. + +## Pertanyaan Umum & Hal-hal yang Perlu Diwaspadai + +| Pertanyaan | Jawaban | +|------------|---------| +| **Bagaimana jika LLM saya mengembalikan JSON dengan bidang tambahan?** | Sesuaikan `GenerateText` untuk mendeserialisasi properti yang tepat atau parsing respons secara manual. | +| **Bisakah saya memproses banyak paragraf sekaligus?** | Ya – iterasi melalui `document.FirstSection.Body.Paragraphs` dan terapkan logika prompt yang sama, mungkin menambahkan indeks paragraf ke prompt untuk konteks. | +| **Server LLM saya menggunakan autentikasi?** | Tambahkan header ke `HttpClient` sebelum POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Format hilang setelah penggantian.** | Pertahankan pengaturan `Run.Font` asli: buat `Run` baru, salin `originalRun.Font.Clone()`, lalu set `Text`‑nya. | +| **LLM kadang‑kadang mengembalikan string kosong.** | Implementasikan fallback – jika `revisedText.Trim().Length == 0`, pertahankan teks asli atau coba lagi dengan prompt yang lebih sederhana. | + +## Memperluas Solusi + +Setelah Anda menguasai **cara menggunakan llm** untuk satu paragraf, pertimbangkan langkah selanjutnya berikut: + +- **Pemrosesan batch:** Loop melalui setiap paragraf dan menulis ulang dengan gaya yang dipilih (misalnya “buat semua teks singkat”). +- **Penulisan ulang sadar gaya:** Sertakan nama gaya paragraf asli dalam prompt sehingga LLM dapat menghormati heading vs teks tubuh. +- **Integrasi dengan pipeline CI:** Otomatiskan pemolesan dokumen sebagai bagian dari proses build dokumentasi. +- **Prompt alternatif:** Coba “summarize this paragraph” atau “translate this paragraph to Spanish” untuk menjelajahi kekuatan penuh **rewrite text using ai**. + +## Kesimpulan + +Kami telah menelusuri seluruh alur **cara menggunakan llm** dengan Aspose.Words: memuat dokumen, **connect to local llm**, mengekstrak paragraf, **rewrite text using ai**, **replace paragraph text**, dan akhirnya menyimpan hasilnya. Kode ini mandiri, siap pakai, dan menampilkan cara praktis menggabungkan AI dengan otomasi dokumen tradisional. + +Cobalah, ubah prompt, dan biarkan + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/indonesian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/indonesian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..3e8044e89c --- /dev/null +++ b/words/indonesian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Ringkas dokumen Word dengan cepat dan terjemahkan teks dengan Google. + Pelajari cara menggunakan Anthropic Claude, membuat ringkasan dari laporan, dan + menerjemahkan teks dengan Google dalam satu tutorial C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: id +og_description: Ringkas dokumen Word secara instan dan terjemahkan teks dengan Google. + Panduan ini menunjukkan cara menggunakan Anthropic Claude dan Aspose.Words untuk + membuat ringkasan dari laporan. +og_title: Ringkas Dokumen Word di C# – Langkah demi Langkah dengan Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Meringkas Dokumen Word di C# – Panduan Lengkap Menggunakan Anthropic Claude +url: /id/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ringkas Dokumen Word di C# – Panduan Lengkap Menggunakan Anthropic Claude + +Pernah perlu **summarize word document** tetapi merasa terhambat mengelola API dan kode yang bertele‑tele? Anda tidak sendirian. Dalam banyak proyek—laporan tahunan, ringkasan hukum, atau makalah penelitian—mengekstrak ikhtisar singkat menjadi titik sakit harian. Untungnya, kombinasi Aspose.Words dan Anthropic Claude membuatnya sangat mudah, dan Anda bahkan dapat menambahkan terjemahan cepat Google sekaligus. + +Dalam tutorial ini kami akan membahas semua yang perlu Anda ketahui: memuat file .docx besar, memanggil model Claude V2 untuk menghasilkan ringkasan, menerjemahkan frasa dengan Google, dan menangani masalah umum. Pada akhir tutorial Anda akan dapat **create summary from report** hanya dengan beberapa baris C#. + +## Prasyarat + +- .NET 6+ (atau .NET Core 3.1) terinstal +- Lisensi Aspose.Words untuk .NET (atau percobaan gratis) +- Akses ke API Anthropic Claude V2 (Anda memerlukan kunci API) +- Koneksi internet untuk Google Translator +- Visual Studio 2022 atau IDE C# favorit Anda + +Tidak diperlukan paket NuGet tambahan selain `Aspose.Words` dan `Aspose.Words.AI`; kelas penerjemah sudah termasuk dalam pustaka yang sama. + +## Langkah 1 – Muat Dokumen Word Sumber + +Hal pertama yang harus kita lakukan adalah membawa file .docx ke memori. Aspose.Words membuat ini sangat mudah dan, berkat parser yang kuat, ia bekerja dengan tata letak kompleks, tabel, dan bahkan gambar yang disematkan. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Why this matters:** Memuat dokumen lebih awal memungkinkan Anda memeriksa properti (penulis, jumlah kata) dan memutuskan apakah ringkasan memang diperlukan. File besar > 10 MB dapat mengonsumsi banyak memori, jadi pertimbangkan `LoadOptions` dengan `LoadFormat.Docx` jika Anda mengalami masalah kinerja. + +## Langkah 2 – Ringkas Dokumen dengan Anthropic Claude + +Sekarang bagian yang menyenangkan: kami menyerahkan dokumen ke Claude V2. Kelas `Summarizer` mengabstraksi panggilan HTTP, penanganan token, dan percobaan ulang. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **How it works:** +> 1. **Chunking** – Aspose secara otomatis memecah dokumen menjadi potongan yang dapat dikelola (≈ 2 KB masing‑masing) untuk menghormati batas token Claude. +> 2. **Prompt engineering** – Pustaka mengirim prompt seperti “Provide a concise executive summary of the following text:” diikuti oleh setiap potongan. +> 3. **Aggregation** – Claude mengembalikan ringkasan parsial yang kemudian digabungkan menjadi `summaryText` akhir. + +### Kasus Tepi & Tips + +- **Very large reports** (> 100 pages) dapat melebihi jendela konteks Claude. Jika output terpotong, aktifkan `SummarizerOptions.MaxChunkSize` dengan nilai yang lebih kecil. +- **Non‑English source** – Claude bekerja paling baik dengan bahasa Inggris; untuk bahasa lain, terjemahkan terlebih dahulu (lihat Langkah 4) lalu ringkas. +- **Rate limits** – Anthropic memberlakukan batas per menit. Bungkus panggilan dalam loop retry dengan exponential back‑off jika Anda menerima respons `429`. + +## Langkah 3 – Verifikasi Output Ringkasan + +Sebelum melanjutkan, sebaiknya memvalidasi bahwa ringkasan tidak kosong dan memenuhi harapan panjang (misalnya, 5‑10 % dari jumlah kata asli). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Jika rasio terlihat terlalu rendah (< 2 %), Anda mungkin ingin menyesuaikan properti `SummarizerOptions.SummaryLength` untuk meminta output yang lebih panjang. + +## Langkah 4 – Terjemahkan Teks dengan Google + +Sekarang kami memiliki ringkasan bahasa Inggris yang jelas, mari tambahkan terjemahan cepat. Kelas `Translator` menggunakan endpoint terjemahan publik Google (tidak memerlukan kunci API untuk frasa pendek, tetapi untuk produksi Anda sebaiknya beralih ke Cloud Translation API berbayar). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Why Google?** Cepat, didukung secara luas, dan endpoint gratis menangani string pendek tanpa autentikasi. Untuk terjemahan massal, kumpulkan panggilan dan hormati batas penggunaan Google. + +### Menerjemahkan Seluruh Ringkasan (Opsional) + +Jika Anda memerlukan seluruh ringkasan dalam bahasa Spanyol (atau bahasa lain), cukup masukkan `summaryText` ke dalam `Translator.Translate`. Perhatikan batas ukuran permintaan 5 KB; Anda mungkin perlu memecah ringkasan menjadi potongan yang lebih kecil. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Langkah 5 – Simpan Ringkasan Kembali ke File Word (Bonus) + +Seringkali pengguna akhir mengharapkan dokumen yang dapat diunduh daripada output konsol. Mari buat file `.docx` baru yang berisi versi bahasa Inggris dan Spanyol. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Tips Praktis + +Saat Anda menyematkan ringkasan ke dalam file Word baru, pertahankan format asli seminimal mungkin (gunakan gaya `Normal`). Gaya kompleks dari sumber dapat menyebabkan pergeseran tata letak yang tidak terduga. + +## Contoh Lengkap yang Berfungsi + +Berikut adalah program **complete, copy‑and‑paste‑ready** yang menggabungkan semuanya. Program ini dapat dikompilasi dengan satu perintah `dotnet run` setelah Anda menambahkan paket Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Expected console output** (truncated for brevity): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Pertanyaan yang Sering Diajukan + +| Question | Answer | +|----------|--------| +| *Can I use a different AI model?* | Ya. Ganti `SummarizerModel.AnthropicClaudeV2` dengan `SummarizerModel.OpenAIGPT4` (memerlukan kunci OpenAI) atau penyedia lain yang tercantum dalam enum. | +| *What if the document contains protected sections?* | Aspose akan melempar `ProtectedDocumentException`. Buka terlebih dahulu dengan `LoadOptions.Password` atau minta salinan yang tidak dilindungi. | +| *Do I need a paid Aspose license for production?* | Versi percobaan gratis berlaku hingga 20 halaman. Untuk laporan yang lebih besar, lisensi menghapus batas halaman dan menambah optimasi kinerja. | +| *Is the Google translator reliable for large blocks?* | Untuk string pendek sudah cukup. Untuk terjemahan massal, beralihlah ke Cloud Translation API untuk menghindari batas ukuran permintaan dan mendapatkan deteksi bahasa yang lebih baik. | + +## Kesimpulan + +Kami baru saja **summarize word document** menggunakan Aspose.Words bersama model Anthropic Claude V2, lalu **translate text with Google** to + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/indonesian/net/basic-conversions/_index.md b/words/indonesian/net/basic-conversions/_index.md index 5daed8920b..ce99b6fd8d 100644 --- a/words/indonesian/net/basic-conversions/_index.md +++ b/words/indonesian/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Cara Mengekspor LaTeX dari Word – Panduan Langkah‑demi‑Langkah](./how-to-export-latex-from-word-step-by-step-guide/) | Pelajari cara mengekspor dokumen Word ke format LaTeX dengan Aspose.Words untuk .NET dalam panduan langkah demi langkah. | | [Mengonversi Word ke PDF dalam C# menggunakan Aspose.Words – Panduan](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Panduan langkah demi langkah mengonversi dokumen Word ke PDF menggunakan Aspose.Words dalam C#. Bahasa Indonesia: | | [Simpan docx sebagai pdf dengan Aspose.Words – Panduan Lengkap C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Panduan langkah demi langkah menyimpan file DOCX sebagai PDF menggunakan Aspose.Words dalam C#. Cocok untuk pengembang. | +| [Buat PDF Aksesibel dari DOCX di C# – Cara Mengonversi Word ke PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Pelajari cara membuat PDF yang dapat diakses dari file DOCX menggunakan Aspose.Words untuk .NET dengan contoh kode C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/indonesian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..eabfd7aa4d --- /dev/null +++ b/words/indonesian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Buat PDF yang dapat diakses dari file DOCX di C#. Pelajari cara mengonversi + Word ke PDF, menyimpan Word sebagai PDF, dan mengekspor docx ke PDF dengan kepatuhan + aksesibilitas. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: id +og_description: Buat PDF yang dapat diakses dari file DOCX di C#. Ikuti tutorial langkah + demi langkah ini untuk mengonversi Word ke PDF, menyimpan Word sebagai PDF, dan + mengekspor docx ke PDF dengan aksesibilitas penuh. +og_title: Buat PDF Aksesibel dari DOCX di C# – Panduan Cepat +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Buat PDF Aksesibel dari DOCX di C# – Cara Mengonversi Word ke PDF +url: /id/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Buat PDF Aksesibel dari DOCX di C# – Cara Mengonversi Word ke PDF + +Pernahkah Anda perlu **membuat PDF aksesibel** dari dokumen Word tetapi tidak yakin pustaka mana yang dapat dipercaya? Anda tidak sendirian—banyak pengembang mengalami kendala yang sama ketika harus memenuhi standar PDF/UA untuk aksesibilitas. Kabar baiknya, dengan Aspose.Words Anda dapat mengubah `.docx` menjadi PDF yang sesuai hanya dengan beberapa baris kode, dan Anda akan mendapatkan file yang dapat dibaca oleh pembaca layar. + +Dalam tutorial ini kami akan membahas semua yang perlu Anda ketahui untuk **mengonversi Word ke PDF**, **menyimpan Word sebagai PDF**, dan bahkan **mengekspor docx ke PDF** dengan kepatuhan PDF/UA‑1 (atau PDF/UA‑2). Pada akhir tutorial Anda akan memiliki cuplikan kode C# yang siap pakai, memahami mengapa setiap pengaturan penting, dan siap menangani kasus tepi umum seperti font yang hilang atau pengaturan halaman khusus. + +## Prerequisites + +- .NET 6.0 atau yang lebih baru (kode ini juga berfungsi dengan .NET Framework 4.6+) +- Lisensi Aspose.Words untuk .NET (atau kunci evaluasi gratis) +- Pemahaman dasar tentang C# dan Visual Studio (atau IDE apa pun yang Anda sukai) +- File DOCX yang ingin Anda buat aksesibel (kami akan menyebutnya `input.docx`) + +> **Pro tip:** Jika Anda menggunakan versi percobaan gratis, ingat bahwa PDF yang dihasilkan akan berisi watermark kecil “Evaluation”. + +## Step 1: Install Aspose.Words NuGet Package + +Sebelum kita dapat menulis kode C#, pustaka Aspose.Words harus ditambahkan ke proyek. + +```bash +dotnet add package Aspose.Words +``` + +Menjalankan perintah ini akan mengembalikan `Aspose.Words.dll` dan membuat namespace tersedia. Langkah ini penting karena kelas `PdfSaveOptions` berada di dalam paket tersebut. + +## Step 2: Load the Source DOCX File + +Langkah logis pertama adalah memuat dokumen Word yang ingin Anda ubah. Anggap ini seperti membuka buku sebelum Anda mulai mengedit halamannya. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Why this matters:** Memuat dokumen membuat representasi dalam memori yang mencakup semua gaya, gambar, dan metadata. Jika file rusak, `Document` akan melemparkan pengecualian—jadi Anda mungkin ingin membungkusnya dalam blok try/catch untuk kode produksi. + +## Step 3: Configure PDF Save Options for Accessibility + +Aspose.Words memungkinkan Anda menentukan tingkat kepatuhan PDF. PDF/UA‑1 adalah standar aksesibilitas asli, sementara PDF/UA‑2 menambahkan beberapa tag baru. Pilih yang sesuai dengan kebutuhan klien Anda. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **What “Compliance” does:** Menetapkan `PdfCompliance.PdfUax1` memberi tahu Aspose.Words untuk menyematkan tag yang tepat, urutan baca logis, dan teks alternatif untuk gambar—tepat apa yang dicari perangkat lunak pembaca layar. + +## Step 4: Save the Document as an Accessible PDF + +Sekarang pekerjaan berat selesai; kami cukup memberi instruksi kepada Aspose.Words untuk menulis file PDF menggunakan opsi yang baru saja kami definisikan. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Setelah baris ini dijalankan, Anda akan menemukan `output.pdf` di folder yang ditentukan. Buka di Adobe Acrobat Reader dan periksa **File → Properties → Description → PDF/A and PDF/UA** untuk memverifikasi kepatuhan. + +## Step 5: Verify Accessibility (Optional but Recommended) + +Meskipun kode menjamin output PDF ber‑tag, pemeriksaan manual singkat membantu menemukan konten khusus yang mungkin memerlukan perhatian ekstra. + +1. Buka `output.pdf` di Adobe Acrobat Pro. +2. Pilih **Tools → Accessibility → Full Check**. +3. Jalankan pemeriksaan dan tinjau peringatan apa pun (misalnya teks alt yang hilang untuk gambar khusus). + +Jika laporan tidak menunjukkan kesalahan, Anda telah berhasil **membuat PDF aksesibel** yang memenuhi standar PDF/UA‑1. + +## Common Variations & Edge Cases + +### Converting Multiple DOCX Files in a Loop + +Jika Anda memiliki sekumpulan dokumen, bungkus logika muat‑simpan di dalam loop `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Switching to PDF/UA‑2 + +Cukup ubah enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Handling Custom Fonts + +Jika DOCX Anda menggunakan font yang tidak terpasang di server, sematkan font tersebut: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Menyematkan font menjamin PDF terlihat sama di mesin mana pun—detail penting ketika Anda **mengekspor docx ke pdf** untuk pemangku kepentingan eksternal. + +## Full Working Example + +Berikut adalah program lengkap yang siap dijalankan, menggabungkan semua bagian. Salin‑tempel ke aplikasi konsol, sesuaikan jalur, dan tekan **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** Sebuah file bernama `output.pdf` yang dapat dibuka di penampil PDF apa pun, membawa tag aksesibilitas yang tepat, dan dapat dibagikan kepada pengguna yang mengandalkan teknologi bantu. + +![Contoh PDF aksesibel](/images/create-accessible-pdf.png "Tangkapan layar yang menunjukkan dokumen PDF/UA‑1 yang sesuai") + +*Image alt text:* *contoh pdf aksesibel – tangkapan layar dokumen PDF/UA‑1 yang sesuai dibuka di Adobe Acrobat.* + +## Frequently Asked Questions + +- **Apakah ini bekerja dengan .NET Core?** + Tentu saja. Aspose.Words bersifat lintas‑platform, sehingga kode yang sama berjalan di Windows, Linux, dan macOS. + +- **Bagaimana jika DOCX saya berisi makro?** + Makro diabaikan selama konversi; hanya konten yang terlihat yang dihasilkan ke PDF. + +- **Bisakah saya menambahkan judul metadata PDF khusus?** + Ya—tetapkan `pdfSaveOptions.Metadata.Title = "Your Custom Title";` sebelum menyimpan. + +- **Apakah PDF/UA‑2 banyak didukung?** + Sebagian besar pembaca PDF modern memahami PDF/UA‑2, tetapi jika Anda menargetkan alat yang lebih lama, tetap gunakan PDF/UA‑1. + +## Conclusion + +Kami baru saja menunjukkan cara **membuat PDF aksesibel** dari file DOCX menggunakan Aspose.Words, mencakup semua mulai dari menginstal paket NuGet hingga memverifikasi kepatuhan PDF/UA. Dengan mengikuti langkah‑langkah ini Anda dapat dengan andal **mengonversi Word ke PDF**, **menyimpan Word sebagai PDF**, dan **mengekspor docx ke PDF** sambil memenuhi standar aksesibilitas—keterampilan penting bagi setiap pengembang yang bekerja pada pipeline dokumen perusahaan. + +Siap untuk tantangan berikutnya? Cobalah menambahkan header/footer khusus, menyematkan tag PDF/A‑2b, atau mengotomatiskan proses dalam API web ASP.NET Core. Kemungkinannya tak terbatas, dan fondasi yang Anda bangun di sini akan memungkinkan Anda menanganinya dengan percaya diri. + +Selamat coding, dan semoga PDF Anda selalu dapat dibaca! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/indonesian/net/programming-with-markdownsaveoptions/_index.md b/words/indonesian/net/programming-with-markdownsaveoptions/_index.md index 469155f3a2..fdb43481a2 100644 --- a/words/indonesian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/indonesian/net/programming-with-markdownsaveoptions/_index.md @@ -59,6 +59,8 @@ Pelajari cara mengonversi file DOCX menjadi Markdown menggunakan Aspose.Words de Pelajari cara mengekspor gambar dari dokumen Word saat mengonversinya ke format Markdown menggunakan Aspose.Words. ### [Konversi Word ke Markdown dalam C# – Panduan Lengkap dengan Ekstraksi Gambar](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) Pelajari cara mengonversi dokumen Word ke Markdown dengan ekstraksi gambar lengkap menggunakan C#. +### [Cara Menyimpan Gambar – Mengonversi DOCX ke Markdown dengan Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) +Pelajari cara menyimpan gambar saat mengonversi file DOCX ke format Markdown menggunakan Aspose.Words. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/indonesian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..1d4dd4edd8 --- /dev/null +++ b/words/indonesian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Pelajari cara menyimpan gambar saat mengonversi DOCX ke Markdown menggunakan + Aspose.Words. Panduan ini juga menunjukkan cara mengekstrak gambar dari Word dan + menyimpan Word sebagai Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: id +og_description: Cara menyimpan gambar saat mengonversi DOCX ke Markdown menggunakan + Aspose.Words. Panduan langkah demi langkah dengan kode C# lengkap. +og_title: Cara Menyimpan Gambar – Mengonversi DOCX ke Markdown dengan Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Cara Menyimpan Gambar – Mengonversi DOCX ke Markdown dengan Aspose.Words +url: /id/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Menyimpan Gambar – Mengonversi DOCX ke Markdown dengan Aspose.Words + +Pernah bertanya‑tanya **cara menyimpan gambar** ketika Anda harus mengubah file Word menjadi Markdown? Anda tidak sendirian. Banyak pengembang menemui masalah ketika konversi menumpahkan gambar menjadi tautan yang rusak, atau lebih parah—kehilangan gambar sama sekali. Kabar baiknya, Aspose.Words memberi Anda kontrol yang sangat detail, sehingga Anda dapat mengekstrak gambar dari Word, menentukan ke mana mereka disimpan, dan tetap mendapatkan output Markdown yang bersih. + +Dalam tutorial ini kami akan menelusuri contoh lengkap C# yang siap dijalankan yang menunjukkan **cara menyimpan gambar** ke folder khusus saat mengonversi `.docx` ke `.md`. Sepanjang jalan kami juga akan menyentuh **convert docx to markdown**, **extract images from word**, dan pertanyaan lebih luas tentang **how to convert docx** dengan cara yang memungkinkan Anda **save word as markdown** tanpa kehilangan aset apa pun. + +## Prasyarat + +- .NET 6.0 atau yang lebih baru (API berfungsi sama pada .NET Framework 4.7+) +- Lisensi Aspose.Words yang aktif atau trial gratis (versi gratis menambahkan watermark pada output, tetapi kode tetap berfungsi sama) +- Dokumen Word yang sudah berisi gambar (misalnya `DocWithImages.docx`) +- Visual Studio 2022 atau editor apa pun yang dapat membangun proyek C# + +> **Pro tip:** Jika Anda menggunakan trial, Anda masih dapat menguji logika penyimpanan gambar; cukup ingat bahwa PDF/MD akhir akan berisi watermark trial. + +## Gambaran Umum Solusi + +Secara garis besar prosesnya terlihat seperti ini: + +1. Muat file `.docx` sumber dengan `Document`. +2. Buat objek `MarkdownSaveOptions` dan sambungkan `IResourceSavingCallback`. +3. Di dalam callback, tentukan folder dan nama file untuk setiap gambar. +4. Simpan dokumen sebagai Markdown; callback menulis setiap gambar ke disk. + +Itulah inti **cara menyimpan gambar** selama konversi. Pola yang sama berlaku untuk tipe sumber daya lain (font, CSS, dll.) jika Anda membutuhkannya. + +## Langkah 1 – Muat DOCX yang Berisi Gambar + +Pertama kita memerlukan instance `Document` yang menunjuk ke file Word yang ingin Anda konversi. Tidak ada yang rumit di sini; hanya pemanggilan konstruktor standar. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Mengapa ini penting:** Memuat dokumen adalah satu‑satunya tempat Aspose mem-parsing XML Word, sehingga font yang hilang atau bagian yang rusak akan melemparkan pengecualian pada saat ini—sebelum kita mulai menyimpan gambar. + +## Langkah 2 – Siapkan MarkdownSaveOptions dengan Callback Penyimpanan Gambar + +Kelas `MarkdownSaveOptions` memungkinkan Anda menyisipkan logika ke proses penyimpanan melalui `ResourceSavingCallback`. Callback tersebut menerima objek `ResourceSavingArgs` untuk setiap sumber daya eksternal (gambar, CSS, dll.) yang harus ditulis Aspose. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementasi Callback + +Berikut implementasi lengkap `ImageSavingCallback`. Ia membuat sub‑folder `Images` di samping file Markdown, memberi setiap gambar nama berurutan (`img_0.png`, `img_1.jpg`, …), dan opsional memungkinkan Anda menyalurkan gambar ke tempat lain (misalnya, ke bucket cloud). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Bagaimana ini membantu Anda:** Dengan menyesuaikan `args.FileName` Anda mengontrol secara tepat **cara menyimpan gambar**—apakah dalam folder datar, hierarki berbasis tanggal, atau bahkan BLOB basis data. Callback dijalankan untuk setiap gambar, sehingga Anda tidak perlu memproses ulang file Markdown nanti. + +## Langkah 3 – Simpan Dokumen sebagai Markdown + +Setelah opsi dan callback siap, konversi sebenarnya hanya satu baris kode. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Saat baris tersebut selesai, Anda akan memiliki: + +- `Doc.md` – representasi Markdown dari konten Word Anda. +- `Images\img_0.png`, `Images\img_1.jpg`, … – setiap gambar yang diekstrak dari DOCX asli. + +## Contoh Lengkap yang Siap Dijalan + +Menggabungkan semuanya, berikut aplikasi konsol mandiri yang dapat Anda salin‑tempel ke proyek C# baru. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Hasil yang Diharapkan + +Setelah Anda menjalankan program: + +- Buka `C:\Docs\Doc.md` di editor teks apa pun. Anda akan melihat tautan gambar Markdown seperti `![](Images/img_0.png)`. +- Folder `Images` akan berisi setiap gambar yang diekstrak, bernama berurutan. +- File Markdown akan ditampilkan dengan benar di viewer mana pun yang mendukung gambar lokal (preview VS Code, GitHub, dll.). + +## Pertanyaan yang Sering Diajukan (FAQ) + +### Apakah ini bekerja dengan format gambar lain (SVG, TIFF)? + +Ya. `Path.GetExtension(args.FileName)` mempertahankan ekstensi asli, sehingga SVG, TIFF, BMP, dan bahkan EMF disimpan tanpa perubahan. Satu‑satunya catatan adalah beberapa renderer Markdown mungkin tidak menampilkan SVG secara inline; dalam kasus itu Anda dapat mengonversi SVG ke PNG terlebih dahulu. + +### Bagaimana jika saya perlu menyematkan gambar sebagai Base64 alih‑alih file terpisah? + +Di dalam `ResourceSaving`, Anda dapat mengganti penulisan file fisik dengan memory stream lalu memodifikasi tautan Markdown secara manual. Aspose tidak menyediakan saklar langsung “embed as Base64”, tetapi callback memberi Anda kontrol penuh atas `args.Stream`. + +### Bagaimana ini berbeda dari metode bawaan `ExportImages`? + +`ExportImages` mengekstrak semua gambar ke folder **tanpa** menghasilkan Markdown. Callback kami menggabungkan kedua aksi, menjamin bahwa nama file gambar cocok dengan referensi di dalam `.md`. Keselarasan itulah yang menjadi kunci **cara menyimpan gambar** dengan benar selama konversi. + +### Bisakah saya mengonversi beberapa file DOCX sekaligus (batch)? + +Tentu saja. Bungkus logika inti dalam loop `foreach (var file in Directory.GetFiles(..., "*.docx"))`, sesuaikan jalur output, dan gunakan kembali `ImageSavingCallback` yang sama. Hanya ingat untuk membuat `MarkdownSaveOptions` baru untuk setiap dokumen, karena `args.DestinationFileName` berubah tiap iterasi. + +## Kasus Khusus & Praktik Terbaik + +| Situasi | Hal yang Perlu Diwaspadai | Solusi yang Disarankan | +|-----------|----------------------|-----------------| +| **DOCX besar (ratusan MB)** | Tekanan memori saat memuat | Gunakan `LoadOptions` dengan `LoadFormat.Docx` dan set `LoadOptions.LoadFormat = LoadFormat.Docx` untuk memuat bagian secara streaming | +| **Nama gambar bentrok** | Jika sumber sudah memiliki `img_0.png` di folder target, Anda dapat menimpa | Tambahkan GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Folder output hanya‑baca** | Simpan akan melempar `UnauthorizedAccessException` | Pastikan proses berjalan dengan izin yang tepat atau pilih jalur yang dapat ditulisi | +| **Sumber daya non‑gambar (CSS, font)** | Callback juga menerima mereka | Lindungi dengan `if (args.ResourceType != ResourceType.Image) return;` (sudah ditunjukkan) | +| **Nama file Unicode** | Beberapa sistem file tidak menangani karakter tersebut | Gunakan `Path.GetInvalidFileNameChars()` untuk membersihkan `args.FileName` sebelum menetapkannya | + +## Topik Terkait yang Mungkin Ingin Anda Jelajahi Selanjutnya + +- **convert docx to markdown** dengan gaya heading khusus (gunakan `MarkdownSaveOptions.ExportImagesAsBase64` untuk gambar inline) +- **extract images from word** menggunakan `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/indonesian/net/working-with-fonts/_index.md b/words/indonesian/net/working-with-fonts/_index.md index 04a54904c1..948bd4e830 100644 --- a/words/indonesian/net/working-with-fonts/_index.md +++ b/words/indonesian/net/working-with-fonts/_index.md @@ -51,8 +51,8 @@ Bahasa Indonesia: [Atur Folder Font](./set-fonts-folder/) | Pelajari cara mengat | [Dapatkan Substitusi Tanpa Sufiks](./get-substitution-without-suffixes/) | Dalam tutorial ini, pelajari cara mendapatkan penggantian tanpa sufiks dalam dokumen Word dengan Aspose.Words untuk .NET. | | [Cara Mendeteksi Font di Aspose.Words – Menangani Peringatan & Pengaturan](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Pelajari cara mendeteksi font, menangani peringatan, dan mengatur pengaturan font dalam Aspose.Words untuk .NET. | | [Cara Memuat DOCX dan Mendeteksi Font yang Hilang – Panduan Lengkap C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Pelajari cara memuat file DOCX dan mendeteksi font yang hilang menggunakan Aspose.Words untuk .NET dengan panduan lengkap C#. | - | [Cara Menangkap Font di Aspose.Words – Panduan Lengkap](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Pelajari cara menangkap font yang digunakan dalam dokumen Word dengan Aspose.Words melalui panduan lengkap langkah demi langkah. | +| [Penggantian Font Aspose: Deteksi Font Hilang dalam Dokumen Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Pelajari cara mendeteksi font yang hilang dalam dokumen Word menggunakan Aspose.Words untuk .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/indonesian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..777fbaa9e9 --- /dev/null +++ b/words/indonesian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Pelajari cara menggunakan substitusi font Aspose untuk mendeteksi font + yang hilang saat memuat dokumen Word dan mengambil detail font yang hilang—panduan + langkah demi langkah. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: id +og_description: Menguasai substitusi font Aspose untuk mendeteksi font yang hilang + saat memuat dokumen Word dan mengambil informasi font yang hilang dengan kode C# + lengkap. +og_title: Penggantian Font Aspose – Deteksi Font yang Hilang dalam Dokumen Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Penggantian Font Aspose: Deteksi Font yang Hilang pada Dokumen Word' +url: /id/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Deteksi Font yang Hilang dalam Dokumen Word + +Pernah bertanya-tanya mengapa dokumen Word terlihat salah di mesin lain? Seringkali penyebabnya adalah font yang hilang, dan **Aspose font substitution** adalah alat yang memungkinkan Anda menemukan celah tersebut sebelum menjadi bencana visual. Dalam tutorial ini kami akan menjelaskan cara **mendeteksi font yang hilang** saat Anda **memuat dokumen Word**, dan kemudian **mengambil detail font yang hilang** sehingga Anda dapat memperbaiki atau menggantinya. + +Kami akan membahas semuanya mulai dari menyiapkan warning callback hingga mengambil daftar bersih font yang hilang. Pada akhirnya, Anda akan memiliki potongan kode C# siap‑jalankan yang memberi tahu secara tepat font mana yang tidak tersedia, dan Anda akan memahami mengapa hal ini penting untuk kesetiaan dokumen. + +--- + +## Prasyarat – Apa yang Anda Butuhkan Sebelum Memulai + +- **Aspose.Words for .NET** (v23.12 atau lebih baru disarankan). +- Lingkungan pengembangan .NET (Visual Studio, Rider, atau `dotnet` CLI). +- Contoh DOCX yang sengaja menggunakan font yang tidak Anda miliki—misalnya `DocumentWithMissingFont.docx`. +- Pengetahuan dasar C#—tidak perlu hal rumit, cukup kemampuan menjalankan aplikasi console. + +Jika ada yang tidak familiar, jeda sejenak dan instal paket NuGet: + +```bash +dotnet add package Aspose.Words +``` + +Itu saja. Tidak ada font tambahan, tidak ada layanan eksternal. + +--- + +## Langkah 1: Muat Dokumen Word (dan Memicu Pemeriksaan Font) + +Hal pertama yang Anda lakukan adalah **memuat dokumen Word**. Aspose.Words mem-parsing file dan, jika tidak dapat menemukan font yang dirujuk, ia menambahkan peringatan *FontSubstitution*. Berikut kode yang melakukan pemuatan: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Mengapa ini penting:** Memuat dokumen lebih awal memberi Aspose kesempatan untuk memindai setiap run teks, gaya, dan objek tersemat. Jika sebuah font tidak ditemukan di sistem atau di folder font khusus, Anda akan menerima peringatan nanti. + +--- + +## Langkah 2: Lampirkan Warning Callback untuk Menangkap Peristiwa Substitusi + +Aspose.Words menggunakan mekanisme callback untuk memberi tahu Anda tentang masalah seperti font yang hilang. Dengan menetapkan implementasi `IWarningCallback` ke `doc.WarningCallback`, Anda dapat menangkap setiap peringatan saat terjadi. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro tip:** Anda dapat melampirkan beberapa callback (mis., logging, pembaruan UI) dengan membungkusnya dalam pola komposit, tetapi untuk tutorial ini satu callback saja sudah cukup jelas. + +--- + +## Langkah 3: Implementasikan Font Substitution Warning Callback + +Sekarang kita mendefinisikan kelas yang benar‑benarnya melakukan pekerjaan. Callback menerima objek `WarningInfo`; kita menyaring untuk `WarningType.FontSubstitution` dan menyimpan deskripsinya untuk penggunaan selanjutnya. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Apa yang terjadi:** Ketika Aspose menemukan font yang hilang, ia membuat peringatan seperti “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Callback kami mencetak baris itu dan menyimpannya. + +--- + +## Langkah 4: Proses Dokumen (Opsional) dan Kumpulkan Font yang Hilang + +Jika Anda hanya perlu **mendeteksi font yang hilang**, langkah pemuatan sudah cukup—peringatan akan muncul secara otomatis. Namun, banyak pengembang juga perlu **mengambil informasi font yang hilang** setelah melakukan beberapa operasi (mis., menyimpan, mengonversi). Di bawah ini kami memaksa operasi kecil—menyimpan ke PDF—untuk memastikan semua peringatan dikeluarkan, lalu kami mengambil pesan yang terkumpul. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Output console yang diharapkan** (contoh): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Perhatikan bagaimana setiap baris dengan jelas menyatakan font asli dan fallback yang dipilih Aspose. Itulah inti pelaporan **aspose font substitution**. + +--- + +## Langkah 5: Lanjutan – Menggunakan Sumber Font Kustom untuk Mengurangi Substitusi + +Kadang‑kadang Anda *memiliki* font yang hilang, hanya saja tidak berada di folder sistem default. Aspose.Words memungkinkan Anda menunjuk ke direktori kustom melalui `FontSettings`. Menambahkan langkah ini dapat secara dramatis mengurangi jumlah peringatan substitusi. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Mengapa menambahkan ini?** Jika Anda mendistribusikan dokumen ke berbagai mesin, menyertakan font yang diperlukan dalam folder yang diketahui memastikan tampilan visual yang sama di mana pun. Ini juga membuat rutinitas **deteksi font yang hilang** Anda lebih akurat karena Aspose memeriksa folder tersebut sebelum melakukan fallback. + +--- + +## Contoh Kerja Lengkap + +Menggabungkan semuanya, berikut program console siap‑salin‑tempel. Simpan sebagai `Program.cs` dan jalankan dengan `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Apa yang akan Anda lihat:** Jika DOCX sumber merujuk pada font yang tidak Anda miliki, console akan mencetak setiap baris substitusi diikuti oleh ringkasan singkat. Jika semua font tersedia, Anda akan mendapatkan pesan “No missing fonts were detected.”. + +--- + +## Kesalahan Umum & Cara Menghindarinya + +| Masalah | Mengapa Terjadi | Solusi | +|-------|----------------|-----| +| **Tidak ada peringatan muncul** | Dokumen hanya menggunakan font sistem, atau Anda sudah menambahkan folder kustom yang berisi font yang hilang. | Verifikasi bahwa DOCX benar‑benar merujuk pada font yang tidak tersedia. Anda dapat membukanya di Word dan mengubah sebuah paragraf ke font yang jarang (mis., “Papyrus”). | +| **Pesan duplikat** | Font yang sama digunakan dalam beberapa run, menyebabkan beberapa peringatan. | Hilangkan duplikat pada daftar dengan `Distinct()` jika Anda hanya membutuhkan satu set unik. | +| **Penurunan performa pada dokumen besar** | Setiap peringatan diproses pada thread UI. | Jalankan pemuatan dalam tugas latar belakang atau gunakan `Parallel.ForEach` untuk pemrosesan lanjutan. | +| **Font fallback yang salah** | fallback default Aspose mungkin tidak cocok dengan merek Anda. | Setel `FontSettings.SubstitutionSettings.DefaultFontName` ke fallback yang diinginkan (mis., “Calibri”). | + +--- + +## Memperluas Solusi – Mengekspor Font yang Hilang ke JSON + +Jika Anda membangun layanan web yang perlu melaporkan font yang hilang kembali ke klien, serialisasi daftar tersebut sangat mudah: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Sekarang API Anda dapat mengembalikan payload JSON bersih yang dapat dikonsumsi sistem lain. + +--- + +## Kesimpulan + +Dalam panduan ini kami mendemonstrasikan **Aspose font substitution** dari awal hingga akhir: memuat dokumen Word, melampirkan warning callback, menangkap setiap peristiwa *deteksi font yang hilang*, dan akhirnya **mengambil informasi font yang hilang** untuk pelaporan atau perbaikan. Dengan menambahkan folder font kustom opsional Anda dapat mengurangi daftar substitusi, dan dengan beberapa baris tambahan Anda bahkan dapat mengekspor hasilnya sebagai JSON. + +Ingat, integritas visual dokumen Anda bergantung pada font yang digunakan. Dengan teknik yang ditunjukkan di sini, Anda tidak akan lagi terkejut oleh fallback yang tidak terduga. + +Siap melangkah ke tahap berikutnya? Cobalah mengintegrasikan logika ini ke dalam pipeline pemrosesan dokumen yang lebih besar, atau jelajahi fitur Aspose.Words lainnya seperti embedding font (`doc.FontSettings.EmbeddedFonts`). Kemungkinannya tak terbatas, dan pengguna Anda akan berterima kasih atas output yang rapi. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/italian/net/ai-powered-document-processing/_index.md b/words/italian/net/ai-powered-document-processing/_index.md index 1a644a2079..2104bb90b6 100644 --- a/words/italian/net/ai-powered-document-processing/_index.md +++ b/words/italian/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ Infine, non dimenticare di dare un'occhiata al nostro [Lavorare con le opzioni d | [Lavorare con il modello AI di Google](./working-with-google-ai-model/) Migliora l'elaborazione dei tuoi documenti con Aspose.Words per .NET e Google AI per creare riepiloghi concisi senza sforzo. | | [Lavorare con il modello di intelligenza artificiale aperta](./working-with-open-ai-model/) | Ottieni un riepilogo efficiente dei documenti utilizzando Aspose.Words per .NET con i potenti modelli di OpenAI. Scopri subito questa guida completa. | | [Lavorare con le opzioni di riepilogo](./working-with-summarize-options/) | Impara a riassumere in modo efficace i documenti Word utilizzando Aspose.Words per .NET con la nostra guida dettagliata sull'integrazione dei modelli di intelligenza artificiale per ottenere informazioni rapide. | +| [Come utilizzare LLM con Aspose.Words – Riscrivere i paragrafi in C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Scopri come impiegare un modello LLM con Aspose.Words per .NET per riscrivere automaticamente i paragrafi in C#. | +| [Come controllare la grammatica in C# – Guida completa per documenti Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Scopri come utilizzare Aspose.Words per .NET per verificare la grammatica nei documenti Word con C# in modo semplice ed efficace. | +| [Riassumere documento Word in C# – Guida completa usando Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Scopri come utilizzare il modello Anthropic Claude con Aspose.Words per .NET per riassumere automaticamente i documenti Word in C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/italian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..f3b64221c5 --- /dev/null +++ b/words/italian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Impara come controllare la grammatica in un documento Word usando C#. + Questo tutorial copre anche come caricare un file DOCX in C# e utilizzare Aspose.Words + AI per risultati accurati. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: it +og_description: Come controllare la grammatica in un documento Word usando C#? Segui + questo tutorial per caricare un file DOCX con C# ed eseguire controlli grammaticali + basati sull'IA con Aspose.Words. +og_title: Come controllare la grammatica in C# – Guida completa passo passo +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Come controllare la grammatica in C# – Guida completa per i documenti Word +url: /it/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come controllare la grammatica in C# – Guida completa per documenti Word + +Ti sei mai chiesto **come controllare la grammatica** in un documento Word senza uscire dal tuo IDE? Non sei l’unico. Molti sviluppatori devono convalidare report generati dagli utenti, email automatiche o persino documentazione prima della pubblicazione. La buona notizia? Con Aspose.Words AI puoi farlo programmaticamente, e l’intero processo si integra perfettamente in un tipico workflow C#. + +In questa guida vedremo tutto ciò che devi sapere: dal caricamento di un file DOCX C# all’invocazione del correttore grammaticale AI e all’interpretazione dei risultati. Alla fine avrai a disposizione uno snippet pronto all’uso che stampa la gravità, il messaggio e la sostituzione suggerita per ogni problema—senza necessità di copie manuali. + +## Cosa imparerai + +- **Come controllare la grammatica** in un documento Word usando Aspose.Words AI. +- I passaggi esatti per **caricare un file DOCX C#** con la classe `Document`. +- Come gestire l’oggetto `GrammarCheckResult`, iterare sui problemi e produrre diagnostica utile. +- Trappole comuni (come licenze mancanti) e consigli per rendere la soluzione pronta per la produzione. + +> **Prerequisiti:** .NET 6.0+ (o .NET Framework 4.6+), Visual Studio 2022 (o qualsiasi IDE tu preferisca) e una licenza Aspose.Words for .NET (la versione di prova gratuita è sufficiente per i test). Se non hai ancora installato i pacchetti NuGet, esegui: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Ora, immergiamoci. + +## Passo 1: Caricare un file DOCX in C# + +Prima che possa avvenire qualsiasi controllo grammaticale, il documento deve essere caricato in memoria. Aspose.Words lo rende possibile con una sola riga, ma ci sono alcune sfumature da tenere a mente. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Perché è importante:** +- L’uso di `Path.Combine` garantisce la compatibilità cross‑platform. +- Il controllo di esistenza previene un crash a runtime che altrimenti nasconderebbe la logica di controllo grammaticale. +- Quando **carichi un file DOCX C#**, Aspose analizza tutti gli stili, intestazioni, piè di pagina e anche il testo nascosto, fornendo all’AI un quadro completo del documento. + +> **Consiglio esperto:** Se devi lavorare con stream (ad esempio file provenienti da un upload web), puoi sostituire la chiamata `new Document(docPath)` con `new Document(stream)`. + +## Passo 2: Scegliere il modello AI per il controllo grammaticale + +Aspose.Words AI supporta diversi modelli, da versioni leggere locali a varianti cloud basate su GPT. Per la maggior parte degli scenari, **GPT‑3.5 Turbo** offre un ottimo equilibrio tra velocità e precisione. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Perché scegliere GPT‑3.5 Turbo?** +- È sufficientemente veloce per l’elaborazione batch di decine di file al minuto. +- Il costo (se sei su un piano a pagamento) è inferiore rispetto a GPT‑4, pur catturando la maggior parte degli errori comuni. +- L’API gestisce automaticamente i limiti di token, così non è necessario suddividere manualmente documenti molto grandi. + +Se preferisci un approccio offline, sostituisci `AiModelType.Gpt35Turbo` con `AiModelType.Local` (richiede il pacchetto opzionale del modello offline). + +## Passo 3: Iterare sui problemi e visualizzare feedback utili + +L’oggetto `GrammarCheckResult` contiene una collezione di oggetti `GrammarIssue`. Ogni problema fornisce gravità, messaggio leggibile dall’uomo e una sostituzione suggerita. Stampiamoli in modo chiaro. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Cosa significano i campi:** +- `Severity` – tipicamente `Info`, `Warning` o `Error`. Considera `Error` come un errore da correggere prima della pubblicazione. +- `Message` – una descrizione concisa del problema (es. “Accordo soggetto‑verbo”). +- `SuggestedReplacement` – la correzione consigliata dall’AI; puoi applicarla automaticamente se ti fidi del modello, oppure presentarla a un revisore umano. + +> **Caso limite:** Alcuni problemi potrebbero avere un `SuggestedReplacement` vuoto (ad esempio suggerimenti di stile). In questi casi, segnala semplicemente la posizione per una revisione manuale. + +## Esempio completo funzionante + +Mettendo tutto insieme, ecco un’app console autonoma che puoi copiare‑incollare in un nuovo progetto .NET. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Output previsto (esempio):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Se esegui il programma su un documento privo di errori, vedrai la riga “✅ No grammar issues detected.”. + +## Gestire le trappole comuni + +| Problema | Perché accade | Soluzione rapida | +|----------|----------------|-------------------| +| **LicenseException** | Le librerie Aspose richiedono una licenza valida per l’uso in produzione. | Inserisci `License license = new License(); license.SetLicense("Aspose.Words.lic");` all’inizio di `Main`. | +| **Timeout di rete** | La chiamata al modello AI raggiunge il cloud e supera il timeout predefinito di 100 s. | Aumenta il timeout con `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` prima di chiamare `CheckGrammar`. | +| **Documenti grandi (> 10 MB)** | Alcuni modelli cloud troncano l’input. | Dividi il documento in sezioni usando `document.Sections` ed esegui i controlli per sezione, poi aggrega i risultati. | +| **Suggerimenti mancanti** | Il modello non è riuscito a generare una sostituzione (es. frase ambigua). | Registra il problema per revisione manuale; non applicare automaticamente suggerimenti vuoti. | + +## Estendere la soluzione + +- **Correzione automatica:** Scorri `grammarResult.Issues` e sostituisci il testo con `document.Range.Replace`. Assicurati di fare un backup del file originale prima. +- **Elaborazione batch:** Avvolgi l’intero flusso in un `foreach` su una cartella di file DOCX. Salva ogni report come file JSON per analisi successive. +- **Integrazione con ASP.NET:** Esporre un endpoint che accetta un DOCX caricato, esegue il controllo e restituisce un payload JSON con i problemi. + +## Illustrazione + +how to check grammar flow diagram + +*Il diagramma sopra visualizza il processo a tre passaggi: carica DOCX → esegui controllo grammaticale AI → output dei problemi.* + +## Conclusione + +Abbiamo coperto **come controllare la grammatica** in un documento Word usando C#, mostrato il codice esatto per **caricare un file DOCX C#** e spiegato come interpretare il feedback generato dall’AI. Con Aspose.Words AI ottieni un potente motore grammaticale basato su cloud che si integra senza soluzione di continuità in qualsiasi applicazione .NET. + +Quali sono i prossimi passi? Prova ad automatizzare il ciclo di correzione‑applicazione, sperimenta con il nuovo `AiModelType.Gpt4` per suggerimenti ancora più precisi, o combina questa soluzione con una libreria di controllo ortografico per una pipeline di revisione completa. Le possibilità sono praticamente infinite, e ora hai una solida base su cui costruire. + +Hai domande o incontri un caso limite difficile? Lascia un commento qui sotto, e buona programmazione! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/italian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/italian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..2444b7aa41 --- /dev/null +++ b/words/italian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Come utilizzare LLM per modificare documenti con Aspose – impara a sostituire + il testo dei paragrafi, connetterti a un LLM locale e riscrivere il testo usando + l'IA. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: it +og_description: Come utilizzare LLM per modificare documenti con Aspose. Questa guida + mostra come connettersi a un LLM locale, sostituire il testo dei paragrafi e riscrivere + il testo usando l'IA. +og_title: Come utilizzare LLM con Aspose.Words – Riscrivi i paragrafi in C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Come utilizzare LLM con Aspose.Words – Riscrivere i paragrafi in C# +url: /it/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come usare LLM con Aspose.Words – Riscrivere paragrafi in C# + +Ti sei mai chiesto **come usare LLM** per perfezionare un documento Word senza aprirlo manualmente? Non sei l'unico. Molti sviluppatori si trovano in difficoltà quando devono *sostituire il testo del paragrafo* programmaticamente ma non hanno un flusso di lavoro basato su AI pulito. + +In questo tutorial collegheremo un modello di linguaggio di grandi dimensioni locale, gli forniremo un frammento da un file `.docx`, gli chiederemo di **riscrivere il testo usando l'AI**, e infine salveremo il documento aggiornato—tutto con Aspose.Words. Alla fine avrai un'app console C# pronta all'uso che dimostra l'intero pipeline. + +> **Cosa otterrai:** un esempio completo e eseguibile, spiegazioni di ogni passaggio, suggerimenti per casi limite e idee per estendere la soluzione. + +## Cosa ti serve + +- **.NET 6+** (or .NET Framework 4.7.2 – il codice funziona su entrambi) +- **Aspose.Words for .NET** (pacchetto NuGet `Aspose.Words`) +- Un **server LLM locale** che espone un semplice endpoint HTTP `/generate` (ad es., Ollama, LMStudio, o un servizio Flask personalizzato) +- Una conoscenza di base di C# e del codice client HTTP + +Non sono richiesti SDK aggiuntivi; tutto il resto vive nel codice che scriveremo insieme. + +## Passo 1: Come usare LLM per sostituire il testo del paragrafo + +La prima cosa da fare è identificare il paragrafo che vogliamo modificare. Aspose.Words lo rende un gioco da ragazzi esponendo un modello di oggetti ricco. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Perché è importante:** +Selezionare il nodo corretto impedisce di sovrascrivere accidentalmente intestazioni o tabelle. Usando l'approccio **replace paragraph text** manteniamo intatta la struttura del documento toccando solo il contenuto di nostro interesse. + +> **Consiglio professionale:** Se il tuo documento ha sezioni di lunghezza variabile, usa `document.GetChildNodes(NodeType.Paragraph, true)` e LINQ per individuare un paragrafo in base al suo testo o stile. + +## Passo 2: Connettersi a un endpoint LLM locale + +Ora che abbiamo il testo, dobbiamo inviarlo al LLM. L'esempio utilizza una semplice classe wrapper `LocalLargeLanguageModel` che nasconde la gestione HTTP. Sentiti libero di sostituirla con chiamate `HttpClient` se preferisci. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Perché ci connettiamo in questo modo:** +Una configurazione **connect to local llm** elimina la latenza, mantiene i dati on‑premise e evita i costi delle API. Il wrapper rende anche il codice successivo più pulito, permettendoci di concentrarci sulla logica di **rewrite text using ai**. + +## Passo 3: Riscrivere il testo usando l'AI con Aspose.Words + +Con il testo del paragrafo a disposizione e il LLM pronto, creiamo un prompt che indica al modello esattamente ciò che vogliamo—riscrivere in tono formale. Puoi modificare il prompt per altri stili (amichevole, tecnico, ecc.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Perché funziona:** +I LLM sono guidati dal prompt; fornire istruzioni esplicite (“Rewrite … in a formal tone”) produce risultati coerenti. Il passo **rewrite text using ai** è il cuore del tutorial – dimostra come l'AI possa essere integrata direttamente nei flussi di lavoro dei documenti. + +## Passo 4: Modificare il documento e salvare le modifiche + +Ora sostituiamo i run originali con il nuovo contenuto. Aspose.Words memorizza il testo in oggetti `Run`, quindi cancellarli prima evita artefatti di formattazione residui. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Nota sui casi limite:** +Se il paragrafo originale conteneva formattazione mista (grassetto, corsivo) potresti voler preservare gli stili. In tal caso, crea un nuovo `Run`, copia le impostazioni originali di `Font`, quindi imposta il suo `Text` a `revisedText`. + +## Esempio completo funzionante + +Di seguito trovi l'intero programma che puoi copiare‑incollare in un progetto console. Ricorda di installare prima il pacchetto NuGet Aspose.Words (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Output previsto + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Apri `output.docx` – vedrai che il terzo paragrafo ora contiene la versione perfezionata. + +## Domande comuni e problemi + +| Domanda | Risposta | +|----------|--------| +| **E se il mio LLM restituisce JSON con campi extra?** | Regola `GenerateText` per deserializzare la proprietà corretta o analizza manualmente la risposta. | +| **Posso elaborare più paragrafi contemporaneamente?** | Sì – itera su `document.FirstSection.Body.Paragraphs` e applica la stessa logica del prompt, magari aggiungendo un indice del paragrafo al prompt per il contesto. | +| **Il mio server LLM utilizza l'autenticazione?** | Aggiungi un header al `HttpClient` prima del POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **La formattazione viene persa dopo la sostituzione.** | Preserva le impostazioni originali di `Run.Font`: crea un nuovo `Run`, copia `originalRun.Font.Clone()`, quindi imposta il suo `Text`. | +| **Il LLM a volte restituisce stringhe vuote.** | Implementa un fallback – se `revisedText.Trim().Length == 0`, mantieni il testo originale o riprova con un prompt più semplice. | + +## Estendere la soluzione + +Ora che hai padroneggiato **how to use llm** per un singolo paragrafo, considera i seguenti passi successivi: + +- **Elaborazione batch:** Scorri tutti i paragrafi e riscrivili in uno stile scelto (ad es., “rendi tutto il testo conciso”). +- **Riscrittura consapevole dello stile:** Passa il nome dello stile del paragrafo originale nel prompt affinché il LLM rispetti intestazioni vs testo del corpo. +- **Integrazione con una pipeline CI:** Automatizza la rifinitura dei documenti come parte del processo di build della documentazione. +- **Prompt alternativi:** Prova “summarize this paragraph” o “translate this paragraph to Spanish” per esplorare tutta la potenza di **rewrite text using ai**. + +## Conclusione + +Abbiamo percorso l'intero flusso di **how to use llm** con Aspose.Words: caricamento di un documento, **connect to local llm**, estrazione di un paragrafo, **rewrite text using ai**, **replace paragraph text**, e infine salvataggio del risultato. Il codice è autonomo, funziona subito, e mostra un modo pratico per combinare l'AI con l'automazione tradizionale dei documenti. + +Provalo, modifica i prompt, e lascia + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/italian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/italian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..02d95d46ba --- /dev/null +++ b/words/italian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Riassumi rapidamente un documento Word e traduci il testo con Google. + Scopri come utilizzare Anthropic Claude, creare un riassunto da un report e tradurre + il testo con Google in un unico tutorial C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: it +og_description: Riassumi il documento Word istantaneamente e traduci il testo con + Google. Questa guida mostra come utilizzare Anthropic Claude e Aspose.Words per + creare un riassunto dal report. +og_title: Riassumi documento Word in C# – Passo dopo passo con Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Riassumere un documento Word in C# – Guida completa con Anthropic Claude +url: /it/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Riassumere un documento Word in C# – Guida completa usando Anthropic Claude + +Hai mai avuto bisogno di **riassumere un documento Word** ma ti sei sentito bloccato a destreggiarti tra API e codice prolisso? Non sei solo. In molti progetti—relazioni annuali, memorie legali o articoli di ricerca—estrarre una panoramica concisa è un problema quotidiano. Fortunatamente, la combinazione di Aspose.Words e Anthropic Claude lo rende un gioco da ragazzi, e puoi anche aggiungere una rapida traduzione Google mentre ci sei. + +In questo tutorial ti guideremo passo passo su tutto ciò che devi sapere: caricare un grande .docx, chiamare il modello Claude V2 per generare un riassunto, tradurre una frase con Google e gestire i problemi più comuni. Alla fine sarai in grado di **creare un riassunto da un report** con poche righe di C#. + +## Prerequisiti + +- .NET 6+ (o .NET Core 3.1) installato +- Una licenza Aspose.Words per .NET (o una prova gratuita) +- Accesso all'API Anthropic Claude V2 (avrai bisogno di una chiave API) +- Connettività Internet per Google Translator +- Visual Studio 2022 o il tuo IDE C# preferito + +Non sono necessari pacchetti NuGet aggiuntivi oltre a `Aspose.Words` e `Aspose.Words.AI`; la classe Translator è inclusa nella stessa libreria. + +## Passo 1 – Caricare il documento Word sorgente + +La prima cosa da fare è portare il file .docx in memoria. Aspose.Words rende questo banale e, grazie al suo parser robusto, funziona con layout complessi, tabelle e anche immagini incorporate. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Perché è importante:** Caricare il documento in anticipo ti permette di ispezionare le proprietà (autore, conteggio parole) e decidere se un riassunto è necessario. I file di grandi dimensioni > 10 MB possono consumare molta memoria, quindi considera `LoadOptions` con `LoadFormat.Docx` se incontri problemi di prestazioni. + +## Passo 2 – Riassumere il documento con Anthropic Claude + +Ora arriva la parte divertente: passiamo il documento a Claude V2. La classe `Summarizer` astrae la chiamata HTTP, la gestione dei token e i retry. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Come funziona:** +> 1. **Chunking** – Aspose divide automaticamente il documento in parti gestibili (≈ 2 KB ciascuna) per rispettare i limiti di token di Claude. +> 2. **Prompt engineering** – La libreria invia un prompt come “Provide a concise executive summary of the following text:” seguito da ciascun chunk. +> 3. **Aggregation** – Claude restituisce riassunti parziali che vengono uniti nel `summaryText` finale. + +### Casi limite e consigli + +- **Report molto grandi** (> 100 pagine) possono superare la finestra di contesto di Claude. Se vedi output troncato, imposta `SummarizerOptions.MaxChunkSize` a valori più piccoli. +- **Fonte non‑inglese** – Claude funziona al meglio con l'inglese; per altre lingue, traduci prima (vedi Passo 4) poi riassumi. +- **Limiti di velocità** – Anthropic impone limiti per minuto. Avvolgi la chiamata in un ciclo di retry con back‑off esponenziale se ricevi una risposta `429`. + +## Passo 3 – Verificare l'output del riassunto + +Prima di procedere, è buona pratica verificare che il riassunto non sia vuoto e rispetti le aspettative di lunghezza (es., 5‑10 % del conteggio parole originale). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Se il rapporto sembra troppo basso (< 2 %), potresti voler regolare la proprietà `SummarizerOptions.SummaryLength` per richiedere un output più lungo. + +## Passo 4 – Tradurre il testo con Google + +Ora che abbiamo un riassunto inglese nitido, aggiungiamo una rapida traduzione. La classe `Translator` utilizza l'endpoint pubblico di traduzione di Google (non è necessaria una chiave API per frasi brevi, ma in produzione dovresti passare alla Cloud Translation API a pagamento). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Perché Google?** È veloce, ampiamente supportato, e l'endpoint gratuito gestisce stringhe brevi senza autenticazione. Per traduzioni di massa, raggruppa le chiamate e rispetta i limiti di utilizzo di Google. + +### Tradurre l'intero riassunto (opzionale) + +Se ti serve l'intero riassunto in spagnolo (o qualsiasi altra lingua), passa semplicemente `summaryText` a `Translator.Translate`. Tieni presente il limite di dimensione della richiesta di 5 KB; potresti dover suddividere il riassunto in chunk più piccoli. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Passo 5 – Salvare il riassunto in un file Word (Bonus) + +Spesso l'utente finale si aspetta un documento scaricabile anziché un output su console. Creiamo un nuovo `.docx` che contenga sia la versione inglese che quella spagnola. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Consiglio pratico + +Quando inserisci il riassunto in un nuovo file Word, mantieni la formattazione originale minima (usa lo stile `Normal`). Stili complessi dalla sorgente possono causare spostamenti di layout inattesi. + +## Esempio completo funzionante + +Di seguito trovi il programma **completo, pronto per il copia‑incolla** che collega tutto. Si compila con un singolo `dotnet run` dopo aver aggiunto i pacchetti Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Output console previsto** (troncato per brevità): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Domande frequenti + +| Domanda | Risposta | +|----------|--------| +| *Posso usare un modello AI diverso?* | Sì. Sostituisci `SummarizerModel.AnthropicClaudeV2` con `SummarizerModel.OpenAIGPT4` (richiede una chiave OpenAI) o con qualsiasi provider elencato nell'enum. | +| *E se il documento contiene sezioni protette?* | Aspose lancerà `ProtectedDocumentException`. Sbloccalo prima con `LoadOptions.Password` o richiedi una copia non protetta. | +| *Ho bisogno di una licenza Aspose a pagamento per la produzione?* | La versione di prova gratuita funziona fino a 20 pagine. Per report più grandi, una licenza rimuove il limite di pagine e aggiunge ottimizzazioni delle prestazioni. | +| *Il traduttore Google è affidabile per blocchi di testo lunghi?* | Per stringhe brevi va bene. Per traduzioni di massa, passa alla Cloud Translation API per evitare limiti di dimensione delle richieste e ottenere una migliore rilevazione della lingua. | + +## Conclusione + +Abbiamo appena **riassunto un documento Word** usando Aspose.Words insieme al modello Anthropic Claude V2, poi **tradotto il testo con Google** a + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/italian/net/basic-conversions/_index.md b/words/italian/net/basic-conversions/_index.md index a9a5ab91b4..d9f19d35d3 100644 --- a/words/italian/net/basic-conversions/_index.md +++ b/words/italian/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [Convertire Word in PDF in C# usando Aspose.Words – Guida](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Scopri come convertire documenti Word in PDF con C# usando Aspose.Words, con esempi di codice e passaggi dettagliati. | | [Salva Word come PDF con Aspose.Words – Guida completa C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Scopri come salvare documenti Word in PDF usando Aspose.Words con una guida completa in C#. | | [Salva Docx come PDF con Aspose.Words – Guida completa C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Scopri come salvare i file Docx come PDF usando Aspose.Words con una guida completa in C#. | +| [Crea PDF accessibile da DOCX in C# – Come convertire Word in PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Scopri come creare PDF accessibili da file DOCX usando C# e Aspose.Words, con esempi di codice e impostazioni di accessibilità. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/italian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..a98e94912c --- /dev/null +++ b/words/italian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: Crea PDF accessibile da un file DOCX in C#. Scopri come convertire Word + in PDF, salvare Word come PDF ed esportare docx in PDF con conformità di accessibilità. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: it +og_description: Crea PDF accessibile da un file DOCX in C#. Segui questo tutorial + passo‑passo per convertire Word in PDF, salvare Word come PDF ed esportare docx + in PDF con piena accessibilità. +og_title: Crea PDF accessibile da DOCX in C# – Guida rapida +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Crea PDF accessibile da DOCX in C# – Come convertire Word in PDF +url: /it/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crea PDF accessibile da DOCX in C# – Come convertire Word in PDF + +Hai mai dovuto **creare PDF accessibile** da un documento Word ma non sapevi quale libreria fosse affidabile? Non sei solo: molti sviluppatori incontrano lo stesso ostacolo quando devono rispettare gli standard PDF/UA per l'accessibilità. La buona notizia è che con Aspose.Words puoi trasformare un `.docx` in un PDF conforme in poche righe di codice, ottenendo un file che i lettori di schermo riescono davvero a leggere. + +In questo tutorial vedremo tutto ciò che devi sapere per **convertire Word in PDF**, **salvare Word come PDF**, e persino **esportare docx to PDF** con conformità PDF/UA‑1 (o PDF/UA‑2). Alla fine avrai a disposizione uno snippet C# pronto all'uso, comprenderai perché ogni impostazione è importante e sarai in grado di gestire casi particolari come font mancanti o impostazioni di pagina personalizzate. + +## Prerequisiti + +- .NET 6.0 o successivo (il codice funziona anche con .NET Framework 4.6+) +- Una licenza Aspose.Words per .NET (o una chiave di valutazione gratuita) +- Conoscenze di base di C# e Visual Studio (o qualsiasi IDE preferisci) +- Un file DOCX che desideri rendere accessibile (lo chiameremo `input.docx`) + +> **Pro tip:** Se usi la versione di prova gratuita, ricorda che il PDF generato conterrà una piccola filigrana “Evaluation”. + +## Passo 1: Installa il pacchetto NuGet Aspose.Words + +Prima di poter scrivere codice C#, la libreria Aspose.Words deve essere aggiunta al progetto. + +```bash +dotnet add package Aspose.Words +``` + +L'esecuzione del comando ripristina `Aspose.Words.dll` e rende disponibili gli spazi dei nomi. Questo passaggio è fondamentale perché la classe `PdfSaveOptions` si trova all'interno di quel pacchetto. + +## Passo 2: Carica il file DOCX di origine + +Il primo passo logico è caricare il documento Word che vuoi trasformare. Pensalo come aprire un libro prima di iniziare a modificare le sue pagine. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Perché è importante:** Il caricamento del documento crea una rappresentazione in memoria che include tutti gli stili, le immagini e i metadati. Se il file è corrotto, `Document` lancerà un'eccezione—quindi potresti voler avvolgere questo codice in un blocco try/catch per il codice di produzione. + +## Passo 3: Configura le opzioni di salvataggio PDF per l'accessibilità + +Aspose.Words ti permette di specificare il livello di conformità PDF. PDF/UA‑1 è lo standard di accessibilità originale, mentre PDF/UA‑2 aggiunge alcuni tag più recenti. Scegli quello che corrisponde ai requisiti del tuo cliente. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Cosa fa “Compliance”:** Impostare `PdfCompliance.PdfUax1` indica ad Aspose.Words di inserire i tag corretti, l'ordine di lettura logico e il testo alternativo per le immagini—esattamente ciò che il software di lettura schermo ricerca. + +## Passo 4: Salva il documento come PDF accessibile + +Ora il lavoro pesante è terminato; basta istruire Aspose.Words a scrivere il file PDF usando le opzioni appena definite. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Dopo l'esecuzione di questa riga, troverai `output.pdf` nella cartella specificata. Aprilo con Adobe Acrobat Reader e controlla **File → Properties → Description → PDF/A and PDF/UA** per verificare la conformità. + +## Passo 5: Verifica l'accessibilità (Opzionale ma consigliato) + +Sebbene il codice garantisca un output PDF con tag, un rapido controllo manuale aiuta a individuare eventuali contenuti personalizzati che potrebbero richiedere attenzione aggiuntiva. + +1. Apri `output.pdf` in Adobe Acrobat Pro. +2. Vai a **Tools → Accessibility → Full Check**. +3. Esegui il controllo e rivedi eventuali avvisi (ad esempio testo alternativo mancante per immagini personalizzate). + +Se il report non mostra errori, hai creato con successo **PDF accessibile** che soddisfa gli standard PDF/UA‑1. + +## Varianti comuni & casi particolari + +### Convertire più file DOCX in un ciclo + +Se hai un batch di documenti, avvolgi la logica di caricamento‑salvataggio all'interno di un ciclo `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Passare a PDF/UA‑2 + +Basta modificare l'enumerazione `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Gestire font personalizzati + +Se il tuo DOCX utilizza font non installati sul server, incorporali: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +L'incorporamento garantisce che il PDF abbia lo stesso aspetto su qualsiasi macchina—un dettaglio cruciale quando **esporti docx to pdf** per stakeholder esterni. + +## Esempio completo funzionante + +Di seguito trovi il programma completo, pronto per l'esecuzione. Copialo in una console app, aggiusta i percorsi e premi **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Risultato atteso:** Un file chiamato `output.pdf` che si apre in qualsiasi visualizzatore PDF, contiene i tag di accessibilità corretti e può essere condiviso con utenti che dipendono da tecnologie assistive. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Testo alternativo immagine:* *create accessible pdf example – screenshot of a PDF/UA‑1 compliant document opened in Adobe Acrobat.* + +## Domande frequenti + +- **Funziona con .NET Core?** + Assolutamente. Aspose.Words è cross‑platform, quindi lo stesso codice gira su Windows, Linux e macOS. + +- **Cosa succede se il mio DOCX contiene macro?** + Le macro vengono ignorate durante la conversione; solo il contenuto visibile viene renderizzato nel PDF. + +- **Posso aggiungere un titolo personalizzato nei metadati PDF?** + Sì—imposta `pdfSaveOptions.Metadata.Title = "Your Custom Title";` prima di salvare. + +- **PDF/UA‑2 è ampiamente supportato?** + La maggior parte dei lettori PDF moderni comprende PDF/UA‑2, ma se ti rivolgi a strumenti più vecchi, resta con PDF/UA‑1. + +## Conclusione + +Ti abbiamo appena mostrato come **creare PDF accessibile** da un file DOCX usando Aspose.Words, coprendo tutto, dall'installazione del pacchetto NuGet alla verifica della conformità PDF/UA. Seguendo questi passaggi potrai **convertire Word in PDF**, **salvare Word come PDF**, e **esportare docx to PDF** rispettando gli standard di accessibilità—una competenza indispensabile per qualsiasi sviluppatore che lavori su pipeline documentali aziendali. + +Pronto per la prossima sfida? Prova ad aggiungere un'intestazione/piè di pagina personalizzato, incorporare un tag PDF/A‑2b, o automatizzare il processo in un'API web ASP.NET Core. Le possibilità sono infinite, e le basi che hai costruito qui ti permetteranno di affrontarle con sicurezza. + +Buon coding, e che i tuoi PDF siano sempre leggibili! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/italian/net/programming-with-markdownsaveoptions/_index.md b/words/italian/net/programming-with-markdownsaveoptions/_index.md index b439838a1a..1598d1683d 100644 --- a/words/italian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/italian/net/programming-with-markdownsaveoptions/_index.md @@ -35,13 +35,13 @@ | [Come salvare Markdown da DOCX – Guida passo‑passo](./how-to-save-markdown-from-docx-step-by-step-guide/) | Scopri come salvare documenti DOCX in Markdown con una guida passo‑passo completa. | | [Come salvare Markdown da Word – Guida completa C#](./how-to-save-markdown-from-word-complete-c-guide/) | Scopri come salvare documenti Word in formato Markdown con una guida completa in C#. | | [Come salvare Markdown da Word – Guida completa](./how-to-save-markdown-from-word-complete-guide/) | Scopri come salvare documenti Word in formato Markdown con una guida completa. | - | [Come esportare LaTeX da Word: Converti DOCX in Markdown con Aspose](./how-to-export-latex-from-word-convert-docx-to-markdown-with/) | Scopri come esportare equazioni LaTeX da documenti Word convertendoli in Markdown con Aspose.Words per .NET. | | [Converti Word in Markdown – Incorpora immagini come Base64](./convert-word-to-markdown-embed-images-as-base64/) | Converti documenti Word in Markdown incorporando le immagini direttamente come stringhe Base64 per un output autonomo. | | [Come esportare LaTeX: Converti DOCX in Markdown e TXT](./how-to-export-latex-convert-docx-to-markdown-txt/) | Scopri come convertire file DOCX in Markdown e TXT mantenendo le equazioni LaTeX con Aspose.Words per .NET. | | [Come rinominare le immagini durante la conversione da DOCX a Markdown](./how-to-rename-images-when-converting-docx-to-markdown/) | Scopri come rinominare le immagini durante la conversione da DOCX a Markdown con Aspose.Words per .NET. | | [Salva docx come markdown con Aspose.Words – Guida completa C#](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Impara a convertire file DOCX in Markdown con Aspose.Words usando C# con una guida completa. | | [Salva immagini Word – Converti Word in Markdown con Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) | Salva le immagini da documenti Word e convertili in Markdown usando Aspose.Words per .NET. | +| [Come salvare immagini – Converti DOCX in Markdown con Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Scopri come estrarre e salvare le immagini da file DOCX durante la conversione in Markdown usando Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/italian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..6d6ea4d32a --- /dev/null +++ b/words/italian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Scopri come salvare le immagini durante la conversione di un DOCX in + Markdown usando Aspose.Words. Questa guida mostra anche come estrarre le immagini + da Word e salvare Word come Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: it +og_description: Come salvare le immagini durante la conversione di un DOCX in Markdown + usando Aspose.Words. Guida passo‑passo con codice C# completo. +og_title: Come salvare le immagini – Converti DOCX in Markdown con Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Come salvare le immagini – Convertire DOCX in Markdown con Aspose.Words +url: /it/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come salvare le immagini – Convertire DOCX in Markdown con Aspose.Words + +Ti sei mai chiesto **come salvare le immagini** quando devi trasformare un file Word in Markdown? Non sei il solo. Molti sviluppatori si trovano di fronte a un muro quando la conversione lascia le immagini in un mare di link rotti, o peggio—le perde del tutto. La buona notizia è che Aspose.Words ti offre un controllo fine, così puoi estrarre le immagini da Word, decidere dove posizionarle e ottenere comunque un output Markdown pulito. + +In questo tutorial percorreremo un esempio completo, pronto‑da‑eseguire in C#, che mostra **come salvare le immagini** in una cartella dedicata durante la conversione di un `.docx` in `.md`. Lungo il percorso parleremo anche di **convert docx to markdown**, **extract images from word** e della questione più ampia di **how to convert docx** in modo da **save word as markdown** senza perdere alcuna risorsa. + +## Prerequisiti + +- .NET 6.0 o successivo (l'API funziona allo stesso modo su .NET Framework 4.7+) +- Una licenza attiva di Aspose.Words o una prova gratuita (la versione gratuita aggiunge una filigrana all'output, ma il codice funziona allo stesso modo) +- Un documento Word che contiene già delle immagini (ad es., `DocWithImages.docx`) +- Visual Studio 2022 o qualsiasi editor in grado di compilare progetti C# + +> **Pro tip:** Se stai usando una versione di prova, puoi comunque testare la logica di salvataggio delle immagini; ricorda solo che il PDF/MD finale conterrà la filigrana della versione di prova. + +## Panoramica della soluzione + +A livello alto il processo è così: + +1. Carica il file `.docx` sorgente con `Document`. +2. Crea un oggetto `MarkdownSaveOptions` e collega un `IResourceSavingCallback`. +3. Nel callback, decidi la cartella e il nome file per ogni immagine. +4. Salva il documento come Markdown; il callback scrive ogni immagine su disco. + +Questo è il nocciolo di **come salvare le immagini** durante una conversione. Lo stesso schema funziona per altri tipi di risorse (font, CSS, ecc.) se ne avrai bisogno. + +## Passo 1 – Caricare il DOCX contenente le immagini + +Per prima cosa ci serve un'istanza `Document` che punti al file Word da convertire. Nulla di speciale; basta una chiamata al costruttore. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Perché è importante:** Il caricamento del documento è l’unico punto in cui Aspose analizza l'XML di Word, quindi eventuali font mancanti o parti corrotte genereranno un'eccezione subito—prima ancora di iniziare a salvare le immagini. + +## Passo 2 – Configurare MarkdownSaveOptions con un callback per il salvataggio delle immagini + +La classe `MarkdownSaveOptions` ti permette di agganciarti al processo di salvataggio tramite `ResourceSavingCallback`. Questo callback riceve un oggetto `ResourceSavingArgs` per ogni risorsa esterna (immagini, CSS, ecc.) che Aspose deve scrivere. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementazione del callback + +Di seguito trovi l'implementazione completa di `ImageSavingCallback`. Crea una sottocartella `Images` accanto al file Markdown, assegna a ogni immagine un nome sequenziale (`img_0.png`, `img_1.jpg`, …) e, opzionalmente, ti consente di inviare l'immagine altrove (ad es., a un bucket cloud). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Come ti aiuta:** Personalizzando `args.FileName` controlli esattamente **come salvare le immagini**—che sia in una cartella piatta, in una gerarchia basata su data, o addirittura in un BLOB di database. Il callback viene eseguito per ogni immagine, così non dovrai più post‑processare il file Markdown in seguito. + +## Passo 3 – Salvare il documento come Markdown + +Ora che le opzioni e il callback sono pronti, la conversione vera e propria è una singola riga. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Al termine dell’esecuzione avrai: + +- `Doc.md` – la rappresentazione Markdown del contenuto Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … – ogni immagine estratta dal DOCX originale. + +## Esempio completo, pronto‑da‑eseguire + +Mettendo tutto insieme, ecco un’app console autonoma che puoi copiare‑incollare in un nuovo progetto C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Risultato atteso + +Dopo aver eseguito il programma: + +- Apri `C:\Docs\Doc.md` in un qualsiasi editor di testo. Vedrai collegamenti Markdown alle immagini come `![](Images/img_0.png)`. +- La cartella `Images` conterrà ogni immagine estratta, nominata in ordine sequenziale. +- Il file Markdown verrà renderizzato correttamente in qualsiasi visualizzatore che supporti immagini locali (anteprima di VS Code, GitHub, ecc.). + +## Domande frequenti (FAQ) + +### Funziona con altri formati immagine (SVG, TIFF)? + +Sì. `Path.GetExtension(args.FileName)` conserva l’estensione originale, quindi SVG, TIFF, BMP e persino EMF vengono salvati invariati. L’unica avvertenza è che alcuni renderizzatori Markdown potrebbero non visualizzare SVG inline; in tal caso potresti convertire SVG in PNG in anticipo. + +### E se volessi incorporare le immagini come Base64 invece di file separati? + +All’interno di `ResourceSaving` puoi sostituire la scrittura su file fisico con uno stream in memoria e poi modificare manualmente il collegamento Markdown. Aspose non espone uno switch diretto “embed as Base64”, ma il callback ti dà pieno controllo su `args.Stream`. + +### In che modo questo differisce dal metodo integrato `ExportImages`? + +`ExportImages` estrae tutte le immagini in una cartella **senza** generare Markdown. Il nostro callback accoppia le due azioni, garantendo che i nomi dei file immagine corrispondano ai riferimenti all’interno del `.md`. Questo allineamento è la chiave per **come salvare le immagini** correttamente durante la conversione. + +### Posso convertire più file DOCX in batch? + +Assolutamente. Avvolgi la logica principale in un ciclo `foreach (var file in Directory.GetFiles(..., "*.docx"))`, adatta i percorsi di output e riutilizza lo stesso `ImageSavingCallback`. Ricorda solo di creare un nuovo `MarkdownSaveOptions` per ogni documento, perché `args.DestinationFileName` cambia ad ogni iterazione. + +## Casi limite e buone pratiche + +| Situazione | Cosa controllare | Correzione consigliata | +|------------|------------------|------------------------| +| **DOCX di grandi dimensioni (centinaia di MB)** | Pressione sulla memoria durante il caricamento | Usa `LoadOptions` con `LoadFormat.Docx` e imposta `LoadOptions.LoadFormat = LoadFormat.Docx` per caricare a flusso parti | +| **Collisione di nomi immagine** | Se la sorgente ha già `img_0.png` nella cartella di destinazione, potresti sovrascrivere | Aggiungi un GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Cartella di output di sola lettura** | Il salvataggio genera `UnauthorizedAccessException` | Assicurati che il processo abbia i permessi appropriati o scegli un percorso scrivibile | +| **Risorse non‑immagine (CSS, font)** | Il callback le riceve comunque | Filtra con `if (args.ResourceType != ResourceType.Image) return;` (già mostrato) | +| **Nomi file Unicode** | Alcuni filesystem gestiscono male i caratteri | Usa `Path.GetInvalidFileNameChars()` per sanificare `args.FileName` prima di assegnarlo | + +## Argomenti correlati da esplorare + +- **convert docx to markdown** con stili di intestazione personalizzati (usa `MarkdownSaveOptions.ExportImagesAsBase64` per immagini inline) +- **extract images from word** usando il metodo `Document.GetChildNodes(NodeType.Shape, true)` + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/italian/net/working-with-fonts/_index.md b/words/italian/net/working-with-fonts/_index.md index f6328d0bf3..3a1fe6c47c 100644 --- a/words/italian/net/working-with-fonts/_index.md +++ b/words/italian/net/working-with-fonts/_index.md @@ -52,6 +52,7 @@ Che tu voglia formattare il testo con diversi font, impostare regole di sostituz | [Come rilevare i font in Aspose.Words – Gestire avvisi e impostazioni](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Scopri come rilevare i font, gestire avvisi e impostazioni in Aspose.Words per .NET con questa guida passo passo. | | [Come catturare i font in Aspose.Words – Guida completa](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Scopri come catturare i font nei documenti Word con Aspose.Words, passo dopo passo, con esempi di codice C#. | | [Come caricare DOCX e rilevare i font mancanti – Guida completa C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Scopri come caricare un documento DOCX e individuare i font mancanti usando Aspose.Words per .NET con un esempio completo in C#. | +| [Sostituzione dei font Aspose: Rileva i font mancanti nei documenti Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Scopri come rilevare i font mancanti nei documenti Word usando Aspose.Words per .NET con questa guida passo passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/italian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..87b93a644b --- /dev/null +++ b/words/italian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Scopri come utilizzare la sostituzione dei caratteri Aspose per rilevare + i font mancanti quando carichi un documento Word e recuperare i dettagli dei font + mancanti—guida passo‑passo. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: it +og_description: Padroneggia la sostituzione dei font Aspose per rilevare i font mancanti + durante il caricamento di un documento Word e recuperare le informazioni sui font + mancanti con codice C# completo. +og_title: Sostituzione dei Font Aspose – Rileva i Font Mancanti nei Documenti Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Sostituzione dei font Aspose: rileva i font mancanti nei documenti Word' +url: /it/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Rileva i Font Mancanti nei Documenti Word + +Ti sei mai chiesto perché un documento Word appare sbagliato su un altro computer? Spesso il colpevole è un font mancante, e **Aspose font substitution** è lo strumento che ti permette di individuare queste lacune prima che diventino un disastro visivo. In questo tutorial vedremo come **rilevare i font mancanti** nel momento in cui **carichi un documento Word**, e poi **recuperare i dettagli dei font mancanti** così da poterli correggere o sostituire. + +Copriremo tutto, dalla configurazione del callback di avviso all’estrazione di un elenco pulito dei font mancanti. Alla fine avrai a disposizione uno snippet C# pronto all’uso che ti indica esattamente quali font non sono stati trovati, e comprenderai perché questo è importante per la fedeltà del documento. + +--- + +## Prerequisiti – Cosa Serve Prima di Iniziare + +- **Aspose.Words for .NET** (v23.12 o successiva consigliata). +- Un ambiente di sviluppo .NET (Visual Studio, Rider o la CLI `dotnet`). +- Un file DOCX di esempio che utilizzi intenzionalmente un font non installato—chiamiamolo `DocumentWithMissingFont.docx`. +- Conoscenze di base di C#—nulla di complesso, solo la capacità di eseguire un’app console. + +Se qualcosa di quanto sopra ti è sconosciuto, fermati e installa il pacchetto NuGet: + +```bash +dotnet add package Aspose.Words +``` + +Tutto qui. Nessun font aggiuntivo, nessun servizio esterno. + +--- + +## Passo 1: Carica il Documento Word (e Attiva i Controlli dei Font) + +La prima cosa da fare è **caricare un documento Word**. Aspose.Words analizza il file e, se non riesce a trovare un font di riferimento, genera un avviso *FontSubstitution*. Ecco il codice che esegue il caricamento: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Perché è importante:** Caricare il documento subito dà ad Aspose la possibilità di analizzare ogni run di testo, stile e oggetto incorporato. Se un font non è presente sul sistema o nella cartella dei font personalizzati, otterrai un avviso in seguito. + +--- + +## Passo 2: Collega un Callback di Avviso per Catturare gli Eventi di Sostituzione + +Aspose.Words utilizza un meccanismo di callback per informarti di problemi come i font mancanti. Assegnando un’implementazione di `IWarningCallback` a `doc.WarningCallback`, puoi intercettare ogni avviso al momento in cui si verifica. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Consiglio pratico:** Puoi collegare più callback (ad esempio per il logging o per aggiornamenti UI) avvolgendoli in un pattern composito, ma per questo tutorial un singolo callback mantiene le cose chiare. + +--- + +## Passo 3: Implementa il Callback di Avviso per la Sostituzione dei Font + +Ora definiamo la classe che esegue effettivamente il lavoro. Il callback riceve un oggetto `WarningInfo`; filtriamo per `WarningType.FontSubstitution` e memorizziamo la descrizione per un uso successivo. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Cosa succede:** Quando Aspose incontra un font mancante, crea un avviso del tipo “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Il nostro callback stampa quella riga e la salva. + +--- + +## Passo 4: Elabora il Documento (Opzionale) e Raccogli i Font Mancanti + +Se ti serve solo **rilevare i font mancanti**, il passaggio di caricamento è sufficiente—gli avvisi vengono generati automaticamente. Tuttavia, molti sviluppatori hanno anche bisogno di **recuperare le informazioni sui font mancanti** dopo aver eseguito alcune operazioni (ad esempio salvataggio, conversione). Di seguito forziamo una piccola operazione—salvare in PDF—per assicurarci che tutti gli avvisi vengano emessi, poi estraiamo i messaggi raccolti. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Output console previsto** (esempio): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Nota come ogni riga indica chiaramente il font originale e il fallback scelto da Aspose. Questo è il cuore della segnalazione **aspose font substitution**. + +--- + +## Passo 5: Avanzato – Utilizzare Font Sources Personalizzati per Ridurre le Sostituzioni + +A volte *hai* i font mancanti, ma non nella cartella di sistema predefinita. Aspose.Words ti consente di puntare a una directory personalizzata tramite `FontSettings`. Aggiungere questo passaggio può ridurre drasticamente il numero di avvisi di sostituzione. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Perché aggiungerlo?** Se distribuisci documenti su più macchine, includere i font necessari in una cartella nota garantisce lo stesso aspetto visivo ovunque. Inoltre rende la tua routine di **detect missing fonts** più accurata perché Aspose controlla prima quella cartella prima di ricorrere al fallback. + +--- + +## Esempio Completo Funzionante + +Mettendo tutto insieme, ecco un programma console pronto per il copia‑incolla. Salvalo come `Program.cs` ed eseguilo con `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Cosa dovresti vedere:** Se il DOCX di origine fa riferimento a font che non possiedi, la console stampa ogni riga di sostituzione seguita da un riepilogo conciso. Se tutti i font sono presenti, otterrai il messaggio “No missing fonts were detected.” + +--- + +## Problemi Comuni & Come Evitarli + +| Problema | Perché accade | Soluzione | +|----------|---------------|-----------| +| **Nessun avviso appare** | Il documento utilizza solo font di sistema, o hai già aggiunto una cartella personalizzata contenente i font mancanti. | Verifica che il DOCX faccia davvero riferimento a un font non disponibile. Puoi aprirlo in Word e cambiare un paragrafo in un font raro (es. “Papyrus”). | +| **Messaggi duplicati** | Lo stesso font è usato in più run, generando più avvisi. | De‑duplica l’elenco con `Distinct()` se ti serve solo un set unico. | +| **Impatto sulle prestazioni su documenti grandi** | Ogni avviso viene elaborato sul thread UI. | Esegui il caricamento in un task in background o usa `Parallel.ForEach` per il post‑processing. | +| **Font di fallback errato** | Il fallback predefinito di Aspose potrebbe non corrispondere al tuo brand. | Imposta `FontSettings.SubstitutionSettings.DefaultFontName` su un fallback preferito (es. “Calibri”). | + +--- + +## Estendere la Soluzione – Esportare i Font Mancanti in JSON + +Se stai costruendo un servizio web che deve riportare i font mancanti al client, serializzare l’elenco è banale: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Ora la tua API può restituire un payload JSON pulito che un altro sistema può consumare. + +--- + +## Conclusione + +In questa guida abbiamo dimostrato **Aspose font substitution** dall’inizio alla fine: caricamento di un documento Word, collegamento di un callback di avviso, cattura di ogni evento *detect missing fonts* e infine **retrieve missing font** per la segnalazione o la correzione. Aggiungendo cartelle di font personalizzate puoi ridurre l’elenco delle sostituzioni, e con poche righe extra puoi persino esportare i risultati in JSON. + +Ricorda, l’integrità visiva dei tuoi documenti dipende dai font che usano. Con la tecnica mostrata qui non sarai più sorpreso da un fallback inatteso. + +Pronto per il passo successivo? Prova a integrare questa logica in una pipeline di elaborazione documenti più ampia, o esplora le altre funzionalità di Aspose.Words come l’incorporamento dei font (`doc.FontSettings.EmbeddedFonts`). Le possibilità sono infinite, e i tuoi utenti ti ringrazieranno per l’output curato. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/japanese/net/ai-powered-document-processing/_index.md b/words/japanese/net/ai-powered-document-processing/_index.md index f996a6e25b..44b02fd599 100644 --- a/words/japanese/net/ai-powered-document-processing/_index.md +++ b/words/japanese/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ | [Google AI モデルの操作](./working-with-google-ai-model/) Aspose.Words for .NET と Google AI を使用してドキュメント処理を強化し、簡潔な要約を簡単に作成します。 | | [オープンAIモデルの使用](./working-with-open-ai-model/) Aspose.Words for .NETとOpenAIの強力なモデルを活用し、効率的なドキュメント要約を実現しましょう。この包括的なガイドを今すぐご覧ください。 | | [要約オプションの操作](./working-with-summarize-options/) 迅速な分析情報を得るために AI モデルを統合するステップバイステップ ガイドを使用して、Aspose.Words for .NET を使用して Word 文書を効果的に要約する方法を学びます。 | +| [LLM を使用した Aspose.Words – C# で段落を書き換える方法](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) Aspose.Words と LLM を組み合わせ、C# で段落を書き換える手順を学び、文書を自動的に改善します。 | +| [C# で文法チェックする方法 – Word 文書の完全ガイド](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) Aspose.Words for .NET と C# を使用して、Word 文書の文法チェックを自動化する完全ガイドです。 | +| [C# で Word 文書を要約する – Anthropic Claude を使用した完全ガイド](./summarize-word-document-in-c-complete-guide-using-anthropic/) Anthropic Claude を活用し、C# で Word 文書を自動要約する手順をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/japanese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..a99013f3c9 --- /dev/null +++ b/words/japanese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-05-04 +description: C# を使用して Word 文書の文法チェック方法を学びます。このチュートリアルでは、DOCX ファイルの読み込み方法と、正確な結果を得るために + Aspose.Words AI を使用する方法もカバーしています。 +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: ja +og_description: C# を使用して Word 文書の文法をチェックする方法は?このチュートリアルに従って DOCX ファイルを C# で読み込み、Aspose.Words + で AI 搭載の文法チェックを実行しましょう。 +og_title: C#で文法をチェックする方法 – 完全ステップバイステップガイド +tags: +- Aspose.Words +- C# +- Grammar Checking +title: C#で文法チェックを行う方法 – Word文書の完全ガイド +url: /ja/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#で文法をチェックする方法 – Word文書の完全ガイド + +IDEを離れずにWord文書の**文法チェック**を行う方法を考えたことはありませんか? あなただけではありません。多くの開発者が、ユーザー生成レポートや自動メール、さらには出荷前のドキュメントを検証する必要があります。良いニュースは、Aspose.Words AI を使えばプログラムで実行でき、全工程が典型的なC#ワークフローにすっきり収まります。 + +このガイドでは、DOCXファイルをC#で読み込むところからAI文法チェッカーを呼び出し、結果を解釈するまで、必要なすべてを順に解説します。最後まで読むと、各問題の重大度、メッセージ、提案された置換を出力する実行可能なスニペットが手に入り、手動でのコピー&ペーストは不要です。 + +## 学べること + +- Aspose.Words AI を使用してWord文書の**文法チェック**を行う方法。 +- `Document` クラスを使って**DOCXファイルをC#で読み込む**正確な手順。 +- `GrammarCheckResult` オブジェクトの扱い方、問題の反復処理、役立つ診断情報の出力方法。 +- 一般的な落とし穴(ライセンス未取得など)と、ソリューションを本番環境向けにするためのヒント。 + +> **前提条件:** .NET 6.0+(または .NET Framework 4.6+)、Visual Studio 2022(またはお好みのIDE)、および Aspose.Words for .NET ライセンス(無料トライアルでテスト可能)。まだNuGetパッケージをインストールしていない場合は、以下を実行してください: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +それでは、始めましょう。 + +## 手順 1: C#でDOCXファイルを読み込む + +文法チェックを実行する前に、ドキュメントをメモリに読み込む必要があります。Aspose.Words ならワンライナーで可能ですが、いくつか留意すべきポイントがあります。 + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**これが重要な理由:** +- `Path.Combine` を使用することでクロスプラットフォーム互換性が確保されます。 +- 存在チェックにより、実行時クラッシュを防ぎ、文法チェック本来のロジックが隠れないようにします。 +- `DOCXファイルをC#で読み込む` と、Aspose はすべてのスタイル、ヘッダー、フッター、さらには非表示テキストまで解析し、AI に文書全体の情報を提供します。 + +> **プロのコツ:** ストリーム(例: Webアップロードからのファイル)で作業する必要がある場合は、`new Document(docPath)` 呼び出しを `new Document(stream)` に置き換えることができます。 + +## 手順 2: 文法チェック用のAIモデルを選択する + +Aspose.Words AI は、軽量ローカルモデルからクラウドベースの GPT 系列まで、複数のモデルをサポートしています。多くのシナリオでは、**GPT‑3.5 Turbo** が速度と精度のバランスの取れた最適な選択肢です。 + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**GPT‑3.5 Turbo を選ぶ理由:** +- 1分間に数十ファイルのバッチ処理に十分な速度です。 +- 有料プランの場合、GPT‑4 よりコストが低く、一般的なエラーの多くを検出できます。 +- API がトークン上限を自動で処理するため、巨大な文書を手動で分割する必要がありません。 + +オフライン方式を好む場合は、`AiModelType.Gpt35Turbo` を `AiModelType.Local` に置き換えてください(オプションのオフラインモデルパッケージが必要です)。 + +## 手順 3: 問題を反復処理し、役立つフィードバックを表示する + +`GrammarCheckResult` には `GrammarIssue` オブジェクトのコレクションが含まれます。各問題は重大度、人間が読めるメッセージ、提案された置換を提供します。これらを見やすく出力しましょう。 + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**各フィールドの意味:** +- `Severity` – 通常は `Info`、`Warning`、`Error` のいずれかです。`Error` は公開前に必ず修正すべきものとみなします。 +- `Message` – 問題の簡潔な説明(例: “主語と動詞の一致”)。 +- `SuggestedReplacement` – AI が提案する修正案です。モデルを信頼できる場合は自動適用できますし、人間のレビューアに提示することもできます。 + +> **エッジケース:** 一部の問題は `SuggestedReplacement` が空になることがあります(例: スタイルの提案)。その場合は、手動レビュー用に位置だけフラグ付けしてください。 + +## 完全動作サンプル + +すべてを組み合わせた、.NET プロジェクトにコピー&ペーストできる自己完結型コンソールアプリがこちらです。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**期待される出力(サンプル):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +クリーンな文書でプログラムを実行すると、代わりに “✅ No grammar issues detected.” の行が表示されます。 + +## 一般的な落とし穴への対処 + +| Problem | Why It Happens | Quick Fix | +|---------|----------------|-----------| +| **LicenseException** | Aspose ライブラリは本番使用のために有効なライセンスが必要です。 | `Main` の開始時に `License license = new License(); license.SetLicense("Aspose.Words.lic");` を挿入します。 | +| **Network timeout** | AI モデル呼び出しがクラウドに到達し、デフォルトの 100 秒タイムアウトを超えました。 | `CheckGrammar` を呼び出す前に `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` でタイムアウトを延長します。 | +| **Large documents (> 10 MB)** | 一部のクラウドモデルは入力を切り捨てます。 | `document.Sections` を使って文書をセクションに分割し、セクションごとにチェックして結果を集約します。 | +| **Missing suggestions** | モデルが置換を生成できなかった(例: 曖昧な表現)。 | 手動レビュー用に問題をログに記録し、空の提案は自動適用しないでください。 | + +## ソリューションの拡張 + +- **自動修正:** `grammarResult.Issues` をループし、`document.Range.Replace` でテキストを置換します。最初に元ファイルのバックアップを取ってください。 +- **バッチ処理:** DOCX ファイルが格納されたディレクトリに対して `foreach` で全体フローをラップします。各レポートを JSON ファイルとして保存し、後で分析できます。 +- **ASP.NET との統合:** アップロードされた DOCX を受け取りチェックを実行し、問題の JSON ペイロードを返すエンドポイントを公開します。 + +## 画像イラスト + +how to check grammar flow diagram + +*上図は、3 ステップのプロセス(DOCX の読み込み → AI 文法チェック実行 → 問題の出力)を視覚化しています。* + +## 結論 + +C# を使用して Word 文書の**文法チェック**方法を解説し、**DOCX ファイルを C# で読み込む** 正確なコードを示し、AI が生成したフィードバックの解釈方法を紹介しました。Aspose.Words AI を使えば、強力なクラウドバックエンドの文法エンジンが手に入り、任意の .NET アプリケーションにシームレスに統合できます。 + +次のステップは? 修正適用ループを自動化したり、より高度な提案を得るために新しい `AiModelType.Gpt4` を試したり、スペルチェックライブラリと組み合わせて本格的な校正パイプラインを構築したりしてください。可能性はほぼ無限で、これからの開発の土台が整いました。 + +質問や難しいエッジケースに遭遇したら、下にコメントを残してください。ハッピーコーディング! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/japanese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/japanese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..767439fd52 --- /dev/null +++ b/words/japanese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-05-04 +description: Aspose を使用して LLM で文書を編集する方法 – 段落テキストの置換、ローカル LLM への接続、AI を使ったテキストの書き換えを学ぶ。 +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: ja +og_description: Aspose を使用して LLM で文書を編集する方法。このガイドでは、ローカル LLM に接続し、段落テキストを置換し、AI を使ってテキストを書き換える方法を示します。 +og_title: LLM と Aspose.Words の使い方 – C# で段落を書き換える +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Aspose.Words と LLM の使い方 – C# で段落を書き換える +url: /ja/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words と LLM の使い方 – C# で段落を書き換える + +Word 文書を手動で開かずに **LLM を使って** 仕上げたいと思ったことはありませんか?同じ悩みを抱える開発者は多いです。段落テキストをプログラムで *置換* したいが、クリーンな AI 主導のワークフローがない…そんな壁にぶつかっていませんか? + +このチュートリアルでは、ローカルの大規模言語モデルを接続し、`.docx` ファイルからスニペットを取得し、**AI でテキストを書き換える**よう指示し、最終的に更新した文書を保存するまでを Aspose.Words で実装します。最後まで実行できる C# コンソール アプリの完成形が手に入ります。 + +> **得られるもの:** 完全に実行可能なサンプル、各ステップの解説、エッジケースへの対処法、拡張アイデア + +## 必要なもの + +- **.NET 6+**(または .NET Framework 4.7.2 – 両方で動作します) +- **Aspose.Words for .NET**(NuGet パッケージ `Aspose.Words`) +- **ローカル LLM サーバ**(シンプルな HTTP `/generate` エンドポイントを公開しているもの、例: Ollama、LMStudio、またはカスタム Flask サービス) +- C# と HTTP クライアントコードの基本的な知識 + +追加の SDK は不要です。必要なものはすべて、ここで書くコードに含まれています。 + +## 手順 1: LLM で段落テキストを置換する方法 + +まず最初に、変更したい段落を特定します。Aspose.Words はリッチなオブジェクトモデルを提供しているので、これがとても簡単です。 + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**重要ポイント:** +正しいノードを選択しないと、見出しや表を誤って上書きしてしまう危険があります。**段落テキストを置換**するアプローチを取ることで、文書構造はそのままに、対象のコンテンツだけを変更できます。 + +> **プロのコツ:** 文書に可変長のセクションがある場合は、`document.GetChildNodes(NodeType.Paragraph, true)` と LINQ を組み合わせて、テキストやスタイルで段落を検索しましょう。 + +## 手順 2: ローカル LLM エンドポイントに接続する + +テキストが取得できたら、LLM に送信します。例では HTTP の面倒な処理を隠蔽したラッパークラス `LocalLargeLanguageModel` を使用しています。必要に応じて `HttpClient` 直接呼び出しに置き換えても構いません。 + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**この接続方法の理由:** +**ローカル LLM に接続**することでレイテンシが低減し、データがオンプレミスに留まり、API コストも発生しません。ラッパーを使うことで後続のコードがシンプルになり、**AI でテキストを書き換える**ロジックに集中できます。 + +## 手順 3: Aspose.Words で AI にテキストを書き換えてもらう + +段落テキストと LLM が準備できたら、モデルに対して「フォーマルな口調で書き換えてください」と指示するプロンプトを作成します。プロンプトは他のスタイル(フレンドリー、テクニカルなど)に変更可能です。 + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**なぜ効果があるのか:** +LLM はプロンプト駆動です。明示的な指示(例: “Rewrite … in a formal tone”)を与えることで、一貫した結果が得られます。**AI でテキストを書き換える**ステップが本チュートリアルの核心であり、AI を文書ワークフローに直接組み込む方法を示しています。 + +## 手順 4: 文書を編集し、変更を保存する + +元の Run を新しい内容に置き換えます。Aspose.Words はテキストを `Run` オブジェクトで管理しているため、先にクリアしておくと余計な書式が残りません。 + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**エッジケースの注意点:** +元の段落に太字や斜体など混在した書式がある場合は、スタイルを保持したいでしょう。その場合は新しい `Run` を作成し、元の `Font` 設定をコピーしてから `Text` に `revisedText` を設定します。 + +## 完全動作サンプル + +以下はコンソール プロジェクトにそのまま貼り付けられる全コードです。先に Aspose.Words の NuGet パッケージをインストールしてください(`dotnet add package Aspose.Words`)。 + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### 期待される出力 + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +`output.docx` を開くと、3 番目の段落が洗練されたバージョンに置き換わっていることが確認できます。 + +## よくある質問と落とし穴 + +| 質問 | 回答 | +|----------|--------| +| **LLM が余分なフィールドを含む JSON を返したらどうする?** | `GenerateText` を調整して正しいプロパティをデシリアライズするか、手動でレスポンスを解析してください。 | +| **複数の段落を一度に処理できるか?** | 可能です。`document.FirstSection.Body.Paragraphs` を走査し、同じプロンプトロジックを適用します。必要に応じて段落インデックスをプロンプトに含めるとコンテキストが明確になります。 | +| **LLM サーバが認証を要求する場合は?** | POST 前に `HttpClient` にヘッダーを追加します: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");` | +| **置換後に書式が失われる。** | 元の `Run.Font` 設定を保持してください。新しい `Run` を作成し、`originalRun.Font.Clone()` をコピーしてから `Text` を設定します。 | +| **LLM が時々空文字列を返す。** | フォールバックを実装しましょう。`revisedText.Trim().Length == 0` の場合は元のテキストを保持するか、シンプルなプロンプトで再試行します。 | + +## ソリューションの拡張 + +単一段落で **LLM の使い方** をマスターしたら、次のステップを検討してください。 + +- **バッチ処理:** すべての段落をループし、選択したスタイル(例: “全テキストを簡潔に”)で書き換える。 +- **スタイル認識型書き換え:** 元の段落のスタイル名をプロンプトに渡し、見出しと本文で異なる扱いをさせる。 +- **CI パイプラインへの統合:** ドキュメントの自動整形をビルドプロセスの一部として組み込む。 +- **代替プロンプト:** “この段落を要約してください” や “この段落をスペイン語に翻訳してください” など、**AI でテキストを書き換える**の応用範囲を広げる。 + +## 結論 + +本稿では **LLM の使い方** を Aspose.Words と組み合わせ、文書の読み込み、**ローカル LLM へ接続**、段落抽出、**AI でテキストを書き換える**、**段落テキストを置換**、そして結果の保存までの一連の流れを実演しました。コードは自己完結型で、すぐに動作し、AI と従来の文書自動化を実用的に融合させる方法を示しています。 + +ぜひ試してみて、プロンプトを調整しながら自分だけのワークフローを構築してください。 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/japanese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/japanese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..d7a850a6c8 --- /dev/null +++ b/words/japanese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-05-04 +description: Word 文書を素早く要約し、Google でテキストを翻訳します。Anthropic Claude の使い方を学び、レポートから要約を作成し、Google + でテキストを翻訳する方法を、C# のチュートリアルで一度に習得しましょう。 +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: ja +og_description: Word文書を瞬時に要約し、Googleでテキストを翻訳します。このガイドでは、Anthropic Claude と Aspose.Words + を使用してレポートから要約を作成する方法を示します。 +og_title: C#でWord文書を要約する – Anthropic Claudeを使ったステップバイステップ +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: C#でWord文書を要約する – Anthropic Claudeを使用した完全ガイド +url: /ja/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#でWordドキュメントを要約 – Anthropic Claudeを使用した完全ガイド + +**Wordドキュメントを要約**したいと思ったことはありませんか?APIの取り扱いや長大なコードに悩まされたことがあるなら、あなただけではありません。年間報告書、法務ブリーフ、研究論文など、多くのプロジェクトで簡潔な概要を抽出することは日常的な課題です。幸い、Aspose.Words と Anthropic Claude の組み合わせを使えばこの作業はとても簡単になり、さらに Google 翻訳を手軽に組み込むこともできます。 + +このチュートリアルでは、.docx ファイルの読み込み、Claude V2 モデルでの要約生成、Google 翻訳でのフレーズ翻訳、そしてよくある落とし穴の対処方法までをすべて解説します。最後まで読めば、数行の C# コードだけで **レポートから要約を作成** できるようになります。 + +## 前提条件 + +- .NET 6+(または .NET Core 3.1)をインストール済み +- Aspose.Words for .NET のライセンス(または無料トライアル) +- Anthropic Claude V2 API へのアクセス(API キーが必要) +- Google 翻訳を利用できるインターネット接続 +- Visual Studio 2022 またはお好みの C# IDE + +`Aspose.Words` と `Aspose.Words.AI` 以外の NuGet パッケージは不要です。翻訳クラスは同じライブラリに同梱されています。 + +## Step 1 – ソースの Word ドキュメントを読み込む + +最初に行うべきことは、.docx ファイルをメモリにロードすることです。Aspose.Words はこれを非常に簡単に行え、複雑なレイアウトやテーブル、埋め込み画像にも対応しています。 + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **ポイント:** 早めにドキュメントをロードしておくと、プロパティ(作成者、単語数など)を確認でき、要約が本当に必要か判断できます。10 MB を超える大容量ファイルはメモリ使用量が大きくなるため、パフォーマンスに問題が出た場合は `LoadOptions` と `LoadFormat.Docx` を併用してください。 + +## Step 2 – Anthropic Claude でドキュメントを要約する + +いよいよ本番です。ドキュメントを Claude V2 に渡します。`Summarizer` クラスが HTTP 呼び出し、トークン管理、リトライ処理を抽象化しています。 + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **動作概要:** +> 1. **チャンク分割** – Aspose が自動的にドキュメントを約 2 KB のサイズに分割し、Claude のトークン上限に合わせます。 +> 2. **プロンプト設計** – ライブラリは「以下のテキストの簡潔なエグゼクティブサマリーを提供してください:」というプロンプトを各チャンクに付与して送信します。 +> 3. **集約** – Claude が返す部分要約を結合し、最終的な `summaryText` を生成します。 + +### エッジケースとヒント + +- **非常に大きなレポート**(100 ページ超)は Claude のコンテキストウィンドウを超える可能性があります。出力が途中で切れる場合は `SummarizerOptions.MaxChunkSize` を小さめに設定してください。 +- **英語以外のソース** – Claude は英語で最も高精度です。別言語の場合は(ステップ 4 を参照)先に翻訳してから要約すると良いでしょう。 +- **レートリミット** – Anthropic は分単位で上限を設けています。`429` 応答が返ってきたら、指数バックオフ付きのリトライループで呼び出しをラップしてください。 + +## Step 3 – 要約結果を検証する + +次に、要約が空でないか、期待する長さ(例: 元の単語数の 5‑10 %)になっているかを確認します。 + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +要約の長さが 2 % 未満に低すぎると感じたら、`SummarizerOptions.SummaryLength` プロパティを調整して、より長い出力を要求してください。 + +## Step 4 – Google でテキストを翻訳する + +英語の要約ができたら、手軽に翻訳を加えてみましょう。`Translator` クラスは Google の公開翻訳エンドポイントを利用します(短文であれば API キーは不要ですが、実運用では有料の Cloud Translation API への切り替えを推奨します)。 + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **なぜ Google?** 速度が速く、広くサポートされており、無料エンドポイントは認証なしで短い文字列を処理できます。大量翻訳が必要な場合はバッチ処理し、Google の利用制限を守りましょう。 + +### 全要約を翻訳する(任意) + +要約全体をスペイン語(または他言語)にしたい場合は、`summaryText` をそのまま `Translator.Translate` に渡します。リクエストサイズは 5 KB が上限なので、必要に応じて要約を小さなチャンクに分割してください。 + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Step 5 – 要約を Word ファイルとして保存する(ボーナス) + +コンソール出力だけでなく、ユーザーにダウンロード可能なドキュメントを提供したいケースが多いでしょう。ここでは、英語版と翻訳版の両方を含む新しい `.docx` を作成します。 + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### 実践的なコツ + +新しい Word ファイルに要約を埋め込む際は、元の書式を極力シンプルに保ちます(`Normal` スタイルを使用)。元ドキュメントの複雑なスタイルはレイアウト崩れの原因になることがあります。 + +## 完全動作サンプル + +以下は **コピー&ペーストでそのまま実行可能** なプログラム全体です。Aspose パッケージを追加したら `dotnet run` でコンパイルできます。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**期待されるコンソール出力**(抜粋): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## よくある質問 + +| 質問 | 回答 | +|----------|--------| +| *別の AI モデルは使えますか?* | はい。`SummarizerModel.AnthropicClaudeV2` を `SummarizerModel.OpenAIGPT4`(OpenAI キーが必要)や列挙型に記載された他のプロバイダーに置き換えてください。 | +| *ドキュメントに保護されたセクションが含まれていたら?* | Aspose は `ProtectedDocumentException` をスローします。`LoadOptions.Password` で解除するか、保護されていないコピーを入手してください。 | +| *本番環境で有料の Aspose ライセンスは必要ですか?* | 無料トライアルは最大 20 ページまで利用可能です。大規模レポートではライセンス取得によりページ制限が解除され、パフォーマンス最適化も受けられます。 | +| *Google 翻訳は大きなブロックでも信頼できますか?* | 短文では問題ありませんが、バルク翻訳が必要な場合は Cloud Translation API に切り替えてリクエストサイズ制限や言語検出精度を向上させてください。 | + +## 結論 + +Aspose.Words と Anthropic Claude V2 モデルを組み合わせて **Word ドキュメントを要約**し、さらに **Google でテキストを翻訳**する方法をご紹介しました。 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/japanese/net/basic-conversions/_index.md b/words/japanese/net/basic-conversions/_index.md index 85672c5cb5..f22faa326a 100644 --- a/words/japanese/net/basic-conversions/_index.md +++ b/words/japanese/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [C# で Word を PDF に変換する – ガイド](./convert-word-to-pdf-in-c-using-aspose-words-guide/) Aspose.Words for .NET を使用して C# で Word 文書を PDF に変換する方法を、ステップバイステップで解説します。コード例付きで開発者に最適です。 | | [Aspose.WordsでWordをPDFとして保存 – 完全なC#ガイド](./save-word-as-pdf-with-aspose-words-complete-c-guide/) Aspose.Words for .NET を使用して C# で Word 文書を PDF に変換する完全ガイドです。コード例付きで開発者に最適です。 | | [Aspose.WordsでDocxをPDFとして保存 – 完全なC#ガイド](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) Aspose.Words for .NET を使用して C# で Docx ファイルを PDF に変換する完全ガイドです。コード例付きで開発者に最適です。 | +| [C# で DOCX からアクセシブル PDF を作成 – Word を PDF に変換する方法](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) Aspose.Words for .NET を使用して C# で DOCX からアクセシブル PDF を作成する方法をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/japanese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..94323aca45 --- /dev/null +++ b/words/japanese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,208 @@ +--- +category: general +date: 2026-05-04 +description: C#でDOCXファイルからアクセシブルなPDFを作成する。WordをPDFに変換する方法、WordをPDFとして保存する方法、アクセシビリティに準拠したdocxからPDFへのエクスポート方法を学びましょう。 +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: ja +og_description: C#でDOCXファイルからアクセシブルなPDFを作成します。ステップバイステップのチュートリアルに従って、WordをPDFに変換し、WordをPDFとして保存し、docxを完全にアクセシブルなPDFにエクスポートしましょう。 +og_title: C#でDOCXからアクセシブルPDFを作成する – クイックガイド +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: C#でDOCXからアクセシブルPDFを作成 – WordをPDFに変換する方法 +url: /ja/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# で DOCX からアクセシブル PDF を作成 – Word を PDF に変換する方法 + +Word 文書から **アクセシブル PDF を作成** したいが、どのライブラリを使えばよいか分からないことはありませんか?同じ壁にぶつかる開発者は多いです。PDF/UA 標準に準拠したアクセシビリティを満たす必要があるときに特にです。Aspose.Words を使えば、数行のコードで `.docx` を準拠した PDF に変換でき、スクリーンリーダーでも正しく読み上げられるファイルが得られます。 + +このチュートリアルでは、**Word を PDF に変換**、**Word を PDF として保存**、さらには **docx を PDF にエクスポート** して PDF/UA‑1(または PDF/UA‑2)に準拠させる方法をすべて解説します。最後まで読むと、すぐに使える C# スニペットが手に入り、各設定がなぜ重要か理解でき、フォントが欠落している場合やカスタムページ設定などの一般的なエッジケースにも対処できるようになります。 + +## 前提条件 + +- .NET 6.0 以上(.NET Framework 4.6+ でも動作します) +- Aspose.Words for .NET のライセンス(または無料評価キー) +- C# と Visual Studio(またはお好みの IDE)の基本的な知識 +- アクセシブルにしたい DOCX ファイル(ここでは `input.docx` と呼びます) + +> **プロのコツ:** 無料トライアルを使用している場合、生成された PDF には小さな “Evaluation” ウォーターマークが入ります。 + +## 手順 1: Aspose.Words NuGet パッケージをインストール + +C# のコードを書く前に、Aspose.Words ライブラリをプロジェクトに追加する必要があります。 + +```bash +dotnet add package Aspose.Words +``` + +このコマンドを実行すると `Aspose.Words.dll` が復元され、名前空間が利用可能になります。`PdfSaveOptions` クラスはこのパッケージ内にあるため、必須の手順です。 + +## 手順 2: ソース DOCX ファイルをロード + +最初の論理的なステップは、変換したい Word 文書をロードすることです。本のページを編集する前に本を開くイメージです。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **重要な理由:** ドキュメントをロードすると、すべてのスタイル、画像、メタデータを含むインメモリ表現が作成されます。ファイルが破損している場合は `Document` が例外をスローするため、実運用コードでは try/catch で囲むことを検討してください。 + +## 手順 3: アクセシビリティ用 PDF 保存オプションを設定 + +Aspose.Words では PDF の準拠レベルを指定できます。PDF/UA‑1 が元々のアクセシビリティ標準で、PDF/UA‑2 はいくつかの新しいタグを追加しています。クライアントの要件に合わせて選択してください。 + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **“Compliance” が行うこと:** `PdfCompliance.PdfUax1` を設定すると、Aspose.Words は適切なタグ、論理的な読順、画像の代替テキストを埋め込みます。これがスクリーンリーダーソフトウェアが期待する内容です。 + +## 手順 4: アクセシブル PDF としてドキュメントを保存 + +これで重い処理は完了です。先ほど定義したオプションを使って、Aspose.Words に PDF ファイルを書き出すよう指示します。 + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +この行が実行されると、指定したフォルダーに `output.pdf` が作成されます。Adobe Acrobat Reader で開き、**File → Properties → Description → PDF/A and PDF/UA** を確認して準拠状態をチェックしてください。 + +## 手順 5: アクセシビリティの検証(任意だが推奨) + +コードだけでもタグ付き PDF が出力されますが、手動で簡単にチェックすると、カスタムコンテンツで追加の対応が必要な箇所を見つけやすくなります。 + +1. Adobe Acrobat Pro で `output.pdf` を開く。 +2. **Tools → Accessibility → Full Check** に進む。 +3. チェックを実行し、警告(例: カスタム画像の代替テキストが欠如)を確認する。 + +レポートにエラーが表示されなければ、**アクセシブル PDF を作成** でき、PDF/UA‑1 標準に準拠していることになります。 + +## よくあるバリエーションとエッジケース + +### ループで複数の DOCX ファイルを変換 + +バッチ処理が必要な場合は、ロード‑保存ロジックを `foreach` ループで囲みます。 + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### PDF/UA‑2 に切り替える + +`Compliance` 列挙体を次のように変更するだけです。 + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### カスタムフォントの取り扱い + +DOCX がサーバーにインストールされていないフォントを使用している場合は、埋め込みます。 + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +フォントを埋め込むことで、PDF がどのマシンでも同じ見た目になるため、**docx を pdf にエクスポート** して外部ステークホルダーに提供する際に重要です。 + +## 完全動作サンプル + +以下は、すべての要素を組み合わせた完成形のコンソールアプリです。コピーして貼り付け、パスを調整し、**F5** で実行してください。 + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**期待される結果:** 任意の PDF ビューアで開ける `output.pdf` が生成され、適切なアクセシビリティタグが付与され、支援技術を利用するユーザーと共有できます。 + +![アクセシブル PDF の例](/images/create-accessible-pdf.png "PDF/UA‑1 に準拠したドキュメントのスクリーンショット") + +*画像の代替テキスト:* *アクセシブル PDF の例 – Adobe Acrobat で開いた PDF/UA‑1 準拠ドキュメントのスクリーンショット。* + +## FAQ(よくある質問) + +- **.NET Core でも動作しますか?** + はい。Aspose.Words はクロスプラットフォーム対応なので、Windows、Linux、macOS で同じコードが動作します。 + +- **DOCX にマクロが含まれていたらどうなりますか?** + 変換時にマクロは無視され、表示可能なコンテンツだけが PDF にレンダリングされます。 + +- **PDF のメタデータタイトルをカスタマイズできますか?** + はい。保存前に `pdfSaveOptions.Metadata.Title = "Your Custom Title";` と設定してください。 + +- **PDF/UA‑2 は広くサポートされていますか?** + 多くの最新 PDF リーダーは PDF/UA‑2 を理解しますが、古いツールを対象とする場合は PDF/UA‑1 を選択した方が安全です。 + +## 結論 + +このセクションでは、Aspose.Words を使って DOCX から **アクセシブル PDF を作成** する方法を、NuGet パッケージのインストールから PDF/UA 準拠の検証まで網羅的に解説しました。これらの手順に従えば、**Word を PDF に変換**、**Word を PDF として保存**、そして **docx を PDF にエクスポート** しながらアクセシビリティ基準を満たすことが確実にできます。エンタープライズ文書パイプラインを扱う開発者にとって必須のスキルです。 + +次のステップに挑戦してみませんか?カスタムヘッダー/フッターの追加、PDF/A‑2b タグの埋め込み、あるいは ASP.NET Core Web API での自動化など、可能性は無限です。ここで築いた基盤を活かして、自信を持って取り組んでください。 + +Happy coding, and may your PDFs always be readable! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/japanese/net/programming-with-markdownsaveoptions/_index.md b/words/japanese/net/programming-with-markdownsaveoptions/_index.md index 353fd34e79..a3bc568093 100644 --- a/words/japanese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/japanese/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ MarkdownSaveOptions を使用した Words Processing は、Aspose.Words for .NET | [DOCX を Markdown に変換する際の画像リネーム方法](./how-to-rename-images-when-converting-docx-to-markdown/) Aspose.Words for .NET を使用して、DOCX から Markdown へ変換する際に画像ファイル名を自動的に変更する手順を解説します。 | | [Aspose.Words を使用して docx を Markdown に保存 – 完全 C# ガイド](./save-docx-as-markdown-with-aspose-words-full-c-guide/) Aspose.Words for .NET を使い、docx ファイルを Markdown 形式に変換して保存する完全な C# 手順を解説します。 | | [Word 画像を保存 – Aspose を使用して Word を Markdown に変換](./save-word-images-convert-word-to-markdown-with-aspose/) Aspose.Words for .NET を使用して、Word 文書の画像を抽出し、Markdown 形式に変換する方法をステップバイステップで解説します。 | +| [画像を保存する方法 – Aspose.WordsでDOCXをMarkdownに変換](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) Aspose.Words for .NET を使用して、DOCX ファイルの画像を抽出し、Markdown 形式に変換して保存する手順を解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/japanese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..bea2aafc54 --- /dev/null +++ b/words/japanese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,242 @@ +--- +category: general +date: 2026-05-04 +description: Aspose.Words を使用して DOCX を Markdown に変換しながら画像を保存する方法を学びます。このガイドでは、Word + から画像を抽出し、Word を Markdown として保存する方法も示しています。 +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: ja +og_description: Aspose.Words を使用して DOCX を Markdown に変換する際に画像を保存する方法。完全な C# コード付きのステップバイステップガイド。 +og_title: 画像の保存方法 – Aspose.WordsでDOCXをMarkdownに変換 +tags: +- Aspose.Words +- C# +- Markdown conversion +title: 画像の保存方法 – Aspose.WordsでDOCXをMarkdownに変換 +url: /ja/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 画像の保存方法 – Aspose.WordsでDOCXをMarkdownに変換 + +WordファイルをMarkdownに変換するときに **画像の保存方法** を考えたことはありますか? あなただけではありません。多くの開発者が、変換時に画像が壊れたリンクの山になったり、最悪の場合は完全に失われたりして壁にぶつかります。良いニュースは、Aspose.Words が細かい制御を提供してくれるので、Word から画像を抽出し、保存先を決め、きれいな Markdown 出力を得ることができる点です。 + +このチュートリアルでは、`.docx` を `.md` に変換しながら **画像の保存方法** を専用フォルダーに保存する、完全に実行可能な C# サンプルを順を追って解説します。途中で **DOCX を Markdown に変換**、**Word から画像を抽出**、そして **DOCX を変換** して **Word を Markdown として保存** する際に資産を失わない方法についても触れます。 + +## 前提条件 + +- .NET 6.0 以降(API は .NET Framework 4.7+ でも同様に動作します) +- 有効な Aspose.Words ライセンス、または無料トライアル(無料版は出力に透かしが入りますが、コードは同じです) +- 画像を含む Word 文書(例: `DocWithImages.docx`) +- Visual Studio 2022 または C# プロジェクトをビルドできるエディタ + +> **プロのコツ:** トライアル版を使用している場合でも、画像保存ロジックはテストできます。最終的な PDF/MD にはトライアル透かしが入ることだけ覚えておいてください。 + +## ソリューションの概要 + +全体の流れは次の通りです。 + +1. `Document` でソースの `.docx` を読み込む。 +2. `MarkdownSaveOptions` オブジェクトを作成し、`IResourceSavingCallback` を設定する。 +3. コールバック内で各画像の保存先フォルダーとファイル名を決定する。 +4. ドキュメントを Markdown として保存し、コールバックが画像をディスクに書き出す。 + +これが **画像の保存方法** の核心です。同じパターンを使えば、フォントや CSS など他のリソースタイプにも対応できます。 + +## Step 1 – 画像を含む DOCX を読み込む + +まず、変換したい Word ファイルを指す `Document` インスタンスを作成します。特別なことはなく、シンプルなコンストラクタ呼び出しだけです。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **なぜ重要か:** ドキュメントの読み込み時に Aspose が Word の XML を解析します。フォントが欠落していたり、破損した部分があると例外がスローされ、画像保存に進む前に問題が検出されます。 + +## Step 2 – Image‑Saving コールバック付き MarkdownSaveOptions を設定する + +`MarkdownSaveOptions` クラスは `ResourceSavingCallback` を通じて保存プロセスにフックできます。このコールバックは、Aspose が書き出す必要のある各外部リソース(画像、CSS など)に対して `ResourceSavingArgs` オブジェクトを受け取ります。 + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### コールバックの実装 + +以下は `ImageSavingCallback` の完全実装です。Markdown ファイルの隣に `Images` サブフォルダーを作成し、各画像に連番の名前(`img_0.png`、`img_1.jpg` …)を付与します。必要に応じて画像を別のストリーム(例: クラウドバケット)に送ることも可能です。 + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **この実装が役立つ理由:** `args.FileName` をカスタマイズすることで、**画像の保存方法** を完全にコントロールできます。フラットなフォルダー構造でも、日付ベースの階層でも、データベースの BLOB でも自由です。コールバックは画像ごとに呼び出されるため、後から Markdown を再処理する必要がありません。 + +## Step 3 – ドキュメントを Markdown として保存する + +オプションとコールバックの準備ができたら、実際の変換はワンライナーです。 + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +この行が完了すると、以下が生成されます。 + +- `Doc.md` – Word コンテンツの Markdown 表現。 +- `Images\img_0.png`, `Images\img_1.jpg`, … – 元の DOCX から抽出されたすべての画像。 + +## 完全な実行可能サンプル + +すべてをまとめた、コピー&ペーストで新しい C# プロジェクトに貼り付けられるコンソールアプリです。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### 期待される結果 + +プログラム実行後: + +- `C:\Docs\Doc.md` を任意のテキストエディタで開くと、`![](Images/img_0.png)` のような Markdown 画像リンクが表示されます。 +- `Images` フォルダーには抽出された画像が連番で格納されています。 +- 任意のローカル画像をサポートするビューア(VS Code プレビュー、GitHub など)で Markdown が正しくレンダリングされます。 + +## よくある質問 (FAQs) + +### 他の画像形式(SVG、TIFF)でも動作しますか? + +はい。`Path.GetExtension(args.FileName)` が元の拡張子を保持するため、SVG、TIFF、BMP、EMF などもそのまま保存されます。唯一の注意点は、一部の Markdown レンダラが SVG をインライン表示できないことがある点です。その場合は事前に SVG を PNG に変換してください。 + +### 画像を別ファイルではなく Base64 埋め込みにしたい場合は? + +`ResourceSaving` 内で物理ファイルへの書き込みをメモリストリームに置き換え、Markdown リンクを手動で `data:image/...;base64,` 形式に書き換えます。Aspose には直接「Base64 埋め込み」スイッチはありませんが、コールバックで `args.Stream` を自由に操作できます。 + +### 組み込みの `ExportImages` メソッドと何が違うのですか? + +`ExportImages` は画像だけをフォルダーに抽出し、Markdown は生成しません。今回のコールバックは両方を同時に行い、`.md` 内の参照と画像ファイル名が一致することを保証します。これが **画像の保存方法** を正しく行う鍵です。 + +### 複数の DOCX をバッチで変換できますか? + +もちろんです。`foreach (var file in Directory.GetFiles(..., "*.docx"))` ループでコアロジックを包み、出力パスを調整し、同じ `ImageSavingCallback` を再利用します。ドキュメントごとに新しい `MarkdownSaveOptions` を作成することを忘れないでください。`args.DestinationFileName` はイテレーションごとに変わります。 + +## エッジケースとベストプラクティス + +| シチュエーション | 注意点 | 推奨対策 | +|-----------|----------------------|-----------------| +| **大容量 DOCX(数百 MB)** | 読み込み時のメモリ圧迫 | `LoadOptions` と `LoadFormat.Docx` を使用し、部分ストリーミングロードを行う | +| **画像名が衝突する** | 既存の `img_0.png` が上書きされる可能性 | GUID を付加: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **出力フォルダーが読み取り専用** | 保存時に `UnauthorizedAccessException` がスロー | 適切な権限でプロセスを実行するか、書き込み可能なパスを選択 | +| **画像以外のリソース(CSS、フォント)** | コールバックで受け取ってしまう | `if (args.ResourceType != ResourceType.Image) return;` で除外(既に実装例あり) | +| **Unicode ファイル名** | 一部ファイルシステムで文字化け | `Path.GetInvalidFileNameChars()` を使って `args.FileName` をサニタイズ | + +## 次に探求できる関連トピック + +- カスタム見出しスタイルで **DOCX を Markdown に変換**(インライン画像は `MarkdownSaveOptions.ExportImagesAsBase64` を使用) +- `Document.GetChildNodes(NodeType.Shape,` を使って **Word から画像を抽出** する方法 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/japanese/net/working-with-fonts/_index.md b/words/japanese/net/working-with-fonts/_index.md index 04ec3ac89f..9bcc85d35f 100644 --- a/words/japanese/net/working-with-fonts/_index.md +++ b/words/japanese/net/working-with-fonts/_index.md @@ -52,7 +52,7 @@ | [接尾辞なしの置換を取得する](./get-substitution-without-suffixes/) このチュートリアルでは、Aspose.Words for .NET を使用して Word 文書でサフィックスなしのオーバーライドを取得する方法を学習します。 | | [Aspose.Words でフォントをキャプチャする方法 – 完全ガイド](./how-to-capture-fonts-in-aspose-words-complete-guide/) Aspose.Words for .NET を使用してフォントをキャプチャする完全ガイドです。 | | [DOCX を読み込んで欠落フォントを検出する完全 C# ガイド](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) Aspose.Words for .NET を使用して DOCX を読み込み、欠落しているフォントを検出する方法をステップバイステップで解説します。 | - +| [Aspose フォント置換: Word 文書で欠落フォントを検出する](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) Aspose.Words for .NET を使用して、Word 文書で欠落フォントを検出する方法をステップバイステップで学びます。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/japanese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..28b7bc22e1 --- /dev/null +++ b/words/japanese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-05-04 +description: Aspose のフォント置換機能を使用して、Word 文書を読み込む際に欠落フォントを検出し、欠落フォントの詳細を取得する方法をステップバイステップで学びましょう。 +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: ja +og_description: Aspose のフォント置換をマスターし、Word 文書の読み込み時に欠落フォントを検出し、完全な C# コードで欠落フォント情報を取得する。 +og_title: Aspose フォント置換 – Word 文書の欠損フォントを検出 +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose フォント置換: Word 文書の欠損フォントを検出' +url: /ja/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Word 文書で欠落フォントを検出する + +別のマシンで Word 文書の表示が崩れる理由を考えたことはありませんか?多くの場合、その原因は欠落フォントです。**Aspose font substitution** は、視覚的な災害になる前にそのギャップを見つけることができるツールです。このチュートリアルでは、**Word 文書をロードした瞬間に欠落フォントを検出**し、**欠落フォントの詳細を取得**して修正または置き換える方法を順を追って説明します。 + +警告コールバックの設定から欠落フォントのクリーンなリスト取得まで、すべてカバーします。最後までに、どのフォントが見つからなかったか正確に教えてくれる実行可能な C# スニペットが手に入り、なぜこれが文書の忠実性に重要なのかが理解できるようになります。 + +--- + +## 前提条件 – 開始前に必要なもの + +- **Aspose.Words for .NET** (v23.12 以降推奨)。 +- .NET 開発環境 (Visual Studio、Rider、または `dotnet` CLI)。 +- 意図的にインストールされていないフォントを使用したサンプル DOCX(例: `DocumentWithMissingFont.docx`)。 +- 基本的な C# の知識 – 特別なことは不要で、コンソール アプリを実行できれば OK。 + +これらのいずれかに心当たりがなければ、まず NuGet パッケージをインストールしてください: + +```bash +dotnet add package Aspose.Words +``` + +以上です。追加のフォントや外部サービスは不要です。 + +--- + +## ステップ 1: Word 文書をロードする(フォントチェックをトリガー) + +最初に行うことは **Word 文書をロード** することです。Aspose.Words はファイルを解析し、参照されたフォントが見つからない場合は *FontSubstitution* 警告をキューに入れます。以下がロード処理のコードです: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **なぜ重要か:** 文書を早期にロードすることで、Aspose はテキスト、スタイル、埋め込みオブジェクトのすべてのランをスキャンする機会が得られます。システムやカスタムフォントフォルダーにフォントが見つからない場合、後で警告が出ます。 + +--- + +## ステップ 2: 警告コールバックを添付して置換イベントを取得する + +Aspose.Words は、欠落フォントなどの問題を通知するためにコールバック機構を使用します。`IWarningCallback` の実装を `doc.WarningCallback` に割り当てることで、発生する各警告をインターセプトできます。 + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **プロのコツ:** 複合パターンでラップすれば複数のコールバック(例: ロギング、UI 更新)を添付できますが、このチュートリアルでは単一のコールバックでシンプルに保ちます。 + +--- + +## ステップ 3: フォント置換警告コールバックを実装する + +ここで実際に処理を行うクラスを定義します。コールバックは `WarningInfo` オブジェクトを受け取り、`WarningType.FontSubstitution` をフィルタリングして、後で使用するために説明を保存します。 + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **何が起きているか:** Aspose が欠落フォントに遭遇すると、たとえば “Font substitution: 'Comic Sans MS' が見つからなかったため、代わりに 'Arial' を使用しました。” のような警告を作成します。コールバックはその行を出力し、保存します。 + +--- + +## ステップ 4: 文書を処理(オプション)し、欠落フォントを収集する + +**欠落フォントを検出**するだけであれば、ロード段階だけで十分です—警告は自動的に発生します。ただし、多くの開発者は何らかの操作(例: 保存、変換)を行った後に **欠落フォント情報を取得**する必要があります。以下では、すべての警告が出力されるように PDF への保存という小さな操作を強制し、収集したメッセージを取得します。 + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **期待されるコンソール出力**(例): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +各行が元のフォントと Aspose が選択した代替フォントを明確に示していることに注目してください。これが **aspose font substitution** レポートの核心です。 + +--- + +## ステップ 5: 上級編 – カスタムフォントソースを使用して置換を減らす + +時には欠落フォントが実際に存在するが、デフォルトのシステムフォルダーにないことがあります。Aspose.Words は `FontSettings` を介してカスタムディレクトリを指定できます。この手順を追加すると、置換警告の数を大幅に減らすことができます。 + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **なぜ追加するか:** 複数のマシンに文書を配布する場合、必要なフォントを既知のフォルダーにバンドルすれば、どこでも同じ視覚的外観が保証されます。また、Aspose がフォールバックする前にそのフォルダーをチェックするため、**欠落フォント検出**の手順がより正確になります。 + +--- + +## 完全な動作例 + +すべてをまとめると、以下はコピー&ペーストで実行できるコンソール プログラムです。`Program.cs` として保存し、`dotnet run` で実行してください。 + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**期待される出力:** ソース DOCX が存在しないフォントを参照している場合、コンソールに各置換行と簡潔なサマリーが表示されます。すべてのフォントが揃っていれば “No missing fonts were detected.” というメッセージが表示されます。 + +--- + +## よくある落とし穴と回避策 + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **警告が表示されない** | 文書がシステムフォントのみを使用しているか、欠落フォントを含むカスタムフォルダーをすでに追加しているためです。 | DOCX が本当に利用できないフォントを参照しているか確認してください。Word で段落を稀なフォント(例: “Papyrus”)に変更すると確認できます。 | +| **重複メッセージ** | 同じフォントが複数のランで使用されているため、警告が複数回出ます。 | ユニークなセットだけが必要な場合は、`Distinct()` でリストの重複を除去してください。 | +| **大規模文書でのパフォーマンス低下** | 各警告が UI スレッドで処理されるためです。 | ロードをバックグラウンドタスクで実行するか、ポストプロセスに `Parallel.ForEach` を使用してください。 | +| **誤ったフォールバックフォント** | Aspose のデフォルトフォールバックがブランドに合わない可能性があります。 | `FontSettings.SubstitutionSettings.DefaultFontName` を好みのフォールバックフォント(例: “Calibri”)に設定してください。 | + +--- + +## 拡張編 – 欠落フォントを JSON にエクスポートする + +クライアントに欠落フォントを報告する必要がある Web サービスを構築する場合、リストのシリアライズは簡単です: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +これで API は、他システムが利用できるクリーンな JSON ペイロードを返すことができます。 + +--- + +## 結論 + +本ガイドでは、**Aspose font substitution** を最初から最後まで実演しました。Word 文書のロード、警告コールバックの添付、各 *欠落フォント検出* イベントの取得、そして最終的に **欠落フォント情報の取得** を行い、レポートや修正に活用します。オプションのカスタムフォントフォルダーを追加すれば置換リストを縮小でき、数行追加するだけで結果を JSON にエクスポートすることも可能です。 + +文書の視覚的完全性は使用するフォントに依存します。この手法を使えば、予期しないフォールバックに驚くことはなくなります。 + +次のステップへ進む準備はできましたか?このロジックをより大規模な文書処理パイプラインに統合したり、フォント埋め込み(`doc.FontSettings.EmbeddedFonts`)など Aspose.Words の他の機能を探求してみてください。可能性は無限大で、ユーザーは洗練された出力に感謝するでしょう。 + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/korean/net/ai-powered-document-processing/_index.md b/words/korean/net/ai-powered-document-processing/_index.md index 8e5be14ea6..7072593a6e 100644 --- a/words/korean/net/ai-powered-document-processing/_index.md +++ b/words/korean/net/ai-powered-document-processing/_index.md @@ -39,9 +39,12 @@ | 제목 | 설명 | | --- | --- | | [AI 모델 작업](./working-with-ai-model/) | Aspose.Words for .NET을 사용하여 AI로 문서를 요약하는 방법을 알아보세요. 문서 관리 기능을 향상시키는 간단한 단계입니다. | -| [Google AI 모델 작업](./working-with-google-ai-model/) Aspose.Words for .NET과 Google AI를 사용하여 문서 처리 능력을 향상시키고 간결한 요약을 손쉽게 작성하세요. | +| [Google AI 모델 작업](./working-with-google-ai-model/) | Aspose.Words for .NET과 Google AI를 사용하여 문서 처리 능력을 향상시키고 간결한 요약을 손쉽게 작성하세요. | | [오픈 AI 모델 작업](./working-with-open-ai-model/) | OpenAI의 강력한 모델을 기반으로 Aspose.Words for .NET을 사용하여 효율적인 문서 요약을 구현해 보세요. 지금 바로 이 종합 가이드를 살펴보세요. | | [요약 옵션 사용](./working-with-summarize-options/) | Aspose.Words for .NET을 사용하여 Word 문서를 효과적으로 요약하는 방법을 알아보고, AI 모델을 통합하여 빠른 통찰력을 얻는 방법에 대한 단계별 가이드를 살펴보세요. | +| [LLM을 사용하여 Aspose.Words와 함께 C#에서 문단 재작성하기](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Aspose.Words와 LLM을 사용해 C#에서 문단을 재작성하는 방법을 단계별로 안내합니다. | +| [C#에서 문법 검사하기 – Word 문서를 위한 완전 가이드](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Aspose.Words for .NET을 사용하여 C#에서 Word 문서의 문법을 검사하는 방법을 단계별로 안내합니다. | +| [Anthropic Claude를 사용한 C# Word 문서 요약 – 완전 가이드](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Aspose.Words for .NET과 Anthropic Claude를 사용하여 C#에서 Word 문서를 효율적으로 요약하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/korean/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..a24d3fb3bc --- /dev/null +++ b/words/korean/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-05-04 +description: C#를 사용하여 Word 문서에서 문법을 확인하는 방법을 배웁니다. 이 튜토리얼에서는 DOCX 파일을 C#로 로드하고 Aspose.Words + AI를 사용하여 정확한 결과를 얻는 방법도 다룹니다. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: ko +og_description: C#를 사용하여 Word 문서에서 문법을 확인하는 방법은? 이 튜토리얼을 따라 DOCX 파일을 C#로 로드하고 Aspose.Words로 + AI 기반 문법 검사를 실행하세요. +og_title: C#에서 문법 검사하는 방법 – 전체 단계별 가이드 +tags: +- Aspose.Words +- C# +- Grammar Checking +title: C#에서 문법 검사하는 방법 – 워드 문서 완전 가이드 +url: /ko/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 문법 검사하는 방법 – Word 문서 완전 가이드 + +IDE를 떠나지 않고 Word 문서에서 **문법을 검사하는 방법**이 궁금하신가요? 여러분만 그런 것이 아닙니다. 많은 개발자들이 사용자‑생성 보고서, 자동 이메일, 혹은 배포 전 문서까지 검증해야 합니다. 좋은 소식은? Aspose.Words AI를 사용하면 프로그래밍 방식으로 가능하고, 전체 과정이 일반적인 C# 워크플로에 깔끔히 들어맞습니다. + +이 가이드에서는 DOCX 파일을 C# 으로 로드하고, AI 문법 검사기를 호출하며, 결과를 해석하는 모든 과정을 단계별로 살펴봅니다. 최종적으로 각 이슈의 심각도, 메시지, 제안 교체 내용을 출력하는 실행 가능한 코드 스니펫을 제공하므로, 수동 복사‑붙여넣기가 필요 없습니다. + +## 배울 내용 + +- Aspose.Words AI를 사용해 Word 문서에서 **문법을 검사하는 방법**. +- `Document` 클래스를 이용해 **DOCX 파일을 C#에서 로드**하는 정확한 단계. +- `GrammarCheckResult` 객체를 다루고, 이슈를 순회하며 유용한 진단 정보를 출력하는 방법. +- 흔히 발생하는 문제점(예: 라이선스 누락)과 프로덕션 환경에 맞게 솔루션을 다듬는 팁. + +> **전제 조건:** .NET 6.0+ (또는 .NET Framework 4.6+), Visual Studio 2022 (또는 선호하는 IDE), Aspose.Words for .NET 라이선스(무료 체험판도 테스트에 사용 가능). 아직 NuGet 패키지를 설치하지 않았다면 다음을 실행하세요: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +이제 시작합니다. + +## Step 1: C#에서 DOCX 파일 로드 + +문법 검사를 수행하려면 먼저 문서를 메모리로 로드해야 합니다. Aspose.Words는 이를 한 줄 코드로 처리하지만, 몇 가지 주의할 점이 있습니다. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**왜 중요한가:** +- `Path.Combine`을 사용하면 플랫폼 간 호환성이 보장됩니다. +- 존재 여부 확인은 런타임 충돌을 방지해 실제 문법 검사 로직이 가려지는 일을 막아줍니다. +- **DOCX 파일을 C#에서 로드**하면 Aspose가 모든 스타일, 머리글·바닥글, 숨김 텍스트까지 파싱해 AI에 문서 전체를 제공합니다. + +> **팁:** 웹 업로드 등 스트림으로 파일을 받을 경우 `new Document(docPath)` 대신 `new Document(stream)`을 사용하면 됩니다. + +## Step 2: 문법 검사용 AI 모델 선택 + +Aspose.Words AI는 가벼운 로컬 모델부터 클라우드 기반 GPT 변형까지 여러 모델을 지원합니다. 대부분의 시나리오에서는 **GPT‑3.5 Turbo**가 속도와 정확도 사이의 최적점을 제공합니다. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**왜 GPT‑3.5 Turbo를 선택하나요?** +- 분당 수십 개 파일을 배치 처리하기에 충분히 빠릅니다. +- 유료 플랜을 사용한다면 GPT‑4보다 비용이 낮으면서도 대부분의 일반 오류를 잡아냅니다. +- API가 토큰 제한을 자동으로 처리하므로 큰 문서를 수동으로 나눌 필요가 없습니다. + +오프라인 방식을 원한다면 `AiModelType.Gpt35Turbo`를 `AiModelType.Local`(옵션 오프라인 모델 패키지 필요)로 교체하면 됩니다. + +## Step 3: 이슈를 순회하고 유용한 피드백 표시 + +`GrammarCheckResult`에는 `GrammarIssue` 객체 컬렉션이 들어 있습니다. 각 이슈는 심각도, 사람이 읽을 수 있는 메시지, 제안 교체 내용을 제공합니다. 이를 깔끔하게 출력해 보겠습니다. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**필드 의미:** +- `Severity` – 일반적으로 `Info`, `Warning`, `Error` 중 하나. `Error`는 게시 전 반드시 수정해야 합니다. +- `Message` – 문제에 대한 간결한 설명(예: “주어‑동사 일치 오류”). +- `SuggestedReplacement` – AI가 제안하는 수정안; 모델을 신뢰한다면 자동 적용하거나, 인간 검토자에게 제시할 수 있습니다. + +> **예외 상황:** 일부 이슈는 `SuggestedReplacement`가 비어 있을 수 있습니다(예: 스타일 제안). 이 경우 위치만 표시해 두고 수동 검토하도록 합니다. + +## 전체 작동 예제 + +모두 합치면 다음과 같은 독립 실행형 콘솔 앱이 됩니다. 새 .NET 프로젝트에 복사‑붙여넣기만 하면 됩니다. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**예상 출력(예시):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +깨끗한 문서에 대해 프로그램을 실행하면 “✅ No grammar issues detected.” 라인이 대신 표시됩니다. + +## 흔히 마주치는 문제 처리 + +| Problem | Why It Happens | Quick Fix | +|---------|----------------|-----------| +| **LicenseException** | Aspose 라이브러리는 프로덕션 사용 시 유효한 라이선스를 요구합니다. | `License license = new License(); license.SetLicense("Aspose.Words.lic");` 를 `Main` 시작 부분에 삽입합니다. | +| **Network timeout** | AI 모델 호출이 클라우드에 도달했지만 기본 100 s 제한을 초과했습니다. | `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` 를 `CheckGrammar` 호출 전에 설정합니다. | +| **Large documents (> 10 MB)** | 일부 클라우드 모델이 입력을 잘라냅니다. | `document.Sections` 로 문서를 섹션별로 나누어 각각 검사하고 결과를 합칩니다. | +| **Missing suggestions** | 모델이 교체안을 생성하지 못했습니다(예: 모호한 표현). | 이슈를 로그에 남기고 수동 검토하도록 하며, 빈 제안은 자동 적용하지 않습니다. | + +## 솔루션 확장하기 + +- **자동 수정:** `grammarResult.Issues` 를 순회하면서 `document.Range.Replace` 로 텍스트를 교체합니다. 원본 파일을 먼저 백업하는 것을 잊지 마세요. +- **배치 처리:** 전체 흐름을 DOCX 파일이 들어 있는 디렉터리에 대한 `foreach` 로 감싸고, 각 보고서를 JSON 파일로 저장해 나중에 분석합니다. +- **ASP.NET과 통합:** 업로드된 DOCX를 받아 검사를 수행하고 이슈 목록을 JSON payload 로 반환하는 엔드포인트를 구현합니다. + +## 이미지 설명 + +문법 검사 흐름도 + +*위 다이어그램은 세 단계 프로세스를 시각화합니다: DOCX 로드 → AI 문법 검사 실행 → 이슈 출력.* + +## 결론 + +C#을 이용해 Word 문서에서 **문법을 검사하는 방법**을 살펴보고, **DOCX 파일을 C#에서 로드**하는 정확한 코드를 보여주었으며, AI가 생성한 피드백을 해석하는 방법을 설명했습니다. Aspose.Words AI를 사용하면 강력한 클라우드 기반 문법 엔진을 .NET 애플리케이션에 매끄럽게 통합할 수 있습니다. + +다음 단계는? 자동 교정 루프를 구현해 보거나, 더 정교한 제안을 위해 최신 `AiModelType.Gpt4` 를 실험해 보세요. 혹은 맞춤법 검사 라이브러리와 결합해 완전한 교정 파이프라인을 구축할 수도 있습니다. 가능성은 무궁무진하며, 이제 탄탄한 기반을 갖추었습니다. + +질문이 있거나 까다로운 예외 상황에 부딪혔다면 아래에 댓글을 남겨 주세요. 즐거운 코딩 되세요! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/korean/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/korean/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..d2b3288488 --- /dev/null +++ b/words/korean/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-05-04 +description: Aspose와 함께 LLM을 사용하여 문서를 편집하는 방법 – 단락 텍스트 교체, 로컬 LLM 연결, AI를 활용한 텍스트 + 재작성 배우기. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: ko +og_description: Aspose를 사용하여 LLM으로 문서를 편집하는 방법. 이 가이드는 로컬 LLM에 연결하고, 단락 텍스트를 교체하며, + AI를 사용해 텍스트를 재작성하는 방법을 보여줍니다. +og_title: Aspose.Words와 LLM 사용 방법 – C#에서 단락 재작성 +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Aspose.Words와 LLM 사용 방법 – C#에서 단락 재작성 +url: /ko/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words와 LLM 사용 방법 – C#에서 단락 재작성 + +수동으로 열지 않고 Word 문서를 다듬기 위해 **LLM을 어떻게 사용하는지** 궁금해 본 적 있나요? 당신만 그런 것이 아닙니다. 많은 개발자들이 프로그래밍으로 *단락 텍스트를 교체*해야 할 때 깨끗한 AI 기반 워크플로우가 없어 난관에 부딪히곤 합니다. + +이 튜토리얼에서는 로컬 대형 언어 모델을 연결하고, `.docx` 파일에서 일부를 추출한 뒤, **AI를 사용하여 텍스트를 재작성**하도록 요청하고, 최종적으로 업데이트된 문서를 저장하는 전체 과정을 Aspose.Words와 함께 보여드립니다. 끝까지 따라오면 전체 파이프라인을 시연하는 실행 가능한 C# 콘솔 앱을 얻게 됩니다. + +> **얻을 수 있는 것:** 완전한 실행 예제, 각 단계에 대한 설명, 엣지 케이스 팁, 그리고 솔루션을 확장할 아이디어. + +## 필요 사항 + +- **.NET 6+** (또는 .NET Framework 4.7.2 – 두 환경 모두에서 코드가 동작합니다) +- **Aspose.Words for .NET** (NuGet 패키지 `Aspose.Words`) +- 간단한 HTTP `/generate` 엔드포인트를 제공하는 **로컬 LLM 서버** (예: Ollama, LMStudio, 혹은 커스텀 Flask 서비스) +- C# 및 HTTP 클라이언트 코드에 대한 기본적인 이해 + +추가 SDK는 필요하지 않으며, 나머지는 함께 작성할 코드 안에 모두 포함됩니다. + +## 단계 1: LLM을 사용하여 단락 텍스트 교체하기 + +먼저 수정하려는 단락을 식별해야 합니다. Aspose.Words는 풍부한 객체 모델을 제공해 이 작업을 손쉽게 해줍니다. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**왜 중요한가:** +올바른 노드를 선택하면 헤딩이나 표를 실수로 덮어쓰는 일을 방지할 수 있습니다. **단락 텍스트 교체** 방식을 사용하면 문서 구조는 그대로 유지하면서 원하는 내용만 수정할 수 있습니다. + +> **프로 팁:** 문서에 가변 길이 섹션이 있다면 `document.GetChildNodes(NodeType.Paragraph, true)`와 LINQ를 활용해 텍스트나 스타일로 단락을 찾아보세요. + +## 단계 2: 로컬 LLM 엔드포인트에 연결하기 + +텍스트를 확보했으니 이제 LLM에 전달해야 합니다. 예제에서는 HTTP 통신을 추상화한 간단한 래퍼 클래스 `LocalLargeLanguageModel`을 사용합니다. 필요에 따라 `HttpClient` 호출로 직접 교체해도 됩니다. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**왜 이렇게 연결하는가:** +**로컬 LLM에 연결**하면 지연 시간이 최소화되고 데이터가 온프레미스에 머무르며 API 비용도 발생하지 않습니다. 래퍼 덕분에 이후 코드를 더 깔끔하게 유지하면서 **AI를 사용하여 텍스트 재작성** 로직에 집중할 수 있습니다. + +## 단계 3: Aspose.Words와 AI를 사용하여 텍스트 재작성하기 + +단락 텍스트와 LLM이 준비되면, 모델에게 정확히 원하는 작업을 알려주는 프롬프트를 작성합니다—예: 정중한 어조로 재작성. 다른 스타일(친근함, 기술적 등)로도 프롬프트를 조정할 수 있습니다. + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**왜 효과적인가:** +LLM은 프롬프트 기반이므로 명확한 지시(예: “Rewrite … in a formal tone”)를 주면 일관된 결과를 얻을 수 있습니다. **AI를 사용하여 텍스트 재작성** 단계는 튜토리얼의 핵심으로, AI를 문서 워크플로우에 직접 삽입하는 방법을 보여줍니다. + +## 단계 4: 문서 편집 및 변경 사항 저장 + +이제 원본 `Run` 객체들을 새로운 내용으로 교체합니다. Aspose.Words는 텍스트를 `Run` 객체에 저장하므로, 먼저 기존 내용을 비우는 것이 남은 서식 잔여물을 방지합니다. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**엣지 케이스 주의:** +원본 단락에 굵게, 기울임 등 혼합 서식이 포함돼 있다면 스타일을 보존하고 싶을 수 있습니다. 이 경우 새 `Run`을 만들고 원본 `Font` 설정을 복사한 뒤, `Text`를 `revisedText`로 설정하면 됩니다. + +## 전체 작동 예제 + +아래는 콘솔 프로젝트에 복사·붙여넣기 할 수 있는 전체 프로그램입니다. 먼저 Aspose.Words NuGet 패키지를 설치하세요 (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### 예상 출력 + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +`output.docx`를 열면 세 번째 단락이 이제 다듬어진 버전으로 표시됩니다. + +## 일반적인 질문 및 주의사항 + +| Question | Answer | +|----------|--------| +| **LLM이 추가 필드가 포함된 JSON을 반환하면 어떻게 하나요?** | `GenerateText`를 수정해 올바른 속성을 역직렬화하거나 응답을 수동으로 파싱하세요. | +| **한 번에 여러 단락을 처리할 수 있나요?** | 가능합니다 – `document.FirstSection.Body.Paragraphs`를 순회하면서 동일한 프롬프트 로직을 적용하고, 필요하면 프롬프트에 단락 인덱스를 포함해 컨텍스트를 제공하세요. | +| **LLM 서버가 인증을 요구하나요?** | POST 전 `HttpClient`에 헤더를 추가하세요: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **교체 후 서식이 사라집니다.** | 원본 `Run.Font` 설정을 보존하세요: 새 `Run`을 만들고 `originalRun.Font.Clone()`을 복사한 뒤 `Text`를 설정합니다. | +| **LLM이 가끔 빈 문자열을 반환합니다.** | 폴백 로직을 구현하세요 – `revisedText.Trim().Length == 0`이면 원본 텍스트를 유지하거나 더 간단한 프롬프트로 재시도합니다. | + +## 솔루션 확장하기 + +이제 **LLM을 어떻게 사용하는지** 단일 단락에 대해 마스터했으니, 다음 단계들을 고려해 보세요: + +- **배치 처리:** 모든 단락을 순회하면서 선택한 스타일(예: “텍스트를 간결하게 만들기”)로 재작성합니다. +- **스타일 인식 재작성:** 프롬프트에 원본 단락의 스타일명을 전달해 LLM이 헤딩과 본문 텍스트를 구분하도록 합니다. +- **CI 파이프라인과 통합:** 문서 다듬기를 문서 빌드 프로세스의 일부로 자동화합니다. +- **대체 프롬프트:** “이 단락 요약” 또는 “이 단락을 스페인어로 번역” 등을 시도해 **AI를 사용하여 텍스트 재작성**의 전체 잠재력을 탐색합니다. + +## 결론 + +우리는 **LLM을 어떻게 사용하는지** Aspose.Words와 함께하는 전체 흐름을 살펴보았습니다: 문서 로드, **로컬 LLM에 연결**, 단락 추출, **AI를 사용하여 텍스트 재작성**, **단락 텍스트 교체**, 그리고 최종 저장. 코드는 독립적이며 바로 실행 가능하고, AI와 전통적인 문서 자동화를 결합하는 실용적인 방법을 보여줍니다. + +한 번 실행해 보고, 프롬프트를 조정하고, 그리고 let + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/korean/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/korean/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..db3b464374 --- /dev/null +++ b/words/korean/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-05-04 +description: Word 문서를 빠르게 요약하고 Google로 텍스트를 번역하세요. Anthropic Claude 사용 방법, 보고서에서 요약 + 만들기, 그리고 Google을 이용한 텍스트 번역을 하나의 C# 튜토리얼에서 배워보세요. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: ko +og_description: Word 문서를 즉시 요약하고 Google로 텍스트를 번역하세요. 이 가이드는 Anthropic Claude와 Aspose.Words를 + 사용하여 보고서에서 요약을 만드는 방법을 보여줍니다. +og_title: C#에서 Word 문서 요약 – Anthropic Claude와 단계별 진행 +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: C#에서 Word 문서 요약 – Anthropic Claude를 활용한 완전 가이드 +url: /ko/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 Word 문서 요약 – Anthropic Claude를 활용한 완전 가이드 + +API와 복잡한 코드를 다루느라 **Word 문서 요약**이 필요했지만 막혔던 적이 있나요? 당신만 그런 것이 아닙니다. 연례 보고서, 법률 서류, 연구 논문 등 많은 프로젝트에서 간결한 개요를 추출하는 것이 일상적인 어려움입니다. 다행히 Aspose.Words와 Anthropic Claude의 조합이면 이 작업이 식은 죽 먹기이며, 원한다면 빠른 Google 번역까지 추가할 수 있습니다. + +이 튜토리얼에서는 대용량 .docx 로드, Claude V2 모델 호출하여 요약 생성, Google로 구문 번역, 일반적인 문제 처리 등 필요한 모든 과정을 단계별로 안내합니다. 끝까지 따라오면 C# 몇 줄만으로 **보고서에서 요약 만들기**가 가능해집니다. + +## 사전 요구 사항 + +- .NET 6+ (또는 .NET Core 3.1) 설치 +- Aspose.Words for .NET 라이선스 (또는 무료 체험) +- Anthropic Claude V2 API 접근 권한 (API 키 필요) +- Google Translator를 위한 인터넷 연결 +- Visual Studio 2022 또는 선호하는 C# IDE + +`Aspose.Words`와 `Aspose.Words.AI` 외에 추가 NuGet 패키지는 필요하지 않으며, 번역기 클래스는 동일한 라이브러리에 포함되어 제공합니다. + +## 1단계 – 원본 Word 문서 로드 + +먼저 .docx 파일을 메모리로 불러와야 합니다. Aspose.Words는 이를 간단하게 처리해 주며, 강력한 파서 덕분에 복잡한 레이아웃, 표, 삽입 이미지까지도 정상적으로 작동합니다. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **왜 중요한가:** 문서를 미리 로드하면 속성(작성자, 단어 수)을 확인하고 요약이 필요한지 판단할 수 있습니다. 파일 크기가 10 MB를 초과하면 메모리 사용량이 많아질 수 있으므로, 성능 문제가 발생하면 `LoadOptions`에 `LoadFormat.Docx`를 지정하는 것을 고려하세요. + +## 2단계 – Anthropic Claude로 문서 요약 + +이제 재미있는 부분입니다: 문서를 Claude V2에 전달합니다. `Summarizer` 클래스는 HTTP 호출, 토큰 처리, 재시도를 추상화합니다. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **작동 방식:** +> 1. **Chunking** – Aspose는 Claude의 토큰 제한을 고려해 문서를 약 2 KB 크기의 관리 가능한 조각으로 자동 분할합니다. +> 2. **Prompt engineering** – 라이브러리는 “다음 텍스트에 대한 간결한 실행 요약을 제공하십시오:”와 같은 프롬프트를 각 청크와 함께 전송합니다. +> 3. **Aggregation** – Claude는 부분 요약을 반환하고, 이를 결합해 최종 `summaryText`를 만듭니다. + +### 엣지 케이스 및 팁 + +- **매우 큰 보고서** (> 100 페이지)는 Claude의 컨텍스트 창을 초과할 수 있습니다. 출력이 잘리는 경우 `SummarizerOptions.MaxChunkSize`를 더 작은 값으로 설정하세요. +- **비영어 소스** – Claude는 영어에 최적화되어 있으므로, 다른 언어의 경우 먼저 번역(4단계 참고)한 뒤 요약합니다. +- **요청 제한** – Anthropic은 분당 제한을 적용합니다. `429` 응답이 오면 지수 백오프를 적용한 재시도 루프를 사용하세요. + +## 3단계 – 요약 결과 검증 + +다음 단계로 넘어가기 전에, 요약이 비어 있지 않고 원본 단어 수의 5‑10 % 정도 길이인지 확인하는 것이 좋은 습관입니다. + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +비율이 너무 낮게(< 2 %) 보이면 `SummarizerOptions.SummaryLength` 속성을 조정해 더 긴 출력을 요청할 수 있습니다. + +## 4단계 – Google로 텍스트 번역 + +이제 깔끔한 영어 요약이 준비됐으니 빠른 번역을 추가해 보겠습니다. `Translator` 클래스는 Google의 공개 번역 엔드포인트를 사용합니다(짧은 구문은 API 키 없이 가능하지만, 실제 서비스에서는 유료 Cloud Translation API로 전환하는 것이 좋습니다). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **왜 Google인가?** 빠르고 널리 지원되며, 무료 엔드포인트는 인증 없이 짧은 문자열을 처리합니다. 대량 번역이 필요하면 호출을 배치하고 Google 사용 제한을 준수하세요. + +### 전체 요약 번역 (옵션) + +전체 요약을 스페인어(또는 다른 언어)로 번역해야 한다면 `summaryText`를 `Translator.Translate`에 전달하면 됩니다. 요청 크기 제한이 5 KB이므로 필요에 따라 요약을 작은 청크로 나눠야 할 수도 있습니다. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## 5단계 – 요약을 Word 파일로 저장 (보너스) + +대부분의 최종 사용자는 콘솔 출력보다 다운로드 가능한 문서를 기대합니다. 영어와 스페인어 버전을 모두 포함하는 새로운 `.docx` 파일을 만들어 보겠습니다. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### 실용적인 팁 + +새 Word 파일에 요약을 삽입할 때는 원본 서식을 최소화하고(`Normal` 스타일 사용) 복잡한 원본 스타일이 예상치 못한 레이아웃 변화를 일으킬 수 있음을 유의하세요. + +## 전체 작동 예제 + +아래는 모든 과정을 연결한 **완전한 복사‑붙여넣기‑가능** 프로그램입니다. Aspose 패키지를 추가한 뒤 `dotnet run` 한 번으로 컴파일됩니다. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**예상 콘솔 출력** (간략히 표시): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## 자주 묻는 질문 + +| Question | Answer | +|----------|--------| +| *다른 AI 모델을 사용할 수 있나요?* | 예. `SummarizerModel.AnthropicClaudeV2`를 `SummarizerModel.OpenAIGPT4`(OpenAI 키 필요) 또는 열거형에 나열된 다른 제공자로 교체하면 됩니다. | +| *문서에 보호된 섹션이 포함되어 있으면 어떻게 하나요?* | Aspose는 `ProtectedDocumentException`을 발생시킵니다. 먼저 `LoadOptions.Password`로 잠금을 해제하거나 보호되지 않은 사본을 요청하세요. | +| *프로덕션에 유료 Aspose 라이선스가 필요합니까?* | 무료 체험은 최대 20페이지까지 사용할 수 있습니다. 더 큰 보고서의 경우 라이선스를 구매하면 페이지 제한이 해제되고 성능 최적화가 제공됩니다. | +| *Google 번역기가 큰 블록에도 신뢰할 만한가요?* | 짧은 문자열에는 문제가 없지만, 대량 번역이 필요하면 요청 크기 제한을 피하고 더 나은 언어 감지를 위해 Cloud Translation API로 전환하세요. | + +## 결론 + +우리는 이제 Aspose.Words와 Anthropic Claude V2 모델을 사용해 **Word 문서 요약**을 수행하고, **Google로 텍스트 번역**을 했습니다. + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/korean/net/basic-conversions/_index.md b/words/korean/net/basic-conversions/_index.md index f5dfd1ff0a..3670f52413 100644 --- a/words/korean/net/basic-conversions/_index.md +++ b/words/korean/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ | [C#에서 Aspose.Words를 사용해 Word를 PDF로 변환 – 가이드](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Aspose.Words for .NET을 사용하여 C#에서 Word 문서를 PDF로 변환하는 방법을 단계별로 안내합니다. | | [Aspose.Words로 Word를 PDF로 저장 – 완전한 C# 가이드](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Aspose.Words와 C#을 활용해 Word 문서를 PDF로 변환하는 전체 단계별 가이드입니다. | | [Aspose.Words로 Docx를 PDF로 저장 – 완전한 C# 가이드](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Aspose.Words와 C#을 사용해 Docx 파일을 PDF로 변환하는 전체 단계별 가이드입니다. | +| [C#에서 DOCX를 사용해 접근성 PDF 만들기 – Word를 PDF로 변환하는 방법](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Aspose.Words for .NET을 사용하여 DOCX 파일을 접근성 PDF로 변환하는 단계별 가이드입니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/korean/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..f095811303 --- /dev/null +++ b/words/korean/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,210 @@ +--- +category: general +date: 2026-05-04 +description: C#에서 DOCX 파일로 접근성 있는 PDF 만들기. Word를 PDF로 변환하고, Word를 PDF로 저장하며, 접근성 준수를 + 만족하는 docx를 PDF로 내보내는 방법을 배워보세요. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: ko +og_description: C#에서 DOCX 파일로 접근성 있는 PDF 만들기. 이 단계별 튜토리얼을 따라 Word를 PDF로 변환하고, Word를 + PDF로 저장하며, 완전한 접근성을 갖춘 DOCX를 PDF로 내보내세요. +og_title: C#으로 DOCX에서 접근성 PDF 만들기 – 빠른 가이드 +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: C#에서 DOCX를 사용해 접근성 PDF 만들기 – Word를 PDF로 변환하는 방법 +url: /ko/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# DOCX에서 C#으로 접근성 PDF 만들기 – Word를 PDF로 변환하는 방법 + +Word 문서에서 **접근성 PDF 만들기**가 필요했지만 어떤 라이브러리를 신뢰해야 할지 몰랐던 적이 있나요? 당신만 그런 것이 아닙니다—많은 개발자들이 PDF/UA 접근성 표준을 충족해야 할 때 같은 난관에 부딪힙니다. 좋은 소식은 Aspose.Words를 사용하면 `.docx`를 몇 줄의 코드만으로 규격에 맞는 PDF로 변환할 수 있으며, 화면 읽기 프로그램이 실제로 읽을 수 있는 파일을 얻을 수 있다는 것입니다. + +이 튜토리얼에서는 **Word를 PDF로 변환**, **Word를 PDF로 저장**, 그리고 PDF/UA‑1(또는 PDF/UA‑2) 준수를 갖춘 **docx를 PDF로 내보내기**에 대해 알아야 할 모든 것을 단계별로 안내합니다. 끝까지 따라오면 바로 사용할 수 있는 C# 스니펫을 얻고, 각 설정이 중요한 이유를 이해하며, 누락된 글꼴이나 사용자 정의 페이지 설정과 같은 일반적인 엣지 케이스를 처리할 수 있게 됩니다. + +## 사전 요구 사항 + +- .NET 6.0 이상(.NET Framework 4.6+에서도 동작) +- Aspose.Words for .NET 라이선스(또는 무료 평가 키) +- C# 및 Visual Studio(또는 선호하는 IDE)에 대한 기본 이해 +- 접근성을 부여하고 싶은 DOCX 파일(`input.docx`라고 부르겠습니다) + +> **Pro tip:** 무료 체험판을 사용하는 경우, 생성된 PDF에 작은 “Evaluation” 워터마크가 포함된다는 점을 기억하세요. + +## 1단계: Aspose.Words NuGet 패키지 설치 + +코드를 작성하기 전에 Aspose.Words 라이브러리를 프로젝트에 추가해야 합니다. + +```bash +dotnet add package Aspose.Words +``` + +명령을 실행하면 `Aspose.Words.dll`이 복원되고 네임스페이스를 사용할 수 있게 됩니다. 이 단계는 `PdfSaveOptions` 클래스가 해당 패키지 안에 존재하기 때문에 필수입니다. + +## 2단계: 원본 DOCX 파일 로드 + +첫 번째 논리적 단계는 변환하려는 Word 문서를 로드하는 것입니다. 페이지를 편집하기 전에 책을 여는 것과 같습니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Why this matters:** 문서를 로드하면 모든 스타일, 이미지, 메타데이터를 포함하는 메모리 내 표현이 생성됩니다. 파일이 손상된 경우 `Document`가 예외를 발생시키므로, 실제 서비스 코드에서는 try/catch 블록으로 감싸는 것이 좋습니다. + +## 3단계: 접근성을 위한 PDF 저장 옵션 구성 + +Aspose.Words를 사용하면 PDF 준수 수준을 지정할 수 있습니다. PDF/UA‑1은 원래 접근성 표준이며, PDF/UA‑2는 몇 가지 최신 태그를 추가합니다. 클라이언트 요구 사항에 맞는 옵션을 선택하세요. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **What “Compliance” does:** `PdfCompliance.PdfUax1`을 설정하면 Aspose.Words가 적절한 태그, 논리적 읽기 순서, 이미지에 대한 대체 텍스트를 삽입합니다—스크린 리더 소프트웨어가 정확히 찾는 요소입니다. + +## 4단계: 문서를 접근성 PDF로 저장 + +이제 무거운 작업은 끝났습니다; 앞서 정의한 옵션을 사용해 Aspose.Words에게 PDF 파일을 작성하도록 지시하면 됩니다. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +이 라인이 실행된 후 지정된 폴더에서 `output.pdf`를 찾을 수 있습니다. Adobe Acrobat Reader에서 **File → Properties → Description → PDF/A and PDF/UA**를 확인해 준수 여부를 검증하세요. + +## 5단계: 접근성 검증 (선택 사항이지만 권장됨) + +코드가 태그가 포함된 PDF 출력을 보장하지만, 간단한 수동 검사는 추가적인 주의가 필요한 사용자 정의 콘텐츠를 잡아내는 데 도움이 됩니다. + +1. `output.pdf`를 Adobe Acrobat Pro에서 엽니다. +2. **Tools → Accessibility → Full Check**로 이동합니다. +3. 검사를 실행하고 경고를 검토합니다(예: 사용자 정의 이미지에 대한 alt 텍스트 누락). + +보고서에 오류가 없으면 PDF/UA‑1 표준을 충족하는 **접근성 PDF를 성공적으로 만들었습니다**. + +## 일반적인 변형 및 엣지 케이스 + +### 여러 DOCX 파일을 루프에서 변환하기 + +문서가 여러 개라면 로드‑저장 로직을 `foreach` 루프 안에 넣으세요. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### PDF/UA‑2 로 전환하기 + +`Compliance` 열거형만 변경하면 됩니다: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### 사용자 정의 글꼴 처리 + +DOCX에 서버에 설치되지 않은 글꼴이 사용된 경우, 해당 글꼴을 임베드하세요: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +임베드하면 PDF가 어떤 머신에서든 동일하게 보장되므로, 외부 이해관계자를 위해 **docx를 pdf로 내보낼 때** 중요한 세부 사항입니다. + +## 전체 작업 예제 + +아래는 모든 요소를 하나로 모은 완전한 실행 가능한 프로그램입니다. 콘솔 앱에 복사·붙여넣기하고 경로를 조정한 뒤 **F5**를 눌러 실행하세요. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** `output.pdf`라는 파일이 생성되며, 모든 PDF 뷰어에서 열 수 있고 적절한 접근성 태그를 포함하며, 보조 기술에 의존하는 사용자와도 공유할 수 있습니다. + +![접근성 PDF 예시](/images/create-accessible-pdf.png "PDF/UA‑1 규격을 충족하는 문서의 스크린샷") + +*이미지 대체 텍스트:* *접근성 PDF 예시 – PDF/UA‑1 규격을 충족하는 문서의 스크린샷.* + +## 자주 묻는 질문 + +- **Does this work with .NET Core?** + Absolutely. Aspose.Words is cross‑platform, so the same code runs on Windows, Linux, and macOS. + +- **What if my DOCX contains macros?** + Macros are ignored during conversion; only the visible content is rendered into the PDF. + +- **Can I add a custom PDF metadata title?** + Yes—set `pdfSaveOptions.Metadata.Title = "Your Custom Title";` before saving. + +- **Is PDF/UA‑2 widely supported?** + Most modern PDF readers understand PDF/UA‑2, but if you’re targeting older tools, stick with PDF/UA‑1. + +## 결론 + +우리는 Aspose.Words를 사용해 DOCX 파일에서 **접근성 PDF 만들기**를 수행하는 방법을 보여드렸으며, NuGet 패키지 설치부터 PDF/UA 준수 검증까지 모든 과정을 다루었습니다. 이 단계를 따르면 **Word를 PDF로 변환**, **Word를 PDF로 저장**, 그리고 **docx를 PDF로 내보내기**를 신뢰성 있게 수행하면서 접근성 표준을 만족시킬 수 있습니다—기업 문서 파이프라인을 다루는 모든 개발자에게 필수적인 스킬입니다. + +다음 도전 과제가 준비되셨나요? 사용자 정의 머리글/바닥글을 추가하거나 PDF/A‑2b 태그를 삽입하거나 ASP.NET Core 웹 API에서 자동화해 보세요. 가능성은 무한하며, 여기서 구축한 기반을 통해 자신 있게 해결할 수 있습니다. + +행복한 코딩 되시고, 여러분의 PDF가 언제나 읽기 쉬우길 바랍니다! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/korean/net/programming-with-markdownsaveoptions/_index.md b/words/korean/net/programming-with-markdownsaveoptions/_index.md index f1dbf065f8..f9b8595bfd 100644 --- a/words/korean/net/programming-with-markdownsaveoptions/_index.md +++ b/words/korean/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ | [DOCX를 Markdown으로 변환할 때 이미지 이름 바꾸기](./how-to-rename-images-when-converting-docx-to-markdown/) | Aspose.Words for .NET을 사용하여 DOCX를 Markdown으로 변환하면서 이미지 파일 이름을 원하는 대로 바꾸는 방법을 단계별로 안내합니다. | | [Aspose.Words를 사용하여 docx를 markdown으로 저장 – 전체 C# 가이드](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Aspose.Words for .NET을 사용하여 docx 파일을 markdown 형식으로 저장하는 전체 C# 가이드를 제공합니다. | | [Word 이미지 저장 – Aspose로 Word를 Markdown으로 변환](./save-word-images-convert-word-to-markdown-with-aspose/) | Aspose.Words for .NET을 사용하여 Word 문서의 이미지를 추출하고 Markdown으로 변환하는 방법을 단계별로 안내합니다. | +| [이미지 저장 – Aspose.Words로 DOCX를 Markdown으로 변환](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Aspose.Words for .NET을 사용하여 DOCX 문서의 이미지를 추출하고 Markdown으로 변환하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/korean/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..043ddafe34 --- /dev/null +++ b/words/korean/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,243 @@ +--- +category: general +date: 2026-05-04 +description: Aspose.Words를 사용하여 DOCX를 Markdown으로 변환하면서 이미지를 저장하는 방법을 배웁니다. 이 가이드는 + Word에서 이미지를 추출하고 Word를 Markdown으로 저장하는 방법도 보여줍니다. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: ko +og_description: Aspose.Words를 사용하여 DOCX를 Markdown으로 변환하면서 이미지를 저장하는 방법. 전체 C# 코드가 + 포함된 단계별 가이드. +og_title: 이미지 저장 방법 – Aspose.Words를 사용하여 DOCX를 마크다운으로 변환 +tags: +- Aspose.Words +- C# +- Markdown conversion +title: 이미지 저장 방법 – Aspose.Words를 사용하여 DOCX를 Markdown으로 변환 +url: /ko/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 이미지 저장 방법 – Aspose.Words 로 DOCX 를 Markdown 으로 변환 + +Ever wondered **how to save images** when you need to turn a Word file into Markdown? You're not the only one. Many developers hit a wall when the conversion drops pictures into a mess of broken links, or worse—loses them entirely. The good news is that Aspose.Words gives you fine‑grained control, so you can extract images from Word, decide where they go, and still get clean Markdown output. + +이 튜토리얼에서는 `.docx` 를 `.md` 로 변환하면서 전용 폴더에 **how to save images** 를 보여주는 완전하고 바로 실행 가능한 C# 예제를 단계별로 살펴보겠습니다. 진행하면서 **convert docx to markdown**, **extract images from word**, 그리고 **how to convert docx** 와 같은 주제와 **save word as markdown** 를 수행하면서 자산을 잃지 않는 방법에 대해서도 다룰 것입니다. + +## 사전 요구 사항 + +- .NET 6.0 이상 (API는 .NET Framework 4.7+에서도 동일하게 작동합니다) +- 활성화된 Aspose.Words 라이선스 또는 무료 체험판 (무료 버전은 출력에 워터마크를 추가하지만 코드 동작은 동일합니다) +- 이미지를 포함하고 있는 Word 문서 (예: `DocWithImages.docx`) +- C# 프로젝트를 빌드할 수 있는 Visual Studio 2022 또는 기타 편집기 + +> **Pro tip:** 체험판을 사용 중이라도 이미지 저장 로직을 테스트할 수 있습니다; 단 최종 PDF/MD 에는 체험판 워터마크가 포함된다는 점을 기억하세요. + +## 솔루션 개요 + +전체적인 흐름은 다음과 같습니다: + +1. `Document` 로 소스 `.docx` 를 로드합니다. +2. `MarkdownSaveOptions` 객체를 생성하고 `IResourceSavingCallback` 을 연결합니다. +3. 콜백에서 각 이미지의 폴더와 파일명을 결정합니다. +4. 문서를 Markdown 으로 저장합니다; 콜백이 각 이미지를 디스크에 기록합니다. + +이것이 변환 중 **how to save images** 의 핵심입니다. 동일한 패턴은 다른 리소스 유형(폰트, CSS 등)에도 적용할 수 있습니다. + +## Step 1 – 이미지가 포함된 DOCX 로드 + +먼저 변환하려는 Word 파일을 가리키는 `Document` 인스턴스가 필요합니다. 특별한 점은 없으며, 단순히 생성자를 호출하면 됩니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Why this matters:** 문서를 로드하는 단계는 Aspose 가 Word XML 을 파싱하는 유일한 시점이므로, 누락된 폰트나 손상된 부분이 있으면 이미지 저장을 시작하기 전인 바로 예외가 발생합니다. + +## Step 2 – Image‑Saving 콜백과 함께 MarkdownSaveOptions 설정 + +`MarkdownSaveOptions` 클래스는 `ResourceSavingCallback` 을 통해 저장 과정에 연결할 수 있게 해줍니다. 이 콜백은 Aspose 가 작성해야 하는 각 외부 리소스(이미지, CSS 등)에 대해 `ResourceSavingArgs` 객체를 전달받습니다. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### 콜백 구현 + +아래는 `ImageSavingCallback` 의 전체 구현입니다. 이 구현은 Markdown 파일 옆에 `Images` 하위 폴더를 만들고, 각 그림에 순차적인 이름(`img_0.png`, `img_1.jpg`, …)을 부여하며, 필요에 따라 이미지를 다른 곳(예: 클라우드 버킷)으로 스트리밍할 수도 있습니다. + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **How this helps you:** `args.FileName` 을 커스터마이즈함으로써 **how to save images** 를 정확히 제어할 수 있습니다—단일 폴더, 날짜 기반 계층 구조, 혹은 데이터베이스 BLOB 등 어디에 저장할지 결정합니다. 콜백은 모든 이미지에 대해 실행되므로 나중에 Markdown 파일을 별도로 후처리할 필요가 없습니다. + +## Step 3 – 문서를 Markdown 으로 저장 + +옵션과 콜백이 준비되었으니 실제 변환은 한 줄 코드로 수행됩니다. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +When the line finishes, you’ll have: + +- `Doc.md` – Word 콘텐츠의 Markdown 표현입니다. +- `Images\img_0.png`, `Images\img_1.jpg`, … – 원본 DOCX 에서 추출된 모든 그림 파일입니다. + +## 전체, 바로 실행 가능한 예제 + +모든 코드를 합치면, 새 C# 프로젝트에 복사·붙여넣기 할 수 있는 독립형 콘솔 앱 예제가 아래에 있습니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### 예상 결과 + +프로그램을 실행한 후: + +- 어떤 텍스트 편집기로 `C:\Docs\Doc.md` 를 열면 `![](Images/img_0.png)` 와 같은 Markdown 이미지 링크가 보일 것입니다. +- `Images` 폴더에는 추출된 각 그림이 순차적인 이름으로 저장됩니다. +- Markdown 파일은 로컬 이미지를 지원하는 모든 뷰어(VS Code 미리보기, GitHub 등)에서 올바르게 렌더링됩니다. + +## 자주 묻는 질문 (FAQs) + +### 다른 이미지 형식(SVG, TIFF)도 작동하나요? + +예. `Path.GetExtension(args.FileName)` 은 원래 확장자를 그대로 유지하므로 SVG, TIFF, BMP, 심지어 EMF 도 변경 없이 저장됩니다. 단, 일부 Markdown 렌더러는 SVG 를 인라인으로 표시하지 못할 수 있으며, 이 경우 SVG 를 미리 PNG 로 변환해야 할 수도 있습니다. + +### 이미지를 별도 파일이 아닌 Base64 로 임베드해야 하면 어떻게 하나요? + +`ResourceSaving` 내부에서 물리 파일 쓰기를 메모리 스트림으로 교체하고 Markdown 링크를 수동으로 수정할 수 있습니다. Aspose 는 직접적인 “Base64 로 임베드” 옵션을 제공하지 않지만, 콜백을 통해 `args.Stream` 에 대한 전체 제어가 가능합니다. + +### 내장 `ExportImages` 메서드와는 어떻게 다른가요? + +`ExportImages` 는 모든 이미지를 폴더에 추출하지만 Markdown 은 생성하지 **않습니다**. 우리의 콜백은 두 작업을 결합하여 이미지 파일 이름이 `.md` 내부의 참조와 일치하도록 보장합니다. 이러한 정렬이 변환 중 **how to save images** 를 올바르게 수행하는 핵심입니다. + +### 여러 DOCX 파일을 일괄 변환할 수 있나요? + +물론 가능합니다. 핵심 로직을 `foreach (var file in Directory.GetFiles(..., "*.docx"))` 루프로 감싸고 출력 경로를 조정한 뒤 동일한 `ImageSavingCallback` 을 재사용하면 됩니다. 다만 문서마다 새로운 `MarkdownSaveOptions` 를 생성해야 하는데, 이는 `args.DestinationFileName` 이 각 반복마다 달라지기 때문입니다. + +## 엣지 케이스 및 모범 사례 + +| Situation | What to Watch Out For | Recommended Fix | +|-----------|----------------------|-----------------| +| **대용량 DOCX (수백 MB)** | 로드 중 메모리 압박 | 부분 스트리밍 로드를 위해 `LoadOptions` 를 `LoadFormat.Docx` 로 설정하고 `LoadOptions.LoadFormat = LoadFormat.Docx` 를 사용하세요 | +| **이미지 이름 충돌** | 대상 폴더에 이미 `img_0.png` 가 존재하면 덮어쓸 수 있습니다 | GUID 를 추가하세요: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **읽기 전용 출력 폴더** | 저장 시 `UnauthorizedAccessException` 예외 발생 | 프로세스가 적절한 권한으로 실행되는지 확인하거나 쓰기 가능한 경로를 선택하세요 | +| **이미지가 아닌 리소스(CSS, 폰트)** | 콜백이 이들도 수신합니다 | `if (args.ResourceType != ResourceType.Image) return;` 로 방어하세요(이미 예시됨) | +| **Unicode 파일 이름** | 일부 파일 시스템이 문자를 제대로 처리하지 못합니다 | 할당 전에 `Path.GetInvalidFileNameChars()` 를 사용해 `args.FileName` 을 정리하세요 | + +## 다음에 살펴볼 수 있는 관련 주제 + +- **convert docx to markdown** 를 사용자 정의 헤딩 스타일과 함께 사용 (인라인 이미지를 위해 `MarkdownSaveOptions.ExportImagesAsBase64` 사용) +- **extract images from word** 를 `Document.GetChildNodes(NodeType.Shape,` 로 사용 + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/korean/net/working-with-fonts/_index.md b/words/korean/net/working-with-fonts/_index.md index 352267cf48..95fc7afe76 100644 --- a/words/korean/net/working-with-fonts/_index.md +++ b/words/korean/net/working-with-fonts/_index.md @@ -52,6 +52,7 @@ | [Aspose.Words에서 글꼴 감지 – 경고 및 설정 처리](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Aspose.Words에서 글꼴을 감지하고 경고와 설정을 관리하는 방법을 단계별로 안내합니다. | | [Aspose.Words에서 글꼴을 캡처하는 방법 – 완전 가이드](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Aspose.Words for .NET을 사용하여 문서에서 사용된 글꼴을 캡처하고 관리하는 방법을 단계별로 안내합니다. | | [DOCX 로드 및 누락된 글꼴 감지 – 완전 C# 가이드](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Aspose.Words for .NET을 사용해 DOCX 파일을 로드하고 누락된 글꼴을 감지하는 방법을 단계별 C# 가이드로 제공합니다. | +| [Aspose 글꼴 대체: Word 문서에서 누락된 글꼴 감지](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Aspose.Words for .NET을 사용하여 Word 문서에서 누락된 글꼴을 감지하는 방법을 단계별 가이드로 알아보세요. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/korean/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..99a0177d6a --- /dev/null +++ b/words/korean/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-05-04 +description: Aspose 글꼴 대체 기능을 사용하여 Word 문서를 로드할 때 누락된 글꼴을 감지하고 누락된 글꼴 세부 정보를 검색하는 + 단계별 가이드. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: ko +og_description: 'Aspose 글꼴 대체 마스터: Word 문서를 로드할 때 누락된 글꼴을 감지하고 전체 C# 코드로 누락된 글꼴 정보를 + 가져옵니다.' +og_title: Aspose 글꼴 대체 – Word 문서에서 누락된 글꼴 감지 +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose 글꼴 대체: Word 문서에서 누락된 글꼴 감지' +url: /ko/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Word 문서에서 누락된 글꼴 감지 + +다른 컴퓨터에서 Word 문서가 왜 잘못 표시되는지 궁금해 본 적 있나요? 대부분 원인은 누락된 글꼴이며, **Aspose font substitution**은 시각적 재앙이 되기 전에 이러한 문제를 찾아낼 수 있는 도구입니다. 이 튜토리얼에서는 **Word 문서를 로드하는 순간 누락된 글꼴을 감지**하고, **누락된 글꼴** 세부 정보를 **검색**하여 수정하거나 교체하는 방법을 단계별로 안내합니다. + +경고 콜백 설정부터 누락된 글꼴의 정리된 목록을 가져오는 것까지 모두 다룹니다. 끝까지 진행하면 어떤 글꼴이 제외되었는지 정확히 알려주는 실행 준비가 된 C# 코드 스니펫을 얻을 수 있으며, 이것이 문서 충실도에 왜 중요한지 이해하게 됩니다. + +--- + +## Prerequisites – 시작하기 전에 필요한 것들 + +- **Aspose.Words for .NET** (v23.12 또는 이후 버전 권장). +- .NET 개발 환경 (Visual Studio, Rider, 또는 `dotnet` CLI). +- 의도적으로 설치되지 않은 글꼴을 사용하는 샘플 DOCX—예: `DocumentWithMissingFont.docx`. +- 기본 C# 지식—특별한 것이 아니라 콘솔 앱을 실행할 수 있는 능력. + +위 항목 중 익숙하지 않은 것이 있다면, 잠시 멈추고 NuGet 패키지를 설치하세요: + +```bash +dotnet add package Aspose.Words +``` + +그게 전부입니다. 추가 글꼴도 없고 외부 서비스도 필요 없습니다. + +--- + +## Step 1: Word 문서 로드 (및 글꼴 검사 트리거) + +가장 먼저 해야 할 일은 **Word 문서를 로드**하는 것입니다. Aspose.Words는 파일을 파싱하고, 참조된 글꼴을 찾을 수 없으면 *FontSubstitution* 경고를 큐에 넣습니다. 아래는 로드를 수행하는 코드입니다: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **왜 중요한가:** 문서를 일찍 로드하면 Aspose가 텍스트, 스타일 및 임베디드 객체의 모든 실행을 스캔할 기회를 얻습니다. 시스템이나 사용자 지정 글꼴 폴더에서 글꼴을 찾지 못하면 이후에 경고가 발생합니다. + +--- + +## Step 2: 대체 이벤트를 캡처하기 위한 경고 콜백 연결 + +Aspose.Words는 누락된 글꼴과 같은 문제를 알려주는 콜백 메커니즘을 사용합니다. `IWarningCallback` 구현을 `doc.WarningCallback`에 할당하면 발생하는 각 경고를 가로챌 수 있습니다. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **프로 팁:** 복합 패턴으로 래핑하여 여러 콜백(예: 로깅, UI 업데이트)을 연결할 수 있지만, 이 튜토리얼에서는 단일 콜백이 명확합니다. + +--- + +## Step 3: Font Substitution 경고 콜백 구현 + +이제 실제 작업을 수행하는 클래스를 정의합니다. 콜백은 `WarningInfo` 객체를 받고, `WarningType.FontSubstitution`을 필터링한 뒤 나중에 사용할 설명을 저장합니다. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **무슨 일인가:** Aspose가 누락된 글꼴을 만나면 “Font substitution: 'Comic Sans MS'를 찾을 수 없어 대신 'Arial'을 사용했습니다.”와 같은 경고를 생성합니다. 우리의 콜백은 해당 라인을 출력하고 저장합니다. + +--- + +## Step 4: 문서 처리 (선택) 및 누락된 글꼴 수집 + +만약 **누락된 글꼴을 감지**하는 것만 필요하다면 로드 단계만으로 충분합니다—경고가 자동으로 발생합니다. 그러나 많은 개발자는 일부 작업(예: 저장, 변환) 후에 **누락된 글꼴** 정보를 **검색**해야 합니다. 아래에서는 모든 경고가 발생하도록 PDF 저장이라는 작은 작업을 강제로 수행한 뒤 수집된 메시지를 가져옵니다. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **예상 콘솔 출력** (예시): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +각 라인이 원래 글꼴과 Aspose가 선택한 대체 글꼴을 명확히 표시하는 것을 확인하세요. 이것이 **aspose font substitution** 보고의 핵심입니다. + +--- + +## Step 5: 고급 – 대체를 줄이기 위한 사용자 지정 글꼴 소스 사용 + +때때로 누락된 글꼴이 실제로 존재하지만 기본 시스템 폴더에 없을 수 있습니다. Aspose.Words는 `FontSettings`를 통해 사용자 지정 디렉터리를 지정할 수 있게 해줍니다. 이 단계를 추가하면 대체 경고 수를 크게 줄일 수 있습니다. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **왜 추가하나요?** 여러 머신에 문서를 배포할 경우, 필요한 글꼴을 알려진 폴더에 번들링하면 모든 곳에서 동일한 시각적 모습을 보장합니다. 또한 Aspose가 대체하기 전에 해당 폴더를 확인하므로 **누락된 글꼴 감지** 루틴이 더 정확해집니다. + +--- + +## 완전한 작업 예제 + +모두 합치면, 아래는 복사‑붙여넣기만 하면 되는 콘솔 프로그램입니다. `Program.cs`로 저장하고 `dotnet run`으로 실행하세요. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**예상 출력:** 소스 DOCX가 없는 글꼴을 참조하면 콘솔에 각 대체 라인과 간결한 요약이 출력됩니다. 모든 글꼴이 존재하면 “No missing fonts were detected.” 메시지가 표시됩니다. + +--- + +## 일반적인 함정 및 회피 방법 + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **경고가 나타나지 않음** | 문서가 시스템 글꼴만 사용하거나 이미 누락된 글꼴이 포함된 사용자 지정 폴더를 추가했기 때문입니다. | DOCX가 실제로 사용 불가능한 글꼴을 참조하는지 확인하세요. Word에서 열어 단락을 희귀 글꼴(예: “Papyrus”)로 변경할 수 있습니다. | +| **중복 메시지** | 같은 글꼴이 여러 실행에 사용되어 여러 경고가 발생합니다. | `Distinct()`를 사용해 고유한 집합만 필요하면 목록을 중복 제거하세요. | +| **대형 문서에서 성능 저하** | 각 경고가 UI 스레드에서 처리됩니다. | 로드를 백그라운드 작업으로 실행하거나 후처리를 위해 `Parallel.ForEach`를 사용하세요. | +| **잘못된 대체 글꼴** | Aspose의 기본 대체 글꼴이 브랜드와 일치하지 않을 수 있습니다. | `FontSettings.SubstitutionSettings.DefaultFontName`을 선호하는 대체 글꼴(예: “Calibri”)로 설정하세요. | + +--- + +## 솔루션 확장 – 누락된 글꼴을 JSON으로 내보내기 + +클라이언트에 누락된 글꼴을 보고해야 하는 웹 서비스를 구축한다면, 목록을 직렬화하는 것은 간단합니다: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +이제 API가 다른 시스템이 사용할 수 있는 깔끔한 JSON 페이로드를 반환할 수 있습니다. + +--- + +## 결론 + +이 가이드에서는 **Aspose font substitution**을 처음부터 끝까지 시연했습니다: Word 문서 로드, 경고 콜백 연결, 각 *누락된 글꼴 감지* 이벤트 캡처, 그리고 최종적으로 **누락된 글꼴** 정보를 보고 또는 수정용으로 **검색**했습니다. 선택적인 사용자 지정 글꼴 폴더를 추가하면 대체 목록을 줄일 수 있으며, 몇 줄만 더 추가하면 결과를 JSON으로 내보낼 수도 있습니다. + +문서의 시각적 무결성은 사용된 글꼴에 달려 있다는 점을 기억하세요. 여기 소개한 기술을 사용하면 예상치 못한 대체에 놀라지 않을 것입니다. +다음 단계로 나아갈 준비가 되었나요? 이 로직을 더 큰 문서 처리 파이프라인에 통합하거나, 글꼴 임베딩(`doc.FontSettings.EmbeddedFonts`)과 같은 Aspose.Words의 다른 기능을 탐색해 보세요. 가능성은 무한하며, 사용자는 깔끔한 출력에 감사할 것입니다. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/polish/net/ai-powered-document-processing/_index.md b/words/polish/net/ai-powered-document-processing/_index.md index 18902b04e6..a2cdba5c1c 100644 --- a/words/polish/net/ai-powered-document-processing/_index.md +++ b/words/polish/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ Na koniec nie zapomnij sprawdzić naszego [Praca z opcjami podsumowania](./worki | [Praca z modelem Google AI](./working-with-google-ai-model/) Ulepsz przetwarzanie dokumentów dzięki Aspose.Words for .NET i Google AI, aby bez wysiłku tworzyć zwięzłe podsumowania. | | [Praca z otwartym modelem AI](./working-with-open-ai-model/) | Odblokuj wydajne podsumowanie dokumentów za pomocą Aspose.Words dla .NET z potężnymi modelami OpenAI. Zanurz się w tym kompleksowym przewodniku już teraz. | | [Praca z opcjami podsumowania](./working-with-summarize-options/) | Naucz się skutecznie podsumowywać dokumenty Word za pomocą Aspose.Words dla platformy .NET dzięki naszemu przewodnikowi krok po kroku dotyczącemu integrowania modeli AI w celu szybkiego uzyskiwania analiz. | +| [Jak używać LLM z Aspose.Words – Przepisanie akapitów w C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Dowiedz się, jak wykorzystać modele językowe do automatycznego przepisywania akapitów w dokumentach Word przy użyciu C# i Aspose.Words. | +| [Jak sprawdzić gramatykę w C# – Kompletny przewodnik po dokumentach Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Dowiedz się, jak używać Aspose.Words dla .NET do sprawdzania gramatyki w dokumentach Word przy pomocy C#. | +| [Podsumuj dokument Word w C# – Kompletny przewodnik z użyciem Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Dowiedz się, jak podsumować dokumenty Word w C# przy użyciu modelu Anthropic Claude i Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/polish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..5a1ee42336 --- /dev/null +++ b/words/polish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Dowiedz się, jak sprawdzić gramatykę w dokumencie Word przy użyciu C#. + Ten samouczek obejmuje również, jak wczytać plik DOCX w C# i używać Aspose.Words + AI dla dokładnych wyników. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: pl +og_description: Jak sprawdzić gramatykę w dokumencie Word przy użyciu C#? Skorzystaj + z tego samouczka, aby wczytać plik DOCX w C# i przeprowadzić kontrolę gramatyczną + opartą na sztucznej inteligencji przy użyciu Aspose.Words. +og_title: Jak sprawdzić gramatykę w C# – Pełny przewodnik krok po kroku +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Jak sprawdzić gramatykę w C# – Kompletny przewodnik po dokumentach Word +url: /pl/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak sprawdzić gramatykę w C# – Kompletny przewodnik po dokumentach Word + +Zastanawiałeś się kiedyś **jak sprawdzić gramatykę** w dokumencie Word bez opuszczania swojego IDE? Nie jesteś jedyny. Wielu programistów musi weryfikować raporty generowane przez użytkowników, automatyczne e‑maile czy nawet dokumentację przed jej wydaniem. Dobra wiadomość? Dzięki Aspose.Words AI możesz zrobić to programowo, a cały proces idealnie wpasowuje się w typowy przepływ pracy w C#. + +W tym przewodniku przeprowadzimy Cię przez wszystko, co musisz wiedzieć: od wczytania pliku DOCX C# po wywołanie sprawdzania gramatyki przez AI i interpretację wyników. Na końcu będziesz mieć gotowy fragment kodu, który wypisuje poziom istotności, komunikat i proponowaną zamianę każdego problemu — bez konieczności ręcznego kopiowania i wklejania. + +## Czego się nauczysz + +- **Jak sprawdzić gramatykę** w dokumencie Word przy użyciu Aspose.Words AI. +- Dokładne kroki, aby **wczytać plik DOCX C#** przy użyciu klasy `Document`. +- Jak obsłużyć obiekt `GrammarCheckResult`, iterować po problemach i wyświetlać przydatne diagnostyki. +- Typowe pułapki (np. brak licencji) oraz wskazówki, jak przygotować rozwiązanie do środowiska produkcyjnego. + +> **Wymagania wstępne:** .NET 6.0+ (lub .NET Framework 4.6+), Visual Studio 2022 (lub dowolne IDE, które preferujesz) oraz licencja Aspose.Words for .NET (bezpłatna wersja próbna działa do testów). Jeśli nie zainstalowałeś jeszcze pakietów NuGet, uruchom: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Teraz zanurzmy się. + +## Krok 1: Wczytaj plik DOCX w C# + +Zanim można przeprowadzić sprawdzanie gramatyki, dokument musi być wczytany do pamięci. Aspose.Words umożliwia to w jednej linii, ale istnieje kilka niuansów, które warto zauważyć. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Dlaczego to jest ważne:** +- Użycie `Path.Combine` zapewnia kompatybilność międzyplatformową. +- Sprawdzenie istnienia zapobiega awarii w czasie wykonywania, która w przeciwnym razie ukryłaby rzeczywistą logikę sprawdzania gramatyki. +- Kiedy **wczytujesz plik DOCX C#**, Aspose analizuje wszystkie style, nagłówki, stopki i nawet ukryty tekst, dając AI pełny obraz dokumentu. + +> **Wskazówka:** Jeśli musisz pracować ze strumieniami (np. plikami przesyłanymi z sieci), możesz zamienić wywołanie `new Document(docPath)` na `new Document(stream)`. + +## Krok 2: Wybierz model AI do sprawdzania gramatyki + +Aspose.Words AI obsługuje kilka modeli, od lekkich lokalnych po oparte na chmurze warianty GPT. Dla większości scenariuszy **GPT‑3.5 Turbo** zapewnia optymalny kompromis między szybkością a dokładnością. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Dlaczego wybrać GPT‑3.5 Turbo?** +- Jest wystarczająco szybki do przetwarzania wsadowego dziesiątek plików na minutę. +- Koszt (jeśli korzystasz z płatnego planu) jest niższy niż GPT‑4, a nadal wykrywa większość typowych błędów. +- API automatycznie obsługuje limity tokenów, więc nie musisz ręcznie dzielić dużych dokumentów. + +Jeśli wolisz podejście offline, zamień `AiModelType.Gpt35Turbo` na `AiModelType.Local` (wymaga opcjonalnego pakietu modelu offline). + +## Krok 3: Iteruj po problemach i wyświetl przydatne informacje zwrotne + +`GrammarCheckResult` zawiera kolekcję obiektów `GrammarIssue`. Każdy problem dostarcza poziom istotności, czytelny komunikat i proponowaną zamianę. Wyświetlmy je ładnie. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Co oznaczają pola:** +- `Severity` – zazwyczaj `Info`, `Warning` lub `Error`. Traktuj `Error` jako konieczność naprawy przed publikacją. +- `Message` – zwięzły opis problemu (np. „Zgodność podmiotu z orzeczeniem”). +- `SuggestedReplacement` – rekomendowana przez AI poprawka; możesz zastosować ją automatycznie, jeśli ufasz modelowi, lub przedstawić człowiekowi do recenzji. + +> **Przypadek brzegowy:** Niektóre problemy mogą mieć pustą wartość `SuggestedReplacement` (np. sugestie stylu). W takich przypadkach po prostu oznacz lokalizację do ręcznej recenzji. + +## Pełny działający przykład + +Łącząc wszystko razem, oto samodzielna aplikacja konsolowa, którą możesz skopiować i wkleić do nowego projektu .NET. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Oczekiwany wynik (przykład):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Jeśli uruchomisz program na czystym dokumencie, zobaczysz zamiast tego linię „✅ No grammar issues detected.” + +## Radzenie sobie z typowymi problemami + +| Problem | Dlaczego się pojawia | Szybka naprawa | +|---------|----------------------|----------------| +| **LicenseException** | Biblioteki Aspose wymagają ważnej licencji do użytku produkcyjnego. | Wstaw `License license = new License(); license.SetLicense("Aspose.Words.lic");` na początku `Main`. | +| **Network timeout** | Wywołanie modelu AI dociera do chmury i przekracza domyślny limit czasu 100 s. | Zwiększ limit czasu poprzez `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` przed wywołaniem `CheckGrammar`. | +| **Large documents (> 10 MB)** | Niektóre modele w chmurze przycinają wejście. | Podziel dokument na sekcje przy użyciu `document.Sections` i uruchom sprawdzanie dla każdej sekcji, a następnie zaggreguj wyniki. | +| **Missing suggestions** | Model nie mógł wygenerować zamiany (np. niejednoznaczna konstrukcja). | Zaloguj problem do ręcznej recenzji; nie stosuj automatycznie pustych sugestii. | + +## Rozszerzanie rozwiązania + +- **Automatyczne naprawianie:** Przejdź pętlą po `grammarResult.Issues` i zamień tekst przy użyciu `document.Range.Replace`. Upewnij się, że najpierw wykonasz kopię zapasową oryginalnego pliku. +- **Przetwarzanie wsadowe:** Owiń cały przepływ w `foreach` po katalogu plików DOCX. Zapisz każdy raport jako plik JSON do późniejszej analizy. +- **Integracja z ASP.NET:** Udostępnij endpoint, który przyjmuje przesłany DOCX, uruchamia sprawdzanie i zwraca ładunek JSON z problemami. + +## Ilustracja obrazu + +diagram przepływu sprawdzania gramatyki + +*Powyższy diagram wizualizuje trzyetapowy proces: wczytaj DOCX → uruchom sprawdzanie gramatyki AI → wyświetl problemy.* + +## Zakończenie + +Omówiliśmy **jak sprawdzić gramatykę** w dokumencie Word przy użyciu C#, przedstawiliśmy dokładny kod do **wczytania pliku DOCX C#**, oraz pokazaliśmy, jak interpretować informacje zwrotne generowane przez AI. Dzięki Aspose.Words AI otrzymujesz potężny silnik gramatyczny oparty na chmurze, który integruje się bezproblemowo z każdą aplikacją .NET. + +Kolejne kroki? Spróbuj zautomatyzować pętlę naprawy‑zastosowania, eksperymentuj z nowszym `AiModelType.Gpt4` dla jeszcze lepszych sugestii, lub połącz to z biblioteką sprawdzania pisowni, aby uzyskać pełnoprawny proces korekty. Możliwości są praktycznie nieograniczone, a teraz masz solidną bazę do dalszego rozwoju. + +Masz pytania lub napotkałeś trudny przypadek? Dodaj komentarz poniżej i powodzenia w kodowaniu! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/polish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/polish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..41f3a96d0c --- /dev/null +++ b/words/polish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-05-04 +description: Jak używać LLM do edycji dokumentów w Aspose – dowiedz się, jak zamienić + tekst akapitu, połączyć się z lokalnym LLM i przepisać tekst przy użyciu AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: pl +og_description: Jak używać LLM do edycji dokumentów za pomocą Aspose. Ten przewodnik + pokazuje, jak połączyć się z lokalnym LLM, zamienić tekst akapitu i przekształcić + tekst przy użyciu AI. +og_title: Jak korzystać z LLM z Aspose.Words – Przepisz akapity w C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Jak używać LLM z Aspose.Words – Przepisz akapity w C# +url: /pl/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak używać LLM z Aspose.Words – Przepisanie akapitów w C# + +Zastanawiałeś się kiedyś **jak używać LLM**, aby dopracować dokument Word bez ręcznego otwierania? Nie jesteś jedyny. Wielu programistów napotyka problem, gdy muszą *zastąpić tekst akapitu* programowo, ale brakuje im czystego, opartego na AI przepływu pracy. + +W tym samouczku podłączymy lokalny duży model językowy, przekażemy mu fragment z pliku `.docx`, poprosimy go o **przepisanie tekstu przy użyciu AI**, a na końcu zapisujemy zaktualizowany dokument — wszystko przy użyciu Aspose.Words. Po zakończeniu będziesz mieć gotową do uruchomienia aplikację konsolową w C#, która demonstruje cały proces. + +> **Co otrzymasz:** kompletny, działający przykład, wyjaśnienia każdego kroku, wskazówki dotyczące przypadków brzegowych oraz pomysły na rozszerzenie rozwiązania. + +## Czego będziesz potrzebować + +- **.NET 6+** (lub .NET Framework 4.7.2 – kod działa na obu) +- **Aspose.Words for .NET** (pakiet NuGet `Aspose.Words`) +- Serwer **lokalny LLM** udostępniający prosty endpoint HTTP `/generate` (np. Ollama, LMStudio lub własny serwis Flask) +- Podstawowa znajomość C# i kodu klienta HTTP + +Nie są wymagane dodatkowe SDK; wszystko pozostałe znajduje się w kodzie, który napiszesz razem z nami. + +## Krok 1: Jak używać LLM do zastąpienia tekstu akapitu + +Pierwszą rzeczą, którą musimy zrobić, jest zidentyfikowanie akapitu, który chcemy zmodyfikować. Aspose.Words ułatwia to, udostępniając rozbudowany model obiektowy. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Dlaczego to jest ważne:** +Wybranie właściwego węzła zapobiega przypadkowemu nadpisaniu nagłówków lub tabel. Korzystając z podejścia **replace paragraph text**, zachowujemy integralność struktury dokumentu, modyfikując jedynie interesującą nas treść. + +> **Porada:** Jeśli Twój dokument ma sekcje o zmiennej długości, użyj `document.GetChildNodes(NodeType.Paragraph, true)` oraz LINQ, aby znaleźć akapit według jego tekstu lub stylu. + +## Krok 2: Połącz się z lokalnym endpointem LLM + +Teraz, gdy mamy tekst, musimy go wysłać do LLM. Przykład używa prostej klasy opakowującej `LocalLargeLanguageModel`, która ukrywa szczegóły HTTP. W razie potrzeby możesz zastąpić ją wywołaniami `HttpClient`. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Dlaczego łączymy się w ten sposób:** +Ustawienie **connect to local llm** eliminuje opóźnienia, utrzymuje dane na miejscu i unika kosztów API. Opakowanie również upraszcza późniejszy kod, pozwalając skupić się na logice **rewrite text using ai**. + +## Krok 3: Przepisz tekst przy użyciu AI z Aspose.Words + +Mając tekst akapitu i gotowy LLM, tworzymy prompt, który dokładnie mówi modelowi, czego chcemy — przepisania w formalnym tonie. Możesz dostosować prompt do innych stylów (przyjazny, techniczny itp.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Dlaczego to działa:** +LLM‑y działają na podstawie promptów; podanie wyraźnych instrukcji („Rewrite … in a formal tone”) daje spójne wyniki. Krok **rewrite text using ai** jest sercem tego samouczka — pokazuje, jak AI może być wbudowane bezpośrednio w przepływy pracy z dokumentami. + +## Krok 4: Edytuj dokument i zapisz zmiany + +Teraz zamieniamy oryginalne runy na nową treść. Aspose.Words przechowuje tekst w obiektach `Run`, więc ich wcześniejsze wyczyszczenie zapobiega pozostawieniu artefaktów formatowania. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Uwaga dotycząca przypadków brzegowych:** +Jeśli oryginalny akapit zawierał mieszane formatowanie (pogrubienie, kursywa), możesz chcieć zachować style. W takim przypadku utwórz nowy `Run`, skopiuj ustawienia oryginalnego `Font`, a następnie ustaw jego `Text` na `revisedText`. + +## Pełny działający przykład + +Poniżej znajduje się cały program, który możesz skopiować i wkleić do projektu konsolowego. Pamiętaj, aby najpierw zainstalować pakiet NuGet Aspose.Words (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Oczekiwany wynik + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Otwórz `output.docx` – zobaczysz, że trzeci akapit teraz zawiera dopracowaną wersję. + +## Częste pytania i pułapki + +| Pytanie | Odpowiedź | +|----------|--------| +| **Co zrobić, jeśli mój LLM zwraca JSON z dodatkowymi polami?** | Dostosuj `GenerateText`, aby deserializować właściwą właściwość lub ręcznie sparsować odpowiedź. | +| **Czy mogę przetwarzać wiele akapitów jednocześnie?** | Tak – iteruj po `document.FirstSection.Body.Paragraphs` i zastosuj tę samą logikę promptu, ewentualnie dodając indeks akapitu do promptu dla kontekstu. | +| **Mój serwer LLM wymaga uwierzytelnienia?** | Dodaj nagłówek do `HttpClient` przed POST‑em: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Formatowanie znika po zamianie.** | Zachowaj oryginalne ustawienia `Run.Font`: utwórz nowy `Run`, skopiuj `originalRun.Font.Clone()`, a następnie ustaw jego `Text`. | +| **LLM czasami zwraca pusty ciąg.** | Zaimplementuj mechanizm awaryjny – jeśli `revisedText.Trim().Length == 0`, zachowaj oryginalny tekst lub spróbuj ponownie z prostszym promptem. | + +## Rozszerzanie rozwiązania + +Teraz, gdy opanowałeś **how to use llm** dla pojedynczego akapitu, rozważ następujące kolejne kroki: + +- **Przetwarzanie wsadowe:** Przejdź przez każdy akapit i przepisz go w wybranym stylu (np. „skrót wszystkich tekstów”). +- **Przepisanie z uwzględnieniem stylu:** Przekaż w promptcie nazwę oryginalnego stylu akapitu, aby LLM respektował nagłówki vs tekst główny. +- **Integracja z pipeline CI:** Zautomatyzuj dopracowywanie dokumentów jako część procesu budowania dokumentacji. +- **Alternatywne prompty:** Spróbuj „summarize this paragraph” lub „translate this paragraph to Spanish”, aby odkryć pełną moc **rewrite text using ai**. + +## Zakończenie + +Przeszliśmy cały proces **how to use llm** z Aspose.Words: ładowanie dokumentu, **connect to local llm**, wyodrębnianie akapitu, **rewrite text using ai**, **replace paragraph text**, a na końcu zapisanie wyniku. Kod jest samodzielny, działa od razu i pokazuje praktyczny sposób łączenia AI z tradycyjną automatyzacją dokumentów. + +Wypróbuj go, dostosuj prompty i pozwól + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/polish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/polish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..b689ec965c --- /dev/null +++ b/words/polish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Szybko podsumuj dokument Word i przetłumacz tekst przy użyciu Google. + Dowiedz się, jak korzystać z Anthropic Claude, tworzyć podsumowanie z raportu i + tłumaczyć tekst przy użyciu Google w jednym samouczku C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: pl +og_description: Natychmiast podsumuj dokument Word i przetłumacz tekst za pomocą Google. + Ten przewodnik pokazuje, jak używać Anthropic Claude i Aspose.Words do stworzenia + podsumowania z raportu. +og_title: Streszcz dokument Word w C# – krok po kroku z Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Podsumuj dokument Word w C# – Kompletny przewodnik z użyciem Anthropic Claude +url: /pl/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Podsumuj dokument Word w C# – Kompletny przewodnik z użyciem Anthropic Claude + +Czy kiedykolwiek potrzebowałeś **podsumować dokument Word**, ale utknąłeś w żonglowaniu API i rozbudowanym kodem? Nie jesteś sam. W wielu projektach — rocznych raportach, pismach prawnych czy pracach badawczych — wyodrębnienie zwięzłego przeglądu jest codziennym problemem. Na szczęście połączenie Aspose.Words i Anthropic Claude sprawia, że to bułka z masłem, a możesz nawet dodać szybką tłumaczenie Google w trakcie. + +W tym samouczku przeprowadzimy Cię przez wszystko, co musisz wiedzieć: ładowanie dużego .docx, wywoływanie modelu Claude V2 w celu wygenerowania podsumowania, tłumaczenie frazy przy użyciu Google oraz obsługę najczęstszych problemów. Po zakończeniu będziesz w stanie **utworzyć podsumowanie z raportu** przy użyciu kilku linijek C#. + +## Wymagania wstępne + +- .NET 6+ (lub .NET Core 3.1) zainstalowany +- Licencja Aspose.Words for .NET (lub bezpłatna wersja próbna) +- Dostęp do API Anthropic Claude V2 (będziesz potrzebował klucza API) +- Połączenie internetowe dla Google Translator +- Visual Studio 2022 lub ulubione IDE C# + +Nie są wymagane dodatkowe pakiety NuGet poza `Aspose.Words` i `Aspose.Words.AI`; klasa translatora jest dostarczana w tej samej bibliotece. + +## Krok 1 – Załaduj źródłowy dokument Word + +Pierwszą rzeczą, którą musimy zrobić, jest wczytanie pliku .docx do pamięci. Aspose.Words czyni to trywialnym, a dzięki swojemu solidnemu parserowi działa z złożonymi układami, tabelami i nawet osadzonymi obrazami. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Dlaczego to ważne:** Wczesne ładowanie dokumentu pozwala sprawdzić właściwości (autor, liczba słów) i zdecydować, czy podsumowanie jest w ogóle potrzebne. Duże pliki > 10 MB mogą być intensywne pod względem pamięci, więc rozważ użycie `LoadOptions` z `LoadFormat.Docx`, jeśli napotkasz problemy z wydajnością. + +## Krok 2 – Podsumuj dokument przy użyciu Anthropic Claude + +Teraz nadchodzi ciekawa część: przekazujemy dokument Claude'owi V2. Klasa `Summarizer` abstrahuje wywołanie HTTP, obsługę tokenów i ponowne próby. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Jak to działa:** +> 1. **Chunking** – Aspose automatycznie dzieli dokument na przystępne fragmenty (≈ 2 KB każdy), aby respektować limity tokenów Claude'a. +> 2. **Prompt engineering** – Biblioteka wysyła prompt typu “Provide a concise executive summary of the following text:” (Podaj zwięzłe streszczenie wykonawcze następującego tekstu:) wraz z każdym fragmentem. +> 3. **Aggregation** – Claude zwraca częściowe podsumowania, które są łączone w ostateczny `summaryText`. + +### Przypadki brzegowe i wskazówki + +- **Bardzo duże raporty** (> 100 stron) mogą przekroczyć okno kontekstowe Claude'a. Jeśli zobaczysz obcięty wynik, ustaw `SummarizerOptions.MaxChunkSize` na mniejsze wartości. +- **Źródło nie‑angielskie** – Claude działa najlepiej w języku angielskim; dla innych języków najpierw przetłumacz (zobacz Krok 4), a potem podsumuj. +- **Limity szybkości** – Anthropic nakłada limity na minutę. Owiń wywołanie w pętlę ponownych prób z wykładniczym opóźnieniem, jeśli otrzymasz odpowiedź `429`. + +## Krok 3 – Zweryfikuj wynik podsumowania + +Zanim przejdziemy dalej, dobrą praktyką jest sprawdzenie, czy podsumowanie nie jest puste i spełnia oczekiwane długości (np. 5‑10 % oryginalnej liczby słów). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Jeśli stosunek wydaje się zbyt niski (< 2 %), możesz chcieć dostosować właściwość `SummarizerOptions.SummaryLength`, aby żądać dłuższego wyniku. + +## Krok 4 – Tłumaczenie tekstu przy użyciu Google + +Teraz, gdy mamy wyraźne podsumowanie po angielsku, dodajmy szybkie tłumaczenie. Klasa `Translator` korzysta z publicznego endpointu tłumaczenia Google (nie wymaga klucza API dla krótkich fraz, ale w produkcji powinieneś przejść na płatne API Cloud Translation). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Dlaczego Google?** Jest szybki, szeroko wspierany, a darmowy endpoint obsługuje krótkie ciągi bez uwierzytelniania. Przy masowych tłumaczeniach, grupuj wywołania i respektuj limity użycia Google. + +### Tłumaczenie całego podsumowania (opcjonalnie) + +Jeśli potrzebujesz całego podsumowania po hiszpańsku (lub w innym języku), po prostu przekaż `summaryText` do `Translator.Translate`. Pamiętaj o limicie rozmiaru żądania 5 KB; może być konieczne podzielenie podsumowania na mniejsze fragmenty. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Krok 5 – Zapisz podsumowanie z powrotem do pliku Word (bonus) + +Często użytkownik końcowy oczekuje pobrania dokumentu zamiast wyjścia w konsoli. Stwórzmy nowy plik `.docx`, który zawiera zarówno wersję angielską, jak i hiszpańską. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Praktyczna wskazówka + +Gdy osadzasz podsumowanie w nowym pliku Word, zachowaj oryginalne formatowanie na minimalnym poziomie (użyj stylu `Normal`). Złożone style ze źródła mogą powodować nieoczekiwane zmiany układu. + +## Pełny działający przykład + +Poniżej znajduje się **kompletny, gotowy do skopiowania i wklejenia** program, który łączy wszystkie elementy. Kompiluje się jednym poleceniem `dotnet run` po dodaniu pakietów Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Oczekiwany output w konsoli** (skrócony dla zwięzłości): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Najczęściej zadawane pytania + +| Pytanie | Odpowiedź | +|----------|-----------| +| *Czy mogę użyć innego modelu AI?* | Tak. Zamień `SummarizerModel.AnthropicClaudeV2` na `SummarizerModel.OpenAIGPT4` (wymaga klucza OpenAI) lub dowolnego dostawcy wymienionego w wyliczeniu. | +| *Co jeśli dokument zawiera chronione sekcje?* | Aspose zgłosi `ProtectedDocumentException`. Odblokuj go najpierw przy użyciu `LoadOptions.Password` lub poproś o niechronioną kopię. | +| *Czy potrzebuję płatnej licencji Aspose do produkcji?* | Bezpłatna wersja próbna działa do 20 stron. Dla większych raportów licencja usuwa limit stron i dodaje optymalizacje wydajności. | +| *Czy tłumacz Google jest niezawodny przy dużych blokach?* | Dla krótkich ciągów jest w porządku. Przy masowym tłumaczeniu przejdź na Cloud Translation API, aby uniknąć limitów rozmiaru żądania i uzyskać lepsze wykrywanie języka. | + +## Zakończenie + +Właśnie **podsumowaliśmy dokument Word** używając Aspose.Words wraz z modelem Anthropic Claude V2, a następnie **przetłumaczyliśmy tekst przy użyciu Google** na + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/polish/net/basic-conversions/_index.md b/words/polish/net/basic-conversions/_index.md index a8c4a7ea1a..94c2024cb4 100644 --- a/words/polish/net/basic-conversions/_index.md +++ b/words/polish/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Basic Conversions przeprowadzi Cię przez podstawowe konwersje dokumentów przy | [Jak wyeksportować LaTeX z Worda – przewodnik krok po kroku](./how-to-export-latex-from-word-step-by-step-guide/) | Dowiedz się, jak wyeksportować dokument Word do formatu LaTeX przy użyciu Aspose.Words dla .NET. Szczegółowy przewodnik krok po kroku. | | [Zapisz Word jako PDF przy użyciu Aspose.Words – Kompletny przewodnik C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Dowiedz się, jak w prosty sposób zapisać dokument Word jako PDF przy użyciu Aspose.Words w C#. Szczegółowy przewodnik krok po kroku. | | [Zapisz DOCX jako PDF przy użyciu Aspose.Words – Kompletny przewodnik C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Dowiedz się, jak w prosty sposób zapisać dokument DOCX jako PDF przy użyciu Aspose.Words w C#. Szczegółowy przewodnik krok po kroku. | +| [Utwórz dostępny PDF z DOCX w C# – Jak przekonwertować Word na PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Dowiedz się, jak utworzyć dostępny plik PDF z dokumentu DOCX w C# przy użyciu Aspose.Words, zapewniając zgodność z WCAG. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/polish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..787ded1115 --- /dev/null +++ b/words/polish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: Utwórz dostępny PDF z pliku DOCX w C#. Dowiedz się, jak konwertować Word + na PDF, zapisywać Word jako PDF oraz eksportować docx do PDF z zachowaniem dostępności. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: pl +og_description: Utwórz dostępny PDF z pliku DOCX w C#. Skorzystaj z tego krok po kroku + poradnika, aby przekonwertować Word na PDF, zapisać Word jako PDF i wyeksportować + docx do PDF z pełną dostępnością. +og_title: Utwórz dostępny PDF z DOCX w C# – szybki przewodnik +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Tworzenie dostępnego PDF z DOCX w C# – Jak konwertować Word na PDF +url: /pl/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Utwórz dostępny PDF z DOCX w C# – Jak konwertować Word na PDF + +Czy kiedykolwiek potrzebowałeś **utworzyć dostępny PDF** z dokumentu Word, ale nie wiedziałeś, której biblioteki zaufać? Nie jesteś sam — wielu programistów napotyka ten sam problem, gdy muszą spełnić standardy PDF/UA dotyczące dostępności. Dobrą wiadomością jest to, że dzięki Aspose.Words możesz zamienić plik `.docx` w zgodny PDF w kilku linijkach kodu i otrzymasz plik, który czytniki ekranu naprawdę potrafią odczytać. + +W tym samouczku przejdziemy przez wszystko, co musisz wiedzieć, aby **konwertować Word na PDF**, **zapisować Word jako PDF**, a nawet **eksportować docx do PDF** z zachowaniem zgodności PDF/UA‑1 (lub PDF/UA‑2). Po zakończeniu będziesz mieć gotowy fragment kodu C#, zrozumiesz, dlaczego każde ustawienie ma znaczenie, i będziesz przygotowany do obsługi typowych przypadków brzegowych, takich jak brakujące czcionki czy niestandardowe ustawienia stron. + +## Prerequisites + +- .NET 6.0 lub nowszy (kod działa również z .NET Framework 4.6+) +- Licencja Aspose.Words for .NET (lub darmowy klucz ewaluacyjny) +- Podstawowa znajomość C# i Visual Studio (lub dowolnego ulubionego IDE) +- Plik DOCX, który chcesz uczynić dostępnym (nazwijmy go `input.docx`) + +> **Pro tip:** Jeśli korzystasz z darmowej wersji próbnej, pamiętaj, że wygenerowany PDF będzie zawierał małą znak wodny „Evaluation”. + +## Step 1: Install Aspose.Words NuGet Package + +Zanim napiszemy jakikolwiek kod C#, biblioteka Aspose.Words musi zostać dodana do projektu. + +```bash +dotnet add package Aspose.Words +``` + +Uruchomienie tego polecenia przywraca `Aspose.Words.dll` i udostępnia przestrzenie nazw. Ten krok jest niezbędny, ponieważ klasa `PdfSaveOptions` znajduje się w tym pakiecie. + +## Step 2: Load the Source DOCX File + +Pierwszym logicznym krokiem jest załadowanie dokumentu Word, który chcesz przekształcić. Pomyśl o tym jak o otwarciu książki przed rozpoczęciem edycji jej stron. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Why this matters:** Ładowanie dokumentu tworzy reprezentację w pamięci, która zawiera wszystkie style, obrazy i metadane. Jeśli plik jest uszkodzony, `Document` zgłosi wyjątek — warto więc otoczyć to blokiem try/catch w kodzie produkcyjnym. + +## Step 3: Configure PDF Save Options for Accessibility + +Aspose.Words pozwala określić poziom zgodności PDF. PDF/UA‑1 to oryginalny standard dostępności, natomiast PDF/UA‑2 dodaje kilka nowszych znaczników. Wybierz ten, który odpowiada wymaganiom Twojego klienta. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **What “Compliance” does:** Ustawienie `PdfCompliance.PdfUax1` instruuje Aspose.Words, aby osadził właściwe znaczniki, logiczną kolejność czytania oraz tekst alternatywny dla obrazów — dokładnie to, czego szuka oprogramowanie czytników ekranu. + +## Step 4: Save the Document as an Accessible PDF + +Teraz najcięższa część jest za nami; po prostu instruujemy Aspose.Words, aby zapisał plik PDF przy użyciu wcześniej zdefiniowanych opcji. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Po wykonaniu tej linii znajdziesz `output.pdf` w określonym folderze. Otwórz go w Adobe Acrobat Reader i sprawdź **File → Properties → Description → PDF/A and PDF/UA**, aby zweryfikować zgodność. + +## Step 5: Verify Accessibility (Optional but Recommended) + +Choć kod gwarantuje wyjście w postaci PDF z znacznikami, szybka kontrola ręczna pomaga wykryć ewentualną niestandardową treść, która może wymagać dodatkowej uwagi. + +1. Otwórz `output.pdf` w Adobe Acrobat Pro. +2. Przejdź do **Tools → Accessibility → Full Check**. +3. Uruchom sprawdzenie i przejrzyj ewentualne ostrzeżenia (np. brak tekstu alternatywnego dla własnych obrazów). + +Jeśli raport nie wykazuje błędów, udało Ci się **utworzyć dostępny PDF**, który spełnia standard PDF/UA‑1. + +## Common Variations & Edge Cases + +### Converting Multiple DOCX Files in a Loop + +Jeśli masz zestaw dokumentów, opakuj logikę ładowania‑zapisu w pętlę `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Switching to PDF/UA‑2 + +Po prostu zmień wartość enumu `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Handling Custom Fonts + +Jeśli Twój DOCX używa czcionek, które nie są zainstalowane na serwerze, osadź je: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Osadzanie gwarantuje, że PDF będzie wyglądał tak samo na każdej maszynie — kluczowy szczegół, gdy **eksportujesz docx do pdf** dla zewnętrznych interesariuszy. + +## Full Working Example + +Poniżej znajduje się kompletny, gotowy do uruchomienia program, który łączy wszystkie elementy. Skopiuj‑wklej go do aplikacji konsolowej, dostosuj ścieżki i naciśnij **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Expected result:** Plik o nazwie `output.pdf`, który otwiera się w dowolnym przeglądarce PDF, zawiera właściwe znaczniki dostępności i może być udostępniany użytkownikom korzystającym z technologii wspomagających. + +![Utwórz dostępny PDF – przykład](/images/create-accessible-pdf.png "Zrzut ekranu pokazujący dokument PDF/UA‑1 zgodny z normą") + +*Image alt text:* *przykład tworzenia dostępnego PDF – zrzut ekranu dokumentu PDF/UA‑1 otwartego w Adobe Acrobat.* + +## Frequently Asked Questions + +- **Czy to działa z .NET Core?** + Absolutnie. Aspose.Words jest wieloplatformowy, więc ten sam kod działa na Windows, Linux i macOS. + +- **Co się stanie, jeśli mój DOCX zawiera makra?** + Makra są ignorowane podczas konwersji; do PDF renderowana jest tylko widoczna treść. + +- **Czy mogę dodać własny tytuł metadanych PDF?** + Tak — przed zapisem ustaw `pdfSaveOptions.Metadata.Title = "Your Custom Title";`. + +- **Czy PDF/UA‑2 jest szeroko wspierany?** + Większość nowoczesnych czytników PDF rozumie PDF/UA‑2, ale jeśli celujesz w starsze narzędzia, pozostań przy PDF/UA‑1. + +## Conclusion + +Właśnie pokazaliśmy, jak **utworzyć dostępny PDF** z pliku DOCX przy użyciu Aspose.Words, omawiając wszystko od instalacji pakietu NuGet po weryfikację zgodności PDF/UA. Postępując zgodnie z tymi krokami, możesz niezawodnie **konwertować Word na PDF**, **zapisywać Word jako PDF** i **eksportować docx do PDF**, spełniając jednocześnie standardy dostępności — niezbędną umiejętność dla każdego programisty pracującego nad korporacyjnymi pipeline’ami dokumentów. + +Gotowy na kolejne wyzwanie? Spróbuj dodać własny nagłówek/stopkę, osadzić znacznik PDF/A‑2b lub zautomatyzować proces w API ASP.NET Core. Możliwości są nieograniczone, a fundament, który zbudowałeś, pozwoli Ci podjąć się ich z pewnością. + +Powodzenia w kodowaniu i niech Twoje PDF‑y zawsze będą czytelne! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/polish/net/programming-with-markdownsaveoptions/_index.md b/words/polish/net/programming-with-markdownsaveoptions/_index.md index e303dbabf2..c41b3314f1 100644 --- a/words/polish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/polish/net/programming-with-markdownsaveoptions/_index.md @@ -67,6 +67,9 @@ Dowiedz się, jak automatycznie zmieniać nazwy obrazów przy konwersji dokument ### [Zapisz obrazy Word – konwertuj Word do Markdown przy użyciu Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) Dowiedz się, jak wyodrębnić obrazy z dokumentu Word i zapisać je podczas konwersji do formatu Markdown przy użyciu Aspose.Words. +### [Jak zapisać obrazy – konwertuj DOCX do Markdown przy użyciu Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) +Dowiedz się, jak wyodrębnić i zapisać obrazy z plików DOCX podczas konwersji do formatu Markdown przy użyciu Aspose.Words. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/polish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..521a8b8134 --- /dev/null +++ b/words/polish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Dowiedz się, jak zapisywać obrazy podczas konwertowania pliku DOCX na + Markdown przy użyciu Aspose.Words. Ten przewodnik pokazuje również, jak wyodrębnić + obrazy z Worda i zapisać dokument Word jako Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: pl +og_description: Jak zapisywać obrazy podczas konwertowania pliku DOCX na Markdown + przy użyciu Aspose.Words. Przewodnik krok po kroku z kompletnym kodem C#. +og_title: Jak zapisać obrazy – konwertuj DOCX na Markdown za pomocą Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Jak zapisać obrazy – konwertuj DOCX na Markdown przy użyciu Aspose.Words +url: /pl/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak zapisywać obrazy – konwersja DOCX do Markdown przy użyciu Aspose.Words + +Zastanawiałeś się kiedyś **jak zapisywać obrazy**, gdy musisz przekształcić plik Worda na Markdown? Nie jesteś sam. Wielu programistów napotyka problem, gdy konwersja zostawia obrazy jako zepsute linki albo, co gorsza, traci je całkowicie. Dobrą wiadomością jest to, że Aspose.Words daje precyzyjną kontrolę, dzięki czemu możesz wyodrębnić obrazy z Worda, zdecydować, gdzie mają trafić, i nadal uzyskać czysty wynik w formacie Markdown. + +W tym tutorialu przeprowadzimy Cię przez kompletny, gotowy do uruchomienia przykład w C#, który pokazuje **jak zapisywać obrazy** do dedykowanego folderu podczas konwersji `.docx` na `.md`. Po drodze wspomnimy także o **convert docx to markdown**, **extract images from word** oraz o szerszym pytaniu **how to convert docx** w sposób, który pozwala **save word as markdown** bez utraty jakichkolwiek zasobów. + +## Wymagania wstępne + +- .NET 6.0 lub nowszy (API działa tak samo na .NET Framework 4.7+) +- Aktywna licencja Aspose.Words lub darmowa wersja próbna (wersja darmowa dodaje znak wodny do wyjścia, ale kod działa identycznie) +- Dokument Word, który już zawiera obrazy (np. `DocWithImages.docx`) +- Visual Studio 2022 lub dowolny edytor umożliwiający kompilację projektów C# + +> **Pro tip:** Jeśli używasz wersji próbnej, możesz nadal testować logikę zapisywania obrazów; pamiętaj tylko, że ostateczny plik PDF/MD będzie zawierał znak wodny wersji próbnej. + +## Przegląd rozwiązania + +Na wysokim poziomie proces wygląda następująco: + +1. Załaduj źródłowy `.docx` przy użyciu `Document`. +2. Utwórz obiekt `MarkdownSaveOptions` i podłącz `IResourceSavingCallback`. +3. W callbacku zdecyduj o folderze i nazwie pliku dla każdego obrazu. +4. Zapisz dokument jako Markdown; callback zapisuje każdy obraz na dysku. + +To jest sedno **jak zapisywać obrazy** podczas konwersji. Ten sam wzorzec działa dla innych typów zasobów (czcionki, CSS itp.), jeśli kiedykolwiek będziesz ich potrzebować. + +## Krok 1 – Załaduj DOCX zawierający obrazy + +Najpierw potrzebujemy instancji `Document`, która wskazuje na plik Word, który chcesz przekonwertować. Nic skomplikowanego – po prostu wywołanie konstruktora. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Dlaczego to ważne:** Ładowanie dokumentu to jedyne miejsce, w którym Aspose analizuje XML Worda, więc brakujące czcionki lub uszkodzone części spowodują wyjątek już teraz – zanim jeszcze zaczniemy zapisywać obrazy. + +## Krok 2 – Skonfiguruj MarkdownSaveOptions z callbackiem zapisywania obrazów + +Klasa `MarkdownSaveOptions` pozwala „zahaczyć” się o proces zapisu poprzez `ResourceSavingCallback`. Ten callback otrzymuje obiekt `ResourceSavingArgs` dla każdego zewnętrznego zasobu (obrazy, CSS itp.), który Aspose musi zapisać. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementacja callbacku + +Poniżej pełna implementacja `ImageSavingCallback`. Tworzy podfolder `Images` obok pliku Markdown, nadaje każdemu obrazowi kolejny numer (`img_0.png`, `img_1.jpg`, …) i opcjonalnie pozwala przesłać obraz gdzie indziej (np. do chmury). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Jak to Ci pomaga:** Poprzez dostosowanie `args.FileName` kontrolujesz dokładnie **jak zapisywać obrazy** – czy to w płaskim folderze, w strukturze opartej na dacie, czy nawet w bazie danych jako BLOB. Callback uruchamia się dla każdego obrazu, więc nie musisz później przetwarzać pliku Markdown. + +## Krok 3 – Zapisz dokument jako Markdown + +Gdy opcje i callback są gotowe, właściwa konwersja to jednowierszowy kod. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Po zakończeniu tej linii otrzymasz: + +- `Doc.md` – reprezentacja Twojej treści Worda w formacie Markdown. +- `Images\img_0.png`, `Images\img_1.jpg`, … – każdy obraz wyodrębniony z oryginalnego DOCX. + +## Pełny, gotowy do uruchomienia przykład + +Łącząc wszystko w całość, oto samodzielna aplikacja konsolowa, którą możesz skopiować i wkleić do nowego projektu C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Oczekiwany rezultat + +Po uruchomieniu programu: + +- Otwórz `C:\Docs\Doc.md` w dowolnym edytorze tekstu. Zobaczysz linki do obrazów w formacie Markdown, np. `![](Images/img_0.png)`. +- Folder `Images` będzie zawierał każdy wyodrębniony obraz, nazwany kolejno. +- Plik Markdown będzie wyświetlał się poprawnie w każdym podglądzie obsługującym lokalne obrazy (VS Code preview, GitHub itp.). + +## Najczęściej zadawane pytania (FAQ) + +### Czy to działa z innymi formatami obrazów (SVG, TIFF)? + +Tak. `Path.GetExtension(args.FileName)` zachowuje oryginalne rozszerzenie, więc SVG, TIFF, BMP i nawet EMF są zapisywane bez zmian. Jedyną uwagą jest to, że niektóre renderery Markdown mogą nie wyświetlać SVG inline; w takim wypadku możesz wcześniej przekonwertować SVG na PNG. + +### Co zrobić, jeśli chcę osadzać obrazy jako Base64 zamiast osobnych plików? + +Wewnątrz `ResourceSaving` możesz zamienić zapis na dysk na zapis do strumienia pamięci, a następnie ręcznie zmodyfikować link w Markdown. Aspose nie udostępnia bezpośredniego przełącznika „embed as Base64”, ale callback daje pełną kontrolę nad `args.Stream`. + +### Czym różni się to od wbudowanej metody `ExportImages`? + +`ExportImages` wyodrębnia wszystkie obrazy do folderu **bez** generowania Markdown. Nasz callback łączy oba działania, gwarantując, że nazwy plików obrazów pasują do odwołań w `.md`. To dopasowanie jest kluczem do **jak zapisywać obrazy** poprawnie podczas konwersji. + +### Czy mogę konwertować wiele plików DOCX jednocześnie (batch)? + +Oczywiście. Owiń logikę w pętlę `foreach (var file in Directory.GetFiles(..., "*.docx"))`, dostosuj ścieżki wyjściowe i użyj tego samego `ImageSavingCallback`. Pamiętaj tylko, aby tworzyć nowy `MarkdownSaveOptions` dla każdego dokumentu, ponieważ `args.DestinationFileName` zmienia się przy każdej iteracji. + +## Przypadki brzegowe i najlepsze praktyki + +| Sytuacja | Na co zwrócić uwagę | Zalecane rozwiązanie | +|-----------|----------------------|----------------------| +| **Duży DOCX (setki MB)** | Wysokie zużycie pamięci przy ładowaniu | Użyj `LoadOptions` z `LoadFormat.Docx` i ustaw `LoadOptions.LoadFormat = LoadFormat.Docx`, aby ładować częściowo | +| **Kolizje nazw obrazów** | Jeśli w docelowym folderze już istnieje `img_0.png`, może zostać nadpisany | Dodaj GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Folder docelowy tylko do odczytu** | Zapis wywoła `UnauthorizedAccessException` | Upewnij się, że proces ma odpowiednie uprawnienia lub wybierz zapisywalną ścieżkę | +| **Zasoby nie‑obrazowe (CSS, czcionki)** | Callback otrzymuje je również | Odfiltruj: `if (args.ResourceType != ResourceType.Image) return;` (już pokazane) | +| **Nazwy plików Unicode** | Niektóre systemy plików mogą nie radzić sobie z takimi znakami | Użyj `Path.GetInvalidFileNameChars()` do sanitizacji `args.FileName` przed przypisaniem | + +## Powiązane tematy, które możesz chcieć zgłębić + +- **convert docx to markdown** z własnymi stylami nagłówków (użyj `MarkdownSaveOptions.ExportImagesAsBase64` dla obrazów inline) +- **extract images from word** przy użyciu `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/polish/net/working-with-fonts/_index.md b/words/polish/net/working-with-fonts/_index.md index 377c4b7f2c..b5c6273bd6 100644 --- a/words/polish/net/working-with-fonts/_index.md +++ b/words/polish/net/working-with-fonts/_index.md @@ -52,7 +52,7 @@ Niezależnie od tego, czy chcesz formatować tekst za pomocą różnych czcionek | [Jak przechwycić czcionki w Aspose.Words – Kompletny przewodnik](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Dowiedz się, jak przechwycić czcionki w Aspose.Words, korzystając z pełnego przewodnika krok po kroku. | | [Jak załadować DOCX i wykrywać brakujące czcionki – kompletny przewodnik C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Dowiedz się, jak załadować plik DOCX i wykrywać brakujące czcionki przy użyciu Aspose.Words dla .NET w C#. | | [Włącz ostrzeżenia o podstawianiu czcionek w Aspose.Words – Kompletny przewodnik](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Dowiedz się, jak włączyć ostrzeżenia o podstawianiu czcionek w Aspose.Words, aby monitorować brakujące lub zastąpione czcionki. | - +| [Podstawianie czcionek Aspose: wykrywanie brakujących czcionek w dokumentach Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Dowiedz się, jak wykrywać brakujące czfonty w dokumentach Word przy użyciu Aspose.Words dla .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/polish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..7a41435d3f --- /dev/null +++ b/words/polish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,283 @@ +--- +category: general +date: 2026-05-04 +description: Dowiedz się, jak używać substytucji czcionek Aspose, aby wykrywać brakujące + czcionki podczas ładowania dokumentu Word i uzyskać szczegóły brakujących czcionek + — przewodnik krok po kroku. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: pl +og_description: Opanuj zamianę czcionek Aspose, aby wykrywać brakujące czcionki podczas + ładowania dokumentu Word i uzyskać informacje o brakujących czcionkach przy użyciu + pełnego kodu C#. +og_title: Zastępowanie czcionek Aspose – Wykrywanie brakujących czcionek w dokumentach + Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Zastępowanie czcionek Aspose: wykrywanie brakujących czcionek w dokumentach + Word' +url: /pl/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Wykrywanie brakujących czcionek w dokumentach Word + +Zastanawiałeś się kiedyś, dlaczego dokument Word wygląda niepoprawnie na innym komputerze? Często winowajcą jest brakująca czcionka, a **Aspose font substitution** jest narzędziem, które pozwala wykryć te luki, zanim staną się wizualną katastrofą. W tym samouczku przeprowadzimy Cię przez to, jak **detect missing fonts** w momencie **load a Word document**, a następnie **retrieve missing font** szczegóły, abyś mógł je naprawić lub zastąpić. + +Omówimy wszystko, od konfiguracji callbacku ostrzeżeń po pobranie czystej listy brakujących czcionek. Po zakończeniu będziesz mieć gotowy do uruchomienia fragment C# informujący dokładnie, które czcionki nie zostały znalezione, oraz zrozumiesz, dlaczego ma to znaczenie dla integralności dokumentu. + +--- + +## Wymagania wstępne – Co potrzebujesz przed rozpoczęciem + +- **Aspose.Words for .NET** (v23.12 lub nowsza zalecana). +- Środowisko programistyczne .NET (Visual Studio, Rider lub `dotnet` CLI). +- Przykładowy plik DOCX, który celowo używa czcionki, której nie masz zainstalowanej — nazwij go `DocumentWithMissingFont.docx`. +- Podstawowa znajomość C# — nic skomplikowanego, tylko możliwość uruchomienia aplikacji konsolowej. + +Jeśli coś z tego jest Ci nieznane, zatrzymaj się i zainstaluj pakiet NuGet: + +```bash +dotnet add package Aspose.Words +``` + +To wszystko. Bez dodatkowych czcionek, bez usług zewnętrznych. + +--- + +## Krok 1: Załaduj dokument Word (i wywołaj sprawdzanie czcionek) + +Pierwszą rzeczą, którą robisz, jest **load a Word document**. Aspose.Words parsuje plik i, jeśli nie może znaleźć odwołanej czcionki, dodaje ostrzeżenie *FontSubstitution*. Oto kod, który wykonuje ładowanie: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Dlaczego to ważne:** Wczesne ładowanie dokumentu daje Aspose możliwość przeszukania każdego fragmentu tekstu, stylu i osadzonego obiektu. Jeśli czcionka nie zostanie znaleziona w systemie lub w niestandardowym folderze czcionek, otrzymasz ostrzeżenie później. + +--- + +## Krok 2: Dołącz callback ostrzeżeń, aby przechwycić zdarzenia podstawiania + +Aspose.Words używa mechanizmu callback, aby informować Cię o problemach, takich jak brakujące czcionki. Przypisując implementację `IWarningCallback` do `doc.WarningCallback`, możesz przechwycić każde ostrzeżenie w momencie jego wystąpienia. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Wskazówka:** Możesz dołączyć wiele callbacków (np. logowanie, aktualizacje UI) poprzez ich opakowanie w wzorzec kompozytowy, ale w tym samouczku pojedynczy callback utrzymuje przejrzystość. + +--- + +## Krok 3: Zaimplementuj callback ostrzeżenia o podstawianiu czcionek + +Teraz definiujemy klasę, która faktycznie wykonuje pracę. Callback otrzymuje obiekt `WarningInfo`; filtrujemy pod kątem `WarningType.FontSubstitution` i zapisujemy opis do późniejszego użycia. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Co się dzieje:** Gdy Aspose napotyka brakującą czcionkę, tworzy ostrzeżenie typu „Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Nasz callback wypisuje tę linię i zapisuje ją. + +--- + +## Krok 4: Przetwórz dokument (opcjonalnie) i zbierz brakujące czcionki + +Jeśli potrzebujesz jedynie **detect missing fonts**, krok ładowania wystarczy — ostrzeżenia są generowane automatycznie. Jednak wielu programistów potrzebuje także **retrieve missing font** informacji po wykonaniu pewnych operacji (np. zapisywanie, konwersja). Poniżej wymuszamy małą operację — zapis do PDF — aby zapewnić emisję wszystkich ostrzeżeń, a następnie pobieramy zebrane komunikaty. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Oczekiwany wynik w konsoli** (przykład): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Zauważ, że każda linia wyraźnie podaje oryginalną czcionkę oraz zastępczą, którą wybrało Aspose. To jest sedno raportowania **aspose font substitution**. + +--- + +## Krok 5: Zaawansowane – Używanie własnych źródeł czcionek w celu zmniejszenia podstawień + +Czasami *masz* brakujące czcionki, ale nie znajdują się w domyślnym folderze systemowym. Aspose.Words pozwala wskazać własny katalog za pomocą `FontSettings`. Dodanie tego kroku może znacząco zmniejszyć liczbę ostrzeżeń o podstawianiu. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Dlaczego to dodać?** Jeśli dystrybuujesz dokumenty na różnych maszynach, dołączenie wymaganych czcionek w znanym folderze zapewnia spójny wygląd wszędzie. Dodatkowo sprawia, że Twoja procedura **detect missing fonts** jest dokładniejsza, ponieważ Aspose najpierw sprawdza ten folder przed użyciem zastępczej czcionki. + +--- + +## Kompletny działający przykład + +Łącząc wszystko razem, oto gotowy do skopiowania program konsolowy. Zapisz go jako `Program.cs` i uruchom poleceniem `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Co powinieneś zobaczyć:** Jeśli źródłowy DOCX odwołuje się do czcionek, których nie masz, konsola wypisze każdą linię podstawienia, a następnie zwięzłe podsumowanie. Jeśli wszystkie czcionki są dostępne, otrzymasz komunikat „No missing fonts were detected.” + +--- + +## Częste pułapki i jak ich uniknąć + +| Problem | Dlaczego się pojawia | Rozwiązanie | +|-------|----------------|-----| +| **Brak ostrzeżeń** | Dokument używa wyłącznie czcionek systemowych lub już dodałeś niestandardowy folder zawierający brakujące czcionki. | Sprawdź, czy DOCX rzeczywiście odwołuje się do niedostępnej czcionki. Możesz otworzyć go w Wordzie i zmienić akapit na rzadką czcionkę (np. „Papyrus”). | +| **Zduplikowane komunikaty** | Ta sama czcionka jest używana w wielu fragmentach, co powoduje wielokrotne ostrzeżenia. | Usuń duplikaty z listy przy pomocy `Distinct()`, jeśli potrzebujesz tylko unikalnego zestawu. | +| **Spadek wydajności przy dużych dokumentach** | Każde ostrzeżenie jest przetwarzane na wątku UI. | Uruchom ładowanie w zadaniu w tle lub użyj `Parallel.ForEach` do przetwarzania po zakończeniu. | +| **Nieprawidłowa czcionka zastępcza** | Domyślna czcionka zastępcza Aspose może nie pasować do Twojej marki. | Ustaw `FontSettings.SubstitutionSettings.DefaultFontName` na preferowaną czcionkę zastępczą (np. „Calibri”). | + +--- + +## Rozszerzanie rozwiązania – Eksportowanie brakujących czcionek do JSON + +Jeśli tworzysz usługę webową, która musi zgłaszać brakujące czcionki klientowi, serializacja listy jest prosta: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Teraz Twoje API może zwrócić czysty ładunek JSON, który może przetworzyć inny system. + +--- + +## Zakończenie + +W tym przewodniku pokazaliśmy **Aspose font substitution** od początku do końca: ładowanie dokumentu Word, dołączanie callbacku ostrzeżeń, przechwytywanie każdego zdarzenia *detect missing fonts* oraz ostatecznie **retrieve missing font** informacji do raportowania lub naprawy. Dodając opcjonalne niestandardowe foldery czcionek, możesz zmniejszyć listę podstawień, a kilka dodatkowych linii pozwala nawet wyeksportować wyniki jako JSON. + +Pamiętaj, że integralność wizualna Twoich dokumentów zależy od używanych czcionek. Dzięki przedstawionej technice nie zostaniesz zaskoczony nieoczekiwaną czcionką zastępczą. +Gotowy na kolejny krok? Spróbuj zintegrować tę logikę z większym potokiem przetwarzania dokumentów lub odkryj inne funkcje Aspose.Words, takie jak osadzanie czcionek (`doc.FontSettings.EmbeddedFonts`). Możliwości są nieograniczone, a Twoi użytkownicy podziękują Ci za dopracowany efekt. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/portuguese/net/ai-powered-document-processing/_index.md b/words/portuguese/net/ai-powered-document-processing/_index.md index dc46a1820e..2a72cf61a5 100644 --- a/words/portuguese/net/ai-powered-document-processing/_index.md +++ b/words/portuguese/net/ai-powered-document-processing/_index.md @@ -39,9 +39,12 @@ Por fim, não se esqueça de conferir nosso [Trabalhando com opções de resumo] | Título | Descrição | | --- | --- | | [Trabalhando com modelo de IA](./working-with-ai-model/) | Aprenda a usar o Aspose.Words para .NET para resumir documentos com IA. Passos simples para aprimorar o gerenciamento de documentos. | -| [Trabalhando com o modelo de IA do Google](./working-with-google-ai-model/) Melhore o processamento de seus documentos com o Aspose.Words para .NET e o Google AI para criar resumos concisos sem esforço. | +| [Trabalhando com o modelo de IA do Google](./working-with-google-ai-model/) | Melhore o processamento de seus documentos com o Aspose.Words para .NET e o Google AI para criar resumos concisos sem esforço. | | [Trabalhando com o modelo de IA aberta](./working-with-open-ai-model/) | Desbloqueie a sumarização eficiente de documentos usando o Aspose.Words para .NET com os poderosos modelos da OpenAI. Mergulhe neste guia completo agora mesmo. | | [Trabalhando com opções de resumo](./working-with-summarize-options/) | Aprenda a resumir documentos do Word de forma eficaz usando o Aspose.Words para .NET com nosso guia passo a passo sobre integração de modelos de IA para obter insights rápidos. | +| [Como usar LLM com Aspose.Words – Reescrever parágrafos em C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Aprenda a utilizar LLMs com Aspose.Words para reescrever parágrafos em C#, melhorando a clareza e o estilo do texto. | +| [Como Verificar Gramática em C# – Guia Completo para Documentos Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Aprenda a usar Aspose.Words para .NET e verificar gramática em documentos Word com C# de forma eficaz. | +| [Resumir documento Word em C# – Guia completo usando Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Aprenda a resumir documentos Word com C# usando o modelo Claude da Anthropic, passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/portuguese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..5a12ac0063 --- /dev/null +++ b/words/portuguese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Aprenda como verificar a gramática em um documento Word usando C#. Este + tutorial também aborda como carregar um arquivo DOCX em C# e usar o Aspose.Words + AI para obter resultados precisos. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: pt +og_description: Como verificar a gramática em um documento Word usando C#? Siga este + tutorial para carregar um arquivo DOCX em C# e executar verificações gramaticais + alimentadas por IA com Aspose.Words. +og_title: Como Verificar Gramática em C# – Guia Completo Passo a Passo +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Como Verificar Gramática em C# – Guia Completo para Documentos Word +url: /pt/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como Verificar Gramática em C# – Guia Completo para Documentos Word + +Já se perguntou **como verificar gramática** em um documento Word sem sair do seu IDE? Você não está sozinho. Muitos desenvolvedores precisam validar relatórios gerados por usuários, e‑mails automatizados ou até mesmo documentação antes de ser lançada. A boa notícia? Com Aspose.Words AI você pode fazer isso programaticamente, e todo o processo se encaixa perfeitamente em um fluxo de trabalho típico em C#. + +Neste guia vamos percorrer tudo o que você precisa saber: desde carregar um arquivo DOCX C# até invocar o verificador de gramática AI e interpretar os resultados. Ao final, você terá um trecho pronto‑para‑executar que imprime a severidade, a mensagem e a substituição sugerida de cada problema—sem necessidade de copiar‑colar manualmente. + +## O Que Você Vai Aprender + +- **Como verificar gramática** em um documento Word usando Aspose.Words AI. +- Os passos exatos para **carregar um arquivo DOCX C#** com a classe `Document`. +- Como manipular o objeto `GrammarCheckResult`, iterar sobre os problemas e gerar diagnósticos úteis. +- Armadilhas comuns (como licenças ausentes) e dicas para tornar a solução pronta para produção. + +> **Pré‑requisitos:** .NET 6.0+ (ou .NET Framework 4.6+), Visual Studio 2022 (ou qualquer IDE de sua preferência) e uma licença Aspose.Words for .NET (a versão de avaliação funciona para testes). Se ainda não instalou os pacotes NuGet, execute: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Agora, vamos mergulhar. + +## Etapa 1: Carregar um Arquivo DOCX em C# + +Antes que qualquer verificação de gramática possa acontecer, o documento precisa ser carregado na memória. Aspose.Words torna isso uma única linha, mas há alguns detalhes que vale a pena observar. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Por que isso importa:** +- Usar `Path.Combine` garante compatibilidade entre plataformas. +- A verificação de existência impede uma falha em tempo de execução que, de outra forma, ocultaria a lógica real de verificação de gramática. +- Quando você **carrega um arquivo DOCX C#**, o Aspose analisa todos os estilos, cabeçalhos, rodapés e até textos ocultos, proporcionando à IA uma visão completa do documento. + +> **Dica de especialista:** Se precisar trabalhar com streams (por exemplo, arquivos enviados via upload web), substitua a chamada `new Document(docPath)` por `new Document(stream)`. + +## Etapa 2: Escolher o Modelo de IA para Verificação de Gramática + +Aspose.Words AI suporta vários modelos, desde versões leves locais até variantes baseadas em nuvem GPT. Para a maioria dos cenários, **GPT‑3.5 Turbo** oferece um ponto ideal entre velocidade e precisão. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Por que escolher o GPT‑3.5 Turbo?** +- É rápido o suficiente para processar lotes de dezenas de arquivos por minuto. +- O custo (se você estiver em um plano pago) é menor que o do GPT‑4, ainda capturando a maioria dos erros comuns. +- A API lida automaticamente com limites de tokens, então você não precisa dividir documentos enormes manualmente. + +Se preferir uma abordagem offline, troque `AiModelType.Gpt35Turbo` por `AiModelType.Local` (requer o pacote opcional de modelo offline). + +## Etapa 3: Iterar Sobre os Problemas e Exibir Feedback Útil + +O `GrammarCheckResult` contém uma coleção de objetos `GrammarIssue`. Cada problema fornece severidade, uma mensagem legível e uma substituição sugerida. Vamos imprimi‑los de forma agradável. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**O que os campos significam:** +- `Severity` – normalmente `Info`, `Warning` ou `Error`. Trate `Error` como algo que deve ser corrigido antes da publicação. +- `Message` – uma descrição concisa do problema (ex.: “Concordância sujeito‑verbo”). +- `SuggestedReplacement` – a correção recomendada pela IA; você pode aplicá‑la automaticamente se confiar no modelo, ou apresentá‑la a um revisor humano. + +> **Caso extremo:** Alguns problemas podem ter `SuggestedReplacement` vazio (ex.: sugestões de estilo). Nesses casos, basta sinalizar a localização para revisão manual. + +## Exemplo Completo Funcional + +Juntando tudo, aqui está um aplicativo console autocontido que você pode copiar‑colar em um novo projeto .NET. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Saída esperada (exemplo):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Se você executar o programa contra um documento limpo, verá a linha “✅ No grammar issues detected.” em vez disso. + +## Lidando com Armadilhas Comuns + +| Problema | Por Que Acontece | Solução Rápida | +|----------|------------------|----------------| +| **LicenseException** | Bibliotecas Aspose exigem uma licença válida para uso em produção. | Insira `License license = new License(); license.SetLicense("Aspose.Words.lic");` no início do `Main`. | +| **Timeout de rede** | A chamada ao modelo de IA atinge a nuvem e ultrapassa o timeout padrão de 100 s. | Aumente o timeout via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` antes de chamar `CheckGrammar`. | +| **Documentos grandes (> 10 MB)** | Alguns modelos de nuvem truncam a entrada. | Divida o documento em seções usando `document.Sections` e execute verificações por seção, agregando os resultados depois. | +| **Sugestões ausentes** | O modelo não conseguiu gerar uma substituição (ex.: frase ambígua). | Registre o problema para revisão manual; não aplique substituições vazias automaticamente. | + +## Extendendo a Solução + +- **Correção automática:** Percorra `grammarResult.Issues` e substitua o texto usando `document.Range.Replace`. Não esqueça de fazer backup do arquivo original primeiro. +- **Processamento em lote:** Envolva todo o fluxo em um `foreach` sobre um diretório de arquivos DOCX. Salve cada relatório como um arquivo JSON para análise posterior. +- **Integração com ASP.NET:** Exponha um endpoint que aceite um DOCX enviado, execute a verificação e retorne um payload JSON com os problemas. + +## Ilustração + +how to check grammar flow diagram + +*O diagrama acima visualiza o processo de três etapas: carregar DOCX → executar verificação de gramática AI → exibir problemas.* + +## Conclusão + +Cobremos **como verificar gramática** em um documento Word usando C#, demonstramos o código exato para **carregar um arquivo DOCX C#** e mostramos como interpretar o feedback gerado pela IA. Com Aspose.Words AI, você obtém um motor de gramática poderoso, suportado por nuvem, que se integra perfeitamente a qualquer aplicação .NET. + +Próximos passos? Experimente automatizar o loop de correção‑aplicação, teste o mais recente `AiModelType.Gpt4` para sugestões ainda mais precisas, ou combine isso com uma biblioteca de verificação ortográfica para um pipeline completo de revisão. As possibilidades são praticamente infinitas, e agora você tem uma base sólida para construir. + +Tem dúvidas ou encontrou um caso extremo? Deixe um comentário abaixo e feliz codificação! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/portuguese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/portuguese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..fcd6fce6ef --- /dev/null +++ b/words/portuguese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-05-04 +description: Como usar LLM para editar documentos com Aspose – aprenda a substituir + texto de parágrafos, conectar a um LLM local e reescrever texto usando IA. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: pt +og_description: Como usar LLM para editar documentos com Aspose. Este guia mostra + como conectar a um LLM local, substituir o texto de parágrafos e reescrever texto + usando IA. +og_title: Como usar LLM com Aspose.Words – Reescrever parágrafos em C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Como usar LLM com Aspose.Words – Reescrever parágrafos em C# +url: /pt/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como usar LLM com Aspose.Words – Reescrever Parágrafos em C# + +Já se perguntou **como usar LLM** para aprimorar um documento Word sem abri‑lo manualmente? Você não está sozinho. Muitos desenvolvedores se deparam com um obstáculo quando precisam *substituir o texto de um parágrafo* programaticamente, mas não têm um fluxo de trabalho limpo baseado em IA. + +Neste tutorial vamos conectar um modelo de linguagem grande local, alimentar um trecho de um arquivo `.docx`, pedir que ele **reescreva o texto usando IA**, e finalmente salvar o documento atualizado — tudo com Aspose.Words. Ao final, você terá um aplicativo console C# pronto‑para‑executar que demonstra todo o pipeline. + +> **O que você receberá:** um exemplo completo e executável, explicações de cada passo, dicas para casos de borda e ideias para expandir a solução. + +## O que você precisará + +- **.NET 6+** (ou .NET Framework 4.7.2 – o código funciona em ambos) +- **Aspose.Words for .NET** (pacote NuGet `Aspose.Words`) +- Um **servidor LLM local** que exponha um endpoint HTTP simples `/generate` (por exemplo, Ollama, LMStudio ou um serviço Flask personalizado) +- Familiaridade básica com C# e código de cliente HTTP + +Nenhum SDK adicional é necessário; todo o resto está no código que escreveremos juntos. + +## Etapa 1: Como usar LLM para substituir o texto de um parágrafo + +A primeira coisa que precisamos fazer é identificar o parágrafo que queremos modificar. Aspose.Words torna isso muito fácil ao expor um modelo de objetos rico. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Por que isso importa:** +Selecionar o nó correto impede que você sobrescreva acidentalmente cabeçalhos ou tabelas. Ao usar a abordagem de **substituir texto de parágrafo** mantemos a estrutura do documento intacta, tocando apenas o conteúdo que nos interessa. + +> **Dica de especialista:** Se o seu documento tem seções de comprimento variável, use `document.GetChildNodes(NodeType.Paragraph, true)` e LINQ para localizar um parágrafo pelo seu texto ou estilo. + +## Etapa 2: Conectar a um endpoint LLM local + +Agora que temos o texto, precisamos enviá‑lo ao LLM. O exemplo usa uma classe wrapper simples `LocalLargeLanguageModel` que oculta a parte HTTP. Sinta‑se à vontade para substituí‑la por chamadas `HttpClient` se preferir. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Por que nos conectamos dessa forma:** +Uma configuração de **conectar a LLM local** elimina latência, mantém os dados on‑premise e evita custos de API. O wrapper também deixa o código posterior mais limpo, permitindo focar na lógica de **reescrever texto usando IA**. + +## Etapa 3: Reescrever texto usando IA com Aspose.Words + +Com o texto do parágrafo em mãos e o LLM pronto, criamos um prompt que diz ao modelo exatamente o que queremos — reescrever em tom formal. Você pode ajustar o prompt para outros estilos (amigável, técnico, etc.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Por que isso funciona:** +LLMs são dirigidos por prompts; dar instruções explícitas (“Rewrite … in a formal tone”) gera resultados consistentes. A etapa de **reescrever texto usando IA** é o coração do tutorial – demonstra como a IA pode ser incorporada diretamente nos fluxos de trabalho de documentos. + +## Etapa 4: Editar o documento e salvar as alterações + +Agora substituímos as runs originais pelo novo conteúdo. Aspose.Words armazena texto em objetos `Run`, então limpá‑los primeiro evita artefatos de formatação remanescentes. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Nota de caso de borda:** +Se o parágrafo original continha formatação mista (negrito, itálico) você pode querer preservar os estilos. Nesse caso, crie uma nova `Run`, copie as configurações originais de `Font`, e então defina seu `Text` para `revisedText`. + +## Exemplo completo em funcionamento + +Abaixo está o programa inteiro que você pode copiar‑colar em um projeto console. Lembre‑se de instalar o pacote NuGet Aspose.Words primeiro (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Saída esperada + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Abra `output.docx` – você verá que o terceiro parágrafo agora contém a versão aprimorada. + +## Perguntas frequentes e armadilhas + +| Pergunta | Resposta | +|----------|----------| +| **E se meu LLM retornar JSON com campos extras?** | Ajuste `GenerateText` para desserializar a propriedade correta ou analise a resposta manualmente. | +| **Posso processar vários parágrafos de uma vez?** | Sim – itere sobre `document.FirstSection.Body.Paragraphs` e aplique a mesma lógica de prompt, talvez adicionando um índice de parágrafo ao prompt para contexto. | +| **Meu servidor LLM usa autenticação?** | Adicione um cabeçalho ao `HttpClient` antes do POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **A formatação se perde após a substituição.** | Preserve as configurações originais de `Run.Font`: crie uma nova `Run`, copie `originalRun.Font.Clone()`, então defina seu `Text`. | +| **O LLM às vezes retorna strings vazias.** | Implemente um fallback – se `revisedText.Trim().Length == 0`, mantenha o texto original ou tente novamente com um prompt mais simples. | + +## Expandindo a solução + +Agora que você dominou **como usar LLM** para um único parágrafo, considere os próximos passos: + +- **Processamento em lote:** Percorra cada parágrafo e reescreva no estilo escolhido (por exemplo, “tornar todo o texto conciso”). +- **Reescrita consciente de estilo:** Passe o nome do estilo do parágrafo original no prompt para que o LLM respeite cabeçalhos vs texto de corpo. +- **Integração com pipeline CI:** Automatize o polimento de documentos como parte de um processo de construção de documentação. +- **Prompts alternativos:** Experimente “summarize this paragraph” ou “translate this paragraph to Spanish” para explorar todo o poder de **reescrever texto usando IA**. + +## Conclusão + +Percorremos todo o fluxo de **como usar LLM** com Aspose.Words: carregar um documento, **conectar a LLM local**, extrair um parágrafo, **reescrever texto usando IA**, **substituir texto de parágrafo**, e finalmente salvar o resultado. O código é autocontido, funciona imediatamente e demonstra uma maneira prática de combinar IA com automação tradicional de documentos. + +Dê uma experimentada, ajuste os prompts e deixe + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/portuguese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/portuguese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..a8f32c408e --- /dev/null +++ b/words/portuguese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Resuma documentos Word rapidamente e traduza texto com o Google. Aprenda + a usar o Anthropic Claude, criar um resumo a partir de um relatório e traduzir texto + com o Google em um único tutorial em C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: pt +og_description: Resuma documentos Word instantaneamente e traduza texto com o Google. + Este guia mostra como usar Anthropic Claude e Aspose.Words para criar um resumo + a partir de um relatório. +og_title: Resumir documento Word em C# – Passo a passo com Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Resumir documento Word em C# – Guia completo usando Anthropic Claude +url: /pt/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Resumir Documento Word em C# – Guia Completo Usando Anthropic Claude + +Já precisou **resumir documento Word** mas se sentiu preso lidando com APIs e código extenso? Você não está sozinho. Em muitos projetos—relatórios anuais, pareceres jurídicos ou artigos de pesquisa—extrair uma visão concisa é um ponto doloroso diário. Felizmente, a combinação de Aspose.Words e Anthropic Claude torna isso muito fácil, e você ainda pode adicionar uma rápida tradução do Google enquanto isso. + +Neste tutorial vamos percorrer tudo o que você precisa saber: carregar um .docx grande, chamar o modelo Claude V2 para gerar um resumo, traduzir uma frase com o Google e lidar com os problemas mais comuns. Ao final, você será capaz de **criar resumo a partir de relatório** com apenas algumas linhas de C#. + +## Prerequisites + +- .NET 6+ (ou .NET Core 3.1) instalado +- Uma licença Aspose.Words para .NET (ou um teste gratuito) +- Acesso à API Anthropic Claude V2 (você precisará de uma chave API) +- Conectividade com a Internet para o Google Translator +- Visual Studio 2022 ou sua IDE C# favorita + +Nenhum pacote NuGet extra além de `Aspose.Words` e `Aspose.Words.AI` é necessário; a classe tradutor vem com a mesma biblioteca. + +## Passo 1 – Carregar o Documento Word de Origem + +A primeira coisa que precisamos fazer é trazer o arquivo .docx para a memória. Aspose.Words torna isso trivial e, graças ao seu analisador robusto, funciona com layouts complexos, tabelas e até imagens incorporadas. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Por que isso importa:** Carregar o documento antecipadamente permite inspecionar propriedades (autor, contagem de palavras) e decidir se um resumo é realmente necessário. Arquivos grandes > 10 MB podem consumir muita memória, então considere `LoadOptions` com `LoadFormat.Docx` se encontrar problemas de desempenho. + +## Passo 2 – Resumir o Documento com Anthropic Claude + +Agora vem a parte divertida: entregamos o documento ao Claude V2. A classe `Summarizer` abstrai a chamada HTTP, o gerenciamento de tokens e as tentativas. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Como funciona:** +> 1. **Chunking** – Aspose divide automaticamente o documento em partes manejáveis (≈ 2 KB cada) para respeitar os limites de tokens do Claude. +> 2. **Prompt engineering** – A biblioteca envia um prompt como “Provide a concise executive summary of the following text:” seguido de cada parte. +> 3. **Aggregation** – Claude devolve resumos parciais que são juntados no `summaryText` final. + +### Casos de Borda & Dicas + +- **Relatórios muito grandes** (> 100 páginas) podem exceder a janela de contexto do Claude. Se você notar saída truncada, habilite `SummarizerOptions.MaxChunkSize` para valores menores. +- **Fonte não‑Inglês** – Claude funciona melhor com inglês; para outros idiomas, traduza primeiro (veja o Passo 4) e depois resuma. +- **Limites de taxa** – Anthropic impõe limites por minuto. Envolva a chamada em um loop de retry com back‑off exponencial se receber uma resposta `429`. + +## Passo 3 – Verificar a Saída do Resumo + +Antes de prosseguir, é uma boa prática validar que o resumo não está vazio e atende às expectativas de comprimento (por exemplo, 5‑10 % da contagem de palavras original). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Se a proporção parecer muito baixa (< 2 %), você pode ajustar a propriedade `SummarizerOptions.SummaryLength` para solicitar uma saída mais longa. + +## Passo 4 – Traduzir Texto com Google + +Agora que temos um resumo em inglês conciso, vamos adicionar uma tradução rápida. A classe `Translator` usa o endpoint público de tradução do Google (não requer chave API para frases curtas, mas em produção você deve mudar para a API paga Cloud Translation). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Por que Google?** É rápido, amplamente suportado, e o endpoint gratuito lida com strings curtas sem autenticação. Para traduções em massa, agrupe as chamadas e respeite os limites de uso do Google. + +### Traduzindo o Resumo Completo (Opcional) + +Se precisar do resumo completo em espanhol (ou qualquer outro idioma), basta passar `summaryText` para `Translator.Translate`. Esteja ciente do limite de tamanho de requisição de 5 KB; pode ser necessário dividir o resumo em partes menores. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Passo 5 – Salvar o Resumo de Volta em um Arquivo Word (Bônus) + +Frequentemente o usuário final espera um documento baixável em vez de saída no console. Vamos criar um novo `.docx` que contenha tanto a versão em inglês quanto a em espanhol. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Dica Prática + +Ao incorporar o resumo em um novo arquivo Word, mantenha a formatação original mínima (use o estilo `Normal`). Estilos complexos da origem podem causar alterações inesperadas no layout. + +## Exemplo Completo Funcional + +Abaixo está o programa **completo, pronto para copiar e colar** que une tudo. Ele compila com um único `dotnet run` depois que você adicionou os pacotes Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Saída esperada no console (truncada para brevidade):** + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Perguntas Frequentes + +| Pergunta | Resposta | +|----------|----------| +| *Posso usar um modelo de IA diferente?* | Sim. Substitua `SummarizerModel.AnthropicClaudeV2` por `SummarizerModel.OpenAIGPT4` (requer uma chave OpenAI) ou qualquer provedor listado no enum. | +| *E se o documento contiver seções protegidas?* | Aspose lançará `ProtectedDocumentException`. Desbloqueie primeiro com `LoadOptions.Password` ou solicite uma cópia sem proteção. | +| *Preciso de uma licença paga da Aspose para produção?* | O teste gratuito funciona até 20 páginas. Para relatórios maiores, uma licença remove o limite de páginas e adiciona otimizações de desempenho. | +| *O tradutor do Google é confiável para blocos grandes?* | Para strings curtas está ok. Para tradução em massa, troque para a Cloud Translation API para evitar limites de tamanho de requisição e obter melhor detecção de idioma. | + +## Conclusão + +Acabamos de **resumir documento Word** usando Aspose.Words junto com o modelo Anthropic Claude V2, então **traduzimos texto com o Google** para + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/portuguese/net/basic-conversions/_index.md b/words/portuguese/net/basic-conversions/_index.md index c473dfde66..1ef9d081c4 100644 --- a/words/portuguese/net/basic-conversions/_index.md +++ b/words/portuguese/net/basic-conversions/_index.md @@ -34,6 +34,7 @@ Conversões Básicas orienta você nas conversões básicas de documentos usando | [Converter Word para PDF em C# usando Aspose.Words – Guia](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Aprenda a converter documentos Word para PDF em C# usando Aspose.Words com este guia passo a passo. | | [Salvar Word como PDF com Aspose.Words – Guia Completo C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Aprenda a salvar documentos Word como PDF usando Aspose.Words em C#. Guia completo passo a passo. | | [Salvar Docx como PDF com Aspose.Words – Guia Completo C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Aprenda a salvar documentos Docx como PDF usando Aspose.Words em C#. Guia completo passo a passo. | +| [Criar PDF acessível a partir de DOCX em C# – Como converter Word para PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Aprenda a gerar PDFs acessíveis a partir de documentos DOCX usando Aspose.Words para .NET em C#. Guia passo a passo com opções de acessibilidade. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/portuguese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..604db24ec3 --- /dev/null +++ b/words/portuguese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Crie PDF acessível a partir de um arquivo DOCX em C#. Aprenda como converter + Word para PDF, salvar Word como PDF e exportar DOCX para PDF com conformidade de + acessibilidade. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: pt +og_description: Crie PDF acessível a partir de um arquivo DOCX em C#. Siga este tutorial + passo a passo para converter Word em PDF, salvar Word como PDF e exportar DOCX para + PDF com total acessibilidade. +og_title: Crie PDF acessível a partir de DOCX em C# – Guia rápido +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Criar PDF acessível a partir de DOCX em C# – Como converter Word para PDF +url: /pt/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crie PDF Acessível a partir de DOCX em C# – Como Converter Word para PDF + +Já precisou **criar PDF acessível** a partir de um documento Word, mas não sabia qual biblioteca confiar? Você não está sozinho—muitos desenvolvedores enfrentam o mesmo obstáculo ao precisar atender aos padrões PDF/UA de acessibilidade. A boa notícia é que, com Aspose.Words, você pode transformar um `.docx` em um PDF compatível em apenas algumas linhas de código, e obterá um arquivo que leitores de tela realmente conseguem ler. + +Neste tutorial vamos percorrer tudo o que você precisa saber para **converter Word para PDF**, **salvar Word como PDF**, e até **exportar docx para PDF** com conformidade PDF/UA‑1 (ou PDF/UA‑2). Ao final, você terá um snippet C# pronto‑para‑uso, entenderá por que cada configuração importa e estará preparado para lidar com casos comuns, como fontes ausentes ou configurações de página personalizadas. + +## Pré‑requisitos + +- .NET 6.0 ou superior (o código também funciona com .NET Framework 4.6+) +- Uma licença Aspose.Words for .NET (ou uma chave de avaliação gratuita) +- Conhecimento básico de C# e Visual Studio (ou qualquer IDE de sua preferência) +- Um arquivo DOCX que você deseja tornar acessível (vamos chamá‑lo de `input.docx`) + +> **Dica de especialista:** Se estiver usando a avaliação gratuita, lembre‑se de que o PDF gerado conterá uma pequena marca d'água “Evaluation”. + +## Etapa 1: Instalar o Pacote NuGet Aspose.Words + +Antes de escrever qualquer código C#, a biblioteca Aspose.Words deve ser adicionada ao projeto. + +```bash +dotnet add package Aspose.Words +``` + +Executar o comando restaura o `Aspose.Words.dll` e disponibiliza os namespaces. Esta etapa é essencial porque a classe `PdfSaveOptions` está dentro desse pacote. + +## Etapa 2: Carregar o Arquivo DOCX de Origem + +O primeiro passo lógico é carregar o documento Word que você deseja transformar. Pense nisso como abrir um livro antes de começar a editar suas páginas. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Por que isso importa:** Carregar o documento cria uma representação em memória que inclui todos os estilos, imagens e metadados. Se o arquivo estiver corrompido, `Document` lançará uma exceção—por isso, pode ser interessante envolver esse código em um bloco try/catch em produção. + +## Etapa 3: Configurar as Opções de Salvamento PDF para Acessibilidade + +Aspose.Words permite especificar o nível de conformidade PDF. PDF/UA‑1 é o padrão de acessibilidade original, enquanto PDF/UA‑2 adiciona algumas tags mais recentes. Escolha aquele que corresponde aos requisitos do seu cliente. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **O que a “Conformidade” faz:** Definir `PdfCompliance.PdfUax1` indica ao Aspose.Words que ele deve incorporar tags corretas, ordem de leitura lógica e texto alternativo para imagens—exatamente o que o software de leitor de tela procura. + +## Etapa 4: Salvar o Documento como PDF Acessível + +Agora o trabalho pesado terminou; basta instruir o Aspose.Words a gravar o arquivo PDF usando as opções que definimos. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Depois que esta linha for executada, você encontrará `output.pdf` na pasta especificada. Abra‑o no Adobe Acrobat Reader e verifique **File → Properties → Description → PDF/A and PDF/UA** para confirmar a conformidade. + +## Etapa 5: Verificar a Acessibilidade (Opcional, mas Recomendado) + +Embora o código garanta a geração de PDF marcado, uma verificação manual rápida ajuda a identificar qualquer conteúdo personalizado que possa precisar de atenção extra. + +1. Abra `output.pdf` no Adobe Acrobat Pro. +2. Vá em **Tools → Accessibility → Full Check**. +3. Execute a verificação e revise quaisquer avisos (por exemplo, texto alternativo ausente para imagens personalizadas). + +Se o relatório não apresentar erros, você criou com sucesso **PDF acessível** que atende ao padrão PDF/UA‑1. + +## Variações Comuns & Casos de Borda + +### Convertendo Vários Arquivos DOCX em Loop + +Se você tem um lote de documentos, envolva a lógica de carregamento‑salvamento dentro de um loop `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Alternando para PDF/UA‑2 + +Basta mudar o enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Lidando com Fontes Personalizadas + +Se seu DOCX usa fontes que não estão instaladas no servidor, incorpore‑as: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Incorporar garante que o PDF tenha a mesma aparência em qualquer máquina—um detalhe crucial ao **exportar docx para pdf** para partes interessadas externas. + +## Exemplo Completo Funcional + +Abaixo está o programa completo, pronto‑para‑executar, que reúne todas as peças. Copie‑e cole em um aplicativo console, ajuste os caminhos e pressione **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Resultado esperado:** Um arquivo chamado `output.pdf` que abre em qualquer visualizador de PDF, contém as tags de acessibilidade corretas e pode ser compartilhado com usuários que dependem de tecnologia assistiva. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Texto alternativo da imagem:* *exemplo de criação de PDF acessível – captura de tela de um documento compatível com PDF/UA‑1* + +## Perguntas Frequentes + +- **Isso funciona com .NET Core?** + Absolutamente. Aspose.Words é multiplataforma, então o mesmo código roda no Windows, Linux e macOS. + +- **E se meu DOCX contiver macros?** + Macros são ignoradas durante a conversão; apenas o conteúdo visível é renderizado no PDF. + +- **Posso adicionar um título de metadados PDF personalizado?** + Sim—defina `pdfSaveOptions.Metadata.Title = "Your Custom Title";` antes de salvar. + +- **O PDF/UA‑2 é amplamente suportado?** + A maioria dos leitores de PDF modernos entende PDF/UA‑2, mas se você estiver mirando ferramentas mais antigas, fique com PDF/UA‑1. + +## Conclusão + +Acabamos de mostrar como **criar PDF acessível** a partir de um arquivo DOCX usando Aspose.Words, cobrindo tudo, desde a instalação do pacote NuGet até a verificação da conformidade PDF/UA. Seguindo esses passos, você pode converter Word para PDF, salvar Word como PDF e **exportar docx para PDF** de forma confiável, atendendo aos padrões de acessibilidade—uma habilidade indispensável para qualquer desenvolvedor que trabalhe com pipelines de documentos corporativos. + +Pronto para o próximo desafio? Experimente adicionar um cabeçalho/rodapé personalizado, incorporar uma tag PDF/A‑2b ou automatizar o processo em uma API web ASP.NET Core. As possibilidades são infinitas, e a base que você construiu aqui permitirá que você as enfrente com confiança. + +Bom código, e que seus PDFs estejam sempre legíveis! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/portuguese/net/programming-with-markdownsaveoptions/_index.md b/words/portuguese/net/programming-with-markdownsaveoptions/_index.md index 0d50695fe3..3d11aa20c9 100644 --- a/words/portuguese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/portuguese/net/programming-with-markdownsaveoptions/_index.md @@ -72,6 +72,9 @@ Aprenda a renomear imagens durante a conversão de DOCX para Markdown usando Asp ### [Salvar imagens do Word – Converter Word para Markdown com Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) Aprenda a extrair e salvar imagens de documentos Word ao convertê-los para Markdown usando Aspose.Words. +### [Como salvar imagens – Converter DOCX para Markdown com Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) +Aprenda a salvar imagens ao converter arquivos DOCX para Markdown usando Aspose.Words. + ### [Converter Word para Markdown em C# – Guia completo com extração de imagens](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) Aprenda a converter documentos Word para Markdown em C#, extraindo imagens e preservando a formatação usando Aspose.Words. diff --git a/words/portuguese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/portuguese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..766e11bf41 --- /dev/null +++ b/words/portuguese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Aprenda como salvar imagens ao converter um DOCX para Markdown usando + Aspose.Words. Este guia também mostra como extrair imagens do Word e salvar o Word + como Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: pt +og_description: Como salvar imagens ao converter um DOCX para Markdown usando Aspose.Words. + Guia passo a passo com código C# completo. +og_title: Como salvar imagens – Converter DOCX para Markdown com Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Como salvar imagens – Converter DOCX para Markdown com Aspose.Words +url: /pt/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como Salvar Imagens – Converter DOCX para Markdown com Aspose.Words + +Já se perguntou **como salvar imagens** quando precisa transformar um arquivo Word em Markdown? Você não está sozinho. Muitos desenvolvedores se deparam com um obstáculo quando a conversão coloca as imagens em um caos de links quebrados ou, pior ainda, as perde completamente. A boa notícia é que o Aspose.Words oferece controle granular, permitindo extrair imagens do Word, decidir onde elas vão e ainda obter uma saída Markdown limpa. + +Neste tutorial, percorreremos um exemplo completo, pronto‑para‑executar em C#, que demonstra **como salvar imagens** em uma pasta dedicada ao converter um `.docx` para `.md`. Ao longo do caminho, também abordaremos **convert docx to markdown**, **extract images from word** e a questão mais ampla de **how to convert docx** de forma que você possa **save word as markdown** sem perder nenhum recurso. + +## Pré-requisitos + +- .NET 6.0 ou posterior (a API funciona da mesma forma no .NET Framework 4.7+) +- Uma licença ativa do Aspose.Words ou um teste gratuito (a versão gratuita adiciona uma marca d'água à saída, mas o código funciona da mesma forma) +- Um documento Word que já contém imagens (por exemplo, `DocWithImages.docx`) +- Visual Studio 2022 ou qualquer editor que possa compilar projetos C# + +> **Dica profissional:** Se você estiver usando uma versão de avaliação, ainda pode testar a lógica de salvamento de imagens; apenas lembre-se de que o PDF/MD final conterá a marca d'água da avaliação. + +## Visão Geral da Solução + +Em alto nível, o processo se parece com isto: + +1. Carregue o `.docx` de origem com `Document`. +2. Crie um objeto `MarkdownSaveOptions` e conecte um `IResourceSavingCallback`. +3. No callback, decida a pasta e o nome do arquivo para cada imagem. +4. Salve o documento como Markdown; o callback grava cada imagem no disco. + +Esse é o núcleo de **como salvar imagens** durante uma conversão. O mesmo padrão funciona para outros tipos de recursos (fonts, CSS, etc.) caso você precise deles. + +## Etapa 1 – Carregar o DOCX que Contém Imagens + +Primeiro, precisamos de uma instância `Document` que aponte para o arquivo Word que você deseja converter. Nada sofisticado aqui; apenas uma chamada direta ao construtor. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Por que isso importa:** Carregar o documento é o único momento em que o Aspose analisa o XML do Word, portanto, quaisquer fontes ausentes ou partes corrompidas lançarão uma exceção imediatamente—antes mesmo de começarmos a salvar imagens. + +## Etapa 2 – Configurar MarkdownSaveOptions com um Callback de Salvamento de Imagem + +A classe `MarkdownSaveOptions` permite que você se conecte ao processo de salvamento via `ResourceSavingCallback`. Esse callback recebe um objeto `ResourceSavingArgs` para cada recurso externo (imagens, CSS, etc.) que o Aspose precisa gravar. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementação do Callback + +Abaixo está a implementação completa de `ImageSavingCallback`. Ela cria uma sub‑pasta `Images` ao lado do arquivo Markdown, atribui a cada imagem um nome sequencial (`img_0.png`, `img_1.jpg`, …) e, opcionalmente, permite que você envie a imagem para outro local (por exemplo, para um bucket na nuvem). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Como isso ajuda:** Ao personalizar `args.FileName` você controla exatamente **como salvar imagens**—seja em uma pasta única, em uma hierarquia baseada em datas ou até mesmo em um BLOB de banco de dados. O callback é executado para cada imagem, então você nunca precisará pós‑processar o arquivo Markdown depois. + +## Etapa 3 – Salvar o Documento como Markdown + +Agora que as opções e o callback estão prontos, a conversão real é feita em uma única linha. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Quando a linha terminar, você terá: + +- `Doc.md` – a representação Markdown do seu conteúdo Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … – cada imagem extraída do DOCX original. + +## Exemplo Completo, Pronto‑para‑Executar + +Juntando tudo, aqui está um aplicativo de console autônomo que você pode copiar e colar em um novo projeto C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Resultado Esperado + +Depois de executar o programa: + +- Abra `C:\Docs\Doc.md` em qualquer editor de texto. Você verá links de imagem Markdown como `![](Images/img_0.png)`. +- A pasta `Images` conterá cada imagem extraída, nomeada sequencialmente. +- O arquivo Markdown será renderizado corretamente em qualquer visualizador que suporte imagens locais (pré‑visualização do VS Code, GitHub, etc.). + +## Perguntas Frequentes (FAQs) + +### Isso funciona com outros formatos de imagem (SVG, TIFF)? + +Sim. `Path.GetExtension(args.FileName)` preserva a extensão original, portanto SVG, TIFF, BMP e até EMF são salvos sem alterações. A única ressalva é que alguns renderizadores de Markdown podem não exibir SVG inline; nesse caso, você pode converter SVG para PNG previamente. + +### E se eu precisar incorporar imagens como Base64 em vez de arquivos separados? + +Dentro de `ResourceSaving`, você pode substituir a gravação física do arquivo por um stream de memória e então modificar o link Markdown manualmente. O Aspose não expõe um interruptor direto de “incorporar como Base64”, mas o callback lhe dá controle total sobre `args.Stream`. + +### Como isso difere do método interno `ExportImages`? + +`ExportImages` extrai todas as imagens para uma pasta **sem** gerar Markdown. Nosso callback combina as duas ações, garantindo que os nomes dos arquivos de imagem correspondam às referências dentro do `.md`. Esse alinhamento é a chave para **como salvar imagens** corretamente durante a conversão. + +### Posso converter vários arquivos DOCX em lote? + +Com certeza. Envolva a lógica principal em um loop `foreach (var file in Directory.GetFiles(..., "*.docx"))`, ajuste os caminhos de saída e reutilize o mesmo `ImageSavingCallback`. Apenas lembre-se de criar um novo `MarkdownSaveOptions` para cada documento, pois `args.DestinationFileName` muda a cada iteração. + +## Casos de Borda & Melhores Práticas + +| Situação | O que observar | Correção Recomendada | +|-----------|----------------------|-----------------| +| **Grande DOCX (centenas de MB)** | Pressão de memória ao carregar | Use `LoadOptions` com `LoadFormat.Docx` e defina `LoadOptions.LoadFormat = LoadFormat.Docx` para carregar partes em streaming | +| **Nomes de imagens colidem** | Se a origem já tem `img_0.png` na pasta de destino, você pode sobrescrever | Anexe um GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Pasta de saída somente leitura** | Salvar lança `UnauthorizedAccessException` | Garanta que o processo execute com permissões adequadas ou escolha um caminho gravável | +| **Recursos não‑imagem (CSS, fontes)** | O callback também os recebe | Proteja com `if (args.ResourceType != ResourceType.Image) return;` (já mostrado) | +| **Nomes de arquivos Unicode** | Alguns sistemas de arquivos tratam mal caracteres | Use `Path.GetInvalidFileNameChars()` para sanitizar `args.FileName` antes de atribuir | + +## Tópicos Relacionados que Você Pode Explorar a Seguir + +- **convert docx to markdown** com estilos de título personalizados (use `MarkdownSaveOptions.ExportImagesAsBase64` para imagens embutidas) +- **extract images from word** usando o `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/portuguese/net/working-with-fonts/_index.md b/words/portuguese/net/working-with-fonts/_index.md index 572120ecb8..0296d6f577 100644 --- a/words/portuguese/net/working-with-fonts/_index.md +++ b/words/portuguese/net/working-with-fonts/_index.md @@ -52,7 +52,7 @@ Quer você queira formatar texto com fontes diferentes, definir regras de substi | [Como Capturar Fontes no Aspose.Words – Guia Completo](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Aprenda a capturar fontes em documentos Word usando Aspose.Words com este guia completo passo a passo. | | [Como carregar DOCX e detectar fontes ausentes – Guia completo em C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Aprenda a carregar documentos DOCX e detectar fontes ausentes usando Aspose.Words para .NET com este guia completo em C#. | | [Habilitar avisos de substituição de fontes no Aspose.Words – Guia completo](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Aprenda a habilitar avisos de substituição de fontes no Aspose.Words para .NET e evitar problemas de renderização. | - +| [Substituição de Fonte Aspose: Detectar Fontes Ausentes em Documentos Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Aprenda a detectar fontes ausentes em documentos Word usando Aspose.Words para .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/portuguese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..a973223bef --- /dev/null +++ b/words/portuguese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-05-04 +description: Aprenda a usar a substituição de fontes da Aspose para detectar fontes + ausentes ao carregar um documento Word e recuperar os detalhes das fontes faltantes + — guia passo a passo. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: pt +og_description: Domine a substituição de fontes do Aspose para detectar fontes ausentes + ao carregar um documento Word e recuperar informações sobre fontes faltantes com + código C# completo. +og_title: Substituição de Fonte Aspose – Detectar Fontes Ausentes em Documentos Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Substituição de Fonte Aspose: Detectar Fontes Ausentes em Documentos Word' +url: /pt/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Detectar Fontes Ausentes em Documentos Word + +Já se perguntou por que um documento Word parece errado em outra máquina? Frequentemente o culpado é uma fonte ausente, e **Aspose font substitution** é a ferramenta que permite identificar essas lacunas antes que se tornem um desastre visual. Neste tutorial, vamos percorrer como **detect missing fonts** no momento em que você **load a Word document**, e então **retrieve missing font** detalhes para que você possa corrigir ou substituir. + +Cobriremos tudo, desde a configuração do callback de aviso até a obtenção de uma lista limpa de fontes ausentes. Ao final, você terá um trecho de código C# pronto‑para‑executar que informa exatamente quais fontes não foram encontradas, e entenderá por que isso é importante para a fidelidade do documento. + +--- + +## Pré-requisitos – O que Você Precisa Antes de Começar + +- **Aspose.Words for .NET** (v23.12 ou posterior recomendado). +- Um ambiente de desenvolvimento .NET (Visual Studio, Rider ou a CLI `dotnet`). +- Um DOCX de exemplo que intencionalmente usa uma fonte que você não tem instalada — chame-o de `DocumentWithMissingFont.docx`. +- Conhecimento básico de C# — nada sofisticado, apenas a capacidade de executar um aplicativo de console. + +Se algum desses lhe for desconhecido, pause e instale o pacote NuGet: + +```bash +dotnet add package Aspose.Words +``` + +É isso. Sem fontes extras, sem serviços externos. + +--- + +## Etapa 1: Carregar o Documento Word (e Acionar Verificações de Fonte) + +A primeira coisa que você faz é **load a Word document**. Aspose.Words analisa o arquivo e, se não conseguir localizar uma fonte referenciada, coloca na fila um aviso de *FontSubstitution*. Aqui está o código que faz o carregamento: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Por que isso importa:** Carregar o documento antecipadamente dá ao Aspose a chance de analisar cada trecho de texto, estilo e objeto incorporado. Se uma fonte não for encontrada no sistema ou na pasta de fontes personalizada, você receberá um aviso posteriormente. + +--- + +## Etapa 2: Anexar um Callback de Aviso para Capturar Eventos de Substituição + +Aspose.Words usa um mecanismo de callback para informá-lo sobre problemas como fontes ausentes. Ao atribuir uma implementação de `IWarningCallback` a `doc.WarningCallback`, você pode interceptar cada aviso à medida que ocorre. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Dica profissional:** Você pode anexar múltiplos callbacks (por exemplo, registro, atualizações de UI) encapsulando-os em um padrão composto, mas para este tutorial um único callback mantém as coisas claras. + +--- + +## Etapa 3: Implementar o Callback de Aviso de Substituição de Fonte + +Agora definimos a classe que realmente faz o trabalho. O callback recebe um objeto `WarningInfo`; filtramos por `WarningType.FontSubstitution` e armazenamos a descrição para uso posterior. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **O que está acontecendo:** Quando o Aspose encontra uma fonte ausente, ele cria um aviso como “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Nosso callback imprime essa linha e a salva. + +--- + +## Etapa 4: Processar o Documento (Opcional) e Coletar Fontes Ausentes + +Se você só precisa **detect missing fonts**, a etapa de carregamento já é suficiente — os avisos são disparados automaticamente. Contudo, muitos desenvolvedores também precisam **retrieve missing font** informações após executar algumas operações (por exemplo, salvar, converter). Abaixo forçamos uma pequena operação — salvar em PDF — para garantir que todos os avisos sejam emitidos, então extraímos as mensagens coletadas. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Saída esperada no console** (exemplo): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Observe como cada linha indica claramente a fonte original e a fonte de fallback que o Aspose escolheu. Esse é o núcleo do relatório de **aspose font substitution**. + +--- + +## Etapa 5: Avançado – Usando Fontes Personalizadas para Reduzir Substituições + +Às vezes você *tem* as fontes ausentes, apenas não estão na pasta padrão do sistema. Aspose.Words permite apontar para um diretório personalizado via `FontSettings`. Adicionar esta etapa pode reduzir drasticamente o número de avisos de substituição. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Por que adicionar isso?** Se você está distribuindo documentos entre máquinas, agrupar as fontes necessárias em uma pasta conhecida garante a mesma aparência visual em todos os lugares. Também torna sua rotina de **detect missing fonts** mais precisa porque o Aspose verifica essa pasta antes de recorrer ao fallback. + +--- + +## Exemplo Completo Funcional + +Juntando tudo, aqui está um único programa de console pronto para copiar‑colar. Salve como `Program.cs` e execute com `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**O que você deve ver:** Se o DOCX de origem referencia fontes que você não tem, o console imprime cada linha de substituição seguida por um resumo conciso. Se todas as fontes estiverem presentes, você receberá a mensagem “No missing fonts were detected.” + +--- + +## Armadilhas Comuns & Como Evitá‑las + +| Problema | Por que acontece | Correção | +|----------|------------------|----------| +| **Nenhum aviso aparece** | O documento usa apenas fontes do sistema, ou você já adicionou uma pasta personalizada contendo as fontes ausentes. | Verifique se o DOCX realmente referencia uma fonte indisponível. Você pode abri‑lo no Word e mudar um parágrafo para uma fonte rara (ex.: “Papyrus”). | +| **Mensagens duplicadas** | A mesma fonte é usada em múltiplas execuções, gerando vários avisos. | De‑duplicate a lista com `Distinct()` se você precisar apenas de um conjunto único. | +| **Queda de desempenho em documentos grandes** | Cada aviso é processado na thread da UI. | Execute o carregamento em uma tarefa em segundo plano ou use `Parallel.ForEach` para o pós‑processamento. | +| **Fonte de fallback incorreta** | O fallback padrão do Aspose pode não corresponder à sua identidade visual. | Defina `FontSettings.SubstitutionSettings.DefaultFontName` para um fallback preferido (ex.: “Calibri”). | + +--- + +## Expandindo a Solução – Exportando Fontes Ausentes para JSON + +Se você está construindo um serviço web que precisa relatar fontes ausentes de volta a um cliente, serializar a lista é trivial: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Agora sua API pode retornar um payload JSON limpo que outro sistema pode consumir. + +--- + +## Conclusão + +Neste guia demonstramos **Aspose font substitution** do início ao fim: carregando um documento Word, anexando um callback de aviso, capturando cada evento de *detect missing fonts*, e finalmente **retrieve missing font** informações para relatório ou correção. Ao adicionar pastas de fontes personalizadas opcionais, você pode reduzir a lista de substituições, e com algumas linhas extras pode até exportar os resultados como JSON. + +Lembre‑se, a integridade visual dos seus documentos depende das fontes que eles utilizam. Com a técnica mostrada aqui, você nunca será surpreendido por um fallback inesperado novamente. + +Pronto para dar o próximo passo? Tente integrar essa lógica em um pipeline maior de processamento de documentos, ou explore outros recursos do Aspose.Words como incorporação de fontes (`doc.FontSettings.EmbeddedFonts`). As possibilidades são infinitas, e seus usuários agradecerão pela saída refinada. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/russian/net/ai-powered-document-processing/_index.md b/words/russian/net/ai-powered-document-processing/_index.md index adae326f0c..f354ff1b7c 100644 --- a/words/russian/net/ai-powered-document-processing/_index.md +++ b/words/russian/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ | [Работа с моделью Google AI](./working-with-google-ai-model/) Повысьте уровень обработки документов с помощью Aspose.Words для .NET и Google AI, чтобы легко создавать краткие резюме. | | [Работа с открытой моделью ИИ](./working-with-open-ai-model/) | Разблокируйте эффективное реферирование документов с помощью Aspose.Words для .NET с мощными моделями OpenAI. Погрузитесь в это всеобъемлющее руководство прямо сейчас. | | [Работа с параметрами резюмирования](./working-with-summarize-options/) | Научитесь эффективно резюмировать документы Word с помощью Aspose.Words для .NET с помощью нашего пошагового руководства по интеграции моделей ИИ для быстрого получения информации. | +| [Как использовать LLM с Aspose.Words – Переписать абзацы на C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Узнайте, как применять LLM в Aspose.Words для автоматической перезаписи абзацев в C#. | +| [Как проверить грамматику в C# – Полное руководство по документам Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Узнайте, как использовать Aspose.Words для .NET для проверки грамматики в документах Word с помощью C#. | +| [Резюмирование документа Word на C# – Полное руководство с использованием Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Узнайте, как использовать Anthropic Claude для автоматического резюмирования документов Word в C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/russian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..ea1987004a --- /dev/null +++ b/words/russian/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Узнайте, как проверять грамматику в документе Word с помощью C#. В этом + руководстве также рассматривается, как загрузить файл DOCX в C# и использовать Aspose.Words + AI для получения точных результатов. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: ru +og_description: Как проверить грамматику в документе Word с помощью C#? Следуйте этому + руководству, чтобы загрузить файл DOCX в C# и выполнить проверку грамматики с помощью + ИИ в Aspose.Words. +og_title: Как проверять грамматику в C# – Полное пошаговое руководство +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Как проверять грамматику в C# — Полное руководство по документам Word +url: /ru/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как проверять грамматику в C# – Полное руководство для Word документов + +Когда‑то задавались вопросом **как проверять грамматику** в документе Word, не выходя из IDE? Вы не одиноки. Многие разработчики должны валидировать отчёты, генерируемые пользователями, автоматические письма или даже документацию перед выпуском. Хорошая новость? С Aspose.Words AI вы можете делать это программно, и весь процесс легко вписывается в типичный рабочий процесс C#. + +В этом руководстве мы пройдём всё, что вам нужно знать: от загрузки файла DOCX C# до вызова AI‑проверки грамматики и интерпретации результатов. К концу вы получите готовый к запуску фрагмент кода, который выводит степень серьёзности каждой проблемы, сообщение и предложенную замену — без ручного копирования‑вставки. + +## Что вы узнаете + +- **Как проверять грамматику** в документе Word с помощью Aspose.Words AI. +- Точные шаги **загрузки DOCX файла C#** с классом `Document`. +- Как работать с объектом `GrammarCheckResult`, перебрать найденные проблемы и вывести полезные диагностические данные. +- Распространённые подводные камни (например, отсутствие лицензии) и советы, как сделать решение готовым к продакшену. + +> **Prerequisites:** .NET 6.0+ (или .NET Framework 4.6+), Visual Studio 2022 (или любой другой IDE), и лицензия Aspose.Words for .NET (бесплатная пробная версия подходит для тестов). Если вы ещё не установили NuGet‑пакеты, выполните: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Теперь давайте погрузимся в детали. + +## Шаг 1: Загрузка DOCX файла в C# + +Прежде чем можно будет выполнить проверку грамматики, документ должен быть загружен в память. Aspose.Words делает это в одну строку, но есть несколько нюансов, о которых стоит помнить. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Почему это важно:** +- Использование `Path.Combine` обеспечивает кросс‑платформенную совместимость. +- Проверка существования файла предотвращает падение программы, которое иначе скрывало бы реальную логику проверки грамматики. +- При **загрузке DOCX файла C#** Aspose парсит все стили, колонтитулы и даже скрытый текст, предоставляя AI полную картину документа. + +> **Pro tip:** Если вам нужно работать с потоками (например, файлы, полученные из веб‑загрузки), замените вызов `new Document(docPath)` на `new Document(stream)`. + +## Шаг 2: Выбор AI‑модели для проверки грамматики + +Aspose.Words AI поддерживает несколько моделей, от лёгких локальных до облачных вариантов GPT. Для большинства сценариев **GPT‑3.5 Turbo** предлагает оптимальное соотношение скорости и точности. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Почему выбираем GPT‑3.5 Turbo?** +- Достаточно быстра для пакетной обработки десятков файлов в минуту. +- Стоимость (если вы используете платный тариф) ниже, чем у GPT‑4, при этом ловит большинство типичных ошибок. +- API автоматически обрабатывает ограничения токенов, так что вам не придётся вручную разбивать огромные документы. + +Если вы предпочитаете офлайн‑подход, замените `AiModelType.Gpt35Turbo` на `AiModelType.Local` (требуется дополнительный пакет офлайн‑модели). + +## Шаг 3: Перебор проблем и вывод полезной обратной связи + +Объект `GrammarCheckResult` содержит коллекцию объектов `GrammarIssue`. Каждая проблема предоставляет степень серьёзности, человекочитаемое сообщение и предложенную замену. Выведем их красиво. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Что означают поля:** +- `Severity` — обычно `Info`, `Warning` или `Error`. Ошибку (`Error`) следует исправить до публикации. +- `Message` — краткое описание проблемы (например, «Согласование подлежащего и сказуемого»). +- `SuggestedReplacement` — рекомендация AI; её можно автоматически применить, если доверяете модели, либо показать человеку для проверки. + +> **Edge case:** У некоторых проблем может отсутствовать `SuggestedReplacement` (например, предложения по стилю). В таких случаях просто пометьте место для ручного ревью. + +## Полный рабочий пример + +Собрав всё вместе, получаем автономное консольное приложение, которое можно скопировать в новый .NET‑проект. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Ожидаемый вывод (пример):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Если запустить программу на «чистом» документе, вы увидите строку «✅ No grammar issues detected.» вместо этого. + +## Обработка распространённых подводных камней + +| Problem | Why It Happens | Quick Fix | +|---------|----------------|-----------| +| **LicenseException** | Aspose libraries require a valid license for production use. | Insert `License license = new License(); license.SetLicense("Aspose.Words.lic");` at the start of `Main`. | +| **Network timeout** | The AI model call reaches the cloud and exceeds the default 100 s timeout. | Increase timeout via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` before calling `CheckGrammar`. | +| **Large documents (> 10 MB)** | Some cloud models truncate input. | Split the document into sections using `document.Sections` and run checks per section, then aggregate results. | +| **Missing suggestions** | The model couldn't generate a replacement (e.g., ambiguous phrasing). | Log the issue for manual review; do not auto‑apply empty suggestions. | + +## Расширение решения + +- **Автоматическое исправление:** Пройдитесь по `grammarResult.Issues` и замените текст с помощью `document.Range.Replace`. Не забудьте сначала создать резервную копию оригинального файла. +- **Пакетная обработка:** Оберните весь процесс в `foreach` по каталогу DOCX‑файлов. Сохраняйте каждый отчёт в виде JSON‑файла для последующего анализа. +- **Интеграция с ASP.NET:** Откройте endpoint, принимающий загруженный DOCX, запускающий проверку и возвращающий JSON‑payload с найденными проблемами. + +## Иллюстрация + +диаграмма процесса проверки грамматики + +*Диаграмма выше визуализирует трёхшаговый процесс: загрузка DOCX → запуск AI‑проверки грамматики → вывод проблем.* + +## Заключение + +Мы рассмотрели **как проверять грамматику** в документе Word с помощью C#, продемонстрировали точный код для **загрузки DOCX файла C#** и показали, как интерпретировать AI‑сгенерированную обратную связь. С Aspose.Words AI вы получаете мощный облачный движок проверки грамматики, который без проблем интегрируется в любое .NET‑приложение. + +Следующие шаги? Попробуйте автоматизировать цикл исправления, поэкспериментируйте с новой `AiModelType.Gpt4` для ещё более точных рекомендаций или объедините это со спел‑чекером для полноценного пайплайна вычитки. Возможностей практически бесконечно, а у вас теперь есть надёжная база для дальнейшего развития. + +Есть вопросы или столкнулись с трудным кейсом? Оставляйте комментарий ниже, и счастливого кодинга! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/russian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/russian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..0d033f126d --- /dev/null +++ b/words/russian/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Как использовать LLM для редактирования документов с Aspose — узнайте, + как заменять текст абзаца, подключать локальный LLM и переписывать текст с помощью + ИИ. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: ru +og_description: Как использовать LLM для редактирования документов с помощью Aspose. + Это руководство показывает, как подключиться к локальному LLM, заменить текст абзаца + и переписать текст с использованием ИИ. +og_title: Как использовать LLM с Aspose.Words – переписать абзацы на C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Как использовать LLM с Aspose.Words — переписывать абзацы на C# +url: /ru/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как использовать LLM с Aspose.Words – Переписать абзацы на C# + +Когда‑то задумывались **как использовать LLM**, чтобы полировать документ Word, не открывая его вручную? Вы не одиноки. Многие разработчики сталкиваются с проблемой, когда нужно *заменить текст абзаца* программно, но нет чистого AI‑ориентированного рабочего процесса. + +В этом руководстве мы подключим локальную большую языковую модель, передадим ей фрагмент из файла `.docx`, попросим **переписать текст с помощью ИИ**, а затем сохраним обновлённый документ — всё с помощью Aspose.Words. К концу вы получите готовое к запуску консольное приложение C#, демонстрирующее весь конвейер. + +> **Что вы получите:** полностью готовый пример, объяснения каждого шага, советы по граничным случаям и идеи для расширения решения. + +## Что понадобится + +- **.NET 6+** (или .NET Framework 4.7.2 – код работает в обеих средах) +- **Aspose.Words for .NET** (NuGet‑пакет `Aspose.Words`) +- **Локальный сервер LLM**, предоставляющий простой HTTP‑эндпоинт `/generate` (например, Ollama, LMStudio или собственный Flask‑сервис) +- Базовое знакомство с C# и кодом HTTP‑клиента + +Дополнительные SDK не требуются; всё остальное находится в коде, который мы напишем вместе. + +## Шаг 1: Как использовать LLM для замены текста абзаца + +Первое, что нам нужно сделать – определить абзац, который будем изменять. Aspose.Words упрощает эту задачу, предоставляя богатую объектную модель. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Почему это важно:** +Выбор правильного узла предотвращает случайную перезапись заголовков или таблиц. Используя подход **replace paragraph text**, мы сохраняем структуру документа, изменяя только нужный контент. + +> **Совет профессионала:** Если в документе есть секции переменной длины, используйте `document.GetChildNodes(NodeType.Paragraph, true)` и LINQ, чтобы найти абзац по его тексту или стилю. + +## Шаг 2: Подключение к локальному LLM эндпоинту + +Теперь, когда у нас есть текст, нужно отправить его в LLM. В примере используется простой класс‑обёртка `LocalLargeLanguageModel`, скрывающий HTTP‑механику. При желании замените его вызовами `HttpClient`. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Почему мы подключаемся так:** +Настройка **connect to local llm** устраняет задержки, сохраняет данные в пределах предприятия и избавляет от расходов на API. Обёртка также делает последующий код чище, позволяя сосредоточиться на логике **rewrite text using ai**. + +## Шаг 3: Переписать текст с помощью ИИ в Aspose.Words + +Имея текст абзаца и готовый LLM, формируем запрос, который точно указывает модели, что нужно – переписать в формальном тоне. При желании измените запрос для других стилей (дружелюбный, технический и т.д.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Почему это работает:** +LLM работают на основе подсказок; чёткие инструкции («Rewrite … in a formal tone») дают предсказуемый результат. Шаг **rewrite text using ai** является сердцем руководства – он демонстрирует, как ИИ можно встроить непосредственно в рабочие процессы с документами. + +## Шаг 4: Редактировать документ и сохранить изменения + +Теперь заменяем оригинальные `Run`‑ы новым содержимым. Aspose.Words хранит текст в объектах `Run`, поэтому их предварительное очищение избавляет от оставшихся артефактов форматирования. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Примечание по граничному случаю:** +Если исходный абзац содержал смешанное форматирование (жирный, курсив), возможно, понадобится сохранить стили. В этом случае создайте новый `Run`, скопируйте настройки оригинального `Font`, а затем задайте `Text` равным `revisedText`. + +## Полный рабочий пример + +Ниже представлен весь код программы, который можно скопировать в консольный проект. Не забудьте сначала установить NuGet‑пакет Aspose.Words (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Ожидаемый вывод + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Откройте `output.docx` – вы увидите, что третий абзац теперь содержит отшлифованную версию. + +## Часто задаваемые вопросы и подводные камни + +| Вопрос | Ответ | +|----------|--------| +| **Что делать, если мой LLM возвращает JSON с дополнительными полями?** | Скорректируйте `GenerateText`, чтобы десериализовать нужное свойство, или разберите ответ вручную. | +| **Можно ли обрабатывать несколько абзацев одновременно?** | Да – итеративно проходите `document.FirstSection.Body.Paragraphs` и применяйте ту же логику подсказки, возможно, добавив индекс абзаца в запрос для контекста. | +| **Мой LLM‑сервер требует аутентификации?** | Добавьте заголовок к `HttpClient` перед POST‑запросом: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **После замены форматирование теряется.** | Сохраните оригинальные настройки `Run.Font`: создайте новый `Run`, скопируйте `originalRun.Font.Clone()`, затем задайте его `Text`. | +| **LLM иногда возвращает пустые строки.** | Реализуйте резервный вариант – если `revisedText.Trim().Length == 0`, оставьте оригинальный текст или повторите запрос с более простой подсказкой. | + +## Расширение решения + +Теперь, когда вы освоили **как использовать llm** для одного абзаца, рассмотрите следующие шаги: + +- **Пакетная обработка:** Пройдите по каждому абзацу и перепишите в выбранном стиле (например, «сделать весь текст лаконичным»). +- **Переписывание с учётом стиля:** Передавайте в запрос название оригинального стиля абзаца, чтобы LLM учитывал различия между заголовками и основным текстом. +- **Интеграция в CI‑конвейер:** Автоматизируйте полировку документов как часть процесса сборки документации. +- **Альтернативные подсказки:** Попробуйте «summarize this paragraph» или «translate this paragraph to Spanish», чтобы исследовать весь потенциал **rewrite text using ai**. + +## Заключение + +Мы прошли весь процесс **как использовать llm** с Aspose.Words: загрузка документа, **connect to local llm**, извлечение абзаца, **rewrite text using ai**, **replace paragraph text** и, наконец, сохранение результата. Код автономный, работает «из коробки» и демонстрирует практический способ объединения ИИ с традиционной автоматизацией документов. + +Попробуйте, поиграйте с подсказками, и дайте + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/russian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/russian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..5b0b6faf4e --- /dev/null +++ b/words/russian/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-05-04 +description: Быстро подведите итоги документа Word и переведите текст с помощью Google. + Узнайте, как использовать Anthropic Claude, создать резюме из отчёта и перевести + текст с помощью Google в одном учебнике по C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: ru +og_description: Мгновенно создавайте резюме Word‑документа и переводите текст с помощью + Google. В этом руководстве показано, как использовать Anthropic Claude и Aspose.Words + для создания резюме отчёта. +og_title: Резюмировать документ Word на C# – пошагово с Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Резюмирование Word‑документа на C# — Полное руководство с использованием Anthropic + Claude +url: /ru/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Сводка Word‑документа в C# – Полное руководство с использованием Anthropic Claude + +Когда‑то вам нужно было **свести word документ** и вы застряли в бесконечных API и громоздком коде? Вы не одиноки. Во многих проектах — годовые отчёты, юридические справки или исследовательские статьи — извлечение краткого обзора является ежедневной болью. К счастью, сочетание Aspose.Words и Anthropic Claude делает это элементарным, а при желании можно добавить быструю Google‑переводку. + +В этом руководстве мы пройдём всё, что нужно знать: загрузка большого .docx, вызов модели Claude V2 для генерации сводки, перевод фразы с помощью Google и обработка самых распространённых подводных камней. К концу вы сможете **создавать summary from report** всего в несколько строк C#. + +## Prerequisites + +- .NET 6+ (или .NET Core 3.1) установлен +- Лицензия Aspose.Words for .NET (или бесплатная пробная версия) +- Доступ к Anthropic Claude V2 API (понадобится API‑ключ) +- Интернет‑соединение для Google Translator +- Visual Studio 2022 или ваша любимая IDE для C# + +Дополнительные пакеты NuGet, кроме `Aspose.Words` и `Aspose.Words.AI`, не требуются; класс переводчика поставляется в той же библиотеке. + +## Step 1 – Load the Source Word Document + +Первое, что нужно сделать, — загрузить файл .docx в память. Aspose.Words делает это тривиально, а благодаря надёжному парсеру он работает с сложными макетами, таблицами и даже встроенными изображениями. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Почему это важно:** Загрузка документа заранее позволяет проверить свойства (автор, количество слов) и решить, нужна ли вообще сводка. Большие файлы > 10 МБ могут сильно нагружать память, поэтому при проблемах с производительностью рассмотрите `LoadOptions` с `LoadFormat.Docx`. + +## Step 2 – Summarize the Document with Anthropic Claude + +Теперь начинается интересная часть: передаём документ Claude V2. Класс `Summarizer` абстрагирует HTTP‑запрос, работу с токенами и повторные попытки. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Как это работает:** +> 1. **Chunking** — Aspose автоматически разбивает документ на управляемые куски (≈ 2 KB каждый), чтобы уложиться в лимиты токенов Claude. +> 2. **Prompt engineering** — Библиотека отправляет подсказку вроде “Provide a concise executive summary of the following text:” и затем каждый кусок. +> 3. **Aggregation** — Claude возвращает частичные сводки, которые склеиваются в окончательный `summaryText`. + +### Edge Cases & Tips + +- **Очень большие отчёты** (> 100 страниц) могут превысить контекстное окно Claude. Если вывод обрезается, уменьшите `SummarizerOptions.MaxChunkSize` до меньших значений. +- **Неанглийский источник** — Claude лучше работает с английским; для других языков сначала переведите (см. Шаг 4), а затем делайте сводку. +- **Rate limits** — Anthropic накладывает ограничения в минуту. Оберните вызов в цикл повторов с экспоненциальным back‑off, если получите ответ `429`. + +## Step 3 – Verify the Summary Output + +Прежде чем продолжать, рекомендуется проверить, что сводка не пуста и соответствует ожидаемой длине (например, 5‑10 % от исходного количества слов). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Если отношение слишком низкое (< 2 %), скорректируйте свойство `SummarizerOptions.SummaryLength`, чтобы запросить более длинный результат. + +## Step 4 – Translate Text with Google + +Теперь, когда у нас есть чёткая английская сводка, добавим быструю переводку. Класс `Translator` использует публичный endpoint Google (ключ API не нужен для коротких фраз, но в продакшене следует перейти на платный Cloud Translation API). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Почему Google?** Он быстрый, широко поддерживаемый, а бесплатный endpoint обрабатывает короткие строки без аутентификации. Для массовых переводов группируйте запросы и соблюдайте лимиты использования Google. + +### Translating the Whole Summary (Optional) + +Если нужен полный перевод сводки, например, на испанский (или любой другой язык), просто передайте `summaryText` в `Translator.Translate`. Учтите ограничение в 5 KB на запрос; возможно, придётся разбить сводку на более мелкие части. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Step 5 – Save the Summary Back to a Word File (Bonus) + +Часто конечный пользователь ожидает загрузить документ, а не видеть вывод в консоли. Создадим новый `.docx`, содержащий как английскую, так и испанскую версии. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Practical Tip + +При вставке сводки в новый Word‑файл держите оригинальное форматирование минимальным (используйте стиль `Normal`). Сложные стили из исходника могут вызвать неожиданные смещения макета. + +## Full Working Example + +Ниже представлен **полный, готовый к копированию** пример программы, который связывает всё вместе. Он компилируется одной командой `dotnet run` после установки пакетов Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Ожидаемый вывод в консоли** (усечённый для краткости): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Frequently Asked Questions + +| Question | Answer | +|----------|--------| +| *Can I use a different AI model?* | Yes. Replace `SummarizerModel.AnthropicClaudeV2` with `SummarizerModel.OpenAIGPT4` (requires an OpenAI key) or any provider listed in the enum. | +| *What if the document contains protected sections?* | Aspose will throw `ProtectedDocumentException`. Unlock it first with `LoadOptions.Password` or request an unprotected copy. | +| *Do I need a paid Aspose license for production?* | The free trial works for up to 20 pages. For larger reports, a license removes the page limit and adds performance optimizations. | +| *Is the Google translator reliable for large blocks?* | For short strings it’s fine. For bulk translation, switch to the Cloud Translation API to avoid request‑size limits and to get better language detection. | + +## Conclusion + +We’ve just **summarize word document** using Aspose.Words together with the Anthropic Claude V2 model, then **translate text with Google** to + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/russian/net/basic-conversions/_index.md b/words/russian/net/basic-conversions/_index.md index c6ad4f2e14..eebba9e976 100644 --- a/words/russian/net/basic-conversions/_index.md +++ b/words/russian/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Basic Conversions проведет вас через базовые преобр | [Конвертировать Word в PDF в C# с Aspose.Words – Руководство](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Узнайте, как конвертировать Word в PDF в C# с помощью Aspose.Words. Пошаговое руководство для разработчиков. | | [Сохранить Word как PDF с Aspose.Words – Полное руководство C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Узнайте, как сохранить документ Word в PDF с помощью Aspose.Words в C#. Подробное руководство с примерами кода. | | [Сохранить DOCX как PDF с Aspose.Words – Полное руководство C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Узнайте, как сохранить документ DOCX в PDF с помощью Aspose.Words в C#. Подробное руководство с примерами кода. | +| [Создать доступный PDF из DOCX на C# – Как конвертировать Word в PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Узнайте, как создать доступный PDF из DOCX с помощью Aspose.Words для .NET. Пошаговое руководство с примерами кода. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/russian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..91d5602223 --- /dev/null +++ b/words/russian/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Создайте доступный PDF из файла DOCX на C#. Узнайте, как конвертировать + Word в PDF, сохранить Word как PDF и экспортировать DOCX в PDF с соблюдением требований + доступности. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: ru +og_description: Создайте доступный PDF из файла DOCX на C#. Следуйте пошаговому руководству + по конвертации Word в PDF, сохранению Word как PDF и экспорту docx в PDF с полной + доступностью. +og_title: Создание доступного PDF из DOCX на C# – Быстрое руководство +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Создание доступного PDF из DOCX на C# – Как конвертировать Word в PDF +url: /ru/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Создание доступного PDF из DOCX в C# – Как конвертировать Word в PDF + +Когда‑нибудь вам нужно было **создать доступный PDF** из документа Word, но вы не знали, какую библиотеку выбрать? Вы не одиноки — многие разработчики сталкиваются с тем же препятствием, когда необходимо соответствовать стандартам PDF/UA для доступности. Хорошая новость в том, что с Aspose.Words вы можете превратить `.docx` в соответствующий PDF всего за несколько строк кода, и получите файл, который скрин‑ридеры действительно могут читать. + +В этом руководстве мы пройдемся по всему, что нужно знать, чтобы **конвертировать Word в PDF**, **сохранить Word как PDF**, а также **экспортировать docx в PDF** с соответствием PDF/UA‑1 (или PDF/UA‑2). К концу вы получите готовый фрагмент кода на C#, поймете, почему каждый параметр важен, и сможете справиться с типичными проблемами, такими как отсутствие шрифтов или пользовательские настройки страниц. + +## Необходимые условия + +- .NET 6.0 или новее (код также работает с .NET Framework 4.6+) +- Лицензия Aspose.Words для .NET (или бесплатный оценочный ключ) +- Базовые знания C# и Visual Studio (или любой предпочитаемой IDE) +- DOCX‑файл, который вы хотите сделать доступным (мы будем называть его `input.docx`) + +> **Совет:** Если вы используете бесплатную пробную версию, помните, что сгенерированный PDF будет содержать небольшую водяную метку «Evaluation». + +## Шаг 1: Установите пакет Aspose.Words через NuGet + +Прежде чем писать любой код на C#, библиотеку Aspose.Words необходимо добавить в проект. + +```bash +dotnet add package Aspose.Words +``` + +Выполнение команды восстанавливает `Aspose.Words.dll` и делает пространства имён доступными. Этот шаг важен, потому что класс `PdfSaveOptions` находится внутри этого пакета. + +## Шаг 2: Загрузите исходный DOCX‑файл + +Первый логичный шаг — загрузить документ Word, который вы хотите преобразовать. Представьте это как открытие книги перед тем, как начать редактировать её страницы. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Почему это важно:** Загрузка документа создаёт представление в памяти, включающее все стили, изображения и метаданные. Если файл повреждён, `Document` бросит исключение — поэтому в продакшн‑коде стоит обернуть это в блок try/catch. + +## Шаг 3: Настройте параметры сохранения PDF для доступности + +Aspose.Words позволяет задать уровень соответствия PDF. PDF/UA‑1 — оригинальный стандарт доступности, а PDF/UA‑2 добавляет несколько новых тегов. Выберите тот, который соответствует требованиям вашего клиента. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Что делает «Compliance»:** Установка `PdfCompliance.PdfUax1` сообщает Aspose.Words встраивать правильные теги, логический порядок чтения и альтернативный текст для изображений — именно то, что ищут программы скрин‑ридеров. + +## Шаг 4: Сохраните документ как доступный PDF + +Теперь основная работа завершена; мы просто инструктируем Aspose.Words записать PDF‑файл, используя только что определённые параметры. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +После выполнения этой строки вы найдёте `output.pdf` в указанной папке. Откройте его в Adobe Acrobat Reader и проверьте **File → Properties → Description → PDF/A and PDF/UA**, чтобы убедиться в соответствии. + +## Шаг 5: Проверка доступности (необязательно, но рекомендуется) + +Хотя код гарантирует вывод PDF с тегами, быстрая ручная проверка помогает обнаружить любой пользовательский контент, который может потребовать дополнительного внимания. + +1. Откройте `output.pdf` в Adobe Acrobat Pro. +2. Перейдите в **Tools → Accessibility → Full Check**. +3. Запустите проверку и просмотрите любые предупреждения (например, отсутствие alt‑текста для пользовательских изображений). + +Если в отчете нет ошибок, вы успешно **создали доступный PDF**, соответствующий стандарту PDF/UA‑1. + +## Общие варианты и крайние случаи + +### Конвертация нескольких DOCX‑файлов в цикле + +Если у вас есть набор документов, оберните логику загрузки‑сохранения в цикл `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Переход на PDF/UA‑2 + +Просто измените перечисление `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Работа с пользовательскими шрифтами + +Если ваш DOCX использует шрифты, не установленные на сервере, встраивайте их: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Встраивание гарантирует, что PDF будет выглядеть одинаково на любой машине — важный момент, когда вы **экспортируете docx в pdf** для внешних заинтересованных сторон. + +## Полный рабочий пример + +Ниже представлен полностью готовый к запуску пример программы, который объединяет все части. Скопируйте‑вставьте его в консольное приложение, скорректируйте пути и нажмите **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Ожидаемый результат:** Файл с именем `output.pdf`, который открывается в любом PDF‑просмотрщике, содержит правильные теги доступности и может быть передан пользователям, полагающимся на вспомогательные технологии. + +![Пример создания доступного PDF](/images/create-accessible-pdf.png "Скриншот, показывающий документ, соответствующий PDF/UA‑1") + +*Текст alt изображения:* *пример создания доступного PDF — скриншот документа, соответствующего PDF/UA‑1, открытого в Adobe Acrobat.* + +## Часто задаваемые вопросы + +- **Работает ли это с .NET Core?** + Абсолютно. Aspose.Words кросс‑платформенный, поэтому тот же код работает на Windows, Linux и macOS. + +- **Что будет, если мой DOCX содержит макросы?** + Макросы игнорируются при конвертации; в PDF попадает только видимый контент. + +- **Можно ли добавить пользовательский заголовок метаданных PDF?** + Да — установите `pdfSaveOptions.Metadata.Title = "Your Custom Title";` перед сохранением. + +- **Широко ли поддерживается PDF/UA‑2?** + Большинство современных PDF‑читалок понимают PDF/UA‑2, но если вы ориентируетесь на старые инструменты, лучше использовать PDF/UA‑1. + +## Заключение + +Мы только что показали, как **создать доступный PDF** из DOCX‑файла с помощью Aspose.Words, охватив всё от установки NuGet‑пакета до проверки соответствия PDF/UA. Следуя этим шагам, вы надёжно сможете **конвертировать Word в PDF**, **сохранить Word как PDF** и **экспортировать docx в PDF**, соблюдая стандарты доступности — навык, обязательный для любого разработчика, работающего с корпоративными документными конвейерами. + +Готовы к следующему вызову? Попробуйте добавить пользовательский верхний/нижний колонтитул, встроить тег PDF/A‑2b или автоматизировать процесс в веб‑API ASP.NET Core. Возможностей бесконечно много, а построенный здесь фундамент позволит вам решать их с уверенностью. + +Счастливого кодинга, и пусть ваши PDF всегда остаются читаемыми! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/russian/net/programming-with-markdownsaveoptions/_index.md b/words/russian/net/programming-with-markdownsaveoptions/_index.md index 09cee05007..44eae3481b 100644 --- a/words/russian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/russian/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ | [Сохранить docx как markdown с Aspose.Words – Полное руководство C#](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Полное руководство по сохранению DOCX в Markdown с использованием Aspose.Words и C#. | | [Сохранить изображения Word – Конвертировать Word в Markdown с Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) | Сохраните изображения из документов Word и конвертируйте их в Markdown с помощью Aspose.Words для .NET. | | [Конвертировать Word в Markdown на C# – Полное руководство с извлечением изображений](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) | Подробное руководство по конвертации документов Word в Markdown с извлечением изображений на C# с использованием Aspose.Words. | +| [Как сохранить изображения – конвертировать DOCX в Markdown с Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Сохраните изображения из DOCX и конвертируйте документ в Markdown с помощью Aspose.Words для .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/russian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..4f1f199655 --- /dev/null +++ b/words/russian/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Узнайте, как сохранять изображения при конвертации DOCX в Markdown с + помощью Aspose.Words. Это руководство также показывает, как извлекать изображения + из Word и сохранять Word в формате Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: ru +og_description: Как сохранять изображения при конвертации DOCX в Markdown с помощью + Aspose.Words. Пошаговое руководство с полным кодом на C#. +og_title: Как сохранять изображения – преобразовать DOCX в Markdown с помощью Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Как сохранять изображения – преобразовать DOCX в Markdown с помощью Aspose.Words +url: /ru/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как сохранять изображения – преобразование DOCX в Markdown с помощью Aspose.Words + +Когда-нибудь задавались вопросом **how to save images**, когда нужно превратить файл Word в Markdown? Вы не одиноки. Многие разработчики сталкиваются с проблемой, когда при конвертации изображения превращаются в кучу битых ссылок, а иногда вовсе теряются. Хорошая новость в том, что Aspose.Words предоставляет тонкий контроль, позволяя извлекать изображения из Word, решать, куда их сохранять, и при этом получать чистый Markdown‑вывод. + +В этом руководстве мы пройдем полный, готовый к запуску пример на C#, который показывает **how to save images** в отдельную папку при конвертации `.docx` в `.md`. По пути мы также коснёмся **convert docx to markdown**, **extract images from word** и более общей темы **how to convert docx**, позволяющей **save word as markdown** без потери каких‑либо ресурсов. + +## Предварительные требования + +- .NET 6.0 или новее (API работает одинаково на .NET Framework 4.7+) +- Действующая лицензия Aspose.Words или бесплатная пробная версия (бесплатная версия добавляет водяной знак к результату, но код работает так же) +- Документ Word, уже содержащий изображения (например, `DocWithImages.docx`) +- Visual Studio 2022 или любой редактор, способный собирать проекты C# + +> **Pro tip:** Если вы используете пробную версию, вы всё равно можете протестировать логику сохранения изображений; просто помните, что конечный PDF/MD будет содержать пробный водяной знак. + +## Обзор решения + +На высоком уровне процесс выглядит так: + +1. Загрузить исходный `.docx` с помощью `Document`. +2. Создать объект `MarkdownSaveOptions` и подключить `IResourceSavingCallback`. +3. В колбэке определить папку и имя файла для каждого изображения. +4. Сохранить документ как Markdown; колбэк записывает каждое изображение на диск. + +Это и есть суть **how to save images** при конвертации. Та же схема работает и для других типов ресурсов (шрифты, CSS и т.д.), если они вам понадобятся. + +## Шаг 1 – Загрузка DOCX, содержащего изображения + +Сначала нам нужен экземпляр `Document`, указывающий на файл Word, который вы хотите конвертировать. Здесь ничего сложного; просто прямой вызов конструктора. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Why this matters:** Загрузка документа — единственное место, где Aspose парсит XML Word, поэтому любые отсутствующие шрифты или повреждённые части сразу вызовут исключение — ещё до начала сохранения изображений. + +## Шаг 2 – Настройка MarkdownSaveOptions с обратным вызовом сохранения изображений + +Класс `MarkdownSaveOptions` позволяет подключиться к процессу сохранения через `ResourceSavingCallback`. Этот колбэк получает объект `ResourceSavingArgs` для каждого внешнего ресурса (изображения, CSS и т.д.), который Aspose должен записать. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Реализация колбэка + +Ниже полная реализация `ImageSavingCallback`. Она создаёт подпапку `Images` рядом с файлом Markdown, присваивает каждому изображению последовательное имя (`img_0.png`, `img_1.jpg`, …) и при желании позволяет передать поток изображения в другое место (например, в облачное хранилище). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **How this helps you:** Настраивая `args.FileName`, вы точно контролируете **how to save images** — будь то плоская папка, иерархия по дате или даже BLOB в базе данных. Колбэк вызывается для каждого изображения, поэтому вам не придётся позже пост‑обрабатывать файл Markdown. + +## Шаг 3 – Сохранение документа как Markdown + +Теперь, когда параметры и колбэк готовы, сама конвертация сводится к одной строке. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +После выполнения строки у вас будет: + +- `Doc.md` — Markdown‑представление вашего содержимого Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … — каждое изображение, извлечённое из оригинального DOCX. + +## Полный, готовый к запуску пример + +Собрав всё вместе, представляем автономное консольное приложение, которое вы можете скопировать и вставить в новый проект C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Ожидаемый результат + +После запуска программы: + +- Откройте `C:\Docs\Doc.md` в любом текстовом редакторе. Вы увидите ссылки на изображения Markdown вида `![](Images/img_0.png)`. +- Папка `Images` будет содержать каждое извлечённое изображение, названное последовательно. +- Файл Markdown будет корректно отображаться в любом просмотрщике, поддерживающем локальные изображения (предпросмотр VS Code, GitHub и т.д.). + +## Часто задаваемые вопросы (FAQ) + +### Работает ли это с другими форматами изображений (SVG, TIFF)? + +Да. `Path.GetExtension(args.FileName)` сохраняет оригинальное расширение, поэтому SVG, TIFF, BMP и даже EMF сохраняются без изменений. Единственное ограничение — некоторые рендереры Markdown могут не отображать SVG inline; в этом случае можно предварительно конвертировать SVG в PNG. + +### Что если мне нужно внедрять изображения как Base64 вместо отдельных файлов? + +Внутри `ResourceSaving` вы можете заменить запись в физический файл на поток памяти, а затем вручную изменить ссылку в Markdown. Aspose не предоставляет прямой переключатель «embed as Base64», но колбэк даёт полный контроль над `args.Stream`. + +### Чем это отличается от встроенного метода `ExportImages`? + +`ExportImages` извлекает все изображения в папку **без** генерации Markdown. Наш колбэк связывает оба действия, гарантируя, что имена файлов изображений совпадают со ссылками внутри `.md`. Такое согласование — ключ к правильному **how to save images** при конвертации. + +### Можно ли конвертировать несколько DOCX файлов пакетно? + +Конечно. Оберните основную логику в цикл `foreach (var file in Directory.GetFiles(..., "*.docx"))`, настройте пути вывода и переиспользуйте тот же `ImageSavingCallback`. Только не забудьте создавать новый `MarkdownSaveOptions` для каждого документа, так как `args.DestinationFileName` меняется на каждой итерации. + +## Пограничные случаи и лучшие практики + +| Situation | What to Watch Out For | Recommended Fix | +|-----------|----------------------|-----------------| +| **Большой DOCX (сотни МБ)** | Нагрузка на память при загрузке | Использовать `LoadOptions` с `LoadFormat.Docx` и установить `LoadOptions.LoadFormat = LoadFormat.Docx` для потоковой загрузки частей | +| **Конфликт имён изображений** | Если в целевой папке уже есть `img_0.png` из источника, может произойти перезапись | Добавить GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Только для чтения папка вывода** | Сохранение бросает `UnauthorizedAccessException` | Убедитесь, что процесс имеет необходимые права, или выберите путь с правом записи | +| **Неизображения ресурсы (CSS, шрифты)** | Колбэк тоже получает их | Защитить условием `if (args.ResourceType != ResourceType.Image) return;` (уже показано) | +| **Unicode имена файлов** | Некоторые файловые системы некорректно обрабатывают символы | Использовать `Path.GetInvalidFileNameChars()` для очистки `args.FileName` перед назначением | + +## Связанные темы, которые вы можете изучить дальше + +- **convert docx to markdown** с пользовательскими стилями заголовков (используйте `MarkdownSaveOptions.ExportImagesAsBase64` для встроенных изображений) +- **extract images from word** с помощью `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/russian/net/working-with-fonts/_index.md b/words/russian/net/working-with-fonts/_index.md index 750dc9d124..0d36becb57 100644 --- a/words/russian/net/working-with-fonts/_index.md +++ b/words/russian/net/working-with-fonts/_index.md @@ -52,7 +52,7 @@ | [Как обнаружить шрифты в Aspose.Words – Обрабатывать предупреждения и настройки](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Узнайте, как обнаруживать шрифты, управлять предупреждениями и настраивать параметры шрифтов в Aspose.Words для .NET. | | [Как захватить шрифты в Aspose.Words – Полное руководство](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Узнайте, как захватывать шрифты в Aspose.Words с помощью полного пошагового руководства. | | [Как загрузить DOCX и обнаружить отсутствующие шрифты – Полное руководство C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Узнайте, как загрузить документ DOCX и определить недостающие шрифты с помощью Aspose.Words для .NET в полном руководстве на C#. | - +| [Aspose Замена шрифтов: Обнаружение отсутствующих шрифтов в документах Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Узнайте, как обнаружить недостающие шрифты в документах Word с помощью Aspose.Words для .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/russian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..aaee161bdc --- /dev/null +++ b/words/russian/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Узнайте, как использовать замену шрифтов Aspose для обнаружения отсутствующих + шрифтов при загрузке документа Word и получения сведений об отсутствующих шрифтах + — пошаговое руководство. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: ru +og_description: Освойте замену шрифтов Aspose для обнаружения отсутствующих шрифтов + при загрузке документа Word и получения информации об отсутствующих шрифтах с полным + кодом C#. +og_title: Подстановка шрифтов Aspose – обнаружение отсутствующих шрифтов в документах + Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Подстановка шрифтов Aspose: обнаружение отсутствующих шрифтов в документах + Word' +url: /ru/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Обнаружение отсутствующих шрифтов в документах Word + +Вы когда‑нибудь задавались вопросом, почему документ Word выглядит неправильно на другом компьютере? Часто виновником является отсутствующий шрифт, а **Aspose font substitution** — это инструмент, позволяющий обнаружить такие пробелы до того, как они превратятся в визуальную катастрофу. В этом руководстве мы пройдемся по тому, как **обнаружить отсутствующие шрифты** сразу после **загрузки документа Word**, а затем **получить сведения об отсутствующих шрифтах**, чтобы вы могли исправить или заменить их. + +Мы рассмотрим всё: от настройки обратного вызова предупреждений до получения чистого списка отсутствующих шрифтов. К концу вы получите готовый к запуску фрагмент C#, который точно укажет, какие шрифты не были найдены, и поймёте, почему это важно для точности документа. + +--- + +## Prerequisites – Что вам нужно перед началом + +- **Aspose.Words for .NET** (рекомендована версия v23.12 или новее). +- Среда разработки .NET (Visual Studio, Rider или `dotnet` CLI). +- Пример DOCX, который намеренно использует шрифт, не установленный у вас — назовите его `DocumentWithMissingFont.docx`. +- Базовые знания C# — ничего сложного, только возможность запустить консольное приложение. + +Если что‑то из перечисленного вам незнакомо, сделайте паузу и установите пакет NuGet: + +```bash +dotnet add package Aspose.Words +``` + +Вот и всё. Никаких дополнительных шрифтов, никаких внешних сервисов. + +## Шаг 1: Загрузка документа Word (и запуск проверки шрифтов) + +Первое, что вы делаете, — **загружаете документ Word**. Aspose.Words разбирает файл и, если не может найти указанный шрифт, ставит в очередь предупреждение *FontSubstitution*. Вот код, который выполняет загрузку: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Почему это важно:** Ранняя загрузка документа даёт Aspose возможность просканировать каждый фрагмент текста, стиль и встроенный объект. Если шрифт не найден в системе или в пользовательской папке шрифтов, позже вы получите предупреждение. + +## Шаг 2: Присоединить обратный вызов предупреждений для захвата событий подстановки + +Aspose.Words использует механизм обратного вызова, чтобы информировать вас о проблемах, таких как отсутствующие шрифты. Присвоив реализацию `IWarningCallback` свойству `doc.WarningCallback`, вы можете перехватывать каждое предупреждение в момент его возникновения. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Полезный совет:** Вы можете присоединить несколько обратных вызовов (например, логирование, обновление UI), обернув их в составной шаблон, но для этого руководства один обратный вызов делает всё понятнее. + +## Шаг 3: Реализовать обратный вызов предупреждения о подстановке шрифтов + +Теперь мы определяем класс, который действительно выполняет работу. Обратный вызов получает объект `WarningInfo`; мы фильтруем его по `WarningType.FontSubstitution` и сохраняем описание для последующего использования. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Что происходит:** Когда Aspose сталкивается с отсутствующим шрифтом, он создаёт предупреждение вроде “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Наш обратный вызов выводит эту строку и сохраняет её. + +## Шаг 4: Обработать документ (по желанию) и собрать отсутствующие шрифты + +Если вам нужно только **обнаружить отсутствующие шрифты**, достаточно шага загрузки — предупреждения генерируются автоматически. Однако многим разработчикам также необходимо **получить сведения об отсутствующих шрифтах** после выполнения некоторых операций (например, сохранения, конвертации). Ниже мы принудительно выполняем небольшую операцию — сохранение в PDF — чтобы гарантировать выдачу всех предупреждений, затем извлекаем собранные сообщения. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Ожидаемый вывод в консоль** (пример): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Обратите внимание, что каждая строка чётко указывает исходный шрифт и замену, выбранную Aspose. Это суть отчётов **aspose font substitution**. + +## Шаг 5: Продвинутое — Использование пользовательских источников шрифтов для снижения подстановок + +Иногда у вас *есть* недостающие шрифты, просто они находятся не в стандартной системной папке. Aspose.Words позволяет указать пользовательскую директорию через `FontSettings`. Добавление этого шага может значительно уменьшить количество предупреждений о подстановке. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Зачем это добавлять?** Если вы распространяете документы между машинами, упаковка необходимых шрифтов в известную папку гарантирует одинаковый визуальный вид везде. Это также делает вашу процедуру **detect missing fonts** более точной, поскольку Aspose проверяет эту папку перед тем, как использовать замену. + +## Полный рабочий пример + +Собрав всё вместе, представляем готовую к копированию консольную программу. Сохраните её как `Program.cs` и запустите с помощью `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Что вы должны увидеть:** Если исходный DOCX ссылается на шрифты, которых у вас нет, консоль выведет каждую строку подстановки, а затем краткое резюме. Если все шрифты присутствуют, вы получите сообщение «No missing fonts were detected.» + +## Распространённые подводные камни и как их избежать + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **No warnings appear** | Документ использует только системные шрифты, или вы уже добавили пользовательскую папку, содержащую недостающие шрифты. | Проверьте, действительно ли DOCX ссылается на недоступный шрифт. Вы можете открыть его в Word и изменить абзац на редкий шрифт (например, “Papyrus”). | +| **Duplicate messages** | Тот же шрифт используется в нескольких фрагментах, вызывая множественные предупреждения. | Уберите дубликаты из списка с помощью `Distinct()`, если вам нужен только уникальный набор. | +| **Performance hit on large docs** | Каждое предупреждение обрабатывается в UI‑потоке. | Запускайте загрузку в фоновом задании или используйте `Parallel.ForEach` для пост‑обработки. | +| **Wrong fallback font** | Стандартный шрифт‑замена Aspose может не соответствовать вашему бренду. | Установите `FontSettings.SubstitutionSettings.DefaultFontName` на предпочтительный шрифт‑замену (например, “Calibri”). | + +## Расширение решения — Экспорт отсутствующих шрифтов в JSON + +Если вы создаёте веб‑службу, которой необходимо сообщать о недостающих шрифтах клиенту, сериализация списка тривиальна: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Теперь ваш API может возвращать чистый JSON‑payload, который может использовать другая система. + +## Заключение + +В этом руководстве мы продемонстрировали **Aspose font substitution** от начала до конца: загрузку документа Word, присоединение обратного вызова предупреждений, захват каждого события *detect missing fonts* и, наконец, **retrieve missing font** для отчётов или исправления. Добавив необязательные пользовательские папки шрифтов, вы можете сократить список подстановок, а с несколькими дополнительными строками можно даже экспортировать результаты в JSON. + +Помните, визуальная целостность ваших документов зависит от используемых шрифтов. С помощью показанной здесь техники вы больше не будете удивлены неожиданной заменой. + +Готовы к следующему шагу? Попробуйте интегрировать эту логику в более крупный конвейер обработки документов или изучите другие возможности Aspose.Words, такие как встраивание шрифтов (`doc.FontSettings.EmbeddedFonts`). Возможностей бесконечно много, и ваши пользователи оценят безупречный результат. + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/spanish/net/ai-powered-document-processing/_index.md b/words/spanish/net/ai-powered-document-processing/_index.md index b59872e04f..3d454a50fd 100644 --- a/words/spanish/net/ai-powered-document-processing/_index.md +++ b/words/spanish/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ Por último, no olvides visitar nuestra [Trabajar con opciones de resumen](./wor | [Trabajar con el modelo de inteligencia artificial de Google](./working-with-google-ai-model/) Mejore su procesamiento de documentos con Aspose.Words para .NET y Google AI para crear resúmenes concisos sin esfuerzo. | | [Trabajar con el modelo de IA abierta](./working-with-open-ai-model/) | Desbloquee la eficiencia de los resúmenes de documentos con Aspose.Words para .NET y los potentes modelos de OpenAI. Explore esta guía completa ahora. | | [Trabajar con opciones de resumen](./working-with-summarize-options/) | Aprenda a resumir eficazmente documentos de Word usando Aspose.Words para .NET con nuestra guía paso a paso sobre la integración de modelos de IA para obtener información rápida. | +| [Cómo usar LLM con Aspose.Words – Reescribir párrafos en C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Aprenda a integrar un modelo LLM con Aspose.Words para .NET y reescribir automáticamente párrafos en C# de forma sencilla. | +| [Cómo comprobar la gramática en C# – Guía completa para documentos Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Aprenda a usar Aspose.Words para .NET y verificar la gramática en documentos Word con C# de forma sencilla. | +| [Cómo resumir documentos Word en C# – Guía completa usando Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Aprenda a resumir documentos Word con Aspose.Words para .NET usando el modelo Claude de Anthropic. Guía paso a paso. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/spanish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..47f339bf82 --- /dev/null +++ b/words/spanish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Aprende cómo verificar la gramática en un documento de Word usando C#. + Este tutorial también cubre cómo cargar un archivo DOCX en C# y usar Aspose.Words + AI para obtener resultados precisos. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: es +og_description: ¿Cómo comprobar la gramática en un documento de Word usando C#? Sigue + este tutorial para cargar un archivo DOCX con C# y ejecutar comprobaciones gramaticales + impulsadas por IA con Aspose.Words. +og_title: Cómo comprobar la gramática en C# – Guía completa paso a paso +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Cómo verificar la gramática en C# – Guía completa para documentos de Word +url: /es/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo verificar la gramática en C# – Guía completa para documentos Word + +¿Alguna vez te has preguntado **cómo verificar la gramática** en un documento Word sin salir de tu IDE? No eres el único. Muchos desarrolladores necesitan validar informes generados por usuarios, correos electrónicos automáticos o incluso documentación antes de su publicación. ¿La buena noticia? Con Aspose.Words AI puedes hacerlo programáticamente, y todo el proceso encaja perfectamente en un flujo de trabajo típico de C#. + +En esta guía repasaremos todo lo que necesitas saber: desde cargar un archivo DOCX C# hasta invocar el verificador de gramática AI e interpretar los resultados. Al final tendrás un fragmento listo para ejecutar que imprime la gravedad, el mensaje y la sustitución sugerida de cada problema, sin necesidad de copiar‑pegar manualmente. + +## Lo que aprenderás + +- **Cómo verificar la gramática** en un documento Word usando Aspose.Words AI. +- Los pasos exactos para **cargar un archivo DOCX C#** con la clase `Document`. +- Cómo manejar el objeto `GrammarCheckResult`, iterar sobre los problemas y generar diagnósticos útiles. +- Trampas comunes (como licencias faltantes) y consejos para que la solución esté lista para producción. + +> **Requisitos previos:** .NET 6.0+ (o .NET Framework 4.6+), Visual Studio 2022 (o cualquier IDE que prefieras) y una licencia de Aspose.Words for .NET (la prueba gratuita funciona para pruebas). Si aún no has instalado los paquetes NuGet, ejecuta: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Ahora, vamos al grano. + +## Paso 1: Cargar un archivo DOCX en C# + +Antes de que pueda ocurrir cualquier verificación de gramática, el documento debe cargarse en memoria. Aspose.Words lo convierte en una sola línea, pero hay algunos matices que vale la pena señalar. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Por qué es importante:** +- Usar `Path.Combine` garantiza compatibilidad multiplataforma. +- La verificación de existencia evita un bloqueo en tiempo de ejecución que de otro modo ocultaría la lógica real de verificación de gramática. +- Cuando **cargas un archivo DOCX C#**, Aspose analiza todos los estilos, encabezados, pies de página e incluso texto oculto, proporcionando a la IA una visión completa del documento. + +> **Consejo profesional:** Si necesitas trabajar con streams (p. ej., archivos provenientes de una carga web), puedes reemplazar la llamada `new Document(docPath)` por `new Document(stream)`. + +## Paso 2: Elegir el modelo AI para la verificación de gramática + +Aspose.Words AI admite varios modelos, desde versiones ligeras locales hasta variantes GPT basadas en la nube. Para la mayoría de los escenarios, **GPT‑3.5 Turbo** ofrece un equilibrio ideal entre velocidad y precisión. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**¿Por qué elegir GPT‑3.5 Turbo?** +- Es lo suficientemente rápido para procesar lotes de docenas de archivos por minuto. +- El costo (si estás en un plan de pago) es menor que el de GPT‑4 y sigue detectando la mayoría de los errores comunes. +- La API maneja automáticamente los límites de tokens, por lo que no necesitas dividir documentos enormes manualmente. + +Si prefieres un enfoque offline, reemplaza `AiModelType.Gpt35Turbo` por `AiModelType.Local` (requiere el paquete opcional del modelo offline). + +## Paso 3: Iterar sobre los problemas y mostrar retroalimentación útil + +El `GrammarCheckResult` contiene una colección de objetos `GrammarIssue`. Cada problema proporciona gravedad, un mensaje legible y una sustitución sugerida. Imprimámoslos de forma clara. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Qué significan los campos:** +- `Severity` – típicamente `Info`, `Warning` o `Error`. Trata `Error` como algo que debe corregirse antes de publicar. +- `Message` – una descripción concisa del problema (p. ej., “Acuerdo sujeto‑verbo”). +- `SuggestedReplacement` – la corrección recomendada por la IA; puedes aplicarla automáticamente si confías en el modelo, o presentarla a un revisor humano. + +> **Caso límite:** Algunos problemas pueden tener un `SuggestedReplacement` vacío (p. ej., sugerencias de estilo). En esos casos, simplemente marca la ubicación para revisión manual. + +## Ejemplo completo funcional + +Juntando todo, aquí tienes una aplicación de consola autónoma que puedes copiar‑pegar en un nuevo proyecto .NET. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Salida esperada (ejemplo):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Si ejecutas el programa contra un documento limpio, verás la línea “✅ No se detectaron problemas de gramática.” en su lugar. + +## Manejo de trampas comunes + +| Problema | Por qué ocurre | Solución rápida | +|----------|----------------|-----------------| +| **LicenseException** | Las bibliotecas Aspose requieren una licencia válida para uso en producción. | Inserta `License license = new License(); license.SetLicense("Aspose.Words.lic");` al inicio de `Main`. | +| **Network timeout** | La llamada al modelo AI llega a la nube y supera el tiempo de espera predeterminado de 100 s. | Aumenta el tiempo de espera con `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` antes de llamar a `CheckGrammar`. | +| **Documentos grandes (> 10 MB)** | Algunos modelos en la nube truncan la entrada. | Divide el documento en secciones usando `document.Sections` y ejecuta verificaciones por sección, luego agrega los resultados. | +| **Sugerencias faltantes** | El modelo no pudo generar una sustitución (p. ej., frase ambigua). | Registra el problema para revisión manual; no apliques sustituciones vacías automáticamente. | + +## Extender la solución + +- **Corrección automática:** Recorre `grammarResult.Issues` y reemplaza texto con `document.Range.Replace`. Asegúrate de hacer una copia de seguridad del archivo original primero. +- **Procesamiento por lotes:** Envuelve todo el flujo en un `foreach` sobre un directorio de archivos DOCX. Guarda cada informe como archivo JSON para análisis posterior. +- **Integrar con ASP.NET:** Expón un endpoint que acepte un DOCX cargado, ejecute la verificación y devuelva una carga JSON con los problemas. + +## Ilustración + +how to check grammar flow diagram + +*El diagrama anterior visualiza el proceso de tres pasos: cargar DOCX → ejecutar verificación de gramática AI → mostrar problemas.* + +## Conclusión + +Hemos cubierto **cómo verificar la gramática** en un documento Word usando C#, demostrado el código exacto para **cargar un archivo DOCX C#** y mostrado cómo interpretar la retroalimentación generada por la IA. Con Aspose.Words AI obtienes un motor de gramática potente, respaldado por la nube, que se integra sin problemas en cualquier aplicación .NET. + +¿Próximos pasos? Prueba automatizar el bucle de corrección‑aplicación, experimenta con el nuevo `AiModelType.Gpt4` para obtener sugerencias aún más precisas, o combina esto con una biblioteca de corrección ortográfica para crear una cadena completa de revisión. Las posibilidades son prácticamente infinitas, y ahora tienes una base sólida sobre la que construir. + +¿Tienes preguntas o te encuentras con un caso límite complicado? ¡Deja un comentario abajo y feliz codificación! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/spanish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/spanish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..8ca2cf79e1 --- /dev/null +++ b/words/spanish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-05-04 +description: 'Cómo usar LLM para editar documentos con Aspose: aprende a reemplazar + el texto de los párrafos, conectar con un LLM local y reescribir texto usando IA.' +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: es +og_description: Cómo usar LLM para editar documentos con Aspose. Esta guía muestra + cómo conectar a un LLM local, reemplazar el texto de los párrafos y reescribir texto + usando IA. +og_title: Cómo usar LLM con Aspose.Words – Reescribir párrafos en C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Cómo usar LLM con Aspose.Words – Reescribir párrafos en C# +url: /es/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo usar LLM con Aspose.Words – Reescribir párrafos en C# + +¿Alguna vez te has preguntado **cómo usar LLM** para pulir un documento Word sin abrirlo manualmente? No eres el único. Muchos desarrolladores se quedan atascados cuando necesitan *reemplazar el texto de un párrafo* de forma programática pero no disponen de un flujo de trabajo limpio impulsado por IA. + +En este tutorial conectaremos un modelo de lenguaje grande local, le alimentaremos con un fragmento de un archivo `.docx`, le pediremos que **reescriba el texto usando IA**, y finalmente guardaremos el documento actualizado, todo con Aspose.Words. Al final tendrás una aplicación de consola en C# lista para ejecutar que demuestra todo el pipeline. + +> **Lo que obtendrás:** un ejemplo completo y ejecutable, explicaciones de cada paso, consejos para casos límite y ideas para ampliar la solución. + +## Lo que necesitarás + +- **.NET 6+** (o .NET Framework 4.7.2 – el código funciona en ambos) +- **Aspose.Words for .NET** (paquete NuGet `Aspose.Words`) +- Un **servidor LLM local** que exponga un sencillo endpoint HTTP `/generate` (p. ej., Ollama, LMStudio o un servicio Flask personalizado) +- Familiaridad básica con C# y código cliente HTTP + +No se requieren SDK adicionales; todo lo demás vive en el código que escribiremos juntos. + +## Paso 1: Cómo usar LLM para reemplazar texto de párrafo + +Lo primero que debemos hacer es identificar el párrafo que queremos modificar. Aspose.Words lo hace muy fácil al exponer un modelo de objetos rico. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Por qué es importante:** +Seleccionar el nodo correcto evita sobrescribir accidentalmente encabezados o tablas. Al usar el enfoque de **reemplazar texto de párrafo** mantenemos la estructura del documento intacta mientras solo tocamos el contenido que nos interesa. + +> **Consejo profesional:** Si tu documento tiene secciones de longitud variable, usa `document.GetChildNodes(NodeType.Paragraph, true)` y LINQ para localizar un párrafo por su texto o estilo. + +## Paso 2: Conectar a un endpoint LLM local + +Ahora que tenemos el texto, necesitamos enviarlo al LLM. El ejemplo usa una clase contenedora sencilla `LocalLargeLanguageModel` que oculta la lógica HTTP. Si lo prefieres, puedes reemplazarla con llamadas directas a `HttpClient`. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Por qué nos conectamos de esta manera:** +Una configuración de **conectar a LLM local** elimina la latencia, mantiene los datos en las instalaciones y evita costos de API. El contenedor también hace que el código posterior sea más limpio, permitiéndonos centrarnos en la lógica de **reescribir texto usando IA**. + +## Paso 3: Reescribir texto usando IA con Aspose.Words + +Con el texto del párrafo en mano y el LLM listo, creamos un *prompt* que le dice al modelo exactamente lo que queremos: reescribir en un tono formal. Puedes ajustar el *prompt* para otros estilos (amigable, técnico, etc.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Por qué funciona:** +Los LLM funcionan mediante *prompts*; dar instrucciones explícitas (“Rewrite … in a formal tone”) produce resultados consistentes. El paso de **reescribir texto usando IA** es el corazón del tutorial: muestra cómo la IA puede integrarse directamente en flujos de trabajo de documentos. + +## Paso 4: Editar el documento y guardar los cambios + +Ahora reemplazamos los *runs* originales con el nuevo contenido. Aspose.Words almacena el texto en objetos `Run`, por lo que vaciarlos primero evita artefactos de formato sobrantes. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Nota sobre casos límite:** +Si el párrafo original contenía formato mixto (negrita, cursiva) quizá quieras preservar los estilos. En ese caso, crea un nuevo `Run`, copia la configuración original de `Font` y luego asigna su `Text` a `revisedText`. + +## Ejemplo completo funcionando + +A continuación tienes el programa completo que puedes copiar y pegar en un proyecto de consola. Recuerda instalar primero el paquete NuGet Aspose.Words (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Salida esperada + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Abre `output.docx` – verás que el tercer párrafo ahora muestra la versión pulida. + +## Preguntas frecuentes y trampas comunes + +| Pregunta | Respuesta | +|----------|-----------| +| **¿Qué pasa si mi LLM devuelve JSON con campos extra?** | Ajusta `GenerateText` para deserializar la propiedad correcta o analiza la respuesta manualmente. | +| **¿Puedo procesar varios párrafos a la vez?** | Sí – itera sobre `document.FirstSection.Body.Paragraphs` y aplica la misma lógica de *prompt*, quizá añadiendo un índice de párrafo al *prompt* para contexto. | +| **Mi servidor LLM usa autenticación?** | Añade un encabezado al `HttpClient` antes del POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **El formato se pierde después del reemplazo.** | Conserva la configuración original de `Run.Font`: crea un nuevo `Run`, copia `originalRun.Font.Clone()`, luego asigna su `Text`. | +| **El LLM a veces devuelve cadenas vacías.** | Implementa un fallback – si `revisedText.Trim().Length == 0`, conserva el texto original o vuelve a intentar con un *prompt* más simple. | + +## Ampliando la solución + +Ahora que dominas **cómo usar LLM** para un solo párrafo, considera los siguientes pasos: + +- **Procesamiento por lotes:** Recorre cada párrafo y reescribe en un estilo elegido (p. ej., “hacer todo el texto conciso”). +- **Reescritura consciente del estilo:** Pasa el nombre del estilo del párrafo original en el *prompt* para que el LLM respete encabezados vs texto del cuerpo. +- **Integración con una canalización CI:** Automatiza el pulido de documentos como parte de un proceso de generación de documentación. +- **Prompts alternativos:** Prueba “summarize this paragraph” o “translate this paragraph to Spanish” para explorar todo el potencial de **reescribir texto usando IA**. + +## Conclusión + +Hemos recorrido todo el flujo de **cómo usar LLM** con Aspose.Words: cargar un documento, **conectar a LLM local**, extraer un párrafo, **reescribir texto usando IA**, **reemplazar texto de párrafo** y, finalmente, guardar el resultado. El código es autónomo, funciona de inmediato y muestra una forma práctica de combinar IA con la automatización tradicional de documentos. + +Pruébalo, ajusta los *prompts* y deja que + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/spanish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/spanish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..59a69105c9 --- /dev/null +++ b/words/spanish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Resume rápidamente un documento Word y traduce texto con Google. Aprende + a usar Anthropic Claude, crear un resumen a partir de un informe y traducir texto + con Google en un único tutorial de C#. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: es +og_description: Resume el documento Word al instante y traduce el texto con Google. + Esta guía muestra cómo usar Anthropic Claude y Aspose.Words para crear un resumen + a partir del informe. +og_title: Resumir documento Word en C# – Paso a paso con Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Resumir documento Word en C# – Guía completa usando Anthropic Claude +url: /es/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Resumir documento Word en C# – Guía completa usando Anthropic Claude + +¿Alguna vez necesitaste **resumir un documento Word** pero te sentiste atascado entre APIs y código extenso? No estás solo. En muchos proyectos—informes anuales, escritos legales o artículos de investigación—extraer una visión concisa es un punto de dolor diario. Afortunadamente, la combinación de Aspose.Words y Anthropic Claude lo convierte en pan comido, y hasta puedes añadir una rápida traducción de Google mientras lo haces. + +En este tutorial recorreremos todo lo que necesitas saber: cargar un .docx grande, llamar al modelo Claude V2 para generar un resumen, traducir una frase con Google y manejar los problemas más comunes. Al final podrás **crear un resumen a partir de un informe** con solo unas pocas líneas de C#. + +## Prerrequisitos + +- .NET 6+ (o .NET Core 3.1) instalado +- Una licencia de Aspose.Words para .NET (o una prueba gratuita) +- Acceso a la API Anthropic Claude V2 (necesitarás una clave API) +- Conectividad a Internet para Google Translator +- Visual Studio 2022 o tu IDE favorito de C# + +No se requieren paquetes NuGet adicionales más allá de `Aspose.Words` y `Aspose.Words.AI`; la clase traductor se incluye en la misma biblioteca. + +## Paso 1 – Cargar el documento Word de origen + +Lo primero que debemos hacer es cargar el archivo .docx en memoria. Aspose.Words lo hace trivial y, gracias a su analizador robusto, funciona con diseños complejos, tablas e incluso imágenes incrustadas. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Por qué es importante:** Cargar el documento al inicio te permite inspeccionar propiedades (autor, recuento de palabras) y decidir si realmente es necesario un resumen. Los archivos grandes > 10 MB pueden consumir mucha memoria, así que considera usar `LoadOptions` con `LoadFormat.Docx` si encuentras problemas de rendimiento. + +## Paso 2 – Resumir el documento con Anthropic Claude + +Ahora llega la parte divertida: entregamos el documento a Claude V2. La clase `Summarizer` abstrae la llamada HTTP, el manejo de tokens y los reintentos. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Cómo funciona:** +> 1. **Fragmentación** – Aspose divide automáticamente el documento en piezas manejables (≈ 2 KB cada una) para respetar los límites de tokens de Claude. +> 2. **Ingeniería de prompts** – La biblioteca envía un prompt como “Provide a concise executive summary of the following text:” seguido de cada fragmento. +> 3. **Agregación** – Claude devuelve resúmenes parciales que se ensamblan en el `summaryText` final. + +### Casos límite y consejos + +- **Informes muy extensos** (> 100 páginas) pueden superar la ventana de contexto de Claude. Si ves salida truncada, habilita `SummarizerOptions.MaxChunkSize` a valores menores. +- **Fuente no inglesa** – Claude funciona mejor con inglés; para otros idiomas, traduce primero (ver Paso 4) y luego resume. +- **Límites de velocidad** – Anthropic impone topes por minuto. Envuelve la llamada en un bucle de reintentos con back‑off exponencial si recibes una respuesta `429`. + +## Paso 3 – Verificar la salida del resumen + +Antes de continuar, es una buena práctica validar que el resumen no esté vacío y cumpla con las expectativas de longitud (p. ej., 5‑10 % del recuento de palabras original). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Si la proporción parece demasiado baja (< 2 %), podrías ajustar la propiedad `SummarizerOptions.SummaryLength` para solicitar una salida más larga. + +## Paso 4 – Traducir texto con Google + +Ahora que tenemos un resumen conciso en inglés, añadamos una traducción rápida. La clase `Translator` usa el endpoint público de traducción de Google (no se requiere clave API para frases cortas, pero en producción deberías cambiar a la API de Cloud Translation de pago). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **¿Por qué Google?** Es rápido, ampliamente soportado y el endpoint gratuito maneja cadenas cortas sin autenticación. Para traducciones masivas, agrupa las llamadas y respeta los límites de uso de Google. + +### Traducir todo el resumen (opcional) + +Si necesitas el resumen completo en español (o cualquier otro idioma), simplemente pasa `summaryText` a `Translator.Translate`. Ten en cuenta el límite de 5 KB por solicitud; puede que necesites dividir el resumen en fragmentos más pequeños. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Paso 5 – Guardar el resumen en un archivo Word (extra) + +Con frecuencia el usuario final espera un documento descargable en lugar de una salida en consola. Creemos un nuevo `.docx` que contenga tanto la versión en inglés como la versión en español. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Consejo práctico + +Al incrustar el resumen en un nuevo archivo Word, mantén el formato original mínimo (usa el estilo `Normal`). Los estilos complejos del origen pueden provocar cambios inesperados en el diseño. + +## Ejemplo completo funcional + +A continuación tienes el programa **completo, listo para copiar y pegar** que une todo. Compila con un solo `dotnet run` después de haber añadido los paquetes Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Salida esperada en consola** (truncada por brevedad): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Preguntas frecuentes + +| Pregunta | Respuesta | +|----------|-----------| +| *¿Puedo usar otro modelo de IA?* | Sí. Reemplaza `SummarizerModel.AnthropicClaudeV2` por `SummarizerModel.OpenAIGPT4` (requiere una clave OpenAI) o cualquier proveedor listado en el enum. | +| *¿Qué pasa si el documento contiene secciones protegidas?* | Aspose lanzará `ProtectedDocumentException`. Desprotégelo primero con `LoadOptions.Password` o solicita una copia sin protección. | +| *¿Necesito una licencia paga de Aspose para producción?* | La prueba gratuita funciona hasta 20 páginas. Para informes más extensos, una licencia elimina el límite de páginas y añade optimizaciones de rendimiento. | +| *¿Es fiable el traductor de Google para bloques grandes?* | Para cadenas cortas está bien. Para traducción masiva, cambia a la Cloud Translation API para evitar límites de tamaño de solicitud y obtener mejor detección de idioma. | + +## Conclusión + +Acabamos de **resumir un documento Word** usando Aspose.Words junto con el modelo Anthropic Claude V2, y luego **traducir texto con Google** a + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/spanish/net/basic-conversions/_index.md b/words/spanish/net/basic-conversions/_index.md index 46bb7707c2..10e5a49ec6 100644 --- a/words/spanish/net/basic-conversions/_index.md +++ b/words/spanish/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Conversiones Básicas te guía a través de las conversiones básicas de documen | [Convertir Word a PDF en C# usando Aspose.Words – Guía](./convert-word-to-pdf-in-c-using-aspose-words-guide/) Aprenda a convertir documentos Word a PDF en C# con Aspose.Words. Guía paso a paso con ejemplos de código. | [Guardar Word como PDF con Aspose.Words – Guía completa en C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) Aprenda a guardar documentos Word como PDF usando Aspose.Words en C#. Guía paso a paso con ejemplos de código. | | [Guardar Docx como PDF con Aspose.Words – Guía completa en C#](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) Aprenda a guardar documentos Docx como PDF usando Aspose.Words en C#. Guía paso a paso con ejemplos de código. | +| [Crear PDF accesible desde DOCX en C# – Cómo convertir Word a PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) Aprenda a generar PDFs accesibles desde documentos DOCX usando Aspose.Words para .NET en C#. Guía paso a paso con ejemplos. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/spanish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..388a582d4c --- /dev/null +++ b/words/spanish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: Crear PDF accesible a partir de un archivo DOCX en C#. Aprende cómo convertir + Word a PDF, guardar Word como PDF y exportar DOCX a PDF con cumplimiento de accesibilidad. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: es +og_description: Crea un PDF accesible a partir de un archivo DOCX en C#. Sigue este + tutorial paso a paso para convertir Word a PDF, guardar Word como PDF y exportar + docx a PDF con plena accesibilidad. +og_title: Crear PDF accesible a partir de DOCX en C# – Guía rápida +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Crear PDF accesible a partir de DOCX en C# – Cómo convertir Word a PDF +url: /es/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crear PDF accesible desde DOCX en C# – Cómo convertir Word a PDF + +¿Alguna vez necesitaste **crear PDF accesible** a partir de un documento Word pero no sabías qué biblioteca confiar? No estás solo—muchos desarrolladores se topan con el mismo obstáculo cuando deben cumplir con los estándares PDF/UA de accesibilidad. La buena noticia es que con Aspose.Words puedes convertir un `.docx` en un PDF conforme en solo unas pocas líneas de código, y obtendrás un archivo que los lectores de pantalla pueden leer realmente. + +En este tutorial repasaremos todo lo que necesitas saber para **convertir Word a PDF**, **guardar Word como PDF**, e incluso **exportar docx a PDF** con cumplimiento PDF/UA‑1 (o PDF/UA‑2). Al final tendrás un fragmento de C# listo para usar, comprenderás por qué cada configuración es importante y estarás preparado para manejar casos comunes como fuentes faltantes o configuraciones de página personalizadas. + +## Requisitos previos + +- .NET 6.0 o posterior (el código también funciona con .NET Framework 4.6+) +- Una licencia de Aspose.Words for .NET (o una clave de evaluación gratuita) +- Conocimientos básicos de C# y Visual Studio (o cualquier IDE que prefieras) +- Un archivo DOCX que quieras hacer accesible (lo llamaremos `input.docx`) + +> **Consejo profesional:** Si utilizas la versión de prueba gratuita, recuerda que el PDF generado contendrá una pequeña marca de agua “Evaluation”. + +## Paso 1: Instalar el paquete NuGet Aspose.Words + +Antes de escribir cualquier código C#, la biblioteca Aspose.Words debe añadirse al proyecto. + +```bash +dotnet add package Aspose.Words +``` + +Ejecutar el comando restaura el `Aspose.Words.dll` y hace que los espacios de nombres estén disponibles. Este paso es esencial porque la clase `PdfSaveOptions` vive dentro de ese paquete. + +## Paso 2: Cargar el archivo DOCX de origen + +El primer paso lógico es cargar el documento Word que deseas transformar. Piensa en esto como abrir un libro antes de comenzar a editar sus páginas. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Por qué es importante:** Cargar el documento crea una representación en memoria que incluye todos los estilos, imágenes y metadatos. Si el archivo está corrupto, `Document` lanzará una excepción—por lo que podrías envolver esto en un bloque try/catch para código de producción. + +## Paso 3: Configurar las opciones de guardado PDF para accesibilidad + +Aspose.Words te permite especificar el nivel de cumplimiento PDF. PDF/UA‑1 es el estándar de accesibilidad original, mientras que PDF/UA‑2 añade algunas etiquetas más recientes. Elige el que coincida con los requisitos de tu cliente. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Qué hace “Compliance”:** Establecer `PdfCompliance.PdfUax1` indica a Aspose.Words que inserte etiquetas correctas, orden lógico de lectura y texto alternativo para imágenes—exactamente lo que busca el software de lectores de pantalla. + +## Paso 4: Guardar el documento como PDF accesible + +Ahora el trabajo pesado ha terminado; simplemente instruimos a Aspose.Words a escribir el archivo PDF usando las opciones que acabamos de definir. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Después de ejecutar esta línea, encontrarás `output.pdf` en la carpeta especificada. Ábrelo en Adobe Acrobat Reader y verifica **File → Properties → Description → PDF/A and PDF/UA** para confirmar el cumplimiento. + +## Paso 5: Verificar la accesibilidad (Opcional pero recomendado) + +Aunque el código garantiza una salida PDF etiquetada, una revisión manual rápida ayuda a detectar cualquier contenido personalizado que pueda necesitar atención adicional. + +1. Abre `output.pdf` en Adobe Acrobat Pro. +2. Ve a **Tools → Accessibility → Full Check**. +3. Ejecuta la comprobación y revisa cualquier advertencia (p. ej., texto alternativo faltante para imágenes personalizadas). + +Si el informe no muestra errores, has creado con éxito **PDF accesible** que cumple con los estándares PDF/UA‑1. + +## Variaciones comunes y casos límite + +### Convertir varios archivos DOCX en un bucle + +Si tienes un lote de documentos, envuelve la lógica de carga‑guardado dentro de un bucle `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Cambiar a PDF/UA‑2 + +Simplemente cambia el enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Manejo de fuentes personalizadas + +Si tu DOCX usa fuentes que no están instaladas en el servidor, incrústalas: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Incrustar garantiza que el PDF se vea igual en cualquier máquina—un detalle crucial cuando **exportas docx a pdf** para partes externas. + +## Ejemplo completo funcional + +A continuación tienes el programa completo, listo para ejecutar. Copia‑pega en una aplicación de consola, ajusta las rutas y pulsa **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Resultado esperado:** Un archivo llamado `output.pdf` que se abre en cualquier visor PDF, lleva las etiquetas de accesibilidad correctas y puede compartirse con usuarios que dependen de tecnología asistiva. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Texto alternativo de la imagen:* *ejemplo de creación de PDF accesible – captura de pantalla de un documento PDF/UA‑1 compatible abierto en Adobe Acrobat.* + +## Preguntas frecuentes + +- **¿Esto funciona con .NET Core?** + Absolutamente. Aspose.Words es multiplataforma, por lo que el mismo código se ejecuta en Windows, Linux y macOS. + +- **¿Qué pasa si mi DOCX contiene macros?** + Las macros se ignoran durante la conversión; solo el contenido visible se renderiza en el PDF. + +- **¿Puedo añadir un título de metadatos PDF personalizado?** + Sí—establece `pdfSaveOptions.Metadata.Title = "Your Custom Title";` antes de guardar. + +- **¿PDF/UA‑2 está ampliamente soportado?** + La mayoría de los lectores PDF modernos entienden PDF/UA‑2, pero si apuntas a herramientas más antiguas, quédate con PDF/UA‑1. + +## Conclusión + +Acabamos de mostrarte cómo **crear PDF accesible** a partir de un archivo DOCX usando Aspose.Words, cubriendo todo desde la instalación del paquete NuGet hasta la verificación del cumplimiento PDF/UA. Siguiendo estos pasos puedes convertir de forma fiable **Word a PDF**, **guardar Word como PDF**, y **exportar docx a PDF** mientras cumples con los estándares de accesibilidad—una habilidad indispensable para cualquier desarrollador que trabaje en pipelines de documentos empresariales. + +¿Listo para el siguiente desafío? Prueba añadir un encabezado/pie de página personalizado, incrustar una etiqueta PDF/A‑2b, o automatizar el proceso en una API web ASP.NET Core. Las posibilidades son infinitas, y la base que has construido aquí te permitirá abordarlas con confianza. + +¡Feliz codificación, y que tus PDFs siempre sean legibles! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/spanish/net/programming-with-markdownsaveoptions/_index.md b/words/spanish/net/programming-with-markdownsaveoptions/_index.md index 22923377ed..63f1826b5e 100644 --- a/words/spanish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/spanish/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ Procesamiento de textos con MarkdownSaveOptions es un recurso detallado que te g ### [Cómo renombrar imágenes al convertir DOCX a Markdown](./how-to-rename-images-when-converting-docx-to-markdown/) Aprenda a cambiar los nombres de las imágenes durante la conversión de documentos DOCX a Markdown usando Aspose.Words para .NET. ### [Guardar docx como markdown con Aspose.Words – Guía completa en C#](./save-docx-as-markdown-with-aspose-words-full-c-guide/) Aprenda a guardar archivos DOCX como Markdown usando Aspose.Words con una guía completa en C#. ### [Guardar imágenes de Word – Convertir Word a Markdown con Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) Aprenda a extraer y guardar imágenes de documentos Word al convertirlos a Markdown usando Aspose.Words. +### [Cómo guardar imágenes – Convertir DOCX a Markdown con Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) Aprenda a extraer y guardar imágenes al convertir DOCX a Markdown con Aspose.Words. ### [Convertir Word a Markdown en C# – Guía completa con extracción de imágenes](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) Aprenda a convertir documentos Word a Markdown y extraer imágenes usando Aspose.Words para .NET. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/spanish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..6c3e9a11ec --- /dev/null +++ b/words/spanish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Aprende cómo guardar imágenes al convertir un DOCX a Markdown usando + Aspose.Words. Esta guía también muestra cómo extraer imágenes de Word y guardar + Word como Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: es +og_description: Cómo guardar imágenes al convertir un DOCX a Markdown usando Aspose.Words. + Guía paso a paso con código C# completo. +og_title: Cómo guardar imágenes – Convertir DOCX a Markdown con Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Cómo guardar imágenes – Convertir DOCX a Markdown con Aspose.Words +url: /es/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo guardar imágenes – Convertir DOCX a Markdown con Aspose.Words + +¿Alguna vez te has preguntado **cómo guardar imágenes** cuando necesitas convertir un archivo Word a Markdown? No eres el único. Muchos desarrolladores se topan con un problema cuando la conversión deja las imágenes en un caos de enlaces rotos, o peor, las pierde por completo. La buena noticia es que Aspose.Words te brinda un control granular, de modo que puedes extraer imágenes de Word, decidir dónde van y obtener una salida Markdown limpia. + +En este tutorial recorreremos un ejemplo completo y listo‑para‑ejecutar en C# que muestra **cómo guardar imágenes** en una carpeta dedicada mientras se convierte un `.docx` a `.md`. En el camino también abordaremos **convert docx to markdown**, **extract images from word**, y la cuestión más amplia de **how to convert docx** de una manera que te permita **save word as markdown** sin perder ningún recurso. + +## Requisitos previos + +- .NET 6.0 o posterior (la API funciona igual en .NET Framework 4.7+) +- Una licencia activa de Aspose.Words o una prueba gratuita (la versión gratuita agrega una marca de agua a la salida, pero el código funciona igual) +- Un documento Word que ya contiene imágenes (p. ej., `DocWithImages.docx`) +- Visual Studio 2022 o cualquier editor que pueda compilar proyectos C# + +> **Consejo profesional:** Si estás usando una versión de prueba, aún puedes probar la lógica de guardado de imágenes; solo recuerda que el PDF/MD final contendrá la marca de agua de la prueba. + +## Visión general de la solución + +A grandes rasgos, el proceso se ve así: + +1. Cargar el `.docx` de origen con `Document`. +2. Crear un objeto `MarkdownSaveOptions` e insertar un `IResourceSavingCallback`. +3. En el callback, decidir la carpeta y el nombre de archivo para cada imagen. +4. Guardar el documento como Markdown; el callback escribe cada imagen en disco. + +Ese es el núcleo de **cómo guardar imágenes** durante una conversión. El mismo patrón funciona para otros tipos de recursos (fuentes, CSS, etc.) si alguna vez los necesitas. + +## Paso 1 – Cargar el DOCX que contiene imágenes + +Primero necesitamos una instancia de `Document` que apunte al archivo Word que deseas convertir. No hay nada complicado aquí; solo una llamada directa al constructor. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Por qué es importante:** Cargar el documento es el único momento en que Aspose analiza el XML de Word, por lo que cualquier fuente faltante o parte corrupta lanzará una excepción ahora mismo—antes de que siquiera comencemos a guardar imágenes. + +## Paso 2 – Configurar MarkdownSaveOptions con un callback de guardado de imágenes + +La clase `MarkdownSaveOptions` te permite engancharte al proceso de guardado a través de `ResourceSavingCallback`. Ese callback recibe un objeto `ResourceSavingArgs` para cada recurso externo (imágenes, CSS, etc.) que Aspose necesita escribir. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementación del callback + +A continuación se muestra la implementación completa de `ImageSavingCallback`. Crea una subcarpeta `Images` junto al archivo Markdown, asigna a cada imagen un nombre secuencial (`img_0.png`, `img_1.jpg`, …), y opcionalmente te permite enviar la imagen a otro lugar (p. ej., a un bucket en la nube). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Cómo te ayuda:** Al personalizar `args.FileName` controlas exactamente **cómo guardar imágenes**—ya sea en una carpeta plana, una jerarquía basada en fechas, o incluso un BLOB en una base de datos. El callback se ejecuta para cada imagen, por lo que nunca tendrás que post‑procesar el archivo Markdown después. + +## Paso 3 – Guardar el documento como Markdown + +Ahora que las opciones y el callback están listos, la conversión real es una sola línea. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Cuando la línea termina, tendrás: + +- `Doc.md` – la representación Markdown de tu contenido Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … – cada imagen extraída del DOCX original. + +## Ejemplo completo, listo para ejecutar + +Juntando todo, aquí tienes una aplicación de consola autónoma que puedes copiar y pegar en un nuevo proyecto C#. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Resultado esperado + +Después de ejecutar el programa: + +- Abre `C:\Docs\Doc.md` en cualquier editor de texto. Verás enlaces de imagen Markdown como `![](Images/img_0.png)`. +- La carpeta `Images` contendrá cada imagen extraída, nombrada secuencialmente. +- El archivo Markdown se mostrará correctamente en cualquier visor que soporte imágenes locales (vista previa de VS Code, GitHub, etc.). + +## Preguntas frecuentes (FAQs) + +### ¿Funciona esto con otros formatos de imagen (SVG, TIFF)? + +Sí. `Path.GetExtension(args.FileName)` conserva la extensión original, por lo que SVG, TIFF, BMP e incluso EMF se guardan sin cambios. La única advertencia es que algunos renderizadores de Markdown pueden no mostrar SVG en línea; en ese caso podrías convertir SVG a PNG previamente. + +### ¿Qué pasa si necesito incrustar imágenes como Base64 en lugar de archivos separados? + +Dentro de `ResourceSaving`, puedes reemplazar la escritura física del archivo con un flujo de memoria y luego modificar manualmente el enlace Markdown. Aspose no expone un interruptor directo de “embed as Base64”, pero el callback te brinda control total sobre `args.Stream`. + +### ¿En qué se diferencia esto del método incorporado `ExportImages`? + +`ExportImages` extrae todas las imágenes a una carpeta **sin** generar Markdown. Nuestro callback combina ambas acciones, garantizando que los nombres de archivo de las imágenes coincidan con las referencias dentro del `.md`. Esa alineación es la clave para **cómo guardar imágenes** correctamente durante la conversión. + +### ¿Puedo convertir varios archivos DOCX en lote? + +Claro. Envuelve la lógica central en un bucle `foreach (var file in Directory.GetFiles(..., "*.docx"))`, ajusta las rutas de salida y reutiliza el mismo `ImageSavingCallback`. Solo recuerda crear un nuevo `MarkdownSaveOptions` por documento, porque `args.DestinationFileName` cambia en cada iteración. + +## Casos límite y mejores prácticas + +| Situación | Qué vigilar | Solución recomendada | +|-----------|-------------|----------------------| +| **Gran DOCX (cientos de MB)** | Presión de memoria al cargar | Use `LoadOptions` con `LoadFormat.Docx` y establezca `LoadOptions.LoadFormat = LoadFormat.Docx` para cargar partes en streaming | +| **Colisión de nombres de imágenes** | Si la fuente ya tiene `img_0.png` en la carpeta de destino, podrías sobrescribir | Añadir un GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Carpeta de salida de solo lectura** | Guardar lanza `UnauthorizedAccessException` | Asegúrate de que el proceso se ejecute con los permisos adecuados o elige una ruta escribible | +| **Recursos que no son imágenes (CSS, fuentes)** | El callback también los recibe | Proteger con `if (args.ResourceType != ResourceType.Image) return;` (ya mostrado) | +| **Nombres de archivo Unicode** | Algunos sistemas de archivos manejan mal los caracteres | Usa `Path.GetInvalidFileNameChars()` para sanear `args.FileName` antes de asignarlo | + +## Temas relacionados que podrías explorar a continuación + +- **convert docx to markdown** con estilos de encabezado personalizados (use `MarkdownSaveOptions.ExportImagesAsBase64` para imágenes en línea) +- **extract images from word** usando `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/spanish/net/working-with-fonts/_index.md b/words/spanish/net/working-with-fonts/_index.md index 1caf5023e6..59d14eb95c 100644 --- a/words/spanish/net/working-with-fonts/_index.md +++ b/words/spanish/net/working-with-fonts/_index.md @@ -20,9 +20,9 @@ Los tutoriales de Procesamiento de palabras con fuentes lo guiarán a través de Los tutoriales ofrecen explicaciones detalladas paso a paso de cada función, junto con código fuente en C# para ilustrar los conceptos. Aprenderá a usar las clases y métodos de la biblioteca Aspose.Words para .NET para realizar tareas específicas relacionadas con las fuentes en sus documentos de Word. -Ya sea que desee formatear texto con diferentes fuentes, establecer reglas de sustitución de fuentes, cargar fuentes desde directorios específicos o recibir notificaciones de fuentes, los tutoriales "Procesamiento de textos con fuentes" le proporcionarán el conocimiento para realizar estas tareas con facilidad. +Ya sea que desee formatear texto con diferentes fuentes, establecer reglas de sustitución de fuentes, cargar fuentes desde directorios específicos o recibir notificaciones de fuentes, los tutoriales "Procesamiento de textos con fuentes" le proporcionar - ## Tutoriales +## Tutoriales | Título | Descripción | | --- | --- | | [Formato de fuente](./font-formatting/) | Aprenda a formatear fuentes en documentos de Word usando Aspose.Words para .NET con una guía detallada paso a paso. | @@ -53,6 +53,7 @@ Ya sea que desee formatear texto con diferentes fuentes, establecer reglas de su | [Cómo capturar fuentes en Aspose.Words – Guía completa](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Aprenda a capturar fuentes en documentos de Word usando Aspose.Words con esta guía paso a paso completa. | | [Cómo cargar DOCX y detectar fuentes faltantes – Guía completa en C#](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Aprenda a cargar documentos DOCX y detectar fuentes faltantes usando Aspose.Words para .NET con esta guía paso a paso en C#. | | [Habilitar advertencias de sustitución de fuentes en Aspose.Words – Guía completa](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Aprenda a habilitar advertencias de sustitución de fuentes en Aspose.Words con esta guía completa paso a paso. | +| [Sustitución de fuentes Aspose: Detectar fuentes faltantes en documentos Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Aprenda a detectar fuentes faltantes en documentos Word usando Aspose.Words para .NET con esta guía paso a paso. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/spanish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..10353d0812 --- /dev/null +++ b/words/spanish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,283 @@ +--- +category: general +date: 2026-05-04 +description: 'Aprenda cómo usar la sustitución de fuentes de Aspose para detectar + fuentes faltantes al cargar un documento de Word y obtener los detalles de las fuentes + faltantes: guía paso a paso.' +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: es +og_description: Domina la sustitución de fuentes de Aspose para detectar fuentes faltantes + al cargar un documento Word y recuperar la información de fuentes faltantes con + código C# completo. +og_title: Sustitución de fuentes Aspose – Detectar fuentes faltantes en documentos + Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Sustitución de fuentes Aspose: Detectar fuentes faltantes en documentos Word' +url: /es/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Detectar fuentes faltantes en documentos Word + +¿Alguna vez te has preguntado por qué un documento Word se ve mal en otra máquina? A menudo el culpable es una fuente faltante, y **Aspose font substitution** es la herramienta que te permite detectar esas ausencias antes de que se conviertan en un desastre visual. En este tutorial recorreremos cómo **detect missing fonts** en el momento en que **load a Word document**, y luego **retrieve missing font** details para que puedas corregirlas o reemplazarlas. + +Cubrirémos todo, desde configurar la devolución de llamada de advertencia hasta obtener una lista limpia de fuentes faltantes. Al final, tendrás un fragmento de C# listo para ejecutar que te indica exactamente qué fuentes no se cargaron, y comprenderás por qué esto es importante para la fidelidad del documento. + +--- + +## Prerequisitos – Lo que necesitas antes de comenzar + +- **Aspose.Words for .NET** (v23.12 o posterior recomendado). +- Un entorno de desarrollo .NET (Visual Studio, Rider, o la CLI `dotnet`). +- Un DOCX de ejemplo que intencionalmente use una fuente que no tienes instalada —llámalo `DocumentWithMissingFont.docx`. +- Conocimientos básicos de C# — nada sofisticado, solo la capacidad de ejecutar una aplicación de consola. + +Si alguno de esos conceptos te resulta desconocido, detente e instala el paquete NuGet: + +```bash +dotnet add package Aspose.Words +``` + +Eso es todo. No fuentes extra, sin servicios externos. + +--- + +## Paso 1: Cargar el documento Word (y activar la comprobación de fuentes) + +Lo primero que haces es **load a Word document**. Aspose.Words analiza el archivo y, si no puede localizar una fuente referenciada, genera una advertencia *FontSubstitution*. Aquí está el código que realiza la carga: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Por qué es importante:** Cargar el documento temprano le da a Aspose la oportunidad de escanear cada ejecución de texto, estilo y objeto incrustado. Si una fuente no se encuentra en el sistema o en la carpeta de fuentes personalizada, recibirás una advertencia más adelante. + +--- + +## Paso 2: Adjuntar una devolución de llamada de advertencia para capturar eventos de sustitución + +Aspose.Words utiliza un mecanismo de devolución de llamada para informarte sobre problemas como fuentes faltantes. Al asignar una implementación de `IWarningCallback` a `doc.WarningCallback`, puedes interceptar cada advertencia a medida que ocurre. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Consejo profesional:** Puedes adjuntar múltiples devoluciones de llamada (p. ej., registro, actualizaciones de UI) envolviéndolas en un patrón compuesto, pero para este tutorial una única devolución de llamada mantiene las cosas claras. + +--- + +## Paso 3: Implementar la devolución de llamada de advertencia de sustitución de fuentes + +Ahora definimos la clase que realmente realiza el trabajo. La devolución de llamada recibe un objeto `WarningInfo`; filtramos por `WarningType.FontSubstitution` y almacenamos la descripción para uso posterior. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Qué está sucediendo:** Cuando Aspose encuentra una fuente faltante, crea una advertencia como “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Nuestra devolución de llamada imprime esa línea y la guarda. + +--- + +## Paso 4: Procesar el documento (opcional) y recopilar fuentes faltantes + +Si solo necesitas **detect missing fonts**, el paso de carga es suficiente —las advertencias se disparan automáticamente. Sin embargo, muchos desarrolladores también necesitan **retrieve missing font** información después de realizar algunas operaciones (p. ej., guardar, convertir). A continuación forzamos una pequeña operación —guardar a PDF— para asegurar que se emitan todas las advertencias, y luego extraemos los mensajes recopilados. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Salida esperada en consola** (ejemplo): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Observa cómo cada línea indica claramente la fuente original y la sustituta que Aspose eligió. Ese es el núcleo del informe de **aspose font substitution**. + +--- + +## Paso 5: Avanzado – Usar fuentes personalizadas para reducir sustituciones + +A veces *sí* tienes las fuentes faltantes, solo que no están en la carpeta del sistema predeterminada. Aspose.Words te permite apuntar a un directorio personalizado mediante `FontSettings`. Añadir este paso puede reducir drásticamente la cantidad de advertencias de sustitución. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **¿Por qué añadir esto?** Si distribuyes documentos entre máquinas, empaquetar las fuentes requeridas en una carpeta conocida garantiza la misma apariencia visual en todas partes. También hace que tu rutina de **detect missing fonts** sea más precisa porque Aspose verifica esa carpeta antes de recurrir a una sustitución. + +--- + +## Ejemplo completo en funcionamiento + +Juntando todo, aquí tienes un programa de consola listo para copiar y pegar. Guárdalo como `Program.cs` y ejecútalo con `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Lo que deberías ver:** Si el DOCX de origen referencia fuentes que no tienes, la consola imprimirá cada línea de sustitución seguida de un resumen conciso. Si todas las fuentes están presentes, obtendrás el mensaje “No missing fonts were detected.” + +--- + +## Errores comunes y cómo evitarlos + +| Problema | Por qué ocurre | Solución | +|----------|----------------|----------| +| **No aparecen advertencias** | El documento usa solo fuentes del sistema, o ya agregaste una carpeta personalizada que contiene las fuentes faltantes. | Verifica que el DOCX realmente haga referencia a una fuente no disponible. Puedes abrirlo en Word y cambiar un párrafo a una fuente rara (p. ej., “Papyrus”). | +| **Mensajes duplicados** | La misma fuente se usa en múltiples ejecuciones, lo que genera varias advertencias. | Elimina duplicados de la lista con `Distinct()` si solo necesitas un conjunto único. | +| **Impacto de rendimiento en documentos grandes** | Cada advertencia se procesa en el hilo de UI. | Ejecuta la carga en una tarea en segundo plano o usa `Parallel.ForEach` para el post‑procesamiento. | +| **Fuente de sustitución incorrecta** | La sustitución predeterminada de Aspose puede no coincidir con tu identidad de marca. | Establece `FontSettings.SubstitutionSettings.DefaultFontName` a una sustituta preferida (p. ej., “Calibri”). | + +--- + +## Extender la solución – Exportar fuentes faltantes a JSON + +Si estás construyendo un servicio web que necesita informar fuentes faltantes a un cliente, serializar la lista es trivial: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Ahora tu API puede devolver una carga JSON limpia que otro sistema pueda consumir. + +--- + +## Conclusión + +En esta guía demostramos **Aspose font substitution** de principio a fin: cargar un documento Word, adjuntar una devolución de llamada de advertencia, capturar cada evento de *detect missing fonts*, y finalmente obtener información **retrieve missing font** para informes o remediación. Al añadir carpetas de fuentes personalizadas opcionales puedes reducir la lista de sustituciones, y con unas pocas líneas extra incluso puedes exportar los resultados como JSON. + +Recuerda, la integridad visual de tus documentos depende de las fuentes que utilizan. Con la técnica mostrada aquí, nunca volverás a sorprenderte con una sustitución inesperada. + +¿Listo para dar el siguiente paso? Prueba integrar esta lógica en una canalización de procesamiento de documentos más grande, o explora otras características de Aspose.Words como la incrustación de fuentes (`doc.FontSettings.EmbeddedFonts`). Las posibilidades son infinitas, y tus usuarios te agradecerán por el resultado pulido. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/swedish/net/ai-powered-document-processing/_index.md b/words/swedish/net/ai-powered-document-processing/_index.md index 79cdc3ed58..4811505800 100644 --- a/words/swedish/net/ai-powered-document-processing/_index.md +++ b/words/swedish/net/ai-powered-document-processing/_index.md @@ -42,6 +42,9 @@ Slutligen, glöm inte att kolla in våra [Arbeta med sammanfattningsalternativ]( | [Arbeta med Googles AI-modell](./working-with-google-ai-model/) Förbättra din dokumenthantering med Aspose.Words för .NET och Google AI för att enkelt skapa koncisa sammanfattningar. | | [Arbeta med öppen AI-modell](./working-with-open-ai-model/) | Lås upp effektiv dokumentsammanfattning med Aspose.Words för .NET och OpenAI:s kraftfulla modeller. Fördjupa dig i den här omfattande guiden nu. | | [Arbeta med sammanfattningsalternativ](./working-with-summarize-options/) | Lär dig att effektivt sammanfatta Word-dokument med Aspose.Words för .NET med vår steg-för-steg-guide om hur du integrerar AI-modeller för snabba insikter. | +| [Hur du använder LLM med Aspose.Words – Omskriv stycken i C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Lär dig hur du integrerar en LLM för att automatiskt omskriva stycken i Word-dokument med C# och Aspose.Words. | +| [Hur man kontrollerar grammatik i C# – Komplett guide för Word-dokument](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Lär dig hur du använder Aspose.Words för .NET för att automatiskt kontrollera grammatik i Word-dokument med C#. | +| [Sammanfatta Word-dokument i C# – Komplett guide med Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Lär dig hur du använder Anthropic Claude för att automatiskt sammanfatta Word-dokument med C# och Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/swedish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..f49fa1f402 --- /dev/null +++ b/words/swedish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: Lär dig hur du kontrollerar grammatiken i ett Word‑dokument med C#. Denna + handledning täcker också hur du laddar en DOCX‑fil i C# och använder Aspose.Words + AI för korrekta resultat. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: sv +og_description: Hur kontrollerar du grammatik i ett Word-dokument med C#? Följ den + här handledningen för att läsa in en DOCX-fil med C# och köra AI‑drivna grammatikkontroller + med Aspose.Words. +og_title: Hur man kontrollerar grammatik i C# – Fullständig steg‑för‑steg‑guide +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Hur man kontrollerar grammatik i C# – Komplett guide för Word-dokument +url: /sv/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man kontrollerar grammatik i C# – Komplett guide för Word-dokument + +Har du någonsin funderat **hur man kontrollerar grammatik** i ett Word-dokument utan att lämna din IDE? Du är inte ensam. Många utvecklare behöver validera användargenererade rapporter, automatiserade e‑mail eller till och med dokumentation innan den levereras. Den goda nyheten? Med Aspose.Words AI kan du göra det programatiskt, och hela processen passar smidigt in i ett typiskt C#‑arbetsflöde. + +I den här guiden går vi igenom allt du behöver veta: från att ladda en DOCX‑fil C# till att anropa AI‑grammatikkontrollen och tolka resultaten. I slutet har du ett färdigt kodexempel som skriver ut varje problems allvarlighetsgrad, meddelande och föreslagna ersättning—utan att du behöver kopiera och klistra in manuellt. + +## Vad du kommer att lära dig + +- **Hur man kontrollerar grammatik** i ett Word-dokument med Aspose.Words AI. +- De exakta stegen för att **ladda en DOCX‑fil C#** med `Document`‑klassen. +- Hur man hanterar `GrammarCheckResult`‑objektet, itererar över problem och skriver ut användbara diagnostikdata. +- Vanliga fallgropar (som saknade licenser) och tips för att göra lösningen produktionsklar. + +> **Förutsättningar:** .NET 6.0+ (eller .NET Framework 4.6+), Visual Studio 2022 (eller någon IDE du föredrar), och en Aspose.Words for .NET‑licens (gratis provversion fungerar för testning). Om du ännu inte har installerat NuGet‑paketen, kör: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Nu, låt oss dyka ner. + +## Steg 1: Ladda en DOCX‑fil i C# + +Innan någon grammatikkontroll kan utföras måste dokumentet laddas in i minnet. Aspose.Words gör detta till en enradare, men det finns några nyanser som är värda att notera. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Varför detta är viktigt:** +- Att använda `Path.Combine` säkerställer plattformsoberoende kompatibilitet. +- Existenskontrollen förhindrar ett körningsfel som annars skulle dölja den faktiska grammatikkontrolllogiken. +- När du **laddar en DOCX‑fil C#**, parser Aspose alla stilar, sidhuvuden, sidfötter och även dold text, vilket ger AI:n en komplett bild av dokumentet. + +> **Proffstips:** Om du behöver arbeta med strömmar (t.ex. filer som kommer från en webbladdning), kan du ersätta anropet `new Document(docPath)` med `new Document(stream)`. + +## Steg 2: Välj AI‑modell för grammatikkontroll + +Aspose.Words AI stödjer flera modeller, från lätta lokala till molnbaserade GPT‑varianter. För de flesta scenarier erbjuder **GPT‑3.5 Turbo** en bra balans mellan hastighet och noggrannhet. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Varför välja GPT‑3.5 Turbo?** +- Den är tillräckligt snabb för batchbearbetning av dussintals filer per minut. +- Kostnaden (om du har en betald plan) är lägre än GPT‑4 samtidigt som den fångar de flesta vanliga fel. +- API:et hanterar automatiskt token‑gränser, så du behöver inte dela upp stora dokument manuellt. + +Om du föredrar en offline‑lösning, ersätt `AiModelType.Gpt35Turbo` med `AiModelType.Local` (kräver det valfria offline‑modellpaketet). + +## Steg 3: Iterera över problem och visa hjälpsam återkoppling + +`GrammarCheckResult` innehåller en samling av `GrammarIssue`‑objekt. Varje problem ger dig allvarlighetsgrad, ett mänskligt läsbart meddelande och ett föreslaget ersättningsförslag. Låt oss skriva ut dem snyggt. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Vad fälten betyder:** +- `Severity` – vanligtvis `Info`, `Warning` eller `Error`. Behandla `Error` som ett måste‑fix innan publicering. +- `Message` – en kort beskrivning av problemet (t.ex. “Subjekt‑verb‑överensstämmelse”). +- `SuggestedReplacement` – AI:ns rekommenderade fix; du kan automatiskt tillämpa den om du litar på modellen, eller presentera den för en mänsklig granskare. + +> **Edge case:** Vissa problem kan ha en tom `SuggestedReplacement` (t.ex. stilförslag). I sådana fall flagga bara platsen för manuell granskning. + +## Fullt fungerande exempel + +När vi sätter ihop allt, här är en fristående konsolapp som du kan kopiera‑klistra in i ett nytt .NET‑projekt. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Förväntad output (exempel):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Om du kör programmet mot ett rent dokument kommer du att se raden “✅ No grammar issues detected.” istället. + +## Hantera vanliga fallgropar + +| Problem | Varför det händer | Snabb lösning | +|---------|-------------------|---------------| +| **LicenseException** | Aspose‑biblioteken kräver en giltig licens för produktionsanvändning. | Infoga `License license = new License(); license.SetLicense("Aspose.Words.lic");` i början av `Main`. | +| **Network timeout** | AI‑modellens anrop når molnet och överskrider standard‑timeouten på 100 s. | Öka timeouten via `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` innan du anropar `CheckGrammar`. | +| **Large documents (> 10 MB)** | Vissa molnmodeller trunkerar indata. | Dela upp dokumentet i sektioner med `document.Sections` och kör kontroller per sektion, för att sedan samla resultaten. | +| **Missing suggestions** | Modellen kunde inte generera ett ersättningsförslag (t.ex. tvetydig formulering). | Logga problemet för manuell granskning; applicera inte tomma förslag automatiskt. | + +## Utöka lösningen + +- **Automatisk fixning:** Loopa igenom `grammarResult.Issues` och ersätt text med `document.Range.Replace`. Se till att säkerhetskopiera originalfilen först. +- **Batch‑bearbetning:** Packa in hela flödet i en `foreach` över en katalog med DOCX‑filer. Spara varje rapport som en JSON‑fil för senare analys. +- **Integrera med ASP.NET:** Exponera en endpoint som tar emot en uppladdad DOCX, kör kontrollen och returnerar en JSON‑payload med problem. + +## Bildillustration + +hur man kontrollerar grammatik flödesdiagram + +*Diagrammet ovan visualiserar den trestegsprocessen: ladda DOCX → kör AI‑grammatikkontroll → outputa problem.* + +## Slutsats + +Vi har gått igenom **hur man kontrollerar grammatik** i ett Word-dokument med C#, demonstrerat den exakta koden för att **ladda en DOCX‑fil C#**, och visat hur du tolkar den AI‑genererade återkopplingen. Med Aspose.Words AI får du en kraftfull, molnbaserad grammatikmotor som integreras sömlöst i alla .NET‑applikationer. + +Nästa steg? Prova att automatisera fix‑apply‑loopen, experimentera med den nyare `AiModelType.Gpt4` för ännu skarpare förslag, eller kombinera detta med ett stavningskontrollbibliotek för en komplett korrekturläsningspipeline. Möjligheterna är praktiskt taget oändliga, och du har nu en solid grund att bygga vidare på. + +Har du frågor eller stöter på ett knepigt edge case? Lämna en kommentar nedan, och lycka till med kodandet! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/swedish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/swedish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..f5d7854eca --- /dev/null +++ b/words/swedish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-05-04 +description: Hur man använder LLM för att redigera dokument med Aspose – lär dig att + ersätta stycke­text, ansluta till en lokal LLM och skriva om text med AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: sv +og_description: Hur man använder LLM för att redigera dokument med Aspose. Denna guide + visar hur man ansluter till en lokal LLM, ersätter stycke‑text och skriver om text + med AI. +og_title: Hur man använder LLM med Aspose.Words – Skriva om stycken i C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Hur man använder LLM med Aspose.Words – Skriva om stycken i C# +url: /sv/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man använder LLM med Aspose.Words – Skriva om stycken i C# + +Har du någonsin undrat **hur man använder LLM** för att putsa ett Word‑dokument utan att öppna det manuellt? Du är inte ensam. Många utvecklare fastnar när de behöver *ersätta stycke‑text* programatiskt men saknar ett rent AI‑drivet arbetsflöde. + +I den här handledningen kopplar vi upp en lokal stor språkmodell, matar den med ett utdrag från en `.docx`‑fil, ber den **skriva om text med AI**, och sparar slutligen det uppdaterade dokumentet – allt med Aspose.Words. När du är klar har du en färdig C#‑konsolapp som demonstrerar hela pipeline:n. + +> **Vad du får:** ett komplett, körbart exempel, förklaringar av varje steg, tips för kantfall och idéer för att utöka lösningen. + +## Vad du behöver + +- **.NET 6+** (eller .NET Framework 4.7.2 – koden fungerar på båda) +- **Aspose.Words for .NET** (NuGet‑paket `Aspose.Words`) +- En **lokal LLM‑server** som exponerar ett enkelt HTTP‑endpoint `/generate` (t.ex. Ollama, LMStudio eller en egen Flask‑tjänst) +- Grundläggande kunskap om C# och HTTP‑klientkod + +Inga extra SDK:er krävs; allt annat lever i den kod vi skriver tillsammans. + +## Steg 1: Hur man använder LLM för att ersätta stycke‑text + +Det första vi måste göra är att identifiera det stycke vi vill ändra. Aspose.Words gör detta enkelt genom att exponera en rik objektsmodell. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Varför detta är viktigt:** +Att välja rätt nod förhindrar att du av misstag skriver över rubriker eller tabeller. Genom att använda **replace paragraph text**‑metoden behåller vi dokumentets struktur intakt och ändrar bara det innehåll vi bryr oss om. + +> **Proffstips:** Om ditt dokument har sektioner med variabel längd, använd `document.GetChildNodes(NodeType.Paragraph, true)` och LINQ för att lokalisera ett stycke via dess text eller stil. + +## Steg 2: Anslut till ett lokalt LLM‑endpoint + +Nu när vi har texten måste vi skicka den till LLM:n. Exemplet använder en enkel wrapper‑klass `LocalLargeLanguageModel` som döljer HTTP‑detaljerna. Byt gärna ut den mot direkta `HttpClient`‑anrop om du föredrar det. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Varför vi ansluter på detta sätt:** +En **connect to local llm**‑uppsättning eliminerar latens, håller data på plats och undviker API‑kostnader. Wrappern gör också den efterföljande koden renare, så vi kan fokusera på logiken för **rewrite text using ai**. + +## Steg 3: Skriva om text med AI med Aspose.Words + +Med stycke‑texten i handen och LLM:n redo, bygger vi en prompt som talar om för modellen exakt vad vi vill – skriva om i en formell ton. Du kan justera prompten för andra stilar (vänlig, teknisk osv.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Varför detta fungerar:** +LLM:er är prompt‑drivna; tydliga instruktioner (“Rewrite … in a formal tone”) ger konsekventa resultat. Steget **rewrite text using ai** är hjärtat i handledningen – det visar hur AI kan integreras direkt i dokumentarbetsflöden. + +## Steg 4: Redigera dokumentet och spara ändringarna + +Nu ersätter vi de ursprungliga runs med det nya innehållet. Aspose.Words lagrar text i `Run`‑objekt, så att rensa dem först undviker kvarvarande formateringsartefakter. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Kantfalls‑anmärkning:** +Om det ursprungliga stycket innehöll blandad formatering (fet, kursiv) kan du vilja bevara stilarna. Skapa i så fall ett nytt `Run`, kopiera de ursprungliga `Font`‑inställningarna och sätt sedan dess `Text` till `revisedText`. + +## Fullt fungerande exempel + +Nedan är hela programmet som du kan kopiera‑klistra in i ett konsolprojekt. Kom ihåg att först installera Aspose.Words‑NuGet‑paketet (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Förväntad output + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Öppna `output.docx` – du kommer att se att det tredje stycket nu visar den putsade versionen. + +## Vanliga frågor & fallgropar + +| Fråga | Svar | +|----------|--------| +| **Vad händer om min LLM returnerar JSON med extra fält?** | Anpassa `GenerateText` så att den deserialiserar rätt egenskap eller parsar svaret manuellt. | +| **Kan jag bearbeta flera stycken samtidigt?** | Ja – iterera över `document.FirstSection.Body.Paragraphs` och tillämpa samma prompt‑logik, eventuellt med ett stycke‑index i prompten för kontext. | +| **Min LLM‑server använder autentisering?** | Lägg till en header i `HttpClient` innan POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Formateringen försvinner efter ersättningen.** | Bevara de ursprungliga `Run.Font`‑inställningarna: skapa ett nytt `Run`, kopiera `originalRun.Font.Clone()`, och sätt sedan dess `Text`. | +| **LLM:n returnerar ibland tomma strängar.** | Implementera en fallback – om `revisedText.Trim().Length == 0`, behåll originaltexten eller gör ett nytt försök med en enklare prompt. | + +## Utöka lösningen + +Nu när du har bemästrat **how to use llm** för ett enskilt stycke, fundera på följande nästa steg: + +- **Batch‑bearbetning:** Loopa igenom varje stycke och skriv om i en vald stil (t.ex. “make all text concise”). +- **Stil‑medveten omskrivning:** Skicka med det ursprungliga styckets stilnamn i prompten så att LLM:n kan respektera rubriker kontra brödtext. +- **Integration i en CI‑pipeline:** Automatisera dokumentputsning som en del av en dokumentations‑byggprocess. +- **Alternativa prompts:** Prova “summarize this paragraph” eller “translate this paragraph to Spanish” för att utforska hela kraften i **rewrite text using ai**. + +## Slutsats + +Vi har gått igenom hela flödet för **how to use llm** med Aspose.Words: ladda ett dokument, **connect to local llm**, extrahera ett stycke, **rewrite text using ai**, **replace paragraph text**, och slutligen spara resultatet. Koden är självständig, fungerar direkt ur lådan och visar ett praktiskt sätt att kombinera AI med traditionell dokumentautomatisering. + +Ge det ett försök, justera promptarna, och låt + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/swedish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/swedish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..1ddb410abb --- /dev/null +++ b/words/swedish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Sammanfatta Word-dokument snabbt och översätt text med Google. Lär dig + hur du använder Anthropic Claude, skapar en sammanfattning från en rapport och översätter + text med Google i en enda C#‑handledning. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: sv +og_description: Sammanfatta Word-dokument omedelbart och översätt text med Google. + Denna guide visar hur du använder Anthropic Claude och Aspose.Words för att skapa + en sammanfattning från rapport. +og_title: Sammanfatta Word-dokument i C# – Steg‑för‑steg med Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Sammanfatta Word-dokument i C# – Komplett guide med Anthropic Claude +url: /sv/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Sammanfatta Word-dokument i C# – Komplett guide med Anthropic Claude + +Har du någonsin behövt **sammanfatta word-dokument** men känt dig fast med API:er och långrandig kod? Du är inte ensam. I många projekt—årsrapporter, juridiska sammanfattningar eller forskningsartiklar—är det en daglig smärta att extrahera en koncis översikt. Lyckligtvis gör kombinationen av Aspose.Words och Anthropic Claude det till en barnlek, och du kan till och med slänga in en snabb Google‑översättning medan du är i gång. + +I den här handledningen går vi igenom allt du behöver veta: läsa in ett stort .docx, anropa Claude V2‑modellen för att generera en sammanfattning, översätta en fras med Google och hantera de vanligaste fallgroparna. I slutet kommer du att kunna **skapa sammanfattning från rapport** med bara några rader C#. + +## Förutsättningar + +- .NET 6+ (eller .NET Core 3.1) installerat +- En Aspose.Words för .NET‑licens (eller en gratis provversion) +- Tillgång till Anthropic Claude V2 API (du behöver en API‑nyckel) +- Internetanslutning för Google Translator +- Visual Studio 2022 eller ditt föredragna C#‑IDE + +Inga extra NuGet‑paket utöver `Aspose.Words` och `Aspose.Words.AI` krävs; översättningsklassen levereras med samma bibliotek. + +## Steg 1 – Läs in käll‑Word‑dokumentet + +Det första vi måste göra är att läsa in .docx‑filen i minnet. Aspose.Words gör detta enkelt och, tack vare sin robusta parser, fungerar den med komplexa layouter, tabeller och även inbäddade bilder. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Why this matters:** Att ladda dokumentet tidigt låter dig inspektera egenskaper (författare, ordantal) och avgöra om en sammanfattning ens är nödvändig. Stora filer > 10 MB kan vara minnesintensiva, så överväg `LoadOptions` med `LoadFormat.Docx` om du stöter på prestandaproblem. + +## Steg 2 – Sammanfatta dokumentet med Anthropic Claude + +Nu kommer den roliga delen: vi överlämnar dokumentet till Claude V2. `Summarizer`‑klassen abstraherar HTTP‑anropet, token‑hantering och återförsök. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **How it works:** +> 1. **Chunking** – Aspose delar automatiskt dokumentet i hanterbara delar (≈ 2 KB vardera) för att respektera Claudes token‑gränser. +> 2. **Prompt engineering** – Biblioteket skickar en prompt som “Provide a concise executive summary of the following text:” följt av varje del. +> 3. **Aggregation** – Claude returnerar partiella sammanfattningar som sys ihop till den slutgiltiga `summaryText`. + +### Kantfall & Tips + +- **Mycket stora rapporter** (> 100 sidor) kan överskrida Claudes kontextfönster. Om du ser avkortad output, aktivera `SummarizerOptions.MaxChunkSize` till mindre värden. +- **Icke‑engelsk källa** – Claude fungerar bäst med engelska; för andra språk, översätt först (se Steg 4) och sammanfatta sedan. +- **Rate limits** – Anthropic inför per‑minut‑gränser. Wrappa anropet i en återförsöksloop med exponentiell back‑off om du får ett `429`‑svar. + +## Steg 3 – Verifiera sammanfattningsresultatet + +Innan vi går vidare är det god praxis att validera att sammanfattningen inte är tom och uppfyller längdförväntningarna (t.ex. 5‑10 % av det ursprungliga ordantalet). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Om förhållandet ser för lågt ut (< 2 %), kan du vilja justera egenskapen `SummarizerOptions.SummaryLength` för att begära en längre output. + +## Steg 4 – Översätt text med Google + +Nu när vi har en skarp engelsk sammanfattning, låt oss strö på en snabb översättning. `Translator`‑klassen använder Googles offentliga översättnings‑endpoint (ingen API‑nyckel krävs för korta fraser, men för produktion bör du byta till den betalda Cloud Translation API). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Varför Google?** Det är snabbt, brett stödjande, och den fria endpointen hanterar korta strängar utan autentisering. För massöversättningar, batcha anropen och respektera Googles användningsgränser. + +### Översätta hela sammanfattningen (valfritt) + +Om du behöver hela sammanfattningen på spanska (eller något annat språk), mata bara `summaryText` i `Translator.Translate`. Var medveten om 5 KB begäransstorleksgränsen; du kan behöva dela upp sammanfattningen i mindre delar. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Steg 5 – Spara sammanfattningen tillbaka till en Word‑fil (bonus) + +Ofta förväntar sig slutanvändaren ett nedladdningsbart dokument snarare än konsoloutput. Låt oss skapa en ny `.docx` som innehåller både den engelska och den spanska versionen. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Praktiskt tips + +När du bäddar in sammanfattningen i en ny Word‑fil, håll den ursprungliga formateringen minimal (använd `Normal`‑stilen). Komplexa stilar från källan kan orsaka oväntade layoutförändringar. + +## Fullt fungerande exempel + +Nedan är det **kompletta, kopiera‑och‑klistra‑klara** programmet som binder ihop allt. Det kompileras med ett enda `dotnet run` efter att du har lagt till Aspose‑paketen. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Förväntad konsoloutput** (avkortad för korthet): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Vanliga frågor + +| Question | Answer | +|----------|--------| +| *Kan jag använda en annan AI-modell?* | Ja. Byt ut `SummarizerModel.AnthropicClaudeV2` mot `SummarizerModel.OpenAIGPT4` (kräver en OpenAI‑nyckel) eller någon annan leverantör som listas i enumen. | +| *Vad händer om dokumentet innehåller skyddade sektioner?* | Aspose kommer att kasta `ProtectedDocumentException`. Lås upp det först med `LoadOptions.Password` eller begär en oskyddad kopia. | +| *Behöver jag en betald Aspose‑licens för produktion?* | Den fria provversionen fungerar upp till 20 sidor. För större rapporter tar en licens bort sidgränsen och ger prestandaoptimeringar. | +| *Är Google‑översättaren pålitlig för stora block?* | För korta strängar är den bra. För massöversättning, byt till Cloud Translation API för att undvika begränsningar i begäransstorlek och för att få bättre språkdetection. | + +## Slutsats + +Vi har just **sammanfattat word-dokument** med Aspose.Words tillsammans med Anthropic Claude V2-modellen, och sedan **översatt text med Google** till + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/swedish/net/basic-conversions/_index.md b/words/swedish/net/basic-conversions/_index.md index 3ad28c09d8..a29e7f95d1 100644 --- a/words/swedish/net/basic-conversions/_index.md +++ b/words/swedish/net/basic-conversions/_index.md @@ -23,12 +23,12 @@ Grundläggande konverteringar guidar dig genom grundläggande dokumentkonverteri | --- | --- | | [Konvertera dokument till docx](./doc-to-docx/) | Lär dig hur du konverterar DOC till DOCX med Aspose.Words för .NET. Steg-för-steg-guide med kodexempel. Perfekt för utvecklare. | | [Konvertera Docx till Rtf](./docx-to-rtf/) | Lär dig hur du konverterar DOCX till RTF med Aspose.Words för .NET med vår steg-för-steg-guide. Enkel konvertering för sömlös dokumentbehandling. | -| [Konvertera Word-fil till PDF](./docx-to-pdf/) Lär dig hur du enkelt konverterar Word-filer till PDF med Aspose.Words för .NET med vår guide. Perfekt för utvecklare som söker snabb och pålitlig dokumentkonvertering. | +| [Konvertera Word-fil till PDF](./docx-to-pdf/) | Lär dig hur du enkelt konverterar Word-filer till PDF med Aspose.Words för .NET med vår guide. Perfekt för utvecklare som söker snabb och pålitlig dokumentkonvertering. | | [Konvertera Docx till Byte](./docx-to-byte/) | Lär dig hur du konverterar Docx till byte array i .NET med hjälp av Aspose.Words för effektiv dokumenthantering. Steg-för-steg-guide ingår. | | [Konvertera Docx till Epub](./docx-to-epub/) | Konvertera DOCX till EPUB enkelt med Aspose.Words för .NET. Följ vår handledning för sömlös integration i dina .NET-applikationer. | | [Konvertera docx till mhtml och skicka e-post](./docx-to-mhtml-and-sending-email/) | Lär dig hur du konverterar DOCX till MHTML och skickar e-postmeddelanden med Aspose.Words för .NET i den här steg-för-steg-guiden. Öka din produktivitet med enkel automatisering. | | [Konvertera Docx-fil till Markdown](./docx-to-markdown/) | Lär dig hur du konverterar DOCX-filer till Markdown med Aspose.Words för .NET. Följ vår detaljerade guide för sömlös integration i dina .NET-applikationer. | -| [Konvertera docx till text](./docx-to-txt/) Konvertera DOCX till TXT med Aspose.Words för .NET med vår steg-för-steg-guide. Lär dig att transformera dokument effektivt och enkelt. | +| [Konvertera docx till text](./docx-to-txt/) | Konvertera DOCX till TXT med Aspose.Words för .NET med vår steg-för-steg-guide. Lär dig att transformera dokument effektivt och enkelt. | | [Konvertera textfil till Word-dokument](./txt-to-docx/) | Lär dig hur du konverterar textfiler till Word-dokument med Aspose.Words för .NET. Hantera dokumentkonverteringar effektivt med vår omfattande guide. | | [Spara PDF som JPEG](./pdf-to-jpeg/) | Konvertera enkelt PDF-filer till JPEG-filer med Aspose.Words för .NET. Följ vår detaljerade guide med exempel och vanliga frågor. Perfekt för utvecklare och entusiaster. | | [Spara PDF till Word-format (Docx)](./pdf-to-docx/) | Lär dig hur du konverterar en PDF till ett Word-dokument (Docx) med Aspose.Words för .NET i den här detaljerade steg-för-steg-guiden. Perfekt för utvecklare. | @@ -36,6 +36,7 @@ Grundläggande konverteringar guidar dig genom grundläggande dokumentkonverteri | [Konvertera Word till PDF i C# med Aspose.Words – Guide](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Lär dig hur du konverterar Word-dokument till PDF i C# med Aspose.Words. Steg‑för‑steg‑guide med kodexempel. | | [Spara Word som PDF med Aspose.Words – Komplett C#-guide](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Lär dig hur du sparar Word-dokument som PDF med Aspose.Words i C#. Steg‑för‑steg‑guide med kodexempel. | | [Spara docx som PDF med Aspose.Words – Komplett C#-guide](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Lär dig hur du sparar DOCX-filer som PDF med Aspose.Words i C#. Steg‑för‑steg‑guide med kodexempel. | +| [Skapa tillgänglig PDF från DOCX i C# – Så konverterar du Word till PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Lär dig hur du skapar en tillgänglig PDF från ett DOCX-dokument i C# med Aspose.Words, inklusive konverteringsalternativ och bästa praxis. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/swedish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..edb61cd78c --- /dev/null +++ b/words/swedish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,211 @@ +--- +category: general +date: 2026-05-04 +description: Skapa en tillgänglig PDF från en DOCX‑fil i C#. Lär dig hur du konverterar + Word till PDF, sparar Word som PDF och exporterar docx till PDF med tillgänglighetsanpassning. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: sv +og_description: Skapa tillgänglig PDF från en DOCX‑fil i C#. Följ den här steg‑för‑steg‑handledningen + för att konvertera Word till PDF, spara Word som PDF och exportera docx till PDF + med full tillgänglighet. +og_title: Skapa tillgänglig PDF från DOCX i C# – Snabbguide +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Skapa tillgänglig PDF från DOCX i C# – Så konverterar du Word till PDF +url: /sv/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Skapa Tillgänglig PDF från DOCX i C# – Så konverterar du Word till PDF + +Har du någonsin behövt **skapa tillgänglig PDF** från ett Word‑dokument men varit osäker på vilket bibliotek du ska lita på? Du är inte ensam—många utvecklare stöter på samma hinder när de måste uppfylla PDF/UA‑standarderna för tillgänglighet. Den goda nyheten är att med Aspose.Words kan du omvandla en `.docx` till en kompatibel PDF med bara några rader kod, och du får en fil som skärmläsare faktiskt kan läsa. + +I den här handledningen går vi igenom allt du behöver veta för att **convert Word to PDF**, **save Word as PDF**, och till och med **export docx to PDF** med PDF/UA‑1 (eller PDF/UA‑2) efterlevnad. I slutet har du ett färdigt C#‑exempel, förstår varför varje inställning är viktig, och är rustad att hantera vanliga kantfall som saknade typsnitt eller anpassade sidinställningar. + +## Förutsättningar + +- .NET 6.0 eller senare (koden fungerar även med .NET Framework 4.6+) +- En Aspose.Words for .NET‑licens (eller en gratis utvärderingsnyckel) +- Grundläggande kunskaper i C# och Visual Studio (eller någon annan IDE du föredrar) +- En DOCX‑fil som du vill göra tillgänglig (vi kallar den `input.docx`) + +> **Pro tip:** Om du använder den kostnadsfria provversionen, kom ihåg att den genererade PDF‑filen kommer att innehålla ett litet “Evaluation”-vattenstämpel. + +## Steg 1: Installera Aspose.Words NuGet‑paket + +Innan vi kan skriva någon C#‑kod måste Aspose.Words‑biblioteket läggas till i projektet. + +```bash +dotnet add package Aspose.Words +``` + +Kommandot återställer `Aspose.Words.dll` och gör namnutrymmena tillgängliga. Detta steg är avgörande eftersom klassen `PdfSaveOptions` finns i det paketet. + +## Steg 2: Ladda käll‑DOCX‑filen + +Det första logiska steget är att läsa in Word‑dokumentet du vill omvandla. Tänk på det som att öppna en bok innan du börjar redigera sidorna. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Varför detta är viktigt:** När dokumentet laddas skapas en minnesrepresentation som inkluderar alla stilar, bilder och metadata. Om filen är korrupt kastar `Document` ett undantag—så du kanske vill omsluta detta med en try/catch‑block i produktionskod. + +## Steg 3: Konfigurera PDF‑spara‑alternativ för tillgänglighet + +Aspose.Words låter dig ange PDF‑efterlevnadsnivå. PDF/UA‑1 är den ursprungliga tillgänglighetsstandarden, medan PDF/UA‑2 lägger till några nyare taggar. Välj den som matchar dina kunders krav. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **Vad “Compliance” gör:** Att sätta `PdfCompliance.PdfUax1` instruerar Aspose.Words att bädda in korrekta taggar, logisk läsordning och alternativ text för bilder—precis vad skärmläsarprogram letar efter. + +## Steg 4: Spara dokumentet som en tillgänglig PDF + +Nu är det tunga lyftet gjort; vi instruerar bara Aspose.Words att skriva PDF‑filen med de alternativ vi just definierat. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +När den här raden har körts hittar du `output.pdf` i den angivna mappen. Öppna den i Adobe Acrobat Reader och kontrollera **File → Properties → Description → PDF/A and PDF/UA** för att verifiera efterlevnad. + +## Steg 5: Verifiera tillgänglighet (Valfritt men rekommenderat) + +Även om koden garanterar en taggad PDF‑utdata, hjälper en snabb manuell kontroll att fånga eventuellt anpassat innehåll som kan behöva extra uppmärksamhet. + +1. Öppna `output.pdf` i Adobe Acrobat Pro. +2. Gå till **Tools → Accessibility → Full Check**. +3. Kör kontrollen och granska eventuella varningar (t.ex. saknad alt‑text för anpassade bilder). + +Om rapporten visar inga fel har du framgångsrikt **create accessible PDF** som uppfyller PDF/UA‑1‑standarderna. + +## Vanliga variationer & kantfall + +### Konvertera flera DOCX‑filer i en loop + +Om du har en mängd dokument, omslut ladd‑/spara‑logiken i en `foreach`‑loop. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Byta till PDF/UA‑2 + +Byt bara enum‑värdet för `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Hantera anpassade typsnitt + +Om ditt DOCX‑dokument använder typsnitt som inte är installerade på servern, bädda in dem: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Att bädda in garanterar att PDF‑filen ser likadan ut på alla maskiner—en kritisk detalj när du **export docx to pdf** för externa intressenter. + +## Fullt fungerande exempel + +Nedan är det kompletta, körklara programmet som sätter ihop alla bitar. Kopiera och klistra in i en konsolapp, justera sökvägarna och tryck **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Förväntat resultat:** En fil med namnet `output.pdf` som öppnas i vilken PDF‑visare som helst, innehåller korrekta tillgänglighetstaggar och kan delas med användare som förlitar sig på hjälpmedelsteknik. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Image alt text:* *skapa tillgänglig pdf‑exempel – skärmdump av ett PDF/UA‑1‑kompatibelt dokument öppnat i Adobe Acrobat.* + +## Vanliga frågor + +- **Fungerar detta med .NET Core?** + Absolut. Aspose.Words är plattformsoberoende, så samma kod körs på Windows, Linux och macOS. + +- **Vad händer om mitt DOCX‑dokument innehåller makron?** + Makron ignoreras under konverteringen; endast det synliga innehållet renderas till PDF‑filen. + +- **Kan jag lägga till en anpassad PDF‑metadata‑titel?** + Ja—sätt `pdfSaveOptions.Metadata.Title = "Your Custom Title";` innan du sparar. + +- **Är PDF/UA‑2 allmänt stödjat?** + De flesta moderna PDF‑läsare förstår PDF/UA‑2, men om du riktar dig mot äldre verktyg är det säkrare att hålla sig till PDF/UA‑1. + +## Slutsats + +Vi har just visat hur du **create accessible PDF** från en DOCX‑fil med Aspose.Words, och täckt allt från installation av NuGet‑paketet till verifiering av PDF/UA‑efterlevnad. Genom att följa dessa steg kan du på ett pålitligt sätt **convert Word to PDF**, **save Word as PDF**, och **export docx to PDF** samtidigt som du uppfyller tillgänglighetsstandarder—en nödvändig färdighet för alla utvecklare som arbetar med företagsdokumentflöden. + +Redo för nästa utmaning? Prova att lägga till ett anpassat sidhuvud/sidfot, bädda in en PDF/A‑2b‑tagg, eller automatisera processen i ett ASP.NET Core‑webb‑API. Möjligheterna är oändliga, och den grund du byggt här gör att du kan tackla dem med självförtroende. + +Happy coding, and may your PDFs always be readable! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/swedish/net/programming-with-markdownsaveoptions/_index.md b/words/swedish/net/programming-with-markdownsaveoptions/_index.md index 57a9d3bdab..f24279b796 100644 --- a/words/swedish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/swedish/net/programming-with-markdownsaveoptions/_index.md @@ -75,6 +75,9 @@ Lär dig spara DOCX som Markdown med en komplett C#‑guide som använder Aspose ### [Spara Word-bilder – Konvertera Word till Markdown med Aspose](./save-word-images-convert-word-to-markdown-with-aspose/) Lär dig spara bilder från Word och konvertera dokument till Markdown med Aspose.Words för .NET. +### [Spara bilder – Konvertera DOCX till Markdown med Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) +Lär dig spara bilder när du konverterar DOCX till Markdown med Aspose.Words för .NET. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/swedish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..a1d8f05a7e --- /dev/null +++ b/words/swedish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Lär dig hur du sparar bilder när du konverterar en DOCX till Markdown + med Aspose.Words. Den här guiden visar också hur du extraherar bilder från Word + och sparar Word som Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: sv +og_description: Hur du sparar bilder när du konverterar en DOCX till Markdown med + Aspose.Words. Steg‑för‑steg‑guide med komplett C#‑kod. +og_title: Hur man sparar bilder – Konvertera DOCX till Markdown med Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Hur man sparar bilder – Konvertera DOCX till Markdown med Aspose.Words +url: /sv/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man sparar bilder – Konvertera DOCX till Markdown med Aspose.Words + +Har du någonsin undrat **hur man sparar bilder** när du behöver omvandla en Word‑fil till Markdown? Du är inte ensam. Många utvecklare stöter på problem när konverteringen släpper bilder i en röra av trasiga länkar, eller ännu värre – förlorar dem helt. Den goda nyheten är att Aspose.Words ger dig fin‑granulerad kontroll, så att du kan extrahera bilder från Word, bestämma var de ska placeras och ändå få ren Markdown‑utdata. + +I den här handledningen går vi igenom ett komplett, färdigt körbart C#‑exempel som visar **hur man sparar bilder** i en dedikerad mapp samtidigt som du konverterar en `.docx` till `.md`. På vägen berör vi också **convert docx to markdown**, **extract images from word**, och den bredare frågan **how to convert docx** på ett sätt som låter dig **save word as markdown** utan att förlora några resurser. + +## Förutsättningar + +- .NET 6.0 eller senare (API‑et fungerar likadant på .NET Framework 4.7+) +- En aktiv Aspose.Words‑licens eller en gratis provversion (den fria versionen lägger till en vattenstämpel i utdata, men koden fungerar likadant) +- Ett Word‑dokument som redan innehåller bilder (t.ex. `DocWithImages.docx`) +- Visual Studio 2022 eller någon editor som kan bygga C#‑projekt + +> **Proffstips:** Om du använder en provversion kan du fortfarande testa logiken för att spara bilder; kom bara ihåg att den slutgiltiga PDF/MD kommer att innehålla provvattenstämpeln. + +## Översikt av lösningen + +På en hög nivå ser processen ut så här: + +1. Läs in käll‑`.docx` med `Document`. +2. Skapa ett `MarkdownSaveOptions`‑objekt och anslut ett `IResourceSavingCallback`. +3. I callback‑metoden bestämmer du mapp och filnamn för varje bild. +4. Spara dokumentet som Markdown; callback‑metoden skriver varje bild till disk. + +Det är kärnan i **hur man sparar bilder** under en konvertering. Samma mönster fungerar för andra resurstyper (fonter, CSS, osv.) om du någonsin behöver dem. + +## Steg 1 – Läs in DOCX‑filen som innehåller bilder + +Först behöver vi en `Document`‑instans som pekar på Word‑filen du vill konvertera. Inget avancerat här; bara ett rakt fram konstruktoranrop. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Varför detta är viktigt:** Att läsa in dokumentet är det enda stället där Aspose parsar Word‑XML, så eventuella saknade fonter eller korrupta delar kommer att kasta ett undantag redan nu—innan vi ens börjar spara bilder. + +## Steg 2 – Ställ in MarkdownSaveOptions med en bild‑sparande callback + +`MarkdownSaveOptions`‑klassen låter dig koppla in i sparprocessen via `ResourceSavingCallback`. Den callback‑metoden får ett `ResourceSavingArgs`‑objekt för varje extern resurs (bilder, CSS, osv.) som Aspose behöver skriva. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Implementering av callback‑metoden + +Nedan är den fullständiga implementeringen av `ImageSavingCallback`. Den skapar en `Images`‑undermapp bredvid Markdown‑filen, ger varje bild ett sekventiellt namn (`img_0.png`, `img_1.jpg`, …) och låter dig eventuellt strömma bilden någon annanstans (t.ex. till en molnbucket). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Hur detta hjälper dig:** Genom att anpassa `args.FileName` styr du exakt **hur man sparar bilder**—oavsett om det är i en platt mapp, en datum‑baserad hierarki, eller till och med en databas‑BLOB. Callback‑metoden körs för varje bild, så du behöver aldrig efterbearbeta Markdown‑filen senare. + +## Steg 3 – Spara dokumentet som Markdown + +Nu när alternativen och callback‑metoden är klara är den faktiska konverteringen en enradare. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +När raden är klar kommer du att ha: + +- `Doc.md` – Markdown‑representationen av ditt Word‑innehåll. +- `Images\img_0.png`, `Images\img_1.jpg`, … – varje bild extraherad från den ursprungliga DOCX‑filen. + +## Fullt, färdigt körbart exempel + +När vi sätter ihop allt, här är en fristående konsolapp som du kan kopiera‑och‑klistra in i ett nytt C#‑projekt. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Förväntat resultat + +Efter att du har kört programmet: + +- Öppna `C:\Docs\Doc.md` i någon textredigerare. Du kommer att se Markdown‑bildlänkar som `![](Images/img_0.png)`. +- `Images`‑mappen kommer att innehålla varje extraherad bild, namngiven sekventiellt. +- Markdown‑filen kommer att renderas korrekt i alla visare som stödjer lokala bilder (VS Code‑förhandsgranskning, GitHub, osv.). + +## Vanliga frågor (FAQ) + +### Fungerar detta med andra bildformat (SVG, TIFF)? + +Ja. `Path.GetExtension(args.FileName)` bevarar den ursprungliga filändelsen, så SVG, TIFF, BMP och även EMF sparas oförändrade. Det enda undantaget är att vissa Markdown‑renderare kanske inte visar SVG inline; i så fall kan du konvertera SVG till PNG i förväg. + +### Vad händer om jag behöver bädda in bilder som Base64 istället för separata filer? + +Inuti `ResourceSaving` kan du ersätta den fysiska filskrivningen med ett minnesström och sedan manuellt modifiera Markdown‑länken. Aspose erbjuder ingen direkt ”embed as Base64”‑växel, men callback‑metoden ger dig full kontroll över `args.Stream`. + +### Hur skiljer sig detta från den inbyggda `ExportImages`‑metoden? + +`ExportImages` extraherar alla bilder till en mapp **utan** att generera Markdown. Vår callback kopplar ihop de två handlingarna, vilket garanterar att bildfilnamnen matchar referenserna i `.md`. Denna synkronisering är nyckeln till **hur man sparar bilder** korrekt under konverteringen. + +### Kan jag konvertera flera DOCX‑filer i ett batch‑jobb? + +Absolut. Packa in kärnlogiken i en `foreach (var file in Directory.GetFiles(..., "*.docx"))`‑loop, justera utgångssökvägarna och återanvänd samma `ImageSavingCallback`. Kom bara ihåg att skapa ett nytt `MarkdownSaveOptions` för varje dokument, eftersom `args.DestinationFileName` förändras per iteration. + +## Edge Cases & bästa praxis + +| Situation | What to Watch Out For | Recommended Fix | +|-----------|----------------------|-----------------| +| **Stort DOCX (hundratals MB)** | Minnesbelastning vid inläsning | Use `LoadOptions` with `LoadFormat.Docx` and set `LoadOptions.LoadFormat = LoadFormat.Docx` to stream‑load parts | +| **Bildnamn kolliderar** | Om källan redan har `img_0.png` i mål‑mappen kan du skriva över den | Append a GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Skrivskyddad utmatningsmapp** | Save throws `UnauthorizedAccessException` | Ensure the process runs with appropriate permissions or choose a writable path | +| **Icke‑bildresurser (CSS, fonter)** | Callback‑metoden får dem också | Guard with `if (args.ResourceType != ResourceType.Image) return;` (already shown) | +| **Unicode‑filnamn** | Vissa filsystem hanterar tecken fel | Use `Path.GetInvalidFileNameChars()` to sanitize `args.FileName` before assigning | + +## Relaterade ämnen du kan utforska härnäst + +- **convert docx to markdown** med anpassade rubrikstilar (använd `MarkdownSaveOptions.ExportImagesAsBase64` för inline‑bilder) +- **extract images from word** med `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/swedish/net/working-with-fonts/_index.md b/words/swedish/net/working-with-fonts/_index.md index 9044e27e6a..fbb1f602d9 100644 --- a/words/swedish/net/working-with-fonts/_index.md +++ b/words/swedish/net/working-with-fonts/_index.md @@ -18,7 +18,7 @@ Handledningar för ordbehandling med teckensnitt guidar dig genom olika aspekter av ordbehandling med teckensnitt, så att du kan utföra åtgärder som att ändra teckensnittsformatering, läsa in teckensnitt från specifika kataloger, hantera ersättningsteckensnitt och mer. -Handledningarna ger dig detaljerade steg-för-steg-förklaringar för varje funktion, tillsammans med källkod för C#-språket som illustrerar koncepten. Du kommer att lära dig hur du använder klasser och metoder från Aspose.Words-biblioteket för .NET för att utföra specifika teckensnittsrelaterade uppgifter i dina Word-dokument. +Handledningarna ger dig detaljerade steg-för-steg-förklaringar för varje funktion, tillsammans med källkod för C#-språket som illustrerar koncepten. Du kommer att lära dig hur du använder klasser och metoder från Aspose.Words-biblioteket för .NET för att utföra specifika teckensnittrelaterade uppgifter i dina Word-dokument. Oavsett om du vill formatera text med olika teckensnitt, ange regler för teckensnittsersättning, ladda teckensnitt från specifika kataloger eller ta emot teckensnittmeddelanden, kommer handledningarna i "Ordbehandling med teckensnitt" att ge dig kunskapen för att enkelt utföra dessa uppgifter. @@ -30,7 +30,7 @@ Oavsett om du vill formatera text med olika teckensnitt, ange regler för tecken | [Kontrollera DrawingML-texteffekten](./check-drawingml-text-effect/) Lär dig hur du kontrollerar DrawingML-texteffekter i Word-dokument med Aspose.Words för .NET med vår detaljerade steg-för-steg-guide. Förbättra dina dokument med lätthet. | | [Ställ in teckensnittsformatering](./set-font-formatting/) | Lär dig hur du ställer in teckensnittsformatering i Word-dokument med Aspose.Words för .NET. Följ vår detaljerade steg-för-steg-guide för att förbättra din dokumentautomation. | | [Ställ in teckensnittsmarkering](./set-font-emphasis-mark/) | Lär dig hur du ställer in betoningstecken i Word-dokument med Aspose.Words för .NET med den här detaljerade steg-för-steg-guiden. Perfekt för .NET-utvecklare. | -| [Ställ in teckensnittsmappar](./set-fonts-folders/) | Lär dig hur du ställer in anpassade teckensnittsmappar i Aspose.Words för .NET med den här omfattande steg-för-steg-guiden. Perfekt för utvecklare som vill förbättra dokumentteckensnitt. | +| [Ställ in teckensnittmappar](./set-fonts-folders/) | Lär dig hur du ställer in anpassade teckensnittmappar i Aspose.Words för .NET med den här omfattande steg-för-steg-guiden. Perfekt för utvecklare som vill förbättra dokumentteckensnitt. | | [Aktivera Inaktivera teckensnittsersättning](./enable-disable-font-substitution/) | Lär dig hur du aktiverar eller inaktiverar teckensnittsersättning i Word-dokument med Aspose.Words för .NET. Se till att dina dokument ser enhetliga ut på alla plattformar. | | [Ange alternativa teckensnittsinställningar](./set-font-fallback-settings/) | Lär dig hur du ställer in inställningar för teckensnittsersättning i Aspose.Words för .NET och anpassar teckensnittsersättning i dina Word-dokument. | | [Ladda Noto-alternativinställningar](./load-noto-fallback-settings/) | Lär dig hur du laddar Noto-alternativinställningar i ett Word-dokument med Aspose.Words för .NET. Följ vår steg-för-steg-guide för att säkerställa att alla tecken visas korrekt. | @@ -51,7 +51,7 @@ Oavsett om du vill formatera text med olika teckensnitt, ange regler för tecken | [Hur man upptäcker teckensnitt i Aspose.Words – Hantera varningar och inställningar](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Lär dig hur du identifierar teckensnitt, hanterar varningsmeddelanden och justerar inställningar i Aspose.Words för .NET. | | [Hur man fångar teckensnitt i Aspose.Words – Komplett guide](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Lär dig hur du fångar teckensnitt i Aspose.Words med en komplett steg-för-steg-guide. | | [Hur man laddar DOCX och upptäcker saknade teckensnitt – Komplett C#-guide](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Lär dig hur du laddar DOCX-filer och identifierar saknade teckensnitt med Aspose.Words för .NET i en komplett C#-guide. | - +| [Aspose teckensnittsersättning: upptäck saknade teckensnitt i Word-dokument](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Lär dig hur du identifierar saknade teckensnitt i Word-dokument med Aspose.Words för .NET. | | [Aktivera varningar för teckensnittsersättning i Aspose.Words – Komplett guide](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Lär dig hur du aktiverar varningar för teckensnittsersättning i Aspose.Words för .NET med en steg-för-steg-guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/swedish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..1daacc7828 --- /dev/null +++ b/words/swedish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Lär dig hur du använder Aspose teckensnittssubstitution för att upptäcka + saknade teckensnitt när du laddar ett Word‑dokument och hämta detaljer om de saknade + teckensnitten – steg‑för‑steg‑guide. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: sv +og_description: Behärska Aspose teckensnittssubstitution för att upptäcka saknade + teckensnitt när du laddar ett Word-dokument och hämta information om saknade teckensnitt + med komplett C#‑kod. +og_title: Aspose teckensnittssubstitution – Upptäck saknade teckensnitt i Word-dokument +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose teckensnittssubstitution: Upptäck saknade teckensnitt i Word-dokument' +url: /sv/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Upptäck saknade teckensnitt i Word-dokument + +Har du någonsin undrat varför ett Word-dokument ser felaktigt ut på en annan maskin? Ofta är boven ett saknat teckensnitt, och **Aspose font substitution** är verktyget som låter dig upptäcka dessa luckor innan de blir en visuell katastrof. I den här handledningen går vi igenom hur du **upptäcker saknade teckensnitt** så snart du **laddar ett Word-dokument**, och sedan **hämtar information om saknade teckensnitt** så att du kan åtgärda eller ersätta dem. + +Vi kommer att gå igenom allt från att konfigurera varnings‑callbacken till att hämta en ren lista över saknade teckensnitt. I slutet har du ett färdigt C#‑exempel som exakt talar om vilka teckensnitt som saknades, och du förstår varför detta är viktigt för dokumentets integritet. + +--- + +## Förutsättningar – Vad du behöver innan du börjar + +- **Aspose.Words for .NET** (v23.12 eller senare rekommenderas). +- En .NET‑utvecklingsmiljö (Visual Studio, Rider eller `dotnet`‑CLI). +- Ett exempel‑DOCX som medvetet använder ett teckensnitt du inte har installerat—kalla det `DocumentWithMissingFont.docx`. +- Grundläggande C#‑kunskaper—inget avancerat, bara förmågan att köra ett konsolprogram. + +Om någon av dessa är obekanta, pausa och installera NuGet‑paketet: + +```bash +dotnet add package Aspose.Words +``` + +Det är allt. Inga extra teckensnitt, inga externa tjänster. + +## Steg 1: Ladda Word-dokumentet (och utlösa teckensnittskontroller) + +Det första du gör är att **ladda ett Word-dokument**. Aspose.Words analyserar filen och om den inte kan hitta ett refererat teckensnitt, köar den en *FontSubstitution*-varning. Här är koden som laddar dokumentet: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Varför detta är viktigt:** Att ladda dokumentet tidigt ger Aspose möjlighet att skanna varje textkörning, stil och inbäddat objekt. Om ett teckensnitt inte hittas på systemet eller i den anpassade teckensnittsmappen får du en varning senare. + +## Steg 2: Anslut en varnings‑callback för att fånga substitutionshändelser + +Aspose.Words använder en callback‑mekanism för att informera dig om problem som saknade teckensnitt. Genom att tilldela en implementation av `IWarningCallback` till `doc.WarningCallback` kan du fånga varje varning när den inträffar. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Proffstips:** Du kan ansluta flera callbacks (t.ex. loggning, UI‑uppdateringar) genom att omsluta dem i ett kompositmönster, men för den här handledningen håller en enda callback saker tydliga. + +## Steg 3: Implementera Font Substitution‑varningscallbacken + +Nu definierar vi klassen som faktiskt utför arbetet. Callbacken får ett `WarningInfo`‑objekt; vi filtrerar på `WarningType.FontSubstitution` och sparar beskrivningen för senare användning. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Vad som händer:** När Aspose stöter på ett saknat teckensnitt skapar den en varning som “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Vår callback skriver ut den raden och sparar den. + +## Steg 4: Bearbeta dokumentet (valfritt) och samla saknade teckensnitt + +Om du bara behöver **upptäcka saknade teckensnitt** räcker laddningssteget—varningarna avfyras automatiskt. Många utvecklare behöver dock **hämta information om saknade teckensnitt** efter att ha utfört vissa operationer (t.ex. spara, konvertera). Nedan tvingar vi en liten operation—spara till PDF—för att säkerställa att alla varningar avges, och sedan hämtar vi de samlade meddelandena. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Förväntad konsolutmatning** (exempel): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Observera hur varje rad tydligt anger det ursprungliga teckensnittet och det reservteckensnitt som Aspose valde. Det är kärnan i **aspose font substitution**‑rapporteringen. + +## Steg 5: Avancerat – Använda anpassade teckensnittskällor för att minska substitutioner + +Ibland *har* du de saknade teckensnitten, bara inte i standardsystemmappen. Aspose.Words låter dig peka på en anpassad katalog via `FontSettings`. Att lägga till detta steg kan kraftigt minska antalet substitutionsvarningar. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Varför lägga till detta?** Om du distribuerar dokument över maskiner, säkerställer att paketera de nödvändiga teckensnitten i en känd mapp samma visuella utseende överallt. Det gör också din **detect missing fonts**‑rutin mer exakt eftersom Aspose kontrollerar den mappen innan den faller tillbaka. + +## Komplett fungerande exempel + +När allt sätts ihop, här är ett enda, kopiera‑och‑klistra‑klart konsolprogram. Spara det som `Program.cs` och kör det med `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Vad du bör se:** Om källdokumentet DOCX refererar till teckensnitt du inte har, skriver konsolen ut varje substitutionsrad följt av en kort sammanfattning. Om alla teckensnitt finns, får du meddelandet “No missing fonts were detected.” + +## Vanliga fallgropar & hur man undviker dem + +| Problem | Varför det händer | Lösning | +|-------|----------------|-----| +| **Inga varningar visas** | Dokumentet använder bara systemteckensnitt, eller så har du redan lagt till en anpassad mapp som innehåller de saknade teckensnitten. | Verifiera att DOCX verkligen refererar till ett otillgängligt teckensnitt. Du kan öppna det i Word och ändra ett stycke till ett sällsynt teckensnitt (t.ex. “Papyrus”). | +| **Duplicerade meddelanden** | Samma teckensnitt används i flera körningar, vilket orsakar flera varningar. | Av‑duplicera listan med `Distinct()` om du bara behöver en unik uppsättning. | +| **Prestandaproblem på stora dokument** | Varje varning bearbetas på UI‑tråden. | Kör laddningen i en bakgrundsuppgift eller använd `Parallel.ForEach` för efterbehandling. | +| **Fel reservteckensnitt** | Asposes standardreservteckensnitt kanske inte matchar ditt varumärke. | Ställ in `FontSettings.SubstitutionSettings.DefaultFontName` till ett föredraget reservteckensnitt (t.ex. “Calibri”). | + +## Utöka lösningen – Exportera saknade teckensnitt till JSON + +Om du bygger en webbtjänst som behöver rapportera saknade teckensnitt tillbaka till en klient, är serialisering av listan trivialt: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Nu kan ditt API returnera en ren JSON‑payload som ett annat system kan konsumera. + +## Slutsats + +I den här guiden demonstrerade vi **Aspose font substitution** från början till slut: ladda ett Word-dokument, ansluta en varnings‑callback, fånga varje *detect missing fonts*-händelse, och slutligen **retrieve missing font**‑information för rapportering eller åtgärd. Genom att lägga till valfria anpassade teckensnittsmappar kan du minska listan över substitutioner, och med några extra rader kan du till och med exportera resultaten som JSON. + +Kom ihåg att den visuella integriteten i dina dokument beror på de teckensnitt de använder. Med tekniken som visas här blir du aldrig överraskad av ett oväntat reservteckensnitt igen. + +Redo att ta nästa steg? Försök integrera denna logik i en större dokument‑bearbetningspipeline, eller utforska Aspose.Words andra funktioner som teckensnitts‑inbäddning (`doc.FontSettings.EmbeddedFonts`). Möjligheterna är oändliga, och dina användare kommer att tacka dig för det polerade resultatet. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/ai-powered-document-processing/_index.md b/words/thai/net/ai-powered-document-processing/_index.md index 5a3df63e35..14e506bfe3 100644 --- a/words/thai/net/ai-powered-document-processing/_index.md +++ b/words/thai/net/ai-powered-document-processing/_index.md @@ -25,11 +25,11 @@ ## ยกระดับเกมของคุณด้วย Google AI -ถัดไปเรามี [การทำงานกับโมเดล AI ของ Google](./working-with-google-ai-model/) บทช่วยสอน นี่คือสิ่งสำคัญ – AI ของ Google สามารถทำงานได้อย่างมหัศจรรย์เมื่อจับคู่กับ Aspose.Words ในบทช่วยสอนนี้ คุณจะได้สำรวจวิธีใช้ประโยชน์จาก AI อันทรงพลังของ Google เพื่อสร้างบทสรุปที่กระชับและง่ายดาย ลองนึกภาพว่า คุณมีรายงานยาวๆ ที่ต้องอ่าน แต่ด้วยบทสรุปที่สร้างเสร็จภายในไม่กี่วินาที คุณสามารถมุ่งเน้นไปที่การตัดสินใจได้แทนที่จะต้องอ่านหน้ากระดาษนับไม่ถ้วนอย่างลึกซึ้ง นับเป็นประสิทธิภาพสูงสุดและเป็นตัวเปลี่ยนเกมสำหรับมืออาชีพที่ยุ่งวุ่นวาย! +ถัดไปเรามี [การทำงานกับโมเดล AIของ Google](./working-with-google-ai-model/) บทช่วยสอน นี่คือสิ่งสำคัญ – AI ของ Google สามารถทำงานได้อย่างมหัศจรรย์เมื่อจับคู่กับ Aspose.Words ในบทช่วยสอนนี้ คุณจะได้สำรวจวิธีใช้ประโยชน์จาก AI อันทรงพลังของ Google เพื่อสร้างบทสรุปที่กระชับและง่ายดาย ลองนึกภาพว่า คุณมีรายงานยาวๆ ที่ต้องอ่าน แต่ด้วยบทสรุปที่สร้างเสร็จภายในไม่กี่วินาที คุณสามารถมุ่งเน้นไปที่การตัดสินใจได้แทนที่จะต้องอ่านหน้ากระดาษนับไม่ถ้วนอย่างลึกซึ้ง นับเป็นประสิทธิภาพสูงสุดและเป็นตัวเปลี่ยนเกมสำหรับมืออาชีพที่ยุ่งวุ่นวาย! ## OpenAI สำหรับการสรุปเอกสาร -เคยฝันที่จะเปลี่ยนเอกสารยาวๆ ของคุณให้กลายเป็นบทสรุปสั้นๆ ที่เข้าใจง่ายหรือไม่? [การทำงานกับโมเดล AI แบบเปิด](./working-with-open-ai-model/) บทช่วยสอนคือคำตอบของคุณ! บทช่วยสอนนี้จะช่วยเปิดประตูสู่การใช้โมเดลของ OpenAI ในทางปฏิบัติสำหรับงานสรุปข้อมูล คุณสามารถพิจารณาว่าเป็นอาวุธลับในโลกแห่งการประมวลผลเอกสารได้ ซึ่งไม่เพียงแต่ประหยัดเวลาเท่านั้น แต่ยังช่วยให้คุณไม่พลาดข้อมูลสำคัญอีกด้วย +เคยฝันที่จะเปลี่ยนเอกสารยาวๆ ของคุณให้กลายเป็นบทสรุปสั้นๆ ที่เข้าใจง่ายหรือไม่? [การทำงานกับโมเดล AIแบบเปิด](./working-with-open-ai-model/) บทช่วยสอนคือคำตอบของคุณ! บทช่วยสอนนี้จะช่วยเปิดประตูสู่การใช้โมเดลของ OpenAI ในทางปฏิบัติสำหรับงานสรุปข้อมูล คุณสามารถพิจารณาว่าเป็นอาวุธลับในโลกแห่งการประมวลผลเอกสารได้ ซึ่งไม่เพียงแต่ประหยัดเวลาเท่านั้น แต่ยังช่วยให้คุณไม่พลาดข้อมูลสำคัญอีกด้วย ## การเรียนรู้เทคนิคการสรุปผลอย่างเชี่ยวชาญ @@ -39,9 +39,12 @@ | ชื่อเรื่อง | คำอธิบาย | - - [การทำงานกับโมเดล AI](./working-with-ai-model/) | เรียนรู้วิธีใช้ Aspose.Words สำหรับ .NET เพื่อสรุปเอกสารด้วย AI ขั้นตอนง่ายๆ เพื่อเพิ่มประสิทธิภาพการจัดการเอกสาร - -| [การทำงานกับโมเดล AI ของ Google](./working-with-google-ai-model/) ยกระดับการประมวลผลเอกสารของคุณด้วย Aspose.Words สำหรับ .NET และ Google AI เพื่อสร้างบทสรุปสั้นๆ ได้โดยไม่ต้องใช้ความพยายาม - -| [การทำงานกับโมเดล AI แบบเปิด](./working-with-open-ai-model/) | ปลดล็อกการสรุปเอกสารอย่างมีประสิทธิภาพโดยใช้ Aspose.Words สำหรับ .NET พร้อมด้วยโมเดลอันทรงพลังของ OpenAI เจาะลึกคู่มือฉบับสมบูรณ์นี้เลยตอนนี้ - -| [การทำงานกับตัวเลือกการสรุป](./working-with-summarize-options/) | เรียนรู้การสรุปเอกสาร Word ได้อย่างมีประสิทธิภาพโดยใช้ Aspose.Words สำหรับ .NET พร้อมคำแนะนำทีละขั้นตอนในการบูรณาการโมเดล AI เพื่อรับข้อมูลเชิงลึกอย่างรวดเร็ว | +| [การทำงานกับโมเดล AIของ Google](./working-with-google-ai-model/) ยกระดับการประมวลผลเอกสารของคุณด้วย Aspose.Words สำหรับ .NET และ Google AI เพื่อสร้างบทสรุปสั้นๆ ได้โดยไม่ต้องใช้ความพยายาม - +| [การทำงานกับโมเดล AIแบบเปิด](./working-with-open-ai-model/) | ปลดล็อกการสรุปเอกสารอย่างมีประสิทธิภาพโดยใช้ Aspose.Words สำหรับ .NET พร้อมด้วยโมเดลอันทรงพลังของ OpenAI เจาะลึกคู่มือฉบับสมบูรณ์นี้เลยตอนนี้ - +| [การทำงานกับตัวเลือกการสรุป](./working-with-summarize-options/) | เรียนรู้การสรุปเอกสาร Word ได้อย่างมีประสิทธิภาพโดยใช้ Aspose.Words สำหรับ .NET พร้อมคำแนะนำทีละขั้นตอนในการบูรณาการโมเดล AI เพื่อรับข้อมูลเชิงลึกอย่างรวดเร็ว - +- [สรุปเอกสาร Word ด้วย C# – คู่มือฉบับสมบูรณ์โดยใช้ Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | เรียนรู้วิธีสรุปเอกสาร Word ด้วย C# โดยใช้โมเดล Anthropic Claude อย่างมีประสิทธิภาพ - +- [วิธีใช้ LLM กับ Aspose.Words – เขียนย่อหน้าใหม่ใน C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | ใช้ LLM กับ Aspose.Words เพื่อเขียนย่อหน้าใหม่ใน C# อย่างมีประสิทธิภาพ - +- [วิธีตรวจสอบไวยากรณ์ใน C# – คู่มือฉบับสมบูรณ์สำหรับเอกสาร Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | เรียนรู้วิธีใช้ Aspose.Words สำหรับ .NET เพื่อตรวจสอบและแก้ไขไวยากรณ์ในเอกสาร Word ด้วย C# อย่างมีประสิทธิภาพ - {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/thai/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..e1d9aee304 --- /dev/null +++ b/words/thai/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,232 @@ +--- +category: general +date: 2026-05-04 +description: เรียนรู้วิธีตรวจสอบไวยากรณ์ในเอกสาร Word ด้วย C# บทเรียนนี้ยังครอบคลุมวิธีโหลดไฟล์ + DOCX ด้วย C# และใช้ Aspose.Words AI เพื่อผลลัพธ์ที่แม่นยำ +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: th +og_description: วิธีตรวจสอบไวยากรณ์ในเอกสาร Word ด้วย C#? ทำตามบทแนะนำนี้เพื่อโหลดไฟล์ + DOCX ด้วย C# และรันการตรวจสอบไวยากรณ์ที่ใช้ AI ของ Aspose.Words. +og_title: วิธีตรวจสอบไวยากรณ์ใน C# – คู่มือเต็มขั้นตอนโดยละเอียด +tags: +- Aspose.Words +- C# +- Grammar Checking +title: วิธีตรวจสอบไวยากรณ์ใน C# – คู่มือฉบับสมบูรณ์สำหรับเอกสาร Word +url: /th/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีตรวจสอบไวยากรณ์ใน C# – คู่มือฉบับสมบูรณ์สำหรับเอกสาร Word + +เคยสงสัย **วิธีตรวจสอบไวยากรณ์** ในเอกสาร Word โดยไม่ต้องออกจาก IDE ของคุณหรือไม่? คุณไม่ได้เป็นคนเดียวที่เป็นเช่นนั้น นักพัฒนาจำนวนมากต้องตรวจสอบรายงานที่ผู้ใช้สร้าง, อีเมลอัตโนมัติ, หรือแม้กระทั่งเอกสารก่อนที่จะส่งออก ข่าวดีคือ? ด้วย Aspose.Words AI คุณสามารถทำได้โดยโปรแกรมและกระบวนการทั้งหมดเข้ากับเวิร์กโฟลว์ C# ปกติได้อย่างลงตัว. + +ในคู่มือนี้เราจะพาคุณผ่านทุกอย่างที่ต้องรู้: ตั้งแต่การโหลดไฟล์ DOCX ด้วย C# ไปจนถึงการเรียกใช้ AI grammar checker และการตีความผลลัพธ์ เมื่อจบคุณจะมีโค้ดสั้นที่พร้อมรันซึ่งพิมพ์ระดับความรุนแรงของแต่ละปัญหา, ข้อความ, และคำแนะนำการแทนที่—ไม่ต้องคัดลอก‑วางด้วยตนเอง. + +## สิ่งที่คุณจะได้เรียนรู้ + +- **วิธีตรวจสอบไวยากรณ์** ในเอกสาร Word ด้วย Aspose.Words AI. +- ขั้นตอนที่แน่นอนในการ **โหลดไฟล์ DOCX ด้วย C#** ด้วยคลาส `Document`. +- วิธีจัดการกับอ็อบเจ็กต์ `GrammarCheckResult`, วนลูปผ่านปัญหา, และแสดงข้อมูลวินิจฉัยที่เป็นประโยชน์. +- ข้อผิดพลาดทั่วไป (เช่น การไม่มีใบอนุญาต) และเคล็ดลับเพื่อทำให้โซลูชันพร้อมใช้งานในสภาพแวดล้อมการผลิต. + +> **ข้อกำหนดเบื้องต้น:** .NET 6.0+ (หรือ .NET Framework 4.6+), Visual Studio 2022 (หรือ IDE ใดก็ได้ที่คุณชอบ), และใบอนุญาต Aspose.Words for .NET (รุ่นทดลองฟรีใช้สำหรับการทดสอบ). หากคุณยังไม่ได้ติดตั้งแพ็กเกจ NuGet ให้รัน: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +ตอนนี้, มาดำดิ่งกันเลย. + +## ขั้นตอนที่ 1: โหลดไฟล์ DOCX ด้วย C# + +ก่อนที่การตรวจสอบไวยากรณ์จะทำงานได้ เอกสารต้องถูกโหลดเข้าสู่หน่วยความจำ Aspose.Words ทำให้ขั้นตอนนี้เป็นบรรทัดเดียว, แต่มีรายละเอียดเล็กน้อยที่ควรทราบ. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** +- การใช้ `Path.Combine` รับประกันความเข้ากันได้ข้ามแพลตฟอร์ม. +- การตรวจสอบการมีอยู่ของไฟล์ป้องกันการครชในขณะรันที่อาจทำให้ตรรกะการตรวจสอบไวยากรณ์จริง ๆ ถูกบัง. +- เมื่อคุณ **โหลดไฟล์ DOCX ด้วย C#**, Aspose จะทำการพาร์สสไตล์ทั้งหมด, ส่วนหัว, ส่วนท้าย, และแม้แต่ข้อความที่ซ่อนอยู่, ทำให้ AI ได้ภาพรวมของเอกสารอย่างครบถ้วน. + +> **เคล็ดลับมืออาชีพ:** หากคุณต้องทำงานกับสตรีม (เช่นไฟล์ที่อัปโหลดจากเว็บ), คุณสามารถแทนที่การเรียก `new Document(docPath)` ด้วย `new Document(stream)`. + +## ขั้นตอนที่ 2: เลือกโมเดล AI สำหรับการตรวจสอบไวยากรณ์ + +Aspose.Words AI รองรับหลายโมเดล, ตั้งแต่โมเดลโลคัลที่เบาไปจนถึงเวอร์ชัน GPT บนคลาวด์. สำหรับสถานการณ์ส่วนใหญ่, **GPT‑3.5 Turbo** ให้สมดุลที่ดีระหว่างความเร็วและความแม่นยำ. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**ทำไมต้องเลือก GPT‑3.5 Turbo?** +- มันเร็วพอสำหรับการประมวลผลเป็นชุดของหลายสิบไฟล์ต่อหนึ่งนาที. +- ค่าใช้จ่าย (หากคุณอยู่ในแผนชำระเงิน) ต่ำกว่า GPT‑4 แต่ยังสามารถจับข้อผิดพลาดทั่วไปส่วนใหญ่ได้. +- API จะจัดการขีดจำกัดโทเคนโดยอัตโนมัติ, ดังนั้นคุณไม่จำเป็นต้องแบ่งเอกสารขนาดใหญ่ด้วยตนเอง. + +หากคุณต้องการวิธีออฟไลน์, ให้แทนที่ `AiModelType.Gpt35Turbo` ด้วย `AiModelType.Local` (ต้องมีแพ็กเกจโมเดลออฟไลน์เพิ่มเติม). + +## ขั้นตอนที่ 3: วนลูปผ่านปัญหาและแสดงข้อเสนอแนะที่เป็นประโยชน์ + +`GrammarCheckResult` มีคอลเลกชันของอ็อบเจ็กต์ `GrammarIssue`. แต่ละปัญหาจะให้ระดับความรุนแรง, ข้อความที่มนุษย์อ่านได้, และการแทนที่ที่แนะนำ. มาพิมพ์ออกอย่างสวยงามกัน. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**ความหมายของฟิลด์:** +- `Severity` – โดยทั่วไปเป็น `Info`, `Warning`, หรือ `Error`. ให้ถือว่า `Error` ต้องแก้ไขก่อนเผยแพร่. +- `Message` – คำอธิบายสั้น ๆ ของปัญหา (เช่น “Subject‑verb agreement”). +- `SuggestedReplacement` – การแก้ไขที่ AI แนะนำ; คุณสามารถนำไปใช้โดยอัตโนมัติหากเชื่อมั่นโมเดล, หรือแสดงให้ผู้ตรวจสอบมนุษย์. + +> **กรณีขอบ:** บางปัญหาอาจมี `SuggestedReplacement` ว่างเปล่า (เช่นข้อเสนอแนะสไตล์). ในกรณีนั้นให้ทำเครื่องหมายตำแหน่งเพื่อการตรวจสอบด้วยมือ. + +## ตัวอย่างการทำงานเต็มรูปแบบ + +เมื่อนำทั้งหมดมารวมกัน, นี่คือแอปคอนโซลแบบอิสระที่คุณสามารถคัดลอก‑วางลงในโปรเจกต์ .NET ใหม่ได้. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง (ตัวอย่าง):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +หากคุณรันโปรแกรมกับเอกสารที่สะอาด, คุณจะเห็นบรรทัด “✅ No grammar issues detected.” แทน. + +## การจัดการกับข้อผิดพลาดทั่วไป + +| ปัญหา | สาเหตุ | วิธีแก้เร็ว | +|---------|----------------|-----------| +| **LicenseException** | ไลบรารี Aspose ต้องการใบอนุญาตที่ถูกต้องสำหรับการใช้งานในสภาพแวดล้อมการผลิต. | ใส่ `License license = new License(); license.SetLicense("Aspose.Words.lic");` ที่จุดเริ่มต้นของ `Main`. | +| **Network timeout** | การเรียกโมเดล AI ไปยังคลาวด์ใช้เวลานานเกินค่า timeout เริ่มต้น 100 s. | เพิ่ม timeout ด้วย `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` ก่อนเรียก `CheckGrammar`. | +| **Large documents (> 10 MB)** | โมเดลคลาวด์บางตัวตัดข้อมูลที่ส่งเข้า. | แบ่งเอกสารเป็นส่วนโดยใช้ `document.Sections` แล้วรันการตรวจสอบต่อส่วน, จากนั้นรวมผลลัพธ์. | +| **Missing suggestions** | โมเดลไม่สามารถสร้างการแทนที่ได้ (เช่นวลีที่คลุมเครือ). | บันทึกปัญหาเพื่อการตรวจสอบด้วยมือ; อย่าใช้การแทนที่ที่ว่างเปล่าโดยอัตโนมัติ. | + +## การขยายโซลูชัน + +- **การแก้ไขอัตโนมัติ:** วนลูปผ่าน `grammarResult.Issues` และแทนที่ข้อความด้วย `document.Range.Replace`. อย่าลืมสำรองไฟล์ต้นฉบับก่อน. +- **การประมวลผลเป็นชุด:** ห่อหุ้มกระบวนการทั้งหมดใน `foreach` ที่ไล่ผ่านไดเรกทอรีของไฟล์ DOCX. เก็บแต่ละรายงานเป็นไฟล์ JSON เพื่อการวิเคราะห์ต่อไป. +- **บูรณาการกับ ASP.NET:** เปิดเผย endpoint ที่รับไฟล์ DOCX ที่อัปโหลด, รันการตรวจสอบ, และส่งคืน payload JSON ของปัญหา. + +## ภาพประกอบ + +แผนภาพกระบวนการตรวจสอบไวยากรณ์ + +*แผนภาพด้านบนแสดงกระบวนการสามขั้นตอน: โหลด DOCX → รันการตรวจสอบไวยากรณ์ด้วย AI → แสดงผลปัญหา.* + +## สรุป + +เราได้อธิบาย **วิธีตรวจสอบไวยากรณ์** ในเอกสาร Word ด้วย C#, แสดงโค้ดที่แน่นอนในการ **โหลดไฟล์ DOCX ด้วย C#**, และสอนวิธีตีความข้อเสนอแนะที่สร้างโดย AI. ด้วย Aspose.Words AI, คุณจะได้เครื่องตรวจสอบไวยากรณ์ที่ทรงพลัง, รองรับคลาวด์, ซึ่งรวมเข้ากับแอปพลิเคชัน .NET ใดก็ได้อย่างราบรื่น. + +ขั้นตอนต่อไป? ลองทำลูปการแก้ไขอัตโนมัติ, ทดลองใช้ `AiModelType.Gpt4` รุ่นใหม่เพื่อรับข้อเสนอแนะที่แม่นยำยิ่งขึ้น, หรือรวมกับไลบรารีตรวจสอบการสะกดเพื่อสร้างระบบตรวจทานแบบเต็มรูปแบบ. ความเป็นไปได้แทบไม่มีที่สิ้นสุด, และคุณมีพื้นฐานที่มั่นคงสำหรับการต่อยอด. + +มีคำถามหรือเจอกรณีขอบที่ซับซ้อน? แสดงความคิดเห็นด้านล่าง, และขอให้สนุกกับการเขียนโค้ด! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/thai/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..d24e16e406 --- /dev/null +++ b/words/thai/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-05-04 +description: วิธีใช้ LLM เพื่อแก้ไขเอกสารด้วย Aspose – เรียนรู้การแทนที่ข้อความในย่อหน้า, + การเชื่อมต่อกับ LLM ภายในเครื่อง, และการเขียนข้อความใหม่ด้วย AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: th +og_description: วิธีใช้ LLM เพื่อแก้ไขเอกสารด้วย Aspose คู่มือนี้แสดงวิธีเชื่อมต่อกับ + LLM ภายในเครื่อง, แทนที่ข้อความในย่อหน้า, และเขียนข้อความใหม่ด้วย AI. +og_title: วิธีใช้ LLM กับ Aspose.Words – เขียนย่อหน้าใหม่ใน C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: วิธีใช้ LLM กับ Aspose.Words – เขียนย่อหน้าใหม่ใน C# +url: /th/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีใช้ LLM กับ Aspose.Words – เขียนใหม่ย่อหน้าด้วย C# + +เคยสงสัย **how to use LLM** ว่าจะทำให้เอกสาร Word ดูดีขึ้นโดยไม่ต้องเปิดด้วยตนเองหรือไม่? คุณไม่ได้เป็นคนเดียวที่มีความคิดเช่นนั้น นักพัฒนาจำนวนมากเจออุปสรรคเมื่อจำเป็นต้อง *replace paragraph text* อย่างโปรแกรมเมชันแต่ขาดเวิร์กโฟลว์ที่ขับเคลื่อนด้วย AI ที่สะอาด + +ในบทแนะนำนี้ เราจะเชื่อมต่อ large language model ภายในเครื่อง, ป้อนส่วนหนึ่งจากไฟล์ `.docx` ให้มัน, ขอให้มัน **rewrite text using AI**, และสุดท้ายบันทึกเอกสารที่อัปเดต—ทั้งหมดด้วย Aspose.Words. เมื่อจบคุณจะมีแอปคอนโซล C# ที่พร้อมรันซึ่งแสดงกระบวนการทั้งหมด + +> **What you’ll get:** ตัวอย่างที่สมบูรณ์และสามารถรันได้, คำอธิบายของแต่ละขั้นตอน, เคล็ดลับสำหรับกรณีขอบ, และไอเดียสำหรับการขยายโซลูชัน + +## สิ่งที่คุณต้องการ + +- **.NET 6+** (หรือ .NET Framework 4.7.2 – โค้ดทำงานได้ทั้งสองเวอร์ชัน) +- **Aspose.Words for .NET** (แพ็กเกจ NuGet `Aspose.Words`) +- **local LLM server** ที่เปิดเผย endpoint HTTP แบบง่าย `/generate` (เช่น Ollama, LMStudio, หรือบริการ Flask ที่กำหนดเอง) +- ความคุ้นเคยพื้นฐานกับ C# และโค้ด HTTP client + +ไม่จำเป็นต้องใช้ SDK เพิ่มเติม; ทุกอย่างที่เหลืออยู่ในโค้ดที่เราจะเขียนร่วมกัน + +## ขั้นตอนที่ 1: How to Use LLM to Replace Paragraph Text + +สิ่งแรกที่เราต้องทำคือระบุย่อหน้าที่ต้องการแก้ไข. Aspose.Words ทำให้เรื่องนี้ง่ายดายโดยเปิดเผยโมเดลอ็อบเจ็กต์ที่ครบถ้วน + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** +การเลือกโหนดที่ถูกต้องจะป้องกันไม่ให้คุณเขียนทับหัวข้อหรือ ตารางโดยโดยบังเอิญ. ด้วยการใช้วิธี **replace paragraph text** เราจะรักษาโครงสร้างเอกสารไว้โดยเฉพาะส่วนเนื้อหาที่เราต้องการแก้ไขเท่านั้น + +> **Pro tip:** หากเอกสารของคุณมีส่วนที่มีความยาวเปลี่ยนแปลง, ใช้ `document.GetChildNodes(NodeType.Paragraph, true)` และ LINQ เพื่อค้นหาย่อหน้าตามข้อความหรือสไตล์ของมัน. + +## ขั้นตอนที่ 2: Connect to a Local LLM Endpoint + +ตอนนี้เรามีข้อความแล้ว, เราต้องส่งไปยัง LLM. ตัวอย่างใช้คลาส wrapper ง่าย `LocalLargeLanguageModel` ที่ซ่อนการทำงานของ HTTP. คุณสามารถแทนที่ด้วยการเรียก `HttpClient` หากต้องการ + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**ทำไมเราถึงเชื่อมต่อแบบนี้:** +การตั้งค่า **connect to local llm** จะลดความหน่วง, เก็บข้อมูลภายในองค์กร, และหลีกเลี่ยงค่าใช้จ่าย API. Wrapper ยังทำให้โค้ดต่อมาสะอาดขึ้น, ให้เรามุ่งเน้นที่ตรรกะ **rewrite text using ai** + +## ขั้นตอนที่ 3: Rewrite Text Using AI with Aspose.Words + +เมื่อมีข้อความย่อหน้าในมือและ LLM พร้อม, เราจะสร้าง prompt ที่บอกโมเดลอย่างชัดเจนว่าเราต้องการอะไร—rewrite ในโทนทางการ. คุณสามารถปรับแต่ง prompt สำหรับสไตล์อื่น (เป็นมิตร, เทคนิค, ฯลฯ) + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**ทำไมวิธีนี้ถึงได้ผล:** +LLM ทำงานโดยอิง prompt; การให้คำสั่งที่ชัดเจน (“Rewrite … in a formal tone”) จะให้ผลลัพธ์สม่ำเสมอ. ขั้นตอน **rewrite text using ai** เป็นหัวใจของบทแนะนำ – แสดงให้เห็นว่า AI สามารถฝังลงในเวิร์กโฟลว์ของเอกสารได้โดยตรง + +## ขั้นตอนที่ 4: Edit the Document and Save Changes + +ตอนนี้เราจะแทนที่ run ดั้งเดิมด้วยเนื้อหาใหม่. Aspose.Words เก็บข้อความในอ็อบเจ็กต์ `Run`, ดังนั้นการลบข้อมูลเดิมก่อนจะช่วยหลีกเลี่ยงศิลปะการจัดรูปแบบที่เหลืออยู่ + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**หมายเหตุกรณีขอบ:** +หากย่อดั้งเดิมมีการจัดรูปแบบผสม (ตัวหนา, ตัวเอียง) คุณอาจต้องการรักษาสไตล์ไว้. ในกรณีนั้น, สร้าง `Run` ใหม่, คัดลอกการตั้งค่า `Font` ของต้นฉบับ, แล้วตั้งค่า `Text` ของมันเป็น `revisedText`. + +## ตัวอย่างทำงานเต็มรูปแบบ + +ด้านล่างเป็นโปรแกรมทั้งหมดที่คุณสามารถคัดลอก‑วางลงในโปรเจคคอนโซล. อย่าลืมติดตั้งแพ็กเกจ NuGet ของ Aspose.Words ก่อน (`dotnet add package Aspose.Words`) + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### ผลลัพธ์ที่คาดหวัง + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +เปิด `output.docx` – คุณจะเห็นย่อหน้าที่สามตอนนี้อ่านเป็นเวอร์ชันที่ปรับปรุงแล้ว + +## คำถามทั่วไป & ปัญหาที่พบบ่อย + +| คำถาม | คำตอบ | +|----------|--------| +| **ถ้า LLM ของฉันคืนค่า JSON พร้อมฟิลด์เพิ่มเติมล่ะ?** | ปรับ `GenerateText` ให้ทำการ deserialize property ที่ถูกต้องหรือทำการแยกตอบสนองด้วยตนเอง. | +| **ฉันสามารถประมวลผลหลายย่อหน้าพร้อมกันได้หรือไม่?** | ได้ – ทำการวนลูปผ่าน `document.FirstSection.Body.Paragraphs` และใช้ตรรกะ prompt เดียวกัน, อาจเพิ่มดัชนีย่อหน้าใน prompt เพื่อให้มีบริบท. | +| **เซิร์ฟเวอร์ LLM ของฉันใช้การยืนยันตัวตน?** | เพิ่ม header ให้กับ `HttpClient` ก่อนทำ POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **รูปแบบหายไปหลังการแทนที่.** | รักษาการตั้งค่า `Run.Font` ดั้งเดิม: สร้าง `Run` ใหม่, คัดลอก `originalRun.Font.Clone()`, แล้วตั้งค่า `Text` ของมัน. | +| **LLM บางครั้งคืนค่าเป็นสตริงว่าง.** | ทำ fallback – หาก `revisedText.Trim().Length == 0` ให้คงข้อความเดิมหรือลองใหม่ด้วย prompt ที่ง่ายขึ้น. | + +## การขยายโซลูชัน + +ตอนนี้คุณได้เชี่ยวชาญ **how to use llm** สำหรับย่อหน้าเดียวแล้ว, พิจารณาขั้นตอนต่อไปนี้: + +- **Batch processing:** วนลูปผ่านทุกย่อหน้าและเขียนใหม่ในสไตล์ที่เลือก (เช่น “ทำให้ข้อความทั้งหมดกระชับ”). +- **Style‑aware rewriting:** ส่งชื่อสไตล์ของย่อดั้งเดิมใน prompt เพื่อให้ LLM เคารพหัวข้อกับข้อความหลัก. +- **Integration with a CI pipeline:** ทำให้การปรับปรุงเอกสารเป็นอัตโนมัติเป็นส่วนหนึ่งของกระบวนการสร้างเอกสาร. +- **Alternative prompts:** ลอง “summarize this paragraph” หรือ “translate this paragraph to Spanish” เพื่อสำรวจพลังเต็มของ **rewrite text using ai**. + +## สรุป + +เราได้อธิบายขั้นตอนทั้งหมดของ **how to use llm** กับ Aspose.Words: การโหลดเอกสาร, **connect to local llm**, การดึงย่อหน้า, **rewrite text using ai**, **replace paragraph text**, และสุดท้ายการบันทึกผลลัพธ์. โค้ดเป็นอิสระ, ทำงานได้ทันที, และแสดงวิธีการผสาน AI กับการอัตโนมัติของเอกสารแบบดั้งเดิมอย่างเป็นประโยชน์ + +Give it a spin, tweak the prompts, and let + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/thai/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..eb54cd7a86 --- /dev/null +++ b/words/thai/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,262 @@ +--- +category: general +date: 2026-05-04 +description: สรุปเอกสาร Word อย่างรวดเร็วและแปลข้อความด้วย Google เรียนรู้วิธีใช้ + Anthropic Claude สร้างสรุปจากรายงาน และแปลข้อความด้วย Google ในบทเรียน C# เดียว. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: th +og_description: สรุปเอกสาร Word อย่างรวดเร็วและแปลข้อความด้วย Google คู่มือนี้แสดงวิธีใช้ + Anthropic Claude และ Aspose.Words เพื่อสร้างสรุปจากรายงาน +og_title: สรุปเอกสาร Word ด้วย C# – ขั้นตอนโดยละเอียดกับ Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: สรุปเอกสาร Word ด้วย C# – คู่มือฉบับเต็มโดยใช้ Anthropic Claude +url: /th/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# สรุปเอกสาร Word ด้วย C# – คู่มือเต็มโดยใช้ Anthropic Claude + +เคยต้อง **สรุปเอกสาร Word** แต่รู้สึกติดขัดกับ API และโค้ดที่ยาวเหยียดไหม? คุณไม่ได้เป็นคนเดียว ในหลายโครงการ—รายงานประจำปี, เอกสารกฎหมาย, หรือบทความวิจัย—การดึงข้อมูลสรุปสั้น ๆ เป็นความท้าทายประจำวัน โชคดีที่การผสานระหว่าง Aspose.Words กับ Anthropic Claude ทำให้เรื่องนี้ง่ายดาย และคุณยังสามารถเพิ่มการแปลด้วย Google ได้อีกด้วย + +ในบทเรียนนี้เราจะพาคุณผ่านทุกขั้นตอนที่ต้องรู้: โหลดไฟล์ .docx ขนาดใหญ่, เรียกใช้โมเดล Claude V2 เพื่อสร้างสรุป, แปลข้อความด้วย Google, และจัดการกับข้อผิดพลาดที่พบบ่อยที่สุด หลังจากจบคุณจะสามารถ **สร้างสรุปจากรายงาน** เพียงไม่กี่บรรทัดของ C# ได้ + +## ข้อกำหนดเบื้องต้น + +- .NET 6+ (หรือ .NET Core 3.1) ที่ติดตั้งแล้ว +- ใบอนุญาต Aspose.Words for .NET (หรือทดลองใช้ฟรี) +- การเข้าถึง Anthropic Claude V2 API (ต้องมี API key) +- การเชื่อมต่ออินเทอร์เน็ตสำหรับ Google Translator +- Visual Studio 2022 หรือ IDE C# ที่คุณชื่นชอบ + +ไม่ต้องเพิ่ม NuGet package ใด ๆ นอกจาก `Aspose.Words` และ `Aspose.Words.AI`; คลาสแปลภาษามาพร้อมกับไลบรารีเดียวกัน + +## ขั้นตอนที่ 1 – โหลดเอกสาร Word ต้นฉบับ + +สิ่งแรกที่เราต้องทำคือโหลดไฟล์ .docx เข้าไปในหน่วยความจำ Aspose.Words ทำให้เรื่องนี้ง่ายดายและด้วย parser ที่แข็งแรงของมัน สามารถทำงานกับเลย์เอาต์ซับซ้อน, ตาราง, และรูปภาพที่ฝังอยู่ได้ + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **ทำไมจึงสำคัญ:** การโหลดเอกสารตั้งแต่แรกทำให้คุณสามารถตรวจสอบคุณสมบัติต่าง ๆ (ผู้เขียน, จำนวนคำ) และตัดสินใจว่าจำเป็นต้องสรุปหรือไม่ ไฟล์ขนาดใหญ่ > 10 MB อาจใช้หน่วยความจำมาก ดังนั้นให้พิจารณาใช้ `LoadOptions` กับ `LoadFormat.Docx` หากเจอปัญหาประสิทธิภาพ + +## ขั้นตอนที่ 2 – สรุปเอกสารด้วย Anthropic Claude + +ต่อมาคือส่วนที่สนุก: เราจะส่งเอกสารให้ Claude V2 คลาส `Summarizer` จะจัดการการเรียก HTTP, การจัดการ token, และการลองใหม่ + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **วิธีการทำงาน:** +> 1. **การแบ่งส่วน** – Aspose จะแบ่งเอกสารเป็นชิ้นย่อยที่จัดการได้ (≈ 2 KB ต่อชิ้น) เพื่อให้สอดคล้องกับขีดจำกัด token ของ Claude +> 2. **Prompt engineering** – ไลบรารีส่ง prompt เช่น “Provide a concise executive summary of the following text:” ตามด้วยแต่ละชิ้นส่วน +> 3. **การรวมผล** – Claude คืนสรุปย่อยที่ถูกรวมเป็น `summaryText` สุดท้าย + +### กรณีขอบและเคล็ดลับ + +- **รายงานขนาดใหญ่มาก** (> 100 หน้า) อาจเกินขนาด context window ของ Claude หากพบผลลัพธ์ถูกตัด ให้ลดค่า `SummarizerOptions.MaxChunkSize` ให้เล็กลง +- **แหล่งข้อมูลที่ไม่ใช่ภาษาอังกฤษ** – Claude ทำงานดีที่สุดกับภาษาอังกฤษ; สำหรับภาษาอื่นให้แปลก่อน (ดูขั้นตอนที่ 4) แล้วจึงสรุป +- **Rate limits** – Anthropic มีการจำกัดจำนวนคำขอต่อ‑นาที ใช้ลูป retry พร้อม exponential back‑off หากได้รับ response `429` + +## ขั้นตอนที่ 3 – ตรวจสอบผลลัพธ์ของสรุป + +ก่อนดำเนินการต่อ ควรตรวจสอบว่าข้อสรุปไม่ว่างเปล่าและมีความยาวที่เหมาะสม (เช่น 5‑10 % ของจำนวนคำเดิม) + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +หากอัตราส่วนดูต่ำเกินไป (< 2 %) คุณอาจต้องปรับ `SummarizerOptions.SummaryLength` เพื่อขอผลลัพธ์ที่ยาวขึ้น + +## ขั้นตอนที่ 4 – แปลข้อความด้วย Google + +ตอนนี้เรามีสรุปภาษาอังกฤษที่กระชับแล้ว ให้เพิ่มการแปลอย่างรวดเร็ว คลาส `Translator` ใช้ endpoint การแปลของ Google (ไม่ต้อง API key สำหรับวลีสั้น ๆ แต่สำหรับการใช้งานจริงควรเปลี่ยนไปใช้ Cloud Translation API ที่ต้องชำระเงิน) + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **ทำไมต้อง Google?** เร็ว, รองรับหลายภาษา, และ endpoint ฟรีสามารถจัดการสตริงสั้น ๆ ได้โดยไม่ต้องยืนยันตัวตน สำหรับการแปลจำนวนมาก ให้ทำ batch คำขอและเคารพขีดจำกัดการใช้ของ Google + +### แปลสรุปทั้งหมด (ตัวเลือก) + +หากต้องการสรุปทั้งหมดเป็นสเปน (หรือภาษาอื่น) เพียงส่ง `summaryText` เข้า `Translator.Translate` ระวังขีดจำกัดขนาดคำขอ 5 KB; อาจต้องแบ่งสรุปเป็นชิ้นย่อย + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## ขั้นตอนที่ 5 – บันทึกสรุปกลับเป็นไฟล์ Word (โบนัส) + +ผู้ใช้ส่วนใหญ่คาดหวังไฟล์ดาวน์โหลดแทนการแสดงผลบนคอนโซล เราจะสร้างไฟล์ `.docx` ใหม่ที่มีทั้งเวอร์ชันภาษาอังกฤษและสเปน + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### เคล็ดลับการใช้งาน + +เมื่อฝังสรุปลงในไฟล์ Word ใหม่ ควรใช้รูปแบบพื้นฐาน (`Normal` style) เพื่อให้การจัดรูปแบบต้นฉบับที่ซับซ้อนไม่ทำให้เลย์เอาต์เปลี่ยนแปลงอย่างไม่คาดคิด + +## ตัวอย่างทำงานเต็มรูปแบบ + +ด้านล่างเป็นโปรแกรม **พร้อมคัดลอก‑วาง** ที่รวมทุกอย่างเข้าด้วยกัน สามารถคอมไพล์ด้วย `dotnet run` หลังจากเพิ่มแพคเกจ Aspose แล้ว + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**ผลลัพธ์ที่คาดหวังบนคอนโซล** (ตัดบางส่วนเพื่อความกระชับ): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## คำถามที่พบบ่อย + +| Question | Answer | +|----------|--------| +| *Can I use a different AI model?* | Yes. Replace `SummarizerModel.AnthropicClaudeV2` with `SummarizerModel.OpenAIGPT4` (requires an OpenAI key) or any provider listed in the enum. | +| *What if the document contains protected sections?* | Aspose will throw `ProtectedDocumentException`. Unlock it first with `LoadOptions.Password` or request an unprotected copy. | +| *Do I need a paid Aspose license for production?* | The free trial works for up to 20 pages. For larger reports, a license removes the page limit and adds performance optimizations. | +| *Is the Google translator reliable for large blocks?* | For short strings it’s fine. For bulk translation, switch to the Cloud Translation API to avoid request‑size limits and to get better language detection. | + +## สรุป + +เราได้ **สรุปเอกสาร Word** ด้วย Aspose.Words ร่วมกับ Anthropic Claude V2 model แล้ว **แปลข้อความด้วย Google** เพื่อ + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/basic-conversions/_index.md b/words/thai/net/basic-conversions/_index.md index 1d9e196b04..a66466b2eb 100644 --- a/words/thai/net/basic-conversions/_index.md +++ b/words/thai/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Basic Conversions จะแนะนำคุณเกี่ยวกับก | [บันทึกไฟล์ PDF เป็น Jpeg](./pdf-to-jpeg/) แปลงไฟล์ PDF เป็น JPEG ได้อย่างง่ายดายโดยใช้ Aspose.Words สำหรับ .NET ทำตามคำแนะนำโดยละเอียดของเราพร้อมตัวอย่างและคำถามที่พบบ่อย เหมาะสำหรับนักพัฒนาและผู้ที่ชื่นชอบ - [บันทึก PDF เป็นรูปแบบ Word (Docx)](./pdf-to-docx/) | เรียนรู้วิธีแปลง PDF เป็นเอกสาร Word (Docx) โดยใช้ Aspose.Words สำหรับ .NET ในคู่มือทีละขั้นตอนโดยละเอียดนี้ เหมาะสำหรับนักพัฒนา | - [วิธีส่งออก LaTeX จาก Word – คู่มือขั้นตอนโดยขั้นตอน](./how-to-export-latex-from-word-step-by-step-guide/) | เรียนรู้วิธีส่งออกเนื้อหา LaTeX จากเอกสาร Word ด้วย Aspose.Words สำหรับ .NET อย่างละเอียดและง่ายดาย - +- [สร้าง PDF ที่เข้าถึงได้จาก DOCX ด้วย C# – วิธีแปลง Word เป็น PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | เรียนรู้วิธีสร้าง PDF ที่เข้าถึงได้จากไฟล์ DOCX ด้วย C# และ Aspose.Words พร้อมขั้นตอนและตัวอย่างโค้ดที่ชัดเจน - {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/thai/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..3556c41f03 --- /dev/null +++ b/words/thai/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,210 @@ +--- +category: general +date: 2026-05-04 +description: สร้าง PDF ที่เข้าถึงได้จากไฟล์ DOCX ด้วย C# เรียนรู้วิธีแปลง Word เป็น + PDF, บันทึก Word เป็น PDF, และส่งออก docx เป็น PDF พร้อมการปฏิบัติตามมาตรฐานการเข้าถึง. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: th +og_description: สร้าง PDF ที่เข้าถึงได้จากไฟล์ DOCX ด้วย C# ปฏิบัติตามบทแนะนำขั้นตอนต่อขั้นตอนนี้เพื่อแปลง + Word เป็น PDF, บันทึก Word เป็น PDF, และส่งออก docx เป็น PDF พร้อมการเข้าถึงเต็มรูปแบบ. +og_title: สร้าง PDF ที่เข้าถึงได้จาก DOCX ด้วย C# – คู่มือเร็ว +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: สร้าง PDF ที่เข้าถึงได้จาก DOCX ด้วย C# – วิธีแปลง Word เป็น PDF +url: /th/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# สร้าง PDF ที่เข้าถึงได้จาก DOCX ใน C# – วิธีแปลง Word เป็น PDF + +เคยต้อง **สร้าง PDF ที่เข้าถึงได้** จากเอกสาร Word แต่ไม่แน่ใจว่าจะใช้ไลบรารีใด? คุณไม่ได้เป็นคนเดียว—นักพัฒนาหลายคนเจออุปสรรคเดียวกันเมื่อจำเป็นต้องปฏิบัติตามมาตรฐาน PDF/UA เพื่อความเข้าถึงได้ ข่าวดีคือด้วย Aspose.Words คุณสามารถแปลงไฟล์ `.docx` ให้เป็น PDF ที่สอดคล้องได้เพียงไม่กี่บรรทัดของโค้ด และจะได้ไฟล์ที่โปรแกรมอ่านหน้าจอสามารถอ่านได้จริง + +ในบทเรียนนี้เราจะพาคุณผ่านทุกอย่างที่ต้องรู้เพื่อ **แปลง Word เป็น PDF**, **บันทึก Word เป็น PDF**, และแม้กระทั่ง **ส่งออก docx เป็น PDF** ด้วยการปฏิบัติตาม PDF/UA‑1 (หรือ PDF/UA‑2) เมื่อเสร็จคุณจะมีสแนปช็อต C# ที่พร้อมใช้งาน เข้าใจว่าการตั้งค่าแต่ละอย่างสำคัญอย่างไร และพร้อมจัดการกับกรณีขอบที่พบบ่อย เช่น ฟอนต์หายหรือการตั้งค่าหน้ากระดาษแบบกำหนดเอง + +## ข้อกำหนดเบื้องต้น + +- .NET 6.0 หรือใหม่กว่า (โค้ดทำงานกับ .NET Framework 4.6+ ด้วยเช่นกัน) +- ใบอนุญาต Aspose.Words for .NET (หรือคีย์ทดลองฟรี) +- ความเข้าใจพื้นฐานเกี่ยวกับ C# และ Visual Studio (หรือ IDE ใดก็ได้ที่คุณชอบ) +- ไฟล์ DOCX ที่คุณต้องการทำให้เข้าถึงได้ (เราจะเรียกมันว่า `input.docx`) + +> **เคล็ดลับ:** หากคุณใช้รุ่นทดลองฟรี จำไว้ว่า PDF ที่สร้างขึ้นจะมีลายน้ำ “Evaluation” เล็ก ๆ ปรากฏอยู่ + +## ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ NuGet ของ Aspose.Words + +ก่อนที่เราจะเขียนโค้ด C# ใด ๆ ไลบรารี Aspose.Words ต้องถูกเพิ่มเข้าไปในโปรเจกต์ก่อน + +```bash +dotnet add package Aspose.Words +``` + +การรันคำสั่งนี้จะทำให้ `Aspose.Words.dll` ถูกกู้คืนและทำให้เนมสเปซพร้อมใช้งาน ขั้นตอนนี้สำคัญเพราะคลาส `PdfSaveOptions` อยู่ภายในแพ็กเกจนั้น + +## ขั้นตอนที่ 2: โหลดไฟล์ DOCX ต้นฉบับ + +ขั้นตอนแรกที่เป็นตรรกะคือการโหลดเอกสาร Word ที่คุณต้องการแปลง คิดว่าเป็นการเปิดหนังสือก่อนเริ่มแก้ไขหน้า + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **ทำไมขั้นตอนนี้สำคัญ:** การโหลดเอกสารจะสร้างการแสดงผลในหน่วยความจำที่รวมสไตล์ รูปภาพ และเมตาดาต้าทั้งหมด หากไฟล์เสียหาย `Document` จะโยนข้อยกเว้น—ดังนั้นคุณอาจต้องห่อโค้ดนี้ด้วย try/catch สำหรับโค้ดในสภาพการผลิต + +## ขั้นตอนที่ 3: กำหนดค่า PDF Save Options เพื่อความเข้าถึงได้ + +Aspose.Words ให้คุณระบุระดับการปฏิบัติตาม PDF PDF/UA‑1 คือมาตรฐานการเข้าถึงดั้งเดิม ส่วน PDF/UA‑2 เพิ่มแท็กใหม่ ๆ เล็กน้อย เลือกเวอร์ชันที่ตรงกับความต้องการของลูกค้าของคุณ + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **“Compliance” ทำอะไร:** การตั้งค่า `PdfCompliance.PdfUax1` บอก Aspose.Words ให้ฝังแท็กที่เหมาะสม ลำดับการอ่านเชิงตรรกะ และข้อความแทนภาพ—สิ่งที่ซอฟต์แวร์อ่านหน้าจอต้องการอย่างแท้จริง + +## ขั้นตอนที่ 4: บันทึกเอกสารเป็น PDF ที่เข้าถึงได้ + +ตอนนี้งานหนักเสร็จแล้ว เราเพียงแค่สั่งให้ Aspose.Words เขียนไฟล์ PDF ด้วยตัวเลือกที่กำหนดไว้ + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +หลังจากบรรทัดนี้ทำงาน คุณจะพบ `output.pdf` ในโฟลเดอร์ที่ระบุ เปิดไฟล์ด้วย Adobe Acrobat Reader แล้วตรวจสอบ **File → Properties → Description → PDF/A and PDF/UA** เพื่อยืนยันการปฏิบัติตาม + +## ขั้นตอนที่ 5: ตรวจสอบความเข้าถึงได้ (เลือกทำได้แต่แนะนำ) + +แม้โค้ดจะรับประกันว่า PDF จะมีแท็กแล้ว แต่การตรวจสอบด้วยตนเองอย่างรวดเร็วช่วยให้คุณจับส่วนเนื้อหาที่อาจต้องการการดูแลเพิ่มเติมได้ + +1. เปิด `output.pdf` ใน Adobe Acrobat Pro +2. ไปที่ **Tools → Accessibility → Full Check** +3. รันการตรวจสอบและตรวจสอบคำเตือนใด ๆ (เช่น ขาดข้อความแทนภาพสำหรับภาพที่กำหนดเอง) + +หากรายงานไม่มีข้อผิดพลาด คุณได้ **สร้าง PDF ที่เข้าถึงได้** อย่างสำเร็จซึ่งตรงตามมาตรฐาน PDF/UA‑1 + +## ความแปรผันทั่วไปและกรณีขอบ + +### การแปลงหลายไฟล์ DOCX ในลูป + +หากคุณมีชุดเอกสารหลายไฟล์ ให้ใส่ตรรกะโหลด‑บันทึกไว้ในลูป `foreach` + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### เปลี่ยนเป็น PDF/UA‑2 + +เพียงเปลี่ยนค่า enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### จัดการฟอนต์กำหนดเอง + +หาก DOCX ของคุณใช้ฟอนต์ที่ไม่ได้ติดตั้งบนเซิร์ฟเวอร์ ให้ฝังฟอนต์เหล่านั้น: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +การฝังฟอนต์รับประกันว่า PDF จะดูเหมือนกันบนเครื่องใดก็ได้—รายละเอียดสำคัญเมื่อคุณ **ส่งออก docx เป็น pdf** ให้กับผู้มีส่วนได้ส่วนเสียภายนอก + +## ตัวอย่างการทำงานเต็มรูปแบบ + +ด้านล่างเป็นโปรแกรมที่สมบูรณ์พร้อมรันที่รวมทุกส่วนเข้าด้วยกัน คัดลอก‑วางลงในแอปคอนโซล ปรับเส้นทางไฟล์ แล้วกด **F5** + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง:** ไฟล์ชื่อ `output.pdf` ที่เปิดได้ในโปรแกรมอ่าน PDF ใด ๆ มีแท็กการเข้าถึงที่ถูกต้อง และสามารถแชร์ให้ผู้ใช้ที่พึ่งพาเทคโนโลยีช่วยเหลือได้ + +![ตัวอย่างการสร้าง PDF ที่เข้าถึงได้](/images/create-accessible-pdf.png "ภาพหน้าจอแสดงเอกสารที่สอดคล้องกับ PDF/UA‑1") + +*ข้อความแทนภาพ:* *ตัวอย่างการสร้าง PDF ที่เข้าถึงได้ – ภาพหน้าจอของเอกสารที่สอดคล้องกับ PDF/UA‑1 เปิดใน Adobe Acrobat.* + +## คำถามที่พบบ่อย + +- **ทำงานกับ .NET Core ได้หรือไม่?** + ทำได้แน่นอน Aspose.Words รองรับหลายแพลตฟอร์ม ดังนั้นโค้ดเดียวกันจึงทำงานบน Windows, Linux และ macOS + +- **ถ้า DOCX ของฉันมีแมโครล่ะ?** + แมโครจะถูกละเว้นระหว่างการแปลง; จะมีเพียงเนื้อหาที่มองเห็นได้เท่านั้นที่ถูกเรนเดอร์เป็น PDF + +- **ฉันสามารถเพิ่มชื่อเมตาดาต้า PDF แบบกำหนดเองได้ไหม?** + ได้—ตั้งค่า `pdfSaveOptions.Metadata.Title = "Your Custom Title";` ก่อนบันทึก + +- **PDF/UA‑2 ได้รับการสนับสนุนอย่างกว้างขวางหรือไม่?** + โปรแกรมอ่าน PDF สมัยใหม่ส่วนใหญ่เข้าใจ PDF/UA‑2 แต่หากคุณมุ่งเป้าไปที่เครื่องมือเก่า ให้ใช้ PDF/UA‑1 + +## สรุป + +เราได้แสดงวิธี **สร้าง PDF ที่เข้าถึงได้** จากไฟล์ DOCX ด้วย Aspose.Words ครอบคลุมตั้งแต่การติดตั้งแพ็กเกจ NuGet จนถึงการตรวจสอบการปฏิบัติตาม PDF/UA ด้วยขั้นตอนเหล่านี้คุณสามารถ **แปลง Word เป็น PDF**, **บันทึก Word เป็น PDF**, และ **ส่งออก docx เป็น PDF** อย่างมั่นใจโดยตรงตามมาตรฐานการเข้าถึง—ทักษะที่จำเป็นสำหรับนักพัฒนาที่ทำงานกับไพป์ไลน์เอกสารระดับองค์กร + +พร้อมรับความท้าทายต่อไปหรือยัง? ลองเพิ่มส่วนหัว/ส่วนท้ายแบบกำหนดเอง ฝังแท็ก PDF/A‑2b หรือทำให้กระบวนการอัตโนมัติใน ASP.NET Core Web API ความเป็นไปได้ไม่มีที่สิ้นสุด และพื้นฐานที่คุณสร้างไว้ที่นี่จะทำให้คุณรับมือได้อย่างมั่นใจ + +Happy coding, and may your PDFs always be readable! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/programming-with-markdownsaveoptions/_index.md b/words/thai/net/programming-with-markdownsaveoptions/_index.md index 729f669cef..b56e587953 100644 --- a/words/thai/net/programming-with-markdownsaveoptions/_index.md +++ b/words/thai/net/programming-with-markdownsaveoptions/_index.md @@ -43,15 +43,17 @@ ### [วิธีส่งออก Markdown จาก DOCX – คู่มือเต็ม C#](./how-to-export-markdown-from-docx-complete-guide/) เรียนรู้วิธีส่งออก Markdown จากไฟล์ DOCX ด้วย Aspose.Words สำหรับ .NET อย่างละเอียดด้วยขั้นตอนที่ชัดเจน + ### [วิธีส่งออก LaTeX จาก Word: แปลง DOCX เป็น Markdown ด้วย Aspose](./how-to-export-latex-from-word-convert-docx-to-markdown-with/) ### [แปลง Word เป็น Markdown – ฝังรูปภาพเป็น Base64](./convert-word-to-markdown-embed-images-as-base64/) เรียนรู้วิธีแปลงไฟล์ Word เป็น Markdown พร้อมฝังรูปภาพเป็น Base64 ด้วย Aspose.Words สำหรับ .NET + ### [วิธีบันทึก Markdown จาก Word – คู่มือ C# ฉบับเต็ม](./how-to-save-markdown-from-word-complete-c-guide/) เรียนรู้วิธีบันทึกไฟล์ Word เป็น Markdown อย่างละเอียดด้วย C# ### [วิธีบันทึก Markdown จาก Word – คู่มือเต็ม](./how-to-save-markdown-from-word-complete-guide/) -เรียนรู้วิธีบันทึกไฟล์ Word เป็น Markdown อย่างละเอียดด้วย C# +เรียนรู้วิธีบันทึกไฟล์ Word เป็น Markdown อย่างละเอียดด้วย C+ ### [วิธีส่งออก LaTeX: แปลง DOCX เป็น Markdown และ TXT](./how-to-export-latex-convert-docx-to-markdown-txt/) @@ -65,12 +67,13 @@ ### [แปลง Word เป็น Markdown ใน C# – คู่มือเต็มพร้อมการสกัดรูปภาพ](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) -{{< /blocks/products/pf/tutorial-page-section >}} +### [วิธีบันทึกรูปภาพ – แปลง DOCX เป็น Markdown ด้วย Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) +เรียนรู้วิธีบันทึกรูปภาพจากไฟล์ DOCX และแปลงเป็น Markdown ด้วย Aspose.Words สำหรับ .NET +{{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} - {{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/thai/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..7a44f606e4 --- /dev/null +++ b/words/thai/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,243 @@ +--- +category: general +date: 2026-05-04 +description: เรียนรู้วิธีบันทึกรูปภาพขณะแปลงไฟล์ DOCX เป็น Markdown ด้วย Aspose.Words + คู่มือนี้ยังแสดงวิธีดึงรูปภาพจาก Word และบันทึก Word เป็น Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: th +og_description: วิธีบันทึกรูปภาพขณะแปลงไฟล์ DOCX เป็น Markdown ด้วย Aspose.Words คู่มือขั้นตอนเต็มพร้อมโค้ด + C# ฉบับสมบูรณ์ +og_title: วิธีบันทึกภาพ – แปลง DOCX เป็น Markdown ด้วย Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: วิธีบันทึกรูปภาพ – แปลง DOCX เป็น Markdown ด้วย Aspose.Words +url: /th/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีบันทึกรูปภาพ – แปลง DOCX เป็น Markdown ด้วย Aspose.Words + +เคยสงสัย **วิธีบันทึกรูปภาพ** เมื่อคุณต้องการแปลงไฟล์ Word เป็น Markdown หรือไม่? คุณไม่ได้เป็นคนเดียวที่เจอปัญหา นักพัฒนาหลายคนเจออุปสรรคเมื่อการแปลงทำให้รูปภาพกลายเป็นลิงก์ที่เสียหาย หรือแย่กว่า—หายไปทั้งหมด ข่าวดีคือ Aspose.Words ให้คุณควบคุมได้อย่างละเอียด คุณจึงสามารถดึงรูปภาพจาก Word กำหนดตำแหน่งที่ต้องการบันทึก และยังได้ผลลัพธ์ Markdown ที่สะอาด + +ในบทแนะนำนี้เราจะเดินผ่านตัวอย่าง C# ที่พร้อมรันเต็มรูปแบบ ซึ่งแสดง **วิธีบันทึกรูปภาพ** ลงในโฟลเดอร์เฉพาะขณะแปลงไฟล์ `.docx` เป็น `.md` พร้อมกับพูดถึง **convert docx to markdown**, **extract images from word**, และคำถามกว้าง ๆ เกี่ยวกับ **how to convert docx** เพื่อให้คุณ **save word as markdown** ได้โดยไม่สูญเสียทรัพยากรใด ๆ + +## ข้อกำหนดเบื้องต้น + +- .NET 6.0 หรือใหม่กว่า (API ทำงานเช่นเดียวกันบน .NET Framework 4.7+) +- ใบอนุญาต Aspose.Words ที่ใช้งานได้หรือเวอร์ชันทดลองฟรี (เวอร์ชันฟรีจะใส่น้ำลายน้ำในผลลัพธ์ แต่โค้ดยังคงทำงานเหมือนเดิม) +- เอกสาร Word ที่มีรูปภาพอยู่แล้ว (เช่น `DocWithImages.docx`) +- Visual Studio 2022 หรือเครื่องมือแก้ไขใด ๆ ที่สามารถสร้างโปรเจกต์ C# ได้ + +> **เคล็ดลับ:** หากคุณใช้รุ่นทดลอง คุณยังสามารถทดสอบตรรกะการบันทึกรูปภาพได้; เพียงจำไว้ว่า PDF/MD สุดท้ายจะมีน้ำลายน้ำของรุ่นทดลอง + +## ภาพรวมของวิธีแก้ + +ในระดับสูง กระบวนการทำงานเป็นดังนี้: + +1. โหลดไฟล์ `.docx` ต้นทางด้วย `Document` +2. สร้างอ็อบเจ็กต์ `MarkdownSaveOptions` แล้วเชื่อม `IResourceSavingCallback` +3. ใน callback กำหนดโฟลเดอร์และชื่อไฟล์สำหรับรูปภาพแต่ละไฟล์ +4. บันทึกเอกสารเป็น Markdown; callback จะเขียนรูปภาพแต่ละไฟล์ลงดิสก์ + +นี่คือหัวใจของ **วิธีบันทึกรูปภาพ** ระหว่างการแปลง รูปแบบเดียวกันนี้ยังใช้ได้กับทรัพยากรประเภทอื่น (ฟอนต์, CSS ฯลฯ) หากคุณต้องการในภายหลัง + +## ขั้นตอนที่ 1 – โหลด DOCX ที่มีรูปภาพ + +ก่อนอื่นเราต้องมีอินสแตนซ์ `Document` ที่ชี้ไปยังไฟล์ Word ที่ต้องการแปลง ไม่ซับซ้อนเลย เพียงเรียกคอนสตรัคเตอร์แบบตรง ๆ + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **ทำไมจึงสำคัญ:** การโหลดเอกสารเป็นจุดเดียวที่ Aspose ทำการพาร์ส XML ของ Word หากฟอนต์หายหรือส่วนใดส่วนหนึ่งเสียหาย จะเกิดข้อยกเว้นทันที—ก่อนที่เราจะเริ่มบันทึกรูปภาพเลย + +## ขั้นตอนที่ 2 – ตั้งค่า MarkdownSaveOptions พร้อม Callback การบันทึกรูปภาพ + +คลาส `MarkdownSaveOptions` ให้คุณแทรกกระบวนการบันทึกผ่าน `ResourceSavingCallback` Callback นี้จะรับอ็อบเจ็กต์ `ResourceSavingArgs` สำหรับทุกทรัพยากรภายนอก (รูปภาพ, CSS ฯลฯ) ที่ Aspose ต้องเขียน + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### การทำงานของ Callback + +ด้านล่างเป็นการทำงานเต็มรูปแบบของ `ImageSavingCallback` มันจะสร้างโฟลเดอร์ย่อย `Images` ข้างไฟล์ Markdown, ตั้งชื่อรูปภาพเป็นลำดับ (`img_0.png`, `img_1.jpg`, …) และอาจสตรีมรูปภาพไปยังที่อื่น (เช่น bucket บนคลาวด์) + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **วิธีที่ช่วยคุณ:** โดยการปรับ `args.FileName` คุณจะควบคุม **วิธีบันทึกรูปภาพ** ได้อย่างแม่นยำ—ไม่ว่าจะเป็นโฟลเดอร์แบน, โครงสร้างตามวันที่, หรือแม้กระทั่งฐานข้อมูล BLOB Callback จะทำงานสำหรับรูปภาพทุกไฟล์ ดังนั้นคุณไม่ต้องทำการประมวลผลหลังจากที่ Markdown ถูกสร้างแล้ว + +## ขั้นตอนที่ 3 – บันทึกเอกสารเป็น Markdown + +เมื่อกำหนดตัวเลือกและ callback เรียบร้อย การแปลงจริงเป็นบรรทัดเดียว + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +เมื่อบรรทัดนี้ทำงานเสร็จ คุณจะได้: + +- `Doc.md` – ตัวแทน Markdown ของเนื้อหา Word ของคุณ +- `Images\img_0.png`, `Images\img_1.jpg`, … – รูปภาพทุกภาพที่ดึงจาก DOCX ต้นฉบับ + +## ตัวอย่างเต็มพร้อมรันได้ทันที + +รวมทุกอย่างเข้าด้วยกัน นี่คือแอปคอนโซลที่สามารถคัดลอก‑วางลงในโปรเจกต์ C# ใหม่ได้ + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### ผลลัพธ์ที่คาดหวัง + +หลังจากรันโปรแกรม: + +- เปิด `C:\Docs\Doc.md` ด้วยโปรแกรมแก้ไขข้อความใดก็ได้ คุณจะเห็นลิงก์รูปภาพใน Markdown เช่น `![](Images/img_0.png)` +- โฟลเดอร์ `Images` จะมีรูปภาพที่ดึงออกมาแต่ละไฟล์โดยเรียงลำดับ +- ไฟล์ Markdown จะเรนเดอร์อย่างถูกต้องในตัวดูใด ๆ ที่รองรับรูปภาพในเครื่อง (VS Code preview, GitHub, ฯลฯ) + +## คำถามที่พบบ่อย (FAQs) + +### ทำงานกับรูปแบบภาพอื่น (SVG, TIFF) ได้หรือไม่? + +ได้ `Path.GetExtension(args.FileName)` จะคงนามสกุลเดิมไว้ ดังนั้น SVG, TIFF, BMP, และแม้แต่ EMF จะถูกบันทึกโดยไม่เปลี่ยนแปลง ข้อจำกัดเดียวคือบางตัวเรนเดอร์ Markdown อาจไม่แสดง SVG inline; ในกรณีนั้นคุณอาจแปลง SVG เป็น PNG ก่อน + +### ถ้าต้องการฝังรูปภาพเป็น Base64 แทนไฟล์แยก? + +ใน `ResourceSaving` คุณสามารถแทนที่การเขียนไฟล์จริงด้วย MemoryStream แล้วแก้ไขลิงก์ Markdown ด้วยตนเอง Aspose ไม่ได้เปิดสวิตช์ “embed as Base64” โดยตรง แต่ callback ให้คุณควบคุม `args.Stream` ได้เต็มที่ + +### แตกต่างจากเมธอดในตัว `ExportImages` อย่างไร? + +`ExportImages` ดึงรูปภาพทั้งหมดออกไปยังโฟลเดอร์ **โดยไม่สร้าง** Markdown ส่วน callback ของเราจะทำสองอย่างพร้อมกัน ทำให้ชื่อไฟล์รูปภาพตรงกับการอ้างอิงใน `.md` การจับคู่นี้คือกุญแจสำคัญของ **วิธีบันทึกรูปภาพ** อย่างถูกต้องระหว่างการแปลง + +### สามารถแปลงหลายไฟล์ DOCX พร้อมกันได้หรือไม่? + +ทำได้แน่นอน ห่อหุ้มตรรกะหลักในลูป `foreach (var file in Directory.GetFiles(..., "*.docx"))` ปรับเส้นทางผลลัพธ์และใช้ `ImageSavingCallback` เดียวกัน เพียงจำไว้ว่าให้สร้าง `MarkdownSaveOptions` ใหม่สำหรับแต่ละเอกสาร เพราะ `args.DestinationFileName` จะเปลี่ยนตามแต่ละรอบ + +## กรณีขอบและแนวทางปฏิบัติที่ดีที่สุด + +| สถานการณ์ | สิ่งที่ต้องระวัง | วิธีแก้แนะนำ | +|-----------|----------------|--------------| +| **DOCX ขนาดใหญ่ (หลายร้อย MB)** | ความกดดันของหน่วยความจำขณะโหลด | ใช้ `LoadOptions` กับ `LoadFormat.Docx` และตั้ง `LoadOptions.LoadFormat = LoadFormat.Docx` เพื่อโหลดเป็นสตรีม | +| **ชื่อไฟล์รูปภาพชนกัน** | หากแหล่งที่มามี `img_0.png` อยู่แล้วในโฟลเดอร์เป้าหมาย อาจถูกเขียนทับ | ต่อ GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **โฟลเดอร์ปลายทางเป็นแบบอ่าน‑เท่านั้น** | การบันทึกจะโยน `UnauthorizedAccessException` | ตรวจสอบให้กระบวนการทำงานด้วยสิทธิ์ที่เหมาะสมหรือเลือกเส้นทางที่เขียนได้ | +| **ทรัพยากรที่ไม่ใช่รูปภาพ (CSS, ฟอนต์)** | Callback จะรับพวกมันด้วย | ป้องกันด้วย `if (args.ResourceType != ResourceType.Image) return;` (แสดงไว้แล้ว) | +| **ชื่อไฟล์ยูนิโค้ด** | ระบบไฟล์บางตัวอาจจัดการอักขระไม่ถูกต้อง | ใช้ `Path.GetInvalidFileNameChars()` เพื่อล้าง `args.FileName` ก่อนกำหนดค่า | + +## หัวข้อที่เกี่ยวข้องที่คุณอาจอยากสำรวจต่อ + +- **convert docx to markdown** ด้วยสไตล์หัวข้อที่กำหนดเอง (ใช้ `MarkdownSaveOptions.ExportImagesAsBase64` สำหรับรูปภาพแบบ inline) +- **extract images from word** ด้วยเมธอด `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/thai/net/working-with-fonts/_index.md b/words/thai/net/working-with-fonts/_index.md index 643ec1e3df..e023070805 100644 --- a/words/thai/net/working-with-fonts/_index.md +++ b/words/thai/net/working-with-fonts/_index.md @@ -53,6 +53,7 @@ | [รับการทดแทนโดยไม่ต้องมีคำต่อท้าย](./get-substitution-without-suffixes/) | ในบทช่วยสอนนี้ เรียนรู้วิธีรับการแทนที่แบบไม่มีคำต่อท้ายในเอกสาร Word ด้วย Aspose.Words สำหรับ .NET | - [วิธีจับฟอนต์ใน Aspose.Words – คู่มือครบถ้วน](./how-to-capture-fonts-in-aspose-words-complete-guide/) | เรียนรู้วิธีจับฟอนต์ใน Aspose.Words อย่างละเอียดด้วยคู่มือขั้นตอนเต็มรูปแบบ | | [วิธีโหลด DOCX และตรวจจับแบบอักษรที่หายไป – คู่มือ C# ฉบับสมบูรณ์](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | เรียนรู้วิธีโหลดไฟล์ DOCX และตรวจจับแบบอักษรที่ขาดหายโดยใช้ Aspose.Words สำหรับ .NET ด้วยคู่มือ C# อย่างละเอียด | +- [Aspose การแทนที่แบบอักษร: ตรวจจับแบบอักษรที่หายไปในเอกสาร Word](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | เรียนรู้วิธีตรวจจับแบบอักษรที่หายไปในไฟล์ Word ด้วย Aspose.Words สำหรับ .NET อย่างละเอียด {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/thai/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..a115bdaa65 --- /dev/null +++ b/words/thai/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,260 @@ +--- +category: general +date: 2026-05-04 +description: เรียนรู้วิธีใช้การแทนที่ฟอนต์ของ Aspose เพื่อตรวจจับฟอนต์ที่หายไปเมื่อคุณโหลดเอกสาร + Word และดึงรายละเอียดฟอนต์ที่หายไป—คู่มือขั้นตอนโดยละเอียด +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: th +og_description: เชี่ยวชาญการแทนที่ฟอนต์ของ Aspose เพื่อตรวจจับฟอนต์ที่หายไปเมื่อโหลดเอกสาร + Word และดึงข้อมูลฟอนต์ที่หายไปพร้อมโค้ด C# อย่างครบถ้วน +og_title: การแทนที่ฟอนต์ของ Aspose – ตรวจจับฟอนต์ที่หายไปในเอกสาร Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'การแทนที่ฟอนต์ของ Aspose: ตรวจจับฟอนต์ที่หายไปในเอกสาร Word' +url: /th/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – ตรวจจับฟอนต์ที่หายไปในเอกสาร Word + +เคยสงสัยไหมว่าทำไมเอกสาร Word ถึงดูผิดพลาดบนเครื่องอื่น? บ่อยครั้งสาเหตุคือฟอนต์ที่หายไป, และ **Aspose font substitution** คือเครื่องมือที่ช่วยให้คุณตรวจพบช่องโหว่เหล่านั้นก่อนที่มันจะกลายเป็นความหายนะด้านภาพ. ในบทแนะนำนี้เราจะอธิบายวิธี **detect missing fonts** ทันทีที่คุณ **load a Word document**, แล้ว **retrieve missing font** รายละเอียดเพื่อให้คุณแก้ไขหรือเปลี่ยนแทนได้. + +เราจะครอบคลุมทุกอย่างตั้งแต่การตั้งค่า warning callback ไปจนถึงการดึงรายการฟอนต์ที่หายไปที่สะอาด. เมื่อจบคุณจะมี snippet C# ที่พร้อมใช้งานซึ่งบอกคุณอย่างชัดเจนว่าฟอนต์ใดบ้างที่ไม่ถูกพบ, และคุณจะเข้าใจว่าทำไมเรื่องนี้ถึงสำคัญต่อความเที่ยงตรงของเอกสาร. + +--- + +## ข้อกำหนดเบื้องต้น – สิ่งที่คุณต้องมีก่อนเริ่ม + +- **Aspose.Words for .NET** (แนะนำเวอร์ชัน v23.12 หรือใหม่กว่า). +- สภาพแวดล้อมการพัฒนา .NET (Visual Studio, Rider, หรือ `dotnet` CLI). +- ตัวอย่างไฟล์ DOCX ที่ตั้งใจใช้ฟอนต์ที่คุณไม่ได้ติดตั้ง—ชื่อว่า `DocumentWithMissingFont.docx`. +- ความรู้พื้นฐาน C#—ไม่ต้องซับซ้อน, เพียงความสามารถในการรันแอปคอนโซล. + +หากสิ่งใดข้างต้นไม่คุ้นเคย, ให้หยุดและติดตั้งแพคเกจ NuGet: + +```bash +dotnet add package Aspose.Words +``` + +เท่านี้แค่นั้น. ไม่ต้องฟอนต์เพิ่มเติม, ไม่ต้องบริการภายนอก. + +## ขั้นตอนที่ 1: โหลดเอกสาร Word (และเรียกการตรวจสอบฟอนต์) + +สิ่งแรกที่คุณทำคือ **load a Word document**. Aspose.Words จะทำการแยกไฟล์และหากไม่สามารถหาไฟต์ฟอนต์ที่อ้างอิงได้, มันจะเพิ่มคำเตือน *FontSubstitution*. นี่คือโค้ดที่ทำการโหลด: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **ทำไมเรื่องนี้ถึงสำคัญ:** การโหลดเอกสารตั้งแต่แรกทำให้ Aspose มีโอกาสสแกนทุกส่วนของข้อความ, สไตล์, และออบเจ็กต์ที่ฝังอยู่. หากฟอนต์ไม่พบในระบบหรือในโฟลเดอร์ฟอนต์ที่กำหนดเอง, คุณจะได้รับคำเตือนในภายหลัง. + +## ขั้นตอนที่ 2: แนบ Warning Callback เพื่อจับเหตุการณ์ Substitution + +Aspose.Words ใช้กลไก callback เพื่อแจ้งคุณเกี่ยวกับปัญหาเช่นฟอนต์ที่หายไป. โดยการกำหนดการทำงานของ `IWarningCallback` ให้กับ `doc.WarningCallback`, คุณสามารถดักจับคำเตือนแต่ละรายการเมื่อเกิดขึ้น. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **เคล็ดลับ:** คุณสามารถแนบหลาย callback (เช่น logging, UI updates) โดยการห่อหุ้มในรูปแบบ composite, แต่สำหรับบทแนะนำนี้การใช้ callback เดียวทำให้เรื่องชัดเจน. + +## ขั้นตอนที่ 3: Implement the Font Substitution Warning Callback + +ตอนนี้เราจะกำหนดคลาสที่ทำงานจริง. Callback จะรับอ็อบเจ็กต์ `WarningInfo`; เราจะกรองสำหรับ `WarningType.FontSubstitution` และเก็บคำอธิบายไว้ใช้ภายหลัง. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **กำลังเกิดอะไรขึ้น:** เมื่อ Aspose พบฟอนต์ที่หายไป, มันจะสร้างคำเตือนเช่น “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Callback ของเราจะพิมพ์บรรทัดนั้นและบันทึกไว้. + +## ขั้นตอนที่ 4: ประมวลผลเอกสาร (ทางเลือก) และรวบรวมฟอนต์ที่หายไป + +หากคุณต้องการเพียง **detect missing fonts**, ขั้นตอนการโหลดก็เพียงพอ—คำเตือนจะถูกส่งโดยอัตโนมัติ. อย่างไรก็ตาม, นักพัฒนาจำนวนมากยังต้อง **retrieve missing font** หลังจากทำบางการดำเนินการ (เช่น การบันทึก, การแปลง). ด้านล่างเราบังคับให้ทำการดำเนินการเล็กน้อย—บันทึกเป็น PDF—เพื่อให้แน่ใจว่าคำเตือนทั้งหมดถูกส่ง, แล้วเราจะดึงข้อความที่เก็บไว้. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **ผลลัพธ์คอนโซลที่คาดหวัง** (ตัวอย่าง): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +สังเกตว่าทุกบรรทัดบอกอย่างชัดเจนถึงฟอนต์ต้นฉบับและฟอนต์สำรองที่ Aspose เลือก. นั่นคือแก่นของการรายงาน **aspose font substitution**. + +## ขั้นตอนที่ 5: ขั้นสูง – ใช้แหล่งฟอนต์แบบกำหนดเองเพื่อลดการแทนที่ + +บางครั้งคุณ *มี* ฟอนต์ที่หายไป, แต่ไม่ได้อยู่ในโฟลเดอร์ระบบเริ่มต้น. Aspose.Words ให้คุณชี้ไปยังไดเรกทอรีกำหนดเองผ่าน `FontSettings`. การเพิ่มขั้นตอนนี้สามารถลดจำนวนคำเตือนการแทนที่ได้อย่างมาก. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **ทำไมต้องเพิ่มขั้นตอนนี้?** หากคุณแจกจ่ายเอกสารข้ามเครื่อง, การบรรจุฟอนต์ที่ต้องการในโฟลเดอร์ที่รู้จักทำให้ลักษณะภาพเหมือนกันทุกที่. มันยังทำให้ขั้นตอน **detect missing fonts** ของคุณแม่นยำขึ้นเพราะ Aspose ตรวจสอบโฟลเดอร์นั้นก่อนที่จะใช้ฟอนต์สำรอง. + +## ตัวอย่างการทำงานเต็มรูปแบบ + +รวมทุกอย่างเข้าด้วยกัน, นี่คือโปรแกรมคอนโซลที่พร้อมคัดลอกและวาง. บันทึกเป็น `Program.cs` แล้วรันด้วย `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**สิ่งที่คุณควรเห็น:** หาก DOCX ต้นทางอ้างอิงฟอนต์ที่คุณไม่มี, คอนโซลจะพิมพ์แต่ละบรรทัดการแทนที่ตามด้วยสรุปสั้น. หากฟอนต์ทั้งหมดมีอยู่, คุณจะได้รับข้อความ “No missing fonts were detected.” + +## ข้อผิดพลาดทั่วไป & วิธีหลีกเลี่ยง + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **ไม่มีคำเตือนปรากฏ** | เอกสารใช้เฉพาะฟอนต์ระบบ, หรือคุณได้เพิ่มโฟลเดอร์กำหนดเองที่มีฟอนต์ที่หายไปแล้ว. | ตรวจสอบว่า DOCX จริง ๆ แล้วอ้างอิงฟอนต์ที่ไม่มีอยู่. คุณสามารถเปิดใน Word แล้วเปลี่ยนย่อหน้าหนึ่งเป็นฟอนต์หายาก (เช่น “Papyrus”). | +| **ข้อความซ้ำ** | ฟอนต์เดียวกันถูกใช้หลายรัน, ทำให้เกิดคำเตือนหลายครั้ง. | ทำการลบรายการซ้ำด้วย `Distinct()` หากคุณต้องการชุดที่ไม่ซ้ำ. | +| **ประสิทธิภาพลดลงในเอกสารขนาดใหญ่** | แต่ละคำเตือนถูกประมวลผลบน UI thread. | รันการโหลดในงานเบื้องหลังหรือใช้ `Parallel.ForEach` สำหรับการประมวลผลต่อ. | +| **ฟอนต์สำรองไม่ถูกต้อง** | ฟอนต์สำรองเริ่มต้นของ Aspose อาจไม่ตรงกับแบรนด์ของคุณ. | ตั้งค่า `FontSettings.SubstitutionSettings.DefaultFontName` เป็นฟอนต์สำรองที่ต้องการ (เช่น “Calibri”). | + +## การขยายโซลูชัน – ส่งออกฟอนต์ที่หายไปเป็น JSON + +หากคุณกำลังสร้างเว็บเซอร์วิสที่ต้องรายงานฟอนต์ที่หายไปกลับไปยังไคลเอนต์, การแปลงรายการเป็น JSON ทำได้ง่าย: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +## สรุป + +ในคู่มือนี้เราได้สาธิต **Aspose font substitution** ตั้งแต่ต้นจนจบ: การโหลดเอกสาร Word, การแนบ warning callback, การจับเหตุการณ์ *detect missing fonts* แต่ละรายการ, และสุดท้าย **retrieve missing font** เพื่อการรายงานหรือแก้ไข. ด้วยการเพิ่มโฟลเดอร์ฟอนต์กำหนดเองแบบเลือกใช้ คุณสามารถลดรายการการแทนที่, และด้วยบรรทัดเพิ่มเล็กน้อยคุณยังสามารถส่งออกผลลัพธ์เป็น JSON ได้. + +จำไว้ว่า ความสมบูรณ์ของภาพในเอกสารของคุณขึ้นอยู่กับฟอนต์ที่ใช้. ด้วยเทคนิคที่แสดงในนี้, คุณจะไม่ต้องประหลาดใจกับฟอนต์สำรองที่ไม่คาดคิดอีกต่อไป. + +พร้อมก้าวต่อไปหรือยัง? ลองผสานตรรกะนี้เข้าไปใน pipeline การประมวลผลเอกสารที่ใหญ่ขึ้น, หรือสำรวจคุณสมบัติอื่นของ Aspose.Words เช่นการฝังฟอนต์ (`doc.FontSettings.EmbeddedFonts`). ความเป็นไปได้ไม่มีที่สิ้นสุด, และผู้ใช้ของคุณจะขอบคุณคุณสำหรับผลลัพธ์ที่เรียบหรู. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/turkish/net/ai-powered-document-processing/_index.md b/words/turkish/net/ai-powered-document-processing/_index.md index c55bdad0a5..108a7cb68f 100644 --- a/words/turkish/net/ai-powered-document-processing/_index.md +++ b/words/turkish/net/ai-powered-document-processing/_index.md @@ -41,7 +41,10 @@ Son olarak, şuraya göz atmayı unutmayın: [Özetleme Seçenekleriyle Çalış | [AI Modeli ile Çalışma](./working-with-ai-model/) | AI ile belgeleri özetlemek için Aspose.Words for .NET'i nasıl kullanacağınızı öğrenin. Belge yönetimini geliştirmek için kolay adımlar. | | [Google AI Modeli ile Çalışma](./working-with-google-ai-model/) Aspose.Words for .NET ve Google AI ile belge işleme sürecinizi bir üst seviyeye taşıyın ve zahmetsizce özlü özetler oluşturun. | | [Açık AI Modeli ile Çalışma](./working-with-open-ai-model/) | OpenAI'nin güçlü modelleriyle Aspose.Words for .NET'i kullanarak verimli belge özetlemenin kilidini açın. Şimdi bu kapsamlı kılavuza dalın. | -| [Özetleme Seçenekleriyle Çalışma](./working-with-summarize-options/) | Hızlı içgörüler için AI modellerini entegre etmeye yönelik adım adım kılavuzumuzla Aspose.Words for .NET kullanarak Word belgelerini etkili bir şekilde özetlemeyi öğrenin. +| [Özetleme Seçenekleriyle Çalışma](./working-with-summarize-options/) | Hızlı içgörüler için AI modellerini entegre etmeye yönelik adım adım kılavuzumuzla Aspose.Words for .NET kullanarak Word belgelerini etkili bir şekilde özetlemeyi öğrenin. | +| [LLM ile Aspose.Words Kullanımı – Paragrafları C#'ta Yeniden Yazma](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | LLM'leri Aspose.Words ile entegre ederek C#'ta paragrafları otomatik olarak yeniden yazmayı öğrenin. | +| [C#'ta Dilbilgisi Kontrolü – Word Belgeleri için Tam Kılavuz](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Aspose.Words for .NET kullanarak C# ile Word belgelerinizde dilbilgisi hatalarını otomatik olarak tespit edip düzeltmeyi öğrenin. | +| [C#'ta Word Belgesini Özetleme – Anthropic Claude Kullanarak Tam Kılavuz](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Anthropic Claude modelini kullanarak C# ile Word belgelerini nasıl özetleyeceğinizi öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/turkish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..09b86daabd --- /dev/null +++ b/words/turkish/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,234 @@ +--- +category: general +date: 2026-05-04 +description: C# kullanarak bir Word belgesinde dilbilgisini nasıl kontrol edeceğinizi + öğrenin. Bu öğreticide ayrıca bir DOCX dosyasını C# ile nasıl yükleyeceğiniz ve + doğru sonuçlar için Aspose.Words AI'ı nasıl kullanacağınız ele alınmaktadır. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: tr +og_description: C# kullanarak bir Word belgesinde dilbilgisi nasıl kontrol edilir? + Bu öğreticiyi izleyerek bir DOCX dosyasını C# ile yükleyin ve Aspose.Words ile yapay + zeka destekli dilbilgisi kontrolleri yapın. +og_title: C#'de Dilbilgisi Kontrolü Nasıl Yapılır – Tam Adım Adım Rehber +tags: +- Aspose.Words +- C# +- Grammar Checking +title: C#'ta Dilbilgisi Nasıl Kontrol Edilir – Word Belgeleri İçin Tam Rehber +url: /tr/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#’ta Dilbilgisi Nasıl Kontrol Edilir – Word Belgeleri İçin Tam Kılavuz + +IDE’nizden çıkmadan bir Word belgesinde **dilbilgisi nasıl kontrol edilir** diye hiç merak ettiniz mi? Tek başınıza değilsiniz. Birçok geliştirici, kullanıcı‑tarafından oluşturulan raporları, otomatik e‑postaları ya da hatta dağıtıma girmeden önceki dokümantasyonu doğrulamak zorunda. İyi haber? Aspose.Words AI sayesinde bunu programatik olarak yapabilirsiniz ve tüm süreç tipik bir C# iş akışına sorunsuzca oturur. + +Bu rehberde, bir DOCX dosyasını C# ile yüklemekten AI dilbilgisi denetleyicisini çağırmaya ve sonuçları yorumlamaya kadar bilmeniz gereken her şeyi adım adım inceleyeceğiz. Sonunda, her sorunun şiddetini, mesajını ve önerilen değişikliği ekrana yazdıran, manuel kopyala‑yapıştır gerektirmeyen hazır bir kod parçacığına sahip olacaksınız. + +## Öğrenecekleriniz + +- Aspose.Words AI kullanarak bir Word belgesinde **dilbilgisi nasıl kontrol edilir**. +- `Document` sınıfı ile **DOCX dosyasını C#’ta nasıl yüklenir**. +- `GrammarCheckResult` nesnesini nasıl işleyip sorunlar üzerinde döngü kuracağınız ve faydalı tanı bilgileri üreteceğiniz. +- Yaygın tuzaklar (lisans eksikliği gibi) ve çözüm önerileriyle çözümünüzü üretim‑hazır hâle getirme ipuçları. + +> **Önkoşullar:** .NET 6.0+ (veya .NET Framework 4.6+), Visual Studio 2022 (veya tercih ettiğiniz başka bir IDE) ve bir Aspose.Words for .NET lisansı (deneme sürümü test için yeterlidir). NuGet paketlerini henüz kurmadıysanız, şu komutu çalıştırın: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Şimdi başlayalım. + +## Adım 1: C#’ta DOCX Dosyasını Yükleyin + +Herhangi bir dilbilgisi denetimi gerçekleşmeden önce belge belleğe yüklenmelidir. Aspose.Words bunu tek satırda yapar, ancak birkaç incelik vardır. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Neden önemli:** +- `Path.Combine` kullanmak, çapraz‑platform uyumluluğunu sağlar. +- Varlık kontrolü, gerçek dilbilgisi denetimi mantığını gölgede bırakabilecek bir çalışma zamanı hatasını önler. +- **DOCX dosyasını C#’ta yüklediğinizde**, Aspose tüm stilleri, üst‑alt bilgileri, dip‑alt bilgileri ve hatta gizli metni ayrıştırarak AI’ya belgenin tam bir görüntüsünü sunar. + +> **Pro ipucu:** Akışlarla (ör. web üzerinden gelen dosyalar) çalışmanız gerekiyorsa, `new Document(docPath)` çağrısını `new Document(stream)` ile değiştirebilirsiniz. + +## Adım 2: Dilbilgisi Denetimi İçin AI Modelini Seçin + +Aspose.Words AI, hafif yerel modellerden bulut‑tabanlı GPT varyantlarına kadar çeşitli modelleri destekler. Çoğu senaryo için **GPT‑3.5 Turbo**, hız ve doğruluk arasında ideal bir denge sunar. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Neden GPT‑3.5 Turbo seçilmeli?** +- Dakikada onlarca dosya işlemek için yeterince hızlıdır. +- Ücretli bir tier’da kullanıyorsanız, GPT‑4’e göre maliyeti daha düşüktür ve çoğu yaygın hatayı yakalar. +- API, token sınırlarını otomatik olarak yönetir; bu sayede büyük belgeleri manuel olarak bölmenize gerek kalmaz. + +Eğer çevrim‑dışı bir yaklaşım tercih ediyorsanız, `AiModelType.Gpt35Turbo` yerine `AiModelType.Local` kullanın (isteğe bağlı çevrim‑dışı model paketi gerekir). + +## Adım 3: Sorunlar Üzerinde Döngü Kurun ve Faydalı Geri Bildirim Gösterin + +`GrammarCheckResult` bir `GrammarIssue` nesnesi koleksiyonu içerir. Her sorun şiddet, insan‑okunur mesaj ve önerilen değişiklik bilgilerini verir. Şimdi bunları güzel bir şekilde ekrana yazdıralım. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Alanların anlamı:** +- `Severity` – genellikle `Info`, `Warning` veya `Error`. `Error` seviyesini, yayınlamadan önce mutlaka düzeltmeniz gerekir. +- `Message` – sorunun kısa açıklaması (ör. “Özne‑fiil uyumsuzluğu”). +- `SuggestedReplacement` – AI’nın önerdiği düzeltme; modele güveniyorsanız otomatik olarak uygulayabilir, ya da bir insan inceleyicisine sunabilirsiniz. + +> **Köşe durum:** Bazı sorunların `SuggestedReplacement` değeri boş olabilir (ör. stil önerileri). Bu durumda konumu manuel inceleme için işaretleyin. + +## Tam Çalışan Örnek + +Hepsini bir araya getirdiğimizde, yeni bir .NET projesine kopyalayıp yapıştırabileceğiniz bağımsız bir konsol uygulaması ortaya çıkar. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Beklenen çıktı (örnek):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Temiz bir belgeye karşı programı çalıştırırsanız, “✅ No grammar issues detected.” satırını göreceksiniz. + +## Yaygın Tuzakların Çözümü + +| Problem | Neden Oluşur | Hızlı Çözüm | +|---------|----------------|-----------| +| **LicenseException** | Aspose kütüphaneleri üretim kullanımında geçerli bir lisans ister. | `License license = new License(); license.SetLicense("Aspose.Words.lic");` satırını `Main` metodunun başına ekleyin. | +| **Network timeout** | AI model çağrısı buluta ulaşırken varsayılan 100 s zaman aşımını aşar. | `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` kodunu `CheckGrammar` çağrısından önce ayarlayın. | +| **Large documents (> 10 MB)** | Bazı bulut modelleri girişi kırpar. | `document.Sections` ile belgeyi bölümlere ayırın, her bölümde denetim yapın ve sonuçları birleştirin. | +| **Missing suggestions** | Model bir değişiklik üretemedi (ör. belirsiz ifade). | Sorunu manuel inceleme için kaydedin; boş önerileri otomatik olarak uygulamayın. | + +## Çözümü Genişletmek + +- **Otomatik düzeltme:** `grammarResult.Issues` üzerinde döngü kurup `document.Range.Replace` ile metni değiştirin. Orijinal dosyanın yedeğini almayı unutmayın. +- **Toplu işleme:** Akışı bir klasördeki DOCX dosyaları üzerinde `foreach` ile sarın. Her raporu daha sonra analiz için JSON dosyası olarak saklayın. +- **ASP.NET entegrasyonu:** Yüklenen bir DOCX’i kabul eden, denetimi çalıştıran ve sorunları JSON payload olarak dönen bir endpoint oluşturun. + +## Görsel Açıklama + +dilbilgisi kontrol akış diyagramı + +*Yukarıdaki diyagram üç adımlı süreci görselleştirir: DOCX yükle → AI dilbilgisi denetimini çalıştır → sorunları çıktı olarak al.* + +## Sonuç + +C# kullanarak bir Word belgesinde **dilbilgisi nasıl kontrol edilir** konusunu ele aldık, **DOCX dosyasını C#’ta nasıl yüklenir** kodunu gösterdik ve AI‑tarafından üretilen geri bildirimi nasıl yorumlayacağınızı anlattık. Aspose.Words AI, herhangi bir .NET uygulamasına sorunsuzca entegre olabilen güçlü, bulut destekli bir dilbilgisi motoru sunar. + +Sıradaki adımlar? Düzeltme‑uygulama döngüsünü otomatikleştirin, daha keskin öneriler için yeni `AiModelType.Gpt4` modelini deneyin ya da tam bir düzeltme hattı için bir hece‑denetleme kütüphanesiyle birleştirin. Olasılıklar neredeyse sınırsız ve artık sağlam bir temele sahipsiniz. + +Sorularınız mı var ya da zor bir köşe durumuyla mı karşılaştınız? Aşağıya yorum bırakın, iyi kodlamalar! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/turkish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/turkish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..25040af4a4 --- /dev/null +++ b/words/turkish/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-05-04 +description: Aspose ile belgeleri düzenlemek için LLM nasıl kullanılır – paragraf + metnini değiştirmeyi, yerel LLM'ye bağlanmayı ve AI kullanarak metni yeniden yazmayı + öğrenin. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: tr +og_description: LLM'yi kullanarak Aspose ile belgeleri nasıl düzenleyeceğiniz. Bu + rehber, yerel bir LLM'ye nasıl bağlanılacağını, paragraf metnini nasıl değiştirileceğini + ve metni AI kullanarak nasıl yeniden yazılacağını gösterir. +og_title: Aspose.Words ile LLM Nasıl Kullanılır – C#’ta Paragrafları Yeniden Yazma +tags: +- Aspose.Words +- C# +- AI +- LLM +title: LLM'yi Aspose.Words ile Nasıl Kullanılır – C#'ta Paragrafları Yeniden Yazma +url: /tr/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words ile LLM Kullanımı – C#'ta Paragrafları Yeniden Yazma + +Hiç **LLM'yi nasıl kullanarak** bir Word belgesini manuel olarak açmadan düzenleyebileceğinizi merak ettiniz mi? Tek başınıza değilsiniz. Birçok geliştirici, *paragraf metnini* programlı bir şekilde değiştirmeleri gerektiğinde, temiz bir AI‑tabanlı iş akışı eksikliği nedeniyle bir çıkmaza giriyor. + +Bu öğreticide yerel bir büyük dil modelini bağlayacağız, bir `.docx` dosyasından bir kesit vereceğiz, **AI kullanarak metni yeniden yazmasını** isteyeceğiz ve sonunda güncellenmiş belgeyi kaydedeceğiz—hepsi Aspose.Words ile. Sonunda, tüm süreci gösteren çalıştırılabilir bir C# konsol uygulamanız olacak. + +> **Elde edeceğiniz:** tam, çalıştırılabilir bir örnek, her adımın açıklamaları, uç durumlar için ipuçları ve çözümü genişletme fikirleri. + +## Gereksinimler + +- **.NET 6+** (veya .NET Framework 4.7.2 – kod her iki ortamda da çalışır) +- **Aspose.Words for .NET** (NuGet paketi `Aspose.Words`) +- **Yerel bir LLM sunucusu** basit bir HTTP `/generate` uç noktası sunan (ör. Ollama, LMStudio veya özel bir Flask servisi) +- C# ve HTTP istemci koduna temel bir aşinalık + +Ek SDK'lara gerek yok; diğer her şey birlikte yazacağımız kodda yer alıyor. + +## Adım 1: LLM ile Paragraf Metnini Değiştirme + +İlk yapmamız gereken, değiştirmek istediğimiz paragrafı belirlemek. Aspose.Words, zengin bir nesne modeli sunarak bunu çok kolaylaştırıyor. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Neden önemli:** +Doğru düğümü seçmek, başlıkları veya tabloları yanlışlıkla üzerine yazmanızı önler. **Paragraf metnini değiştirme** yaklaşımını kullanarak, yalnızca ilgilendiğimiz içeriği dokunarak belge yapısını bozulmadan tutarız. + +> **Pro ipucu:** Belgenizde değişken uzunlukta bölümler varsa, `document.GetChildNodes(NodeType.Paragraph, true)` ve LINQ kullanarak bir paragrafı metnine veya stiline göre bulun. + +## Adım 2: Yerel LLM Uç Noktasına Bağlanma + +Artık metnimiz olduğuna göre, bunu LLM'ye göndermemiz gerekiyor. Örnek, HTTP detaylarını gizleyen basit bir sarmalayıcı sınıfı `LocalLargeLanguageModel` kullanıyor. İsterseniz `HttpClient` çağrılarıyla değiştirebilirsiniz. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Neden bu şekilde bağlanıyoruz:** +Bir **yerel llm'ye bağlanma** kurulumu gecikmeyi ortadan kaldırır, verileri yerinde tutar ve API maliyetlerinden kaçınır. Sarmalayıcı ayrıca sonraki kodu daha temiz hâle getirir, **AI kullanarak metni yeniden yazma** mantığına odaklanmamızı sağlar. + +## Adım 3: Aspose.Words ile AI Kullanarak Metni Yeniden Yazma + +Paragraf metni elimizde ve LLM hazır olduğunda, modele tam olarak ne istediğimizi söyleyen bir istem (prompt) oluştururuz—resmi bir üslupla yeniden yazma. İstemi diğer stiller (samimi, teknik vb.) için de ayarlayabilirsiniz. + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Neden işe yarıyor:** +LLM'ler istem (prompt) odaklıdır; açık talimatlar vermek (“…'yi resmi bir üslupla yeniden yaz”) tutarlı sonuçlar verir. **AI kullanarak metni yeniden yazma** adımı öğretinin kalbidir – AI'nin belge iş akışlarına doğrudan nasıl entegre edilebileceğini gösterir. + +## Adım 4: Belgeyi Düzenleme ve Değişiklikleri Kaydetme + +Şimdi orijinal run'ları yeni içerikle değiştiriyoruz. Aspose.Words, metni `Run` nesnelerinde saklar, bu yüzden önce temizlemek kalan biçimlendirme kalıntılarını önler. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Köşe‑durum notu:** +Eğer orijinal paragraf karışık biçimlendirme (kalın, italik) içeriyorsa stilleri korumak isteyebilirsiniz. Bu durumda yeni bir `Run` oluşturun, orijinal `Font` ayarlarını kopyalayın ve ardından `Text` özelliğini `revisedText` olarak ayarlayın. + +## Tam Çalışan Örnek + +Aşağıda, bir konsol projesine kopyalayıp yapıştırabileceğiniz tüm program yer alıyor. Önce Aspose.Words NuGet paketini kurmayı unutmayın (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Beklenen Çıktı + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +`output.docx` dosyasını açın – üçüncü paragrafın artık düzenlenmiş sürümü okunduğunu göreceksiniz. + +## Sık Sorulan Sorular & Tuzaklar + +| Question | Answer | +|----------|--------| +| **LLM'im ekstra alanlarla JSON döndürürse ne olur?** | `GenerateText`'i doğru özelliği ayrıştıracak şekilde ayarlayın veya yanıtı manuel olarak parse edin. | +| **Birden fazla paragrafı aynı anda işleyebilir miyim?** | Evet – `document.FirstSection.Body.Paragraphs` üzerinde döngü yapın ve aynı istem mantığını uygulayın, belki bağlam için isteme paragraf indeksini ekleyin. | +| **LLM sunucum kimlik doğrulama gerektiriyor mu?** | POST'tan önce `HttpClient`'a bir başlık ekleyin: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Değiştirme sonrası biçimlendirme kayboluyor.** | Orijinal `Run.Font` ayarlarını koruyun: yeni bir `Run` oluşturun, `originalRun.Font.Clone()`'ı kopyalayın, ardından `Text`'i ayarlayın. | +| **LLM bazen boş string döndürüyor.** | Bir geri dönüş mekanizması ekleyin – eğer `revisedText.Trim().Length == 0` ise, orijinal metni tutun veya daha basit bir istemle tekrar deneyin. | + +## Çözümü Genişletme + +Artık tek bir paragraf için **llm'yi nasıl kullanacağınızı** öğrendiğinize göre, aşağıdaki adımları düşünün: + +- **Toplu işleme:** Her paragrafı döngüye alıp seçilen bir stilde yeniden yazın (ör. “tüm metni özlü hâle getir”). +- **Stil‑bilinçli yeniden yazma:** Orijinal paragrafın stil adını isteme gönderin, böylece LLM başlıklar ile gövde metni arasında fark gözetebilir. +- **CI pipeline entegrasyonu:** Belge düzenlemeyi dokümantasyon oluşturma sürecinin bir parçası olarak otomatikleştirin. +- **Alternatif istemler:** “Bu paragrafı özetle” ya da “Bu paragrafı İspanyolcaya çevir” gibi istemleri deneyerek **AI kullanarak metni yeniden yazma**'nın tam gücünü keşfedin. + +## Sonuç + +**llm'yi nasıl kullanacağınızı** Aspose.Words ile tüm süreci adım adım inceledik: belgeyi yükleme, **yerel llm'ye bağlanma**, bir paragrafı çıkarma, **AI kullanarak metni yeniden yazma**, **paragraf metnini değiştirme** ve sonunda sonucu kaydetme. Kod bağımsızdır, kutudan çıkar çıkmaz çalışır ve AI'yi geleneksel belge otomasyonu ile birleştirmenin pratik bir yolunu gösterir. + +Give it a spin, tweak the prompts, and let + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/turkish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/turkish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..749a79de3b --- /dev/null +++ b/words/turkish/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-05-04 +description: Word belgesini hızlıca özetleyin ve metni Google ile çevirin. Anthropic + Claude'u nasıl kullanacağınızı, rapordan özet oluşturmayı ve tek bir C# öğreticisinde + Google ile metin çevirisini öğrenin. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: tr +og_description: Word belgesini anında özetleyin ve metni Google ile çevirin. Bu rehber, + Anthropic Claude ve Aspose.Words kullanarak rapordan bir özet oluşturmayı gösterir. +og_title: C# ile Word Belgesini Özetle – Anthropic Claude ile Adım Adım +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: C# ile Word Belgesini Özetle – Anthropic Claude Kullanarak Tam Rehber +url: /tr/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# ile Word Belgesini Özetleme – Anthropic Claude Kullanarak Tam Kılavuz + +Hiç **word belgesini özetleme** ihtiyacı hissettiniz ama API'lerle ve uzun kodlarla boğuşurken takıldıysanız? Yalnız değilsiniz. Birçok projede—yıllık raporlar, hukuki özetler veya araştırma makaleleri—kısa bir özet çıkarmak günlük bir sorun. Neyse ki, Aspose.Words ve Anthropic Claude kombinasyonu işi çocuk oyuncağı haline getiriyor ve hatta hızlı bir Google çevirisi ekleyebiliyorsunuz. + +Bu öğreticide, bilmeniz gereken her şeyi adım adım göstereceğiz: büyük bir .docx dosyasını yükleme, Claude V2 modelini çağırarak özet oluşturma, Google ile bir ifadeyi çevirme ve en yaygın sorunları ele alma. Sonunda sadece birkaç C# satırıyla **rapordan özet oluşturma** yapabileceksiniz. + +## Önkoşullar + +- .NET 6+ (or .NET Core 3.1) yüklü +- Aspose.Words for .NET lisansı (veya ücretsiz deneme) +- Anthropic Claude V2 API erişimi (bir API anahtarına ihtiyacınız olacak) +- Google Translator için internet bağlantısı +- Visual Studio 2022 veya favori C# IDE'niz + +Ekstra NuGet paketlerine `Aspose.Words` ve `Aspose.Words.AI` dışında ihtiyaç yok; çevirmen sınıfı aynı kütüphane ile birlikte gelir. + +## Adım 1 – Kaynak Word Belgesini Yükleme + +İlk yapmamız gereken şey .docx dosyasını belleğe getirmektir. Aspose.Words bunu basit hale getirir ve sağlam ayrıştırıcısı sayesinde karmaşık düzenler, tablolar ve hatta gömülü görsellerle çalışır. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Neden önemli:** Belgeyi erken yüklemek, özellikleri (yazar, kelime sayısı) incelemenizi ve bir özetin gerçekten gerekli olup olmadığını belirlemenizi sağlar. 10 MB'den büyük dosyalar bellek yoğun olabilir, bu yüzden performans sorunlarıyla karşılaşırsanız `LoadOptions` ile `LoadFormat.Docx` kullanmayı düşünün. + +## Adım 2 – Belgeyi Anthropic Claude ile Özetleme + +Şimdi eğlenceli kısım geliyor: belgeyi Claude V2'ye teslim ediyoruz. `Summarizer` sınıfı HTTP çağrısını, token yönetimini ve yeniden denemeleri soyutlar. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Nasıl çalışır:** +> 1. **Chunking** – Aspose, Claude'un token limitlerine uymak için belgeyi otomatik olarak yönetilebilir parçalara (≈ 2 KB her biri) böler. +> 2. **Prompt engineering** – Kütüphane, “Aşağıdaki metnin kısa bir yönetici özeti sağlayın:” gibi bir istem gönderir ve ardından her parçayı ekler. +> 3. **Aggregation** – Claude, kısmi özetleri döndürür ve bunlar final `summaryText` içinde birleştirilir. + +### Kenar Durumları ve İpuçları + +- **Çok büyük raporlar** (> 100 sayfa) Claude'un bağlam penceresini aşabilir. Kesilmiş çıktı görürseniz, `SummarizerOptions.MaxChunkSize` değerini daha küçük bir değere ayarlayın. +- **İngilizce dışı kaynak** – Claude İngilizce ile en iyi çalışır; diğer diller için önce çevirin (Bkz. Adım 4) ardından özetleyin. +- **Hız sınırlamaları** – Anthropic dakikada sınırlama getirir. `429` yanıtı alırsanız, üstel geri çekilmeli bir yeniden deneme döngüsüyle çağrıyı sarmalayın. + +## Adım 3 – Özet Çıktısını Doğrulama + +İlerlemeye geçmeden önce, özetin boş olmadığını ve uzunluk beklentilerini karşıladığını doğrulamak iyi bir uygulamadır (ör. orijinal kelime sayısının %5‑10'u). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Oran çok düşük görünüyorsa (< 2 %), daha uzun bir çıktı talep etmek için `SummarizerOptions.SummaryLength` özelliğini ayarlamak isteyebilirsiniz. + +## Adım 4 – Metni Google ile Çevirme + +Şimdi net bir İngilizce özetimiz olduğuna göre, hızlı bir çeviri ekleyelim. `Translator` sınıfı, Google'ın herkese açık çeviri uç noktasını kullanır (kısa ifadeler için API anahtarı gerekmez, ancak üretim ortamında ücretli Cloud Translation API'ye geçmelisiniz). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Neden Google?** Hızlıdır, geniş çapta desteklenir ve ücretsiz uç nokta kimlik doğrulama olmadan kısa dizeleri işler. Büyük çeviriler için çağrıları toplu hâle getirin ve Google'ın kullanım limitlerine uyun. + +### Tüm Özeti Çevirme (İsteğe Bağlı) + +Eğer tüm özeti İspanyolca (veya başka bir dilde) ihtiyacınız varsa, `summaryText`'i doğrudan `Translator.Translate`'e gönderin. 5 KB istek boyutu limitine dikkat edin; özeti daha küçük parçalara bölmeniz gerekebilir. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Adım 5 – Özeti Word Dosyasına Geri Kaydetme (Bonus) + +Genellikle son kullanıcı, konsol çıktısı yerine indirilebilir bir belge bekler. Hem İngilizce hem de İspanyolca sürümleri içeren yeni bir `.docx` oluşturalım. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Pratik İpucu + +Özeti yeni bir Word dosyasına gömünce, orijinal biçimlendirmeyi minimal tutun (`Normal` stilini kullanın). Kaynağın karmaşık stilleri beklenmedik düzen kaymalarına neden olabilir. + +## Tam Çalışan Örnek + +Aşağıda her şeyi bir araya getiren **tam, kopyala‑yapıştır‑hazır** program yer alıyor. Aspose paketlerini ekledikten sonra tek bir `dotnet run` ile derlenir. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Beklenen konsol çıktısı** (kısaltılmıştır): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Sıkça Sorulan Sorular + +| Soru | Cevap | +|----------|--------| +| *Farklı bir AI modeli kullanabilir miyim?* | Evet. `SummarizerModel.AnthropicClaudeV2` yerine `SummarizerModel.OpenAIGPT4` (OpenAI anahtarı gerekir) veya enum içinde listelenen başka bir sağlayıcı kullanın. | +| *Belge korumalı bölümler içeriyorsa ne olur?* | Aspose `ProtectedDocumentException` hatası verir. Önce `LoadOptions.Password` ile kilidi açın veya korumasız bir kopya isteyin. | +| *Üretim için ücretli bir Aspose lisansına ihtiyacım var mı?* | Ücretsiz deneme 20 sayfaya kadar çalışır. Daha büyük raporlar için lisans sayfa limitini kaldırır ve performans iyileştirmeleri ekler. | +| *Google çevirmeni büyük bloklar için güvenilir mi?* | Kısa dizeler için uygundur. Toplu çeviri için istek‑boyutu limitlerinden kaçınmak ve daha iyi dil algısı elde etmek amacıyla Cloud Translation API'ye geçin. | + +## Sonuç + +Az önce Aspose.Words ile Anthropic Claude V2 modelini kullanarak **word belgesini özetledik**, ardından **Google ile metni çevirdik** to + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/turkish/net/basic-conversions/_index.md b/words/turkish/net/basic-conversions/_index.md index ee818f76f2..69f30cb7a2 100644 --- a/words/turkish/net/basic-conversions/_index.md +++ b/words/turkish/net/basic-conversions/_index.md @@ -27,6 +27,7 @@ Basic Conversions, Aspose.Words for .NET kitaplığını kullanarak temel belge | [Word'ü PDF olarak kaydet – Aspose.Words Tam C# Rehberi](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Aspose.Words for .NET kullanarak C# ile Word belgelerini PDF'ye dönüştürmenin adım adım rehberi. | | [Docx'i PDF olarak kaydet – Aspose.Words Tam C# Rehberi](./save-docx-as-pdf-with-aspose-words-complete-c-guide/) | Aspose.Words for .NET kullanarak C# ile DOCX dosyalarını PDF'ye dönüştürmenin ayrıntılı rehberi. | | [C# ile Word'ü PDF'ye Dönüştür – Aspose.Words Rehberi](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Aspose.Words for .NET ile C# kullanarak Word belgelerini PDF'ye nasıl dönüştüreceğinizi adım adım öğrenin. | +| [C# ile DOCX'ten Erişilebilir PDF Oluştur – Word'ü PDF'ye Dönüştürme](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Aspose.Words for .NET kullanarak C# ile DOCX dosyasından erişilebilir PDF oluşturmayı adım adım öğrenin. | | [Docx'i Bayta Dönüştür](./docx-to-byte/) | Verimli belge işleme için Aspose.Words kullanarak .NET'te Docx'i bayt dizisine nasıl dönüştüreceğinizi öğrenin. Adım adım kılavuz dahildir. | | [Docx'i Epub'a Dönüştür](./docx-to-epub/) | DOCX'i Aspose.Words for .NET ile kolayca EPUB'a dönüştürün. .NET uygulamalarınıza kusursuz entegrasyon için eğitimimizi takip edin. | | [Docx'i Mhtml'e Dönüştürme ve E-posta Gönderme](./docx-to-mhtml-and-sending-email/) | Bu adım adım kılavuzda DOCX'i MHTML'e nasıl dönüştüreceğinizi ve Aspose.Words for .NET kullanarak e-postaları nasıl göndereceğinizi öğrenin. Kolay otomasyonla üretkenliğinizi artırın. | diff --git a/words/turkish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/turkish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..4c6c764243 --- /dev/null +++ b/words/turkish/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: C#'ta bir DOCX dosyasından erişilebilir PDF oluşturun. Word'ü PDF'ye + nasıl dönüştüreceğinizi, Word'ü PDF olarak nasıl kaydedeceğinizi ve erişilebilirlik + uyumluluğu ile docx'i PDF'ye nasıl dışa aktaracağınızı öğrenin. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: tr +og_description: C#'ta bir DOCX dosyasından erişilebilir PDF oluşturun. Word'ü PDF'ye + dönüştürmek, Word'ü PDF olarak kaydetmek ve docx'i tam erişilebilirlikle PDF'ye + dışa aktarmak için bu adım adım öğreticiyi izleyin. +og_title: C# ile DOCX'ten Erişilebilir PDF Oluşturma – Hızlı Kılavuz +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: C# ile DOCX'ten Erişilebilir PDF Oluşturma – Word'ü PDF'e Nasıl Dönüştürülür +url: /tr/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# DOCX'ten Erişilebilir PDF Oluşturma C# – Word'ü PDF'e Nasıl Dönüştürülür + +Bir Word belgesinden **erişilebilir PDF** oluşturmanız gerektiğinde, hangi kütüphaneye güveneceğinizi bilemediniz mi? Yalnız değilsiniz—birçok geliştirici, erişilebilirlik için PDF/UA standartlarını karşılamak zorunda kaldıklarında aynı engelle karşılaşıyor. İyi haber şu ki, Aspose.Words ile bir `.docx` dosyasını sadece birkaç satır kodla uyumlu bir PDF'e dönüştürebilir ve ekran okuyucularının gerçekten okuyabileceği bir dosya elde edersiniz. + +Bu öğreticide **Word'ü PDF'e dönüştürme**, **Word'ü PDF olarak kaydetme** ve hatta PDF/UA‑1 (veya PDF/UA‑2) uyumluluğu ile **docx'i PDF'e dışa aktarma** konularını adım adım inceleyeceğiz. Sonunda kullanıma hazır bir C# kod parçacığına sahip olacak, her ayarın neden önemli olduğunu anlayacak ve eksik yazı tipleri ya da özel sayfa ayarları gibi yaygın kenar durumlarını nasıl yöneteceğinizi öğreneceksiniz. + +## Önkoşullar + +- .NET 6.0 veya daha yenisi (kod .NET Framework 4.6+ ile de çalışır) +- Bir Aspose.Words for .NET lisansı (veya ücretsiz değerlendirme anahtarı) +- C# ve Visual Studio (veya tercih ettiğiniz herhangi bir IDE) hakkında temel bir anlayış +- Erişilebilir hâle getirmek istediğiniz bir DOCX dosyası (biz buna `input.docx` diyeceğiz) + +> **Pro ipucu:** Ücretsiz deneme sürümünü kullanıyorsanız, oluşturulan PDF'in küçük bir “Evaluation” (Değerlendirme) filigranı içereceğini unutmayın. + +## Adım 1: Aspose.Words NuGet Paketini Yükleyin + +Herhangi bir C# kodu yazmadan önce Aspose.Words kütüphanesinin projeye eklenmesi gerekir. + +```bash +dotnet add package Aspose.Words +``` + +Komutu çalıştırmak `Aspose.Words.dll` dosyasını geri getirir ve ad alanlarını kullanılabilir hâle getirir. Bu adım, `PdfSaveOptions` sınıfının bu paketin içinde yer alması nedeniyle kritiktir. + +## Adım 2: Kaynak DOCX Dosyasını Yükleyin + +İlk mantıksal adım, dönüştürmek istediğiniz Word belgesini yüklemektir. Bunu, sayfalarını düzenlemeye başlamadan önce bir kitabı açmak gibi düşünün. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Neden önemli:** Belgeyi yüklemek, tüm stiller, görseller ve meta verileri içeren bellek içi bir temsil oluşturur. Dosya bozuksa, `Document` bir istisna fırlatır—bu yüzden üretim kodunda bunu bir try/catch bloğuna almanız iyi bir uygulamadır. + +## Adım 3: Erişilebilirlik için PDF Kaydetme Seçeneklerini Yapılandırın + +Aspose.Words, PDF uyumluluk seviyesini belirtmenize olanak tanır. PDF/UA‑1, orijinal erişilebilirlik standardıdır, PDF/UA‑2 ise birkaç yeni etiket ekler. Müşterinizin gereksinimlerine uyanı seçin. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **“Compliance” (Uyumluluk) ne yapar:** `PdfCompliance.PdfUax1` ayarı, Aspose.Words'e uygun etiketleri, mantıksal okuma sırasını ve görseller için alternatif metni gömmesini söyler—tam da ekran okuyucu yazılımlarının aradığı şey budur. + +## Adım 4: Belgeyi Erişilebilir PDF Olarak Kaydedin + +Şimdi zor iş bitti; sadece tanımladığımız seçenekleri kullanarak Aspose.Words'e PDF dosyasını yazdırıyoruz. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Bu satır çalıştıktan sonra, belirtilen klasörde `output.pdf` dosyasını bulacaksınız. Adobe Acrobat Reader’da **File → Properties → Description → PDF/A and PDF/UA** yolunu kontrol ederek uyumluluğu doğrulayın. + +## Adım 5: Erişilebilirliği Doğrulayın (İsteğe Bağlı ama Önerilir) + +Kod etiketli PDF çıktısını garanti etse de, hızlı bir manuel kontrol ekstra dikkat gerektirebilecek özel içerikleri yakalamanıza yardımcı olur. + +1. `output.pdf` dosyasını Adobe Acrobat Pro’da açın. +2. **Tools → Accessibility → Full Check** yoluna gidin. +3. Kontrolü çalıştırın ve olası uyarıları inceleyin (ör. özel görseller için eksik alt metin). + +Rapor hiçbir hata göstermiyorsa, PDF/UA‑1 standartlarını karşılayan **erişilebilir PDF** oluşturmayı başarıyla tamamlamış olursunuz. + +## Yaygın Varyasyonlar ve Kenar Durumları + +### Bir Döngüde Birden Çok DOCX Dosyasını Dönüştürme + +Elinizde bir belge topluluğu varsa, yükleme‑kaydetme mantığını bir `foreach` döngüsü içinde sarın. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### PDF/UA‑2'ye Geçiş + +Sadece `Compliance` enum değerini değiştirin: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Özel Yazı Tiplerini İşleme + +DOCX dosyanız sunucuda yüklü olmayan yazı tipleri kullanıyorsa, bunları gömün: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Gömme, PDF'in herhangi bir makinede aynı görüneceğini garanti eder—bu, **docx'i pdf'e dışa aktarma** sırasında dış paydaşlar için kritik bir detaydır. + +## Tam Çalışan Örnek + +Aşağıda, tüm parçaları bir araya getiren eksiksiz, çalıştırmaya hazır bir program bulunmaktadır. Kopyalayıp bir console uygulamasına yapıştırın, yolları ayarlayın ve **F5** tuşuna basın. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Beklenen sonuç:** Herhangi bir PDF görüntüleyicide açılabilen, doğru erişilebilirlik etiketlerine sahip ve yardımcı teknoloji kullanan kullanıcılarla paylaşılabilecek `output.pdf` adlı bir dosya. + +![Create accessible PDF example](/images/create-accessible-pdf.png "Screenshot showing a PDF/UA‑1 compliant document") + +*Görsel alt metni:* *erişilebilir pdf örneği – Adobe Acrobat'ta açılmış bir PDF/UA‑1 uyumlu belgenin ekran görüntüsü.* + +## Sıkça Sorulan Sorular + +- **Bu .NET Core ile çalışır mı?** + Kesinlikle. Aspose.Words çapraz platformdur, bu yüzden aynı kod Windows, Linux ve macOS üzerinde çalışır. + +- **DOCX dosyam makrolar içeriyorsa ne olur?** + Dönüştürme sırasında makrolar göz ardı edilir; yalnızca görünen içerik PDF'e işlenir. + +- **Özel bir PDF meta veri başlığı ekleyebilir miyim?** + Evet—kaydetmeden önce `pdfSaveOptions.Metadata.Title = "Your Custom Title";` satırını ekleyin. + +- **PDF/UA‑2 yaygın olarak destekleniyor mu?** + Çoğu modern PDF okuyucu PDF/UA‑2'yi anlar, ancak daha eski araçları hedefliyorsanız PDF/UA‑1 kullanmanız tavsiye edilir. + +## Sonuç + +Aspose.Words kullanarak bir DOCX dosyasından **erişilebilir PDF** oluşturmayı, NuGet paketinin kurulumundan PDF/UA uyumluluğunu doğrulamaya kadar her adımı gösterdik. Bu adımları izleyerek **Word'ü PDF'e dönüştürme**, **Word'ü PDF olarak kaydetme** ve **docx'i PDF'e dışa aktarma** işlemlerini güvenilir bir şekilde yapabilir, erişilebilirlik standartlarını karşılayabilirsiniz—kurumsal belge akışları üzerinde çalışan her geliştirici için vazgeçilmez bir beceridir. + +Bir sonraki zorluğa hazır mısınız? Özel bir başlık/altbilgi eklemeyi, PDF/A‑2b etiketi gömmeyi ya da süreci bir ASP.NET Core Web API içinde otomatikleştirmeyi deneyin. Olanaklar sınırsızdır ve burada inşa ettiğiniz temel, onları güvenle ele almanızı sağlayacaktır. + +İyi kodlamalar, ve PDF'leriniz her zaman okunabilir olsun! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/turkish/net/programming-with-markdownsaveoptions/_index.md b/words/turkish/net/programming-with-markdownsaveoptions/_index.md index 4ad3c251c7..1c76f3c3f3 100644 --- a/words/turkish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/turkish/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ Words Processing with MarkdownSaveOptions, .NET için Aspose.Words kütüphanesi | [Aspose.Words ile docx'i markdown olarak kaydet – Tam C# Rehberi](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Aspose.Words kullanarak docx dosyasını markdown formatına tam C# rehberiyle dönüştürün. | | [Word Görüntülerini Kaydet – Aspose ile Word'u Markdown'a Dönüştür](./save-word-images-convert-word-to-markdown-with-aspose/) | Aspose.Words for .NET kullanarak Word belgelerindeki görüntüleri kaydedin ve Word'u Markdown'a dönüştürün. | | [Word'ü C# ile Markdown'a Dönüştür – Görüntü Çıkarma ile Tam Rehber](./convert-word-to-markdown-in-c-full-guide-with-image-extracti/) | Aspose.Words for .NET kullanarak Word belgelerini markdown formatına dönüştürün ve görüntüleri ayıklayın. Tam C# rehberi. | +| [Görüntüleri Kaydet – Aspose.Words ile DOCX'i Markdown'a Dönüştür](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Aspose.Words for .NET kullanarak DOCX dosyasındaki görüntüleri kaydedin ve Markdown'a dönüştürün. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/turkish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..c58b6ba83b --- /dev/null +++ b/words/turkish/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-05-04 +description: Aspose.Words kullanarak bir DOCX'i Markdown'a dönüştürürken resimleri + nasıl kaydedeceğinizi öğrenin. Bu rehber ayrıca Word'ten resimleri nasıl çıkaracağınızı + ve Word'ü Markdown olarak nasıl kaydedeceğinizi gösterir. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: tr +og_description: Aspose.Words kullanarak bir DOCX dosyasını Markdown'a dönüştürürken + resimleri nasıl kaydedilir? Tam C# kodu ile adım adım rehber. +og_title: Görselleri Kaydetme – Aspose.Words ile DOCX'i Markdown'a Dönüştürme +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Görselleri Kaydetme – Aspose.Words ile DOCX'i Markdown'a Dönüştürme +url: /tr/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Görselleri Kaydetme – Aspose.Words ile DOCX'i Markdown'a Dönüştürme + +Word dosyasını Markdown'a dönüştürürken **görselleri nasıl kaydedeceğinizi** hiç merak ettiniz mi? Tek başınıza değilsiniz. Birçok geliştirici, dönüşüm sırasında resimlerin kırık bağlantılar hâline gelmesi ya da daha da kötüsü tamamen kaybolması sorunuyla karşılaşıyor. İyi haber şu ki, Aspose.Words size ince ayar kontrolü sunar; böylece Word'ten görselleri çıkarabilir, nereye konulacağını belirleyebilir ve hâlâ temiz bir Markdown çıktısı alabilirsiniz. + +Bu öğreticide, bir `.docx` dosyasını `.md`'ye dönüştürürken **görselleri ayrı bir klasöre nasıl kaydedeceğinizi** gösteren, çalıştırmaya hazır bir C# örneği üzerinden adım adım ilerleyeceğiz. Ayrıca **convert docx to markdown**, **extract images from word** ve **how to convert docx** konularına da değinecek, **save word as markdown** yaparken hiçbir varlığı kaybetmemenizi sağlayacağız. + +## Önkoşullar + +- .NET 6.0 veya üzeri (API, .NET Framework 4.7+ üzerinde aynı şekilde çalışır) +- Aktif bir Aspose.Words lisansı ya da ücretsiz deneme sürümü (deneme sürümü çıktıya bir filigran ekler, ancak kod aynı şekilde çalışır) +- İçinde görseller bulunan bir Word belgesi (ör. `DocWithImages.docx`) +- Visual Studio 2022 ya da C# projelerini derleyebilen herhangi bir editör + +> **Pro ipucu:** Deneme sürümü kullanıyorsanız, görsel‑kaydetme mantığını hâlâ test edebilirsiniz; sadece son PDF/MD dosyasının deneme filigranı içereceğini unutmayın. + +## Çözümün Genel Görünümü + +Yüksek seviyede süreç şu şekilde işler: + +1. Kaynak `.docx` dosyasını `Document` ile yükleyin. +2. Bir `MarkdownSaveOptions` nesnesi oluşturun ve içine bir `IResourceSavingCallback` bağlayın. +3. Geri çağrıda (callback) her görsel için klasör ve dosya adını belirleyin. +4. Belgeyi Markdown olarak kaydedin; geri çağrı her görseli diske yazar. + +Bu, dönüşüm sırasında **görselleri nasıl kaydedeceğinizin** temelidir. Aynı desen, ihtiyacınız olursa (fontlar, CSS vb.) diğer kaynak türleri için de kullanılabilir. + +## Adım 1 – Görselleri İçeren DOCX'i Yükleyin + +İlk olarak, dönüştürmek istediğiniz Word dosyasına işaret eden bir `Document` örneğine ihtiyacımız var. Burada karmaşık bir şey yok; sadece doğrudan bir yapıcı çağrısı. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Neden önemli:** Belgeyi yüklemek, Aspose'un Word XML'ini ayrıştırdığı tek yerdir; eksik fontlar ya da bozuk bölümler hemen bir istisna fırlatır—görselleri kaydetmeye başlamadan önce. + +## Adım 2 – Görsel‑Kaydetme Geri Çağrısı ile MarkdownSaveOptions'ı Ayarlayın + +`MarkdownSaveOptions` sınıfı, `ResourceSavingCallback` aracılığıyla kaydetme sürecine müdahale etmenizi sağlar. Bu geri çağrı, Aspose'un yazması gereken her dış kaynak (görseller, CSS vb.) için bir `ResourceSavingArgs` nesnesi alır. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Geri Çağrı (Callback) Uygulaması + +Aşağıda `ImageSavingCallback`'in tam uygulaması yer alıyor. Markdown dosyasının yanına bir `Images` alt‑klasörü oluşturur, her resme sıralı bir ad verir (`img_0.png`, `img_1.jpg`, …) ve isteğe bağlı olarak resmi başka bir yere (ör. bir bulut kovasına) akıtmanıza olanak tanır. + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **Bu nasıl yardımcı olur:** `args.FileName`'i özelleştirerek **görselleri nasıl kaydedeceğinizi** tam olarak kontrol edersiniz—düz bir klasör, tarih‑bazlı bir hiyerarşi ya da hatta bir veritabanı BLOB'ı olsun. Geri çağrı her görsel için çalıştığından, Markdown dosyasını sonradan işlemek zorunda kalmazsınız. + +## Adım 3 – Belgeyi Markdown Olarak Kaydedin + +Seçenekler ve geri çağrı hazır olduğunda, gerçek dönüşüm tek bir satırda gerçekleşir. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Bu satır tamamlandığında elinizde olacak: + +- `Doc.md` – Word içeriğinizin Markdown temsili. +- `Images\img_0.png`, `Images\img_1.jpg`, … – orijinal DOCX'ten çıkarılan tüm resimler. + +## Tam, Çalıştırmaya Hazır Örnek + +Her şeyi bir araya getirdiğimizde, yeni bir C# projesine kopyalayıp yapıştırabileceğiniz bağımsız bir konsol uygulaması elde edersiniz. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Beklenen Sonuç + +Programı çalıştırdıktan sonra: + +- `C:\Docs\Doc.md` dosyasını herhangi bir metin editöründe açın. `![](Images/img_0.png)` gibi Markdown görsel bağlantılarını göreceksiniz. +- `Images` klasörü, çıkarılan her resmi sıralı bir adla içerecek. +- Markdown dosyası, yerel görselleri destekleyen herhangi bir görüntüleyicide (VS Code önizleme, GitHub vb.) doğru şekilde render edilecektir. + +## Sık Sorulan Sorular (SSS) + +### Bu diğer görsel formatları (SVG, TIFF) ile çalışır mı? + +Evet. `Path.GetExtension(args.FileName)` orijinal uzantıyı korur, bu yüzden SVG, TIFF, BMP ve hatta EMF değişmeden kaydedilir. Tek sınırlama, bazı Markdown render'larının SVG'yi satır içi gösterememesidir; bu durumda SVG'yi önceden PNG'ye dönüştürmeniz gerekebilir. + +### Görselleri ayrı dosyalar yerine Base64 olarak gömmem gerekirse ne yapmalıyım? + +`ResourceSaving` içinde fiziksel dosya yazımını bir bellek akışıyla (memory stream) değiştirip, Markdown bağlantısını manuel olarak düzenleyebilirsiniz. Aspose doğrudan bir “Base64 olarak göm” seçeneği sunmaz, ancak geri çağrı `args.Stream` üzerinde tam kontrol sağlar. + +### Yerleşik `ExportImages` metodundan farkı nedir? + +`ExportImages` tüm görselleri bir klasöre **Markdown üretmeden** çıkarır. Bizim geri çağrımız iki işlemi birleştirir, böylece görsel dosya adları `.md` içindeki referanslarla eşleşir. Bu uyum, dönüşüm sırasında **görselleri nasıl kaydedeceğiniz** konusundaki doğru sonucu elde etmenin anahtarıdır. + +### Birden fazla DOCX dosyasını toplu olarak dönüştürebilir miyim? + +Kesinlikle. Çekirdek mantığı `foreach (var file in Directory.GetFiles(..., "*.docx"))` döngüsü içinde sarın, çıktı yollarını ayarlayın ve aynı `ImageSavingCallback`'i yeniden kullanın. Tek yapmanız gereken, her belge için yeni bir `MarkdownSaveOptions` oluşturmak; çünkü `args.DestinationFileName` her yinelemede değişir. + +## Kenar Durumları & En İyi Uygulamalar + +| Durum | Dikkat Edilmesi Gereken | Önerilen Çözüm | +|-----------|----------------------|-----------------| +| **Büyük DOCX (yüzlerce MB)** | Yükleme sırasında bellek baskısı | `LoadOptions` ile `LoadFormat.Docx` kullanın ve parçaları akış‑yüklü (stream‑load) şekilde alın | +| **Görsel adları çakışıyor** | Hedef klasörde aynı isimli `img_0.png` varsa üzerine yazabilir | GUID ekleyin: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Yazma izni olmayan çıktı klasörü** | Kaydetme `UnauthorizedAccessException` fırlatır | İşlemin yeterli izinlerle çalıştığından emin olun veya yazılabilir bir yol seçin | +| **Görsel olmayan kaynaklar (CSS, fontlar)** | Geri çağrı bunları da alır | `if (args.ResourceType != ResourceType.Image) return;` koşulunu ekleyin (zaten gösterildi) | +| **Unicode dosya adları** | Bazı dosya sistemleri karakterleri hatalı işler | `Path.GetInvalidFileNameChars()` ile `args.FileName`'i temizleyerek atayın | + +## Bir Sonraki Kez Keşfedebileceğiniz İlgili Konular + +- **convert docx to markdown** özel başlık stilleriyle (satır içi görseller için `MarkdownSaveOptions.ExportImagesAsBase64` kullanın) +- **extract images from word** `Document.GetChildNodes(NodeType.Shape, true)` yöntemiyle + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/turkish/net/working-with-fonts/_index.md b/words/turkish/net/working-with-fonts/_index.md index 2e524ab12c..55f605a41a 100644 --- a/words/turkish/net/working-with-fonts/_index.md +++ b/words/turkish/net/working-with-fonts/_index.md @@ -50,9 +50,9 @@ Metni farklı yazı tipleriyle biçimlendirmek, yazı tipi değiştirme kurallar | [Ekler Olmadan İkame Edin](./get-substitution-without-suffixes/) | Bu eğitimde, .NET için Aspose.Words ile Word belgesinde eksiz geçersiz kılmaların nasıl yapılacağını öğrenin. | | [Aspose.Words'ta Yazı Tiplerini Algılamayı Öğrenin – Uyarıları ve Ayarları Yönetme](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Aspose.Words for .NET kullanarak belgelerdeki yazı tiplerini nasıl tespit edeceğinizi, uyarıları almayı ve ayarları yönetmeyi öğrenin. | | [Aspose.Words'ta Yazı Tiplerini Yakalama – Tam Kılavuz](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Aspose.Words for .NET kullanarak bir Word belgesinde yazı tiplerini nasıl yakalayacağınızı adım adım öğrenin. | - | [DOCX Dosyasını Yükleme ve Eksik Yazı Tiplerini Algılama – Tam C# Rehberi](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Aspose.Words for .NET kullanarak DOCX dosyalarını nasıl yükleyeceğinizi ve eksik yazı tiplerini nasıl tespit edeceğinizi adım adım öğrenin. | | [Aspose.Words'te Yazı Tipi Değiştirme Uyarılarını Etkinleştirme – Tam Kılavuz](./enable-font-substitution-warnings-in-aspose-words-complete-g/) | Aspose.Words for .NET kullanarak yazı tipi değiştirme uyarılarını nasıl etkinleştireceğinizi adım adım öğrenin. | +| [Aspose Yazı Tipi Değiştirme: Word Belgelerinde Eksik Yazı Tiplerini Algıla](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Aspose.Words for .NET kullanarak Word belgelerindeki eksik yazı tiplerini nasıl tespit edeceğinizi öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/turkish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..c22fc71efc --- /dev/null +++ b/words/turkish/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-05-04 +description: Aspose font ikamesini kullanarak bir Word belgesi yüklediğinizde eksik + fontları tespit etmeyi ve eksik font ayrıntılarını almayı öğrenin—adım adım rehber. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: tr +og_description: Aspose font ikamesini ustalaştırarak bir Word belgesi yüklerken eksik + fontları tespit edin ve eksik font bilgilerini tam C# kodu ile alın. +og_title: Aspose Yazı Tipi Değiştirme – Word Belgelerindeki Eksik Yazı Tiplerini Tespit + Edin +tags: +- Aspose.Words +- C# +- Font Management +title: 'Aspose Yazı Tipi Değiştirme: Word Belgelerinde Eksik Yazı Tiplerini Tespit + Et' +url: /tr/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose Font Substitution – Word Belgelerinde Eksik Yazı Tiplerini Algıla + +Farklı bir makinede bir Word belgesinin neden yanlış göründüğünü hiç merak ettiniz mi? Çoğu zaman suçlu eksik bir yazı tipidir ve **Aspose font substitution** bu boşlukları görsel bir felakete dönüşmeden tespit etmenizi sağlayan araçtır. Bu öğreticide, **detect missing fonts** işlemini **load a Word document** anında nasıl yapacağınızı ve ardından **retrieve missing font** ayrıntılarını nasıl alıp düzeltebileceğinizi veya değiştirebileceğinizi adım adım göstereceğiz. + +Uyarı geri aramasını (warning callback) ayarlamaktan eksik yazı tiplerinin temiz bir listesini çekmeye kadar her şeyi ele alacağız. Sonunda, hangi yazı tiplerinin seçilmediğini tam olarak söyleyen, çalıştırmaya hazır bir C# kod parçacığına sahip olacaksınız ve bunun belge bütünlüğü için neden önemli olduğunu anlayacaksınız. + +--- + +## Ön Koşullar – Başlamadan Önce Nelere İhtiyacınız Var + +- **Aspose.Words for .NET** (v23.12 veya daha yeni sürüm önerilir). +- .NET geliştirme ortamı (Visual Studio, Rider veya `dotnet` CLI). +- Bilerek eksik bir yazı tipi kullanan örnek bir DOCX—`DocumentWithMissingFont.docx` olarak adlandırın. +- Temel C# bilgisi—fantezi bir şey yok, sadece bir konsol uygulaması çalıştırabilme yeteneği. + +Eğer bunlardan herhangi biri size yabancı geliyorsa, durun ve NuGet paketini kurun: + +```bash +dotnet add package Aspose.Words +``` + +Hepsi bu. Ekstra yazı tipine, harici servislere gerek yok. + +## Adım 1: Word Belgesini Yükle (ve Yazı Tipi Kontrollerini Tetikle) + +İlk yapmanız gereken **load a Word document** işlemidir. Aspose.Words dosyayı ayrıştırır ve eğer referans verilen bir yazı tipini bulamazsa bir *FontSubstitution* uyarısı kuyruğa ekler. İşte yüklemeyi yapan kod: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Neden önemli:** Belgeyi erken yüklemek, Aspose'a her metin akışını, stili ve gömülü nesneyi tarama fırsatı verir. Sisteminizde veya özel yazı tipi klasöründe bir yazı tipi bulunamazsa daha sonra bir uyarı alırsınız. + +## Adım 2: Değiştirme Olaylarını Yakalamak İçin Bir Uyarı Geri Araması (Warning Callback) Ekle + +Aspose.Words, eksik yazı tipleri gibi sorunları size bildirmek için bir geri arama mekanizması kullanır. `IWarningCallback` uygulamasını `doc.WarningCallback`'e atayarak, her uyarıyı gerçekleştiği anda yakalayabilirsiniz. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Pro ipucu:** Birden fazla geri aramayı (ör. günlükleme, UI güncellemeleri) birleştirilmiş desenle sararak ekleyebilirsiniz, ancak bu öğreticide tek bir geri arama işleri net tutar. + +## Adım 3: Font Substitution Uyarı Geri Aramasını Uygula + +Şimdi işi gerçekten yapan sınıfı tanımlıyoruz. Geri arama bir `WarningInfo` nesnesi alır; `WarningType.FontSubstitution` için filtreleme yapar ve açıklamayı daha sonra kullanmak üzere saklar. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Ne oluyor:** Aspose eksik bir yazı tipiyle karşılaştığında, “Font substitution: 'Comic Sans MS' bulunamadı, yerine 'Arial' kullanılıyor.” gibi bir uyarı oluşturur. Geri aramamız bu satırı yazdırır ve kaydeder. + +## Adım 4: Belgeyi İşle (İsteğe Bağlı) ve Eksik Yazı Tiplerini Topla + +Sadece **detect missing fonts** yapmanız gerekiyorsa, yükleme adımı yeterlidir—uyarılar otomatik olarak tetiklenir. Ancak, birçok geliştirici bazı işlemler (ör. kaydetme, dönüştürme) yaptıktan sonra **retrieve missing font** bilgisine de ihtiyaç duyar. Aşağıda tüm uyarıların yayılmasını sağlamak için küçük bir işlem—PDF olarak kaydetme—zorlayıp, toplanan mesajları alıyoruz. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Beklenen konsol çıktısı** (örnek): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Her satırın orijinal yazı tipini ve Aspose'un seçtiği yedek yazı tipini açıkça belirttiğine dikkat edin. Bu, **aspose font substitution** raporlamasının özüdür. + +## Adım 5: İleri Düzey – Değiştirmeleri Azaltmak İçin Özel Yazı Tipi Kaynaklarını Kullanma + +Bazen eksik yazı tiplerine *sahipsiniz*, sadece varsayılan sistem klasöründe değiller. Aspose.Words, `FontSettings` aracılığıyla özel bir dizine işaret etmenizi sağlar. Bu adımı eklemek, değişim uyarılarının sayısını büyük ölçüde azaltabilir. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Neden ekleyelim?** Belgeleri makineler arasında dağıtıyorsanız, gerekli yazı tiplerini bilinen bir klasörde paketlemek her yerde aynı görsel görünümü sağlar. Ayrıca Aspose, geri dönmeden önce bu klasörü kontrol ettiği için **detect missing fonts** rutininiz daha doğru olur. + +## Tam Çalışan Örnek + +Hepsini bir araya getirerek, tek bir kopyala‑yapıştır‑hazır konsol programı burada. `Program.cs` olarak kaydedin ve `dotnet run` ile çalıştırın. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Görmeniz gereken:** Kaynak DOCX, sahip olmadığınız yazı tiplerine referans veriyorsa, konsol her değişim satırını ardından kısa bir özetle yazdırır. Tüm yazı tipleri mevcutsa, “No missing fonts were detected.” mesajını alırsınız. + +## Yaygın Tuzaklar ve Nasıl Kaçınılır + +| Issue | Why it Happens | Fix | +|-------|----------------|-----| +| **Uyarı görünmüyor** | Belge yalnızca sistem yazı tiplerini kullanıyor veya eksik yazı tiplerini içeren bir özel klasör zaten eklediniz. | DOCX'in gerçekten mevcut olmayan bir yazı tipine referans verdiğini doğrulayın. Word'de bir paragrafı nadir bir yazı tipine (ör. “Papyrus”) değiştirebilirsiniz. | +| **Yinelenen mesajlar** | Aynı yazı tipi birden fazla çalışmada kullanılıyor, bu da birden fazla uyarıya neden oluyor. | Eğer yalnızca benzersiz bir küme gerekiyorsa, listeyi `Distinct()` ile tekilleştirin. | +| **Büyük belgelerde performans düşüşü** | Her uyarı UI iş parçacığında işlenir. | Yüklemeyi bir arka plan görevinde çalıştırın veya son‑işlem için `Parallel.ForEach` kullanın. | +| **Yanlış yedek yazı tipi** | Aspose'un varsayılan yedek yazı tipi markanızla uyuşmayabilir. | `FontSettings.SubstitutionSettings.DefaultFontName` değerini tercih ettiğiniz bir yedek (ör. “Calibri”) olarak ayarlayın. | + +## Çözümü Genişletme – Eksik Yazı Tiplerini JSON’a Aktarma + +Eğer eksik yazı tiplerini bir istemciye rapor etmesi gereken bir web servisi oluşturuyorsanız, listenin serileştirilmesi çok basittir: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Artık API'niz, başka bir sistemin tüketebileceği temiz bir JSON yükü döndürebilir. + +## Sonuç + +Bu rehberde **Aspose font substitution**'ı baştan sona gösterdik: bir Word belgesini yükleme, bir uyarı geri araması ekleme, her *detect missing fonts* olayını yakalama ve sonunda raporlama veya düzeltme için **retrieve missing font** bilgilerini elde etme. İsteğe bağlı özel yazı tipi klasörleri ekleyerek değişim listesini küçültebilir ve birkaç ek satırla sonuçları JSON olarak dışa aktarabilirsiniz. + +Unutmayın, belgelerinizin görsel bütünlüğü kullandıkları yazı tiplerine bağlıdır. Burada gösterilen teknikle, beklenmedik bir yedekle karşılaşmazsınız. +Bir sonraki adıma hazır mısınız? Bu mantığı daha büyük bir belge‑işleme hattına entegre etmeyi deneyin veya Aspose.Words'un yazı tipi gömme (`doc.FontSettings.EmbeddedFonts`) gibi diğer özelliklerini keşfedin. Olanaklar sınırsızdır ve kullanıcılarınız düzgün çıktınız için size teşekkür edecektir. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/vietnamese/net/ai-powered-document-processing/_index.md b/words/vietnamese/net/ai-powered-document-processing/_index.md index c297f59718..12f69bc89c 100644 --- a/words/vietnamese/net/ai-powered-document-processing/_index.md +++ b/words/vietnamese/net/ai-powered-document-processing/_index.md @@ -39,9 +39,12 @@ Cuối cùng, đừng quên kiểm tra [Làm việc với tùy chọn tóm tắt | Tiêu đề | Mô tả | | --- | --- | | [Làm việc với mô hình AI](./working-with-ai-model/) | Tìm hiểu cách sử dụng Aspose.Words cho .NET để tóm tắt tài liệu bằng AI. Các bước dễ dàng để nâng cao quản lý tài liệu. | -| [Làm việc với mô hình AI của Google](./working-with-google-ai-model/) Nâng cao khả năng xử lý tài liệu của bạn với Aspose.Words cho .NET và Google AI để tạo bản tóm tắt ngắn gọn một cách dễ dàng. | +| [Làm việc với mô hình AI của Google](./working-with-google-ai-model/) | Nâng cao khả năng xử lý tài liệu của bạn với Aspose.Words cho .NET và Google AI để tạo bản tóm tắt ngắn gọn một cách dễ dàng. | | [Làm việc với mô hình AI mở](./working-with-open-ai-model/) | Mở khóa tóm tắt tài liệu hiệu quả bằng Aspose.Words cho .NET với các mô hình mạnh mẽ của OpenAI. Khám phá hướng dẫn toàn diện này ngay. | | [Làm việc với tùy chọn tóm tắt](./working-with-summarize-options/) | Học cách tóm tắt tài liệu Word hiệu quả bằng Aspose.Words cho .NET với hướng dẫn từng bước của chúng tôi về cách tích hợp các mô hình AI để có thông tin chi tiết nhanh chóng. | +| [Cách sử dụng LLM với Aspose.Words – Viết lại đoạn văn trong C#](./how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/) | Khám phá cách sử dụng LLM với Aspose.Words để tự động viết lại các đoạn văn trong tài liệu C#. | +| [Cách kiểm tra ngữ pháp trong C# – Hướng dẫn toàn diện cho tài liệu Word](./how-to-check-grammar-in-c-complete-guide-for-word-documents/) | Tìm hiểu cách sử dụng Aspose.Words cho .NET để kiểm tra ngữ pháp tài liệu Word trong C# một cách chi tiết và hiệu quả. | +| [Tóm tắt tài liệu Word trong C# – Hướng dẫn toàn diện sử dụng Anthropic Claude](./summarize-word-document-in-c-complete-guide-using-anthropic/) | Khám phá cách sử dụng Anthropic Claude để tóm tắt tài liệu Word trong C# một cách chi tiết và hiệu quả. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md b/words/vietnamese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md new file mode 100644 index 0000000000..14dc91a57c --- /dev/null +++ b/words/vietnamese/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/_index.md @@ -0,0 +1,233 @@ +--- +category: general +date: 2026-05-04 +description: Học cách kiểm tra ngữ pháp trong tài liệu Word bằng C#. Hướng dẫn này + cũng bao gồm cách tải tệp DOCX bằng C# và sử dụng Aspose.Words AI để có kết quả + chính xác. +draft: false +keywords: +- how to check grammar +- check grammar word document +- load docx file c# +language: vi +og_description: Cách kiểm tra ngữ pháp trong tài liệu Word bằng C#? Theo dõi hướng + dẫn này để tải tệp DOCX bằng C# và thực hiện kiểm tra ngữ pháp dựa trên AI với Aspose.Words. +og_title: Cách Kiểm Tra Ngữ Pháp trong C# – Hướng Dẫn Chi Tiết Từng Bước +tags: +- Aspose.Words +- C# +- Grammar Checking +title: Cách kiểm tra ngữ pháp trong C# – Hướng dẫn đầy đủ cho tài liệu Word +url: /vi/net/ai-powered-document-processing/how-to-check-grammar-in-c-complete-guide-for-word-documents/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách Kiểm Tra Ngữ Pháp trong C# – Hướng Dẫn Đầy Đủ cho Tài Liệu Word + +Bạn đã bao giờ tự hỏi **cách kiểm tra ngữ pháp** trong một tài liệu Word mà không rời khỏi IDE chưa? Bạn không phải là người duy nhất. Nhiều nhà phát triển cần xác thực các báo cáo do người dùng tạo, email tự động, hoặc thậm chí tài liệu trước khi phát hành. Tin tốt là gì? Với Aspose.Words AI bạn có thể thực hiện điều này một cách lập trình, và toàn bộ quy trình vừa vặn gọn trong một workflow C# điển hình. + +Trong hướng dẫn này, chúng tôi sẽ đi qua mọi thứ bạn cần biết: từ việc tải tệp DOCX C# đến việc gọi trình kiểm tra ngữ pháp AI và diễn giải kết quả. Khi kết thúc, bạn sẽ có một đoạn mã sẵn sàng chạy, in ra mức độ nghiêm trọng, thông điệp và đề xuất thay thế cho mỗi vấn đề — không cần sao chép‑dán thủ công. + +## Những Điều Bạn Sẽ Học + +- **Cách kiểm tra ngữ pháp** trong tài liệu Word bằng Aspose.Words AI. +- Các bước chính xác để **tải tệp DOCX C#** bằng lớp `Document`. +- Cách xử lý đối tượng `GrammarCheckResult`, lặp qua các vấn đề và xuất ra các chẩn đoán hữu ích. +- Những bẫy thường gặp (như thiếu giấy phép) và mẹo để làm cho giải pháp sẵn sàng cho môi trường production. + +> **Yêu cầu trước:** .NET 6.0+ (hoặc .NET Framework 4.6+), Visual Studio 2022 (hoặc bất kỳ IDE nào bạn thích), và giấy phép Aspose.Words for .NET (bản dùng thử miễn phí đủ cho việc thử nghiệm). Nếu bạn chưa cài đặt các gói NuGet, chạy: + +```bash +dotnet add package Aspose.Words +dotnet add package Aspose.Words.AI +``` + +Bây giờ, chúng ta cùng bắt đầu. + +## Bước 1: Tải Tệp DOCX trong C# + +Trước khi bất kỳ kiểm tra ngữ pháp nào có thể diễn ra, tài liệu phải được tải vào bộ nhớ. Aspose.Words làm cho việc này chỉ cần một dòng lệnh, nhưng có một vài chi tiết cần lưu ý. + +```csharp +using Aspose.Words; +using System; + +// Step 1: Load the source document you want to check +// Replace "YOUR_DIRECTORY/input.docx" with the actual path to your file. +string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + +// Verify that the file exists to avoid a FileNotFoundException. +if (!File.Exists(docPath)) +{ + Console.WriteLine($"Error: The file '{docPath}' was not found."); + return; +} + +// The Document constructor reads the DOCX into a DOM-like structure. +Document document = new Document(docPath); +Console.WriteLine($"Successfully loaded '{docPath}'."); +``` + +**Tại sao điều này quan trọng:** +- Sử dụng `Path.Combine` đảm bảo tính tương thích đa nền tảng. +- Kiểm tra tồn tại ngăn ngừa lỗi runtime mà nếu không sẽ làm mờ logic kiểm tra ngữ pháp thực tế. +- Khi bạn **tải một tệp DOCX C#**, Aspose sẽ phân tích tất cả các kiểu, header, footer và ngay cả văn bản ẩn, cung cấp cho AI một bức tranh đầy đủ về tài liệu. + +> **Mẹo chuyên nghiệp:** Nếu bạn cần làm việc với stream (ví dụ, tệp tải lên từ web), bạn có thể thay thế lời gọi `new Document(docPath)` bằng `new Document(stream)`. + +## Bước 2: Chọn Mô Hình AI cho Kiểm Tra Ngữ Pháp + +Aspose.Words AI hỗ trợ nhiều mô hình, từ các mô hình nhẹ chạy cục bộ đến các biến thể GPT dựa trên đám mây. Đối với hầu hết các kịch bản, **GPT‑3.5 Turbo** cung cấp điểm cân bằng tốt giữa tốc độ và độ chính xác. + +```csharp +using Aspose.Words.AI; + +// Step 2: Perform grammar checking with the desired AI model (e.g., GPT‑3.5 Turbo) +GrammarCheckResult grammarResult = GrammarChecker.CheckGrammar( + document, + AiModelType.Gpt35Turbo // You can also use AiModelType.Gpt4 if you have access. +); +``` + +**Tại sao chọn GPT‑3.5 Turbo?** +- Nó đủ nhanh cho việc xử lý hàng chục tệp mỗi phút. +- Chi phí (nếu bạn đang ở gói trả phí) thấp hơn GPT‑4 trong khi vẫn bắt được hầu hết các lỗi phổ biến. +- API tự động xử lý giới hạn token, vì vậy bạn không cần tự tay chia tệp lớn thành các phần. + +Nếu bạn muốn một cách tiếp cận offline, thay `AiModelType.Gpt35Turbo` bằng `AiModelType.Local` (cần gói mô hình offline tùy chọn). + +## Bước 3: Lặp Qua Các Vấn Đề và Hiển Thị Phản Hồi Hữu Ích + +Đối tượng `GrammarCheckResult` chứa một tập hợp các đối tượng `GrammarIssue`. Mỗi vấn đề cung cấp mức độ nghiêm trọng, thông điệp dễ hiểu và đề xuất thay thế. Hãy in chúng ra một cách đẹp mắt. + +```csharp +// Step 3: Output each identified issue with its severity, message, and suggested replacement +if (grammarResult == null || grammarResult.Issues.Count == 0) +{ + Console.WriteLine("No grammar issues were detected. Your document looks clean!"); +} +else +{ + Console.WriteLine($"Found {grammarResult.Issues.Count} grammar issue(s):"); + foreach (var grammarIssue in grammarResult.Issues) + { + // Example output: "Error: Use of passive voice (suggestion: rewrite in active voice)" + Console.WriteLine($"{grammarIssue.Severity}: {grammarIssue.Message} (suggestion: {grammarIssue.SuggestedReplacement})"); + } +} +``` + +**Ý nghĩa của các trường:** +- `Severity` – thường là `Info`, `Warning`, hoặc `Error`. Xem `Error` là phải sửa trước khi xuất bản. +- `Message` – mô tả ngắn gọn về vấn đề (ví dụ, “Subject‑verb agreement”). +- `SuggestedReplacement` – đề xuất sửa lỗi của AI; bạn có thể tự động áp dụng nếu tin tưởng mô hình, hoặc đưa cho người kiểm duyệt. + +> **Trường hợp đặc biệt:** Một số vấn đề có thể có `SuggestedReplacement` trống (ví dụ, đề xuất về kiểu dáng). Trong những trường hợp này, chỉ cần đánh dấu vị trí để xem xét thủ công. + +## Ví Dụ Hoàn Chỉnh + +Kết hợp tất cả lại, đây là một ứng dụng console tự chứa mà bạn có thể sao chép‑dán vào một dự án .NET mới. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +namespace GrammarCheckDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // Step 1: Load the DOCX file + // ----------------------------------------------------------------- + string docPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + if (!File.Exists(docPath)) + { + Console.WriteLine($"Error: The file '{docPath}' does not exist."); + return; + } + + Document document = new Document(docPath); + Console.WriteLine($"Loaded document: {docPath}"); + + // ----------------------------------------------------------------- + // Step 2: Run the AI grammar checker (GPT‑3.5 Turbo) + // ----------------------------------------------------------------- + GrammarCheckResult result = GrammarChecker.CheckGrammar(document, AiModelType.Gpt35Turbo); + + // ----------------------------------------------------------------- + // Step 3: Process and display the results + // ----------------------------------------------------------------- + if (result?.Issues == null || result.Issues.Count == 0) + { + Console.WriteLine("✅ No grammar issues detected."); + } + else + { + Console.WriteLine($"⚠️ Detected {result.Issues.Count} issue(s):"); + foreach (var issue in result.Issues) + { + Console.WriteLine($"{issue.Severity}: {issue.Message} (suggestion: {issue.SuggestedReplacement})"); + } + } + + // Keep console window open when debugging + Console.WriteLine("\nPress any key to exit..."); + Console.ReadKey(); + } + } +} +``` + +**Kết quả mong đợi (ví dụ):** + +``` +Loaded document: C:\Projects\GrammarCheckDemo\input.docx +⚠️ Detected 3 issue(s): +Error: Subject‑verb agreement error (suggestion: "The team **has** completed") +Warning: Use of passive voice (suggestion: "Rewrite in active voice") +Info: Consider replacing "utilize" with "use" (suggestion: "use") +Press any key to exit... +``` + +Nếu bạn chạy chương trình với một tài liệu sạch, sẽ thấy dòng “✅ No grammar issues detected.” thay vì các lỗi. + +## Xử Lý Các Trường Hợp Thường Gặp + +| Vấn đề | Tại sao xảy ra | Giải pháp nhanh | +|--------|----------------|-----------------| +| **LicenseException** | Thư viện Aspose yêu cầu giấy phép hợp lệ cho môi trường production. | Thêm `License license = new License(); license.SetLicense("Aspose.Words.lic");` vào đầu phương thức `Main`. | +| **Network timeout** | Lời gọi mô hình AI tới đám mây vượt quá thời gian chờ mặc định 100 s. | Tăng thời gian chờ bằng `AiClientOptions.Timeout = TimeSpan.FromMinutes(2);` trước khi gọi `CheckGrammar`. | +| **Tài liệu lớn (> 10 MB)** | Một số mô hình đám mây cắt ngắn đầu vào. | Chia tài liệu thành các phần bằng `document.Sections` và chạy kiểm tra từng phần, sau đó tổng hợp kết quả. | +| **Thiếu đề xuất** | Mô hình không thể tạo ra một thay thế (ví dụ, cách diễn đạt mơ hồ). | Ghi lại vấn đề để xem xét thủ công; không tự động áp dụng các đề xuất rỗng. | + +## Mở Rộng Giải Pháp + +- **Tự động sửa:** Lặp qua `grammarResult.Issues` và thay thế văn bản bằng `document.Range.Replace`. Đảm bảo sao lưu tệp gốc trước. +- **Xử lý hàng loạt:** Bao bọc toàn bộ luồng trong một `foreach` duyệt qua thư mục các tệp DOCX. Lưu mỗi báo cáo dưới dạng file JSON để phân tích sau. +- **Tích hợp với ASP.NET:** Cung cấp một endpoint nhận tệp DOCX tải lên, chạy kiểm tra và trả về payload JSON các vấn đề. + +## Minh Họa Hình Ảnh + +lưu đồ quy trình kiểm tra ngữ pháp + +*Biểu đồ trên minh họa quy trình ba bước: tải DOCX → chạy kiểm tra ngữ pháp AI → xuất ra các vấn đề.* + +## Kết Luận + +Chúng ta đã bao quát **cách kiểm tra ngữ pháp** trong tài liệu Word bằng C#, trình bày mã chính xác để **tải một tệp DOCX C#**, và chỉ ra cách diễn giải phản hồi do AI tạo ra. Với Aspose.Words AI, bạn có một động cơ ngữ pháp mạnh mẽ, hỗ trợ đám mây, tích hợp liền mạch vào bất kỳ ứng dụng .NET nào. + +Bước tiếp theo? Thử tự động hoá vòng lặp sửa‑áp dụng, khám phá `AiModelType.Gpt4` mới hơn để có đề xuất sắc nét hơn, hoặc kết hợp với thư viện kiểm tra chính tả để có một pipeline hiệu đính toàn diện. Các khả năng gần như vô hạn, và bạn đã có nền tảng vững chắc để xây dựng. + +Có câu hỏi hoặc gặp trường hợp khó xử? Để lại bình luận bên dưới, chúc bạn lập trình vui vẻ! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/vietnamese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md b/words/vietnamese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md new file mode 100644 index 0000000000..508477fe0e --- /dev/null +++ b/words/vietnamese/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-05-04 +description: Cách sử dụng LLM để chỉnh sửa tài liệu với Aspose – học cách thay thế + văn bản đoạn, kết nối với LLM cục bộ và viết lại văn bản bằng AI. +draft: false +keywords: +- how to use llm +- replace paragraph text +- connect to local llm +- rewrite text using ai +- edit document aspose +language: vi +og_description: Cách sử dụng LLM để chỉnh sửa tài liệu với Aspose. Hướng dẫn này cho + thấy cách kết nối với LLM cục bộ, thay thế văn bản đoạn văn và viết lại văn bản + bằng AI. +og_title: Cách sử dụng LLM với Aspose.Words – Viết lại các đoạn văn trong C# +tags: +- Aspose.Words +- C# +- AI +- LLM +title: Cách sử dụng LLM với Aspose.Words – Viết lại các đoạn văn trong C# +url: /vi/net/ai-powered-document-processing/how-to-use-llm-with-aspose-words-rewrite-paragraphs-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách sử dụng LLM với Aspose.Words – Viết lại các đoạn văn trong C# + +Bạn đã bao giờ tự hỏi **cách sử dụng LLM** để chỉnh sửa một tài liệu Word mà không cần mở thủ công chưa? Bạn không phải là người duy nhất. Nhiều nhà phát triển gặp khó khăn khi họ cần *thay thế văn bản đoạn* một cách lập trình nhưng lại thiếu quy trình làm việc dựa trên AI sạch sẽ. + +Trong hướng dẫn này, chúng ta sẽ kết nối một mô hình ngôn ngữ lớn cục bộ, cung cấp cho nó một đoạn trích từ tệp `.docx`, yêu cầu nó **viết lại văn bản bằng AI**, và cuối cùng lưu tài liệu đã cập nhật — tất cả đều sử dụng Aspose.Words. Khi kết thúc, bạn sẽ có một ứng dụng console C# sẵn sàng chạy, minh họa toàn bộ quy trình. + +> **Bạn sẽ nhận được:** một ví dụ hoàn chỉnh, có thể chạy được, giải thích từng bước, mẹo cho các trường hợp đặc biệt, và ý tưởng mở rộng giải pháp. + +## Những gì bạn cần + +- **.NET 6+** (hoặc .NET Framework 4.7.2 – mã hoạt động trên cả hai) +- **Aspose.Words for .NET** (gói NuGet `Aspose.Words`) +- Một **máy chủ LLM cục bộ** cung cấp endpoint HTTP đơn giản `/generate` (ví dụ: Ollama, LMStudio, hoặc dịch vụ Flask tùy chỉnh) +- Kiến thức cơ bản về C# và mã client HTTP + +Không cần SDK bổ sung; mọi thứ còn lại nằm trong mã chúng ta sẽ viết cùng nhau. + +## Bước 1: Cách sử dụng LLM để thay thế văn bản đoạn + +Điều đầu tiên chúng ta cần làm là xác định đoạn văn mà chúng ta muốn sửa đổi. Aspose.Words làm cho việc này trở nên dễ dàng bằng cách cung cấp một mô hình đối tượng phong phú. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; // Imaginary namespace for illustration – replace with actual if needed +using System.Net.Http; +using System.Text; +using System.Text.Json; + +// Load the source document +Document document = new Document("YOUR_DIRECTORY/input.docx"); + +// Grab the third paragraph (zero‑based index) +Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + +// Show the original text in the console – handy for debugging +Console.WriteLine("Original paragraph:"); +Console.WriteLine(targetParagraph.GetText()); +``` + +**Tại sao điều này quan trọng:** +Việc chọn đúng node ngăn bạn vô tình ghi đè tiêu đề hoặc bảng. Bằng cách sử dụng phương pháp **replace paragraph text**, chúng ta giữ nguyên cấu trúc tài liệu trong khi chỉ chỉnh sửa nội dung mà chúng ta quan tâm. + +> **Mẹo chuyên nghiệp:** Nếu tài liệu của bạn có các phần có độ dài biến đổi, hãy sử dụng `document.GetChildNodes(NodeType.Paragraph, true)` và LINQ để tìm một đoạn dựa trên văn bản hoặc kiểu của nó. + +## Bước 2: Kết nối tới Endpoint LLM Cục bộ + +Bây giờ chúng ta đã có văn bản, cần gửi nó tới LLM. Ví dụ sử dụng một lớp wrapper đơn giản `LocalLargeLanguageModel` để ẩn đi các chi tiết HTTP. Bạn có thể thay thế bằng các lời gọi `HttpClient` nếu muốn. + +```csharp +/// +/// Minimal wrapper around a local LLM HTTP API. +/// Assumes the API accepts a JSON payload { "prompt": "..."} and returns { "response": "..." }. +/// +public class LocalLargeLanguageModel +{ + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + // Synchronous call for brevity – in production use async/await + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } +} + +// Step 2: Instantiate the LLM client pointing at localhost +var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); +``` + +**Tại sao chúng ta kết nối theo cách này:** +Cấu hình **connect to local llm** loại bỏ độ trễ, giữ dữ liệu trên máy chủ nội bộ và tránh chi phí API. Wrapper cũng làm cho mã sau này sạch hơn, cho phép chúng ta tập trung vào logic **rewrite text using ai**. + +## Bước 3: Viết lại Văn bản bằng AI với Aspose.Words + +Với văn bản đoạn đã có và LLM sẵn sàng, chúng ta tạo một prompt để nói cho mô hình biết chính xác những gì chúng ta muốn — viết lại với tông trang trọng. Bạn có thể điều chỉnh prompt cho các phong cách khác (thân thiện, kỹ thuật, v.v.). + +```csharp +// Build the prompt – notice the newline for readability +string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + +// Ask the LLM to generate the revised version +string revisedText = localLlm.GenerateText(prompt); + +// Show the AI‑generated text +Console.WriteLine("\nRevised paragraph:"); +Console.WriteLine(revisedText); +``` + +**Tại sao cách này hoạt động:** +LLM hoạt động dựa trên prompt; cung cấp chỉ dẫn rõ ràng (“Rewrite … in a formal tone”) mang lại kết quả nhất quán. Bước **rewrite text using ai** là trung tâm của hướng dẫn – nó minh họa cách AI có thể được nhúng trực tiếp vào quy trình làm việc với tài liệu. + +## Bước 4: Chỉnh sửa Tài liệu và Lưu Thay đổi + +Bây giờ chúng ta thay thế các run gốc bằng nội dung mới. Aspose.Words lưu trữ văn bản trong các đối tượng `Run`, vì vậy việc xóa chúng trước sẽ tránh các artefact định dạng còn lại. + +```csharp +// Clear existing runs (pieces of text) from the paragraph +targetParagraph.Runs.Clear(); + +// Append a new Run containing the revised text +targetParagraph.AppendChild(new Run(document, revisedText)); + +// Save the updated document +document.Save("YOUR_DIRECTORY/output.docx"); + +// Confirmation +Console.WriteLine("\nDocument saved as output.docx"); +``` + +**Lưu ý trường hợp đặc biệt:** +Nếu đoạn gốc chứa định dạng hỗn hợp (đậm, nghiêng) bạn có thể muốn giữ nguyên kiểu. Trong trường hợp đó, tạo một `Run` mới, sao chép cài đặt `Font` gốc, sau đó đặt `Text` của nó thành `revisedText`. + +## Ví dụ Hoạt động Đầy đủ + +Dưới đây là toàn bộ chương trình bạn có thể sao chép và dán vào dự án console. Hãy nhớ cài đặt gói NuGet Aspose.Words trước (`dotnet add package Aspose.Words`). + +```csharp +// --------------------------------------------------------------- +// Complete C# console app: how to use llm to edit a Word doc +// --------------------------------------------------------------- +using Aspose.Words; +using Aspose.Words.AI; // Replace with real namespace if needed +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Text.Json; + +namespace LlmAsposeDemo +{ + public class LocalLargeLanguageModel + { + private readonly HttpClient _client; + private readonly string _endpoint; + + public LocalLargeLanguageModel(string endpoint) + { + _endpoint = endpoint.TrimEnd('/'); + _client = new HttpClient(); + } + + public string GenerateText(string prompt) + { + var payload = new { prompt }; + var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"); + + var response = _client.PostAsync($"{_endpoint}/generate", content).Result; + response.EnsureSuccessStatusCode(); + + var json = response.Content.ReadAsStringAsync().Result; + var result = JsonSerializer.Deserialize>(json); + return result?["response"] ?? string.Empty; + } + } + + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the document + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Pick the third paragraph (index 2) + Paragraph targetParagraph = document.FirstSection.Body.Paragraphs[2]; + Console.WriteLine("Original paragraph:"); + Console.WriteLine(targetParagraph.GetText()); + + // 3️⃣ Connect to the local LLM + var localLlm = new LocalLargeLanguageModel("http://localhost:5000"); + + // 4️⃣ Ask the model to rewrite it formally + string prompt = $"Rewrite the following in a formal tone:\n{targetParagraph.GetText()}"; + string revisedText = localLlm.GenerateText(prompt); + Console.WriteLine("\nRevised paragraph:"); + Console.WriteLine(revisedText); + + // 5️⃣ Replace the paragraph contents + targetParagraph.Runs.Clear(); + targetParagraph.AppendChild(new Run(document, revisedText)); + + // 6️⃣ Save the file + document.Save("YOUR_DIRECTORY/output.docx"); + Console.WriteLine("\nDocument saved as output.docx"); + } + } +} +``` + +### Kết quả Dự kiến + +``` +Original paragraph: +the quick brown fox jumps over the lazy dog. + +Revised paragraph: +The quick brown fox leaps over the lazy dog in a formal manner. + +Document saved as output.docx +``` + +Mở `output.docx` – bạn sẽ thấy đoạn văn thứ ba bây giờ hiển thị phiên bản đã được chỉnh sửa. + +## Câu hỏi Thường gặp & Lưu ý + +| Câu hỏi | Trả lời | +|----------|--------| +| **Nếu LLM của tôi trả về JSON với các trường phụ?** | Điều chỉnh `GenerateText` để giải mã thuộc tính đúng hoặc phân tích phản hồi theo cách thủ công. | +| **Tôi có thể xử lý nhiều đoạn cùng lúc không?** | Có – lặp qua `document.FirstSection.Body.Paragraphs` và áp dụng cùng logic prompt, có thể thêm chỉ mục đoạn vào prompt để cung cấp ngữ cảnh. | +| **Máy chủ LLM của tôi yêu cầu xác thực?** | Thêm header vào `HttpClient` trước khi POST: `_client.DefaultRequestHeaders.Add("Authorization", "Bearer YOUR_TOKEN");`. | +| **Định dạng bị mất sau khi thay thế.** | Giữ nguyên cài đặt `Run.Font` gốc: tạo một `Run` mới, sao chép `originalRun.Font.Clone()`, sau đó đặt `Text` của nó. | +| **LLM đôi khi trả về chuỗi rỗng.** | Triển khai cơ chế dự phòng – nếu `revisedText.Trim().Length == 0`, giữ nguyên văn bản gốc hoặc thử lại với prompt đơn giản hơn. | + +## Mở rộng Giải pháp + +Bây giờ bạn đã thành thạo **cách sử dụng llm** cho một đoạn văn, hãy xem xét các bước tiếp theo sau: + +- **Xử lý hàng loạt:** Lặp qua mọi đoạn và viết lại theo phong cách đã chọn (ví dụ: “làm ngắn gọn tất cả văn bản”). +- **Viết lại có nhận thức kiểu:** Truyền tên kiểu của đoạn gốc vào prompt để LLM có thể tôn trọng tiêu đề so với văn bản thân. +- **Tích hợp vào pipeline CI:** Tự động chỉnh sửa tài liệu như một phần của quy trình xây dựng tài liệu. +- **Prompt thay thế:** Thử “tóm tắt đoạn này” hoặc “dịch đoạn này sang tiếng Tây Ban Nha” để khám phá toàn bộ sức mạnh của **rewrite text using ai**. + +## Kết luận + +Chúng ta đã đi qua toàn bộ quy trình **cách sử dụng llm** với Aspose.Words: tải tài liệu, **connect to local llm**, trích xuất một đoạn, **rewrite text using ai**, **replace paragraph text**, và cuối cùng lưu kết quả. Mã nguồn độc lập, hoạt động ngay khi chạy, và trình bày cách thực tế để kết hợp AI với tự động hoá tài liệu truyền thống. + +Hãy thử nghiệm, điều chỉnh các prompt, và để + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/vietnamese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md b/words/vietnamese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md new file mode 100644 index 0000000000..6399ce053b --- /dev/null +++ b/words/vietnamese/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/_index.md @@ -0,0 +1,264 @@ +--- +category: general +date: 2026-05-04 +description: Tóm tắt tài liệu Word nhanh chóng và dịch văn bản bằng Google. Tìm hiểu + cách sử dụng Anthropic Claude, tạo bản tóm tắt từ báo cáo và dịch văn bản bằng Google + trong một hướng dẫn C# duy nhất. +draft: false +keywords: +- summarize word document +- translate text with google +- summarize document with ai +- how to use anthropic claude +- create summary from report +language: vi +og_description: Tóm tắt tài liệu Word ngay lập tức và dịch văn bản bằng Google. Hướng + dẫn này chỉ cách sử dụng Anthropic Claude và Aspose.Words để tạo bản tóm tắt từ + báo cáo. +og_title: Tóm tắt tài liệu Word bằng C# – Hướng dẫn từng bước với Anthropic Claude +tags: +- Aspose.Words +- C# +- AI summarization +- Google Translator +title: Tóm tắt tài liệu Word trong C# – Hướng dẫn đầy đủ sử dụng Anthropic Claude +url: /vi/net/ai-powered-document-processing/summarize-word-document-in-c-complete-guide-using-anthropic/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tóm tắt tài liệu Word trong C# – Hướng dẫn toàn diện sử dụng Anthropic Claude + +Bạn đã bao giờ cần **tóm tắt tài liệu Word** nhưng lại gặp khó khăn khi phải xử lý các API và đoạn mã dài dòng? Bạn không phải là người duy nhất. Trong nhiều dự án—báo cáo thường niên, bản tóm tắt pháp lý, hoặc các bài nghiên cứu—việc trích xuất một bản tóm tắt ngắn gọn là một vấn đề thường gặp. May mắn thay, sự kết hợp giữa Aspose.Words và Anthropic Claude giúp việc này trở nên dễ dàng, và bạn thậm chí có thể thêm một bản dịch nhanh bằng Google trong khi làm. + +Trong hướng dẫn này, chúng ta sẽ đi qua mọi thứ bạn cần biết: tải một tệp .docx lớn, gọi mô hình Claude V2 để tạo bản tóm tắt, dịch một cụm từ bằng Google, và xử lý các vấn đề thường gặp. Khi kết thúc, bạn sẽ có thể **tạo bản tóm tắt từ báo cáo** chỉ với vài dòng C#. + +## Yêu cầu trước + +- .NET 6+ (hoặc .NET Core 3.1) đã được cài đặt +- Giấy phép Aspose.Words for .NET (hoặc bản dùng thử miễn phí) +- Truy cập vào API Anthropic Claude V2 (bạn sẽ cần một khóa API) +- Kết nối Internet để sử dụng Google Translator +- Visual Studio 2022 hoặc IDE C# yêu thích của bạn + +Không cần thêm bất kỳ gói NuGet nào ngoài `Aspose.Words` và `Aspose.Words.AI`; lớp Translator được cung cấp cùng thư viện. + +## Bước 1 – Tải tài liệu Word nguồn + +Điều đầu tiên chúng ta cần làm là đưa tệp .docx vào bộ nhớ. Aspose.Words làm cho việc này trở nên đơn giản và, nhờ bộ phân tích mạnh mẽ, nó hoạt động tốt với các bố cục phức tạp, bảng và thậm chí là hình ảnh nhúng. + +```csharp +using Aspose.Words; +using Aspose.Words.AI; + +// Adjust the path to point at your actual file +string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + +// Load the document – this throws if the file is missing or corrupted +Document sourceDoc = new Document(sourcePath); +Console.WriteLine($"✅ Loaded document: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); +``` + +> **Tại sao điều này quan trọng:** Việc tải tài liệu sớm cho phép bạn kiểm tra các thuộc tính (tác giả, số từ) và quyết định liệu có cần tóm tắt hay không. Các tệp lớn > 10 MB có thể tốn nhiều bộ nhớ, vì vậy hãy cân nhắc sử dụng `LoadOptions` với `LoadFormat.Docx` nếu gặp vấn đề về hiệu năng. + +## Bước 2 – Tóm tắt tài liệu bằng Anthropic Claude + +Bây giờ là phần thú vị: chúng ta chuyển tài liệu cho Claude V2. Lớp `Summarizer` trừu tượng hoá việc gọi HTTP, xử lý token và các lần thử lại. + +```csharp +// SummarizerModel enum includes several providers; we pick AnthropicClaudeV2 +string summaryText = Summarizer.Summarize( + sourceDoc, + SummarizerModel.AnthropicClaudeV2 +); + +// Show the result in the console +Console.WriteLine("\n--- Document Summary ---"); +Console.WriteLine(summaryText); +``` + +> **Cách hoạt động:** +> 1. **Chunking** – Aspose tự động chia tài liệu thành các phần có kích thước phù hợp (≈ 2 KB mỗi phần) để tuân thủ giới hạn token của Claude. +> 2. **Prompt engineering** – Thư viện gửi một lời nhắc như “Provide a concise executive summary of the following text:” kèm theo mỗi phần. +> 3. **Aggregation** – Claude trả về các bản tóm tắt một phần và chúng được ghép lại thành `summaryText` cuối cùng. + +### Trường hợp đặc biệt & Mẹo + +- **Báo cáo rất lớn** (> 100 trang) có thể vượt quá cửa sổ ngữ cảnh của Claude. Nếu bạn thấy đầu ra bị cắt ngắn, hãy bật `SummarizerOptions.MaxChunkSize` với giá trị nhỏ hơn. +- **Nguồn không phải tiếng Anh** – Claude hoạt động tốt nhất với tiếng Anh; đối với các ngôn ngữ khác, hãy dịch trước (xem Bước 4) rồi mới tóm tắt. +- **Giới hạn tốc độ** – Anthropic áp đặt giới hạn mỗi phút. Bao quanh lời gọi bằng vòng lặp thử lại với back‑off exponential nếu nhận được phản hồi `429`. + +## Bước 3 – Xác minh đầu ra tóm tắt + +Trước khi tiếp tục, nên kiểm tra xem bản tóm tắt có rỗng không và có đáp ứng kỳ vọng về độ dài (ví dụ, 5‑10 % số từ gốc). + +```csharp +int originalWordCount = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +int summaryWordCount = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + +Console.WriteLine($"\nOriginal words: {originalWordCount}"); +Console.WriteLine($"Summary words : {summaryWordCount} ({(double)summaryWordCount / originalWordCount:P1})"); +``` + +Nếu tỷ lệ quá thấp (< 2 %), bạn có thể điều chỉnh thuộc tính `SummarizerOptions.SummaryLength` để yêu cầu đầu ra dài hơn. + +## Bước 4 – Dịch văn bản bằng Google + +Bây giờ chúng ta đã có bản tóm tắt tiếng Anh ngắn gọn, hãy thêm một bản dịch nhanh. Lớp `Translator` sử dụng endpoint dịch công cộng của Google (không cần khóa API cho các cụm từ ngắn, nhưng trong môi trường production bạn nên chuyển sang Cloud Translation API trả phí). + +```csharp +// Example phrase – you could also translate the whole summary if needed +string phrase = "Hello world!"; +string spanishText = Translator.Translate( + phrase, + Language.English, + Language.Spanish +); + +Console.WriteLine("\n--- Translation ---"); +Console.WriteLine($"{phrase} → {spanishText}"); +``` + +> **Tại sao Google?** Nó nhanh, hỗ trợ rộng rãi, và endpoint miễn phí xử lý các chuỗi ngắn mà không cần xác thực. Đối với dịch hàng loạt, hãy gộp các lời gọi và tuân thủ giới hạn sử dụng của Google. + +### Dịch toàn bộ bản tóm tắt (Tùy chọn) + +Nếu bạn cần toàn bộ bản tóm tắt bằng tiếng Tây Ban Nha (hoặc bất kỳ ngôn ngữ nào khác), chỉ cần truyền `summaryText` vào `Translator.Translate`. Lưu ý giới hạn kích thước yêu cầu 5 KB; bạn có thể cần chia tóm tắt thành các phần nhỏ hơn. + +```csharp +string spanishSummary = Translator.Translate( + summaryText, + Language.English, + Language.Spanish +); +Console.WriteLine("\n--- Spanish Summary ---"); +Console.WriteLine(spanishSummary); +``` + +## Bước 5 – Lưu bản tóm tắt trở lại tệp Word (Bonus) + +Thường thì người dùng cuối mong muốn một tài liệu có thể tải xuống thay vì đầu ra console. Hãy tạo một tệp `.docx` mới chứa cả phiên bản tiếng Anh và tiếng Tây Ban Nha. + +```csharp +// Create a fresh document for the summary +Document summaryDoc = new Document(); +DocumentBuilder builder = new DocumentBuilder(summaryDoc); + +// Title +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; +builder.Writeln("Executive Summary"); + +// English summary +builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; +builder.Writeln(summaryText); + +// Spanish version +builder.Writeln("\nResumen Ejecutivo (Español)"); +builder.Writeln(spanishSummary); + +// Save to disk +string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); +summaryDoc.Save(outputPath); +Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); +``` + +### Mẹo thực tế + +Khi bạn nhúng bản tóm tắt vào tệp Word mới, hãy giữ định dạng gốc tối thiểu (sử dụng style `Normal`). Các style phức tạp từ nguồn có thể gây ra sự thay đổi bố cục không mong muốn. + +## Ví dụ hoàn chỉnh hoạt động + +Dưới đây là chương trình **đầy đủ, sẵn sàng sao chép‑dán** kết nối mọi thứ lại với nhau. Nó biên dịch bằng một lệnh `dotnet run` sau khi bạn đã thêm các gói Aspose. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.AI; + +class Program +{ + static void Main() + { + // ---------- Load the source document ---------- + string sourcePath = Path.Combine(Environment.CurrentDirectory, "LongReport.docx"); + Document sourceDoc = new Document(sourcePath); + Console.WriteLine($"✅ Loaded: {sourceDoc.BuiltInDocumentProperties.Title ?? "Untitled"}"); + + // ---------- Generate summary with Anthropic Claude ---------- + string summaryText = Summarizer.Summarize(sourceDoc, SummarizerModel.AnthropicClaudeV2); + Console.WriteLine("\n--- Document Summary ---"); + Console.WriteLine(summaryText); + + // ---------- Verify summary length ---------- + int originalWords = sourceDoc.GetText().Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + int summaryWords = summaryText.Split( + new[] { ' ', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries).Length; + Console.WriteLine($"\nOriginal words: {originalWords}"); + Console.WriteLine($"Summary words : {summaryWords} ({(double)summaryWords / originalWords:P1})"); + + // ---------- Translate a phrase (or the whole summary) ---------- + string phrase = "Hello world!"; + string spanishPhrase = Translator.Translate(phrase, Language.English, Language.Spanish); + Console.WriteLine("\n--- Translation ---"); + Console.WriteLine($"{phrase} → {spanishPhrase}"); + + // Optional: translate the whole summary + string spanishSummary = Translator.Translate(summaryText, Language.English, Language.Spanish); + Console.WriteLine("\n--- Spanish Summary ---"); + Console.WriteLine(spanishSummary); + + // ---------- Save both versions to a new Word file ---------- + Document summaryDoc = new Document(); + DocumentBuilder builder = new DocumentBuilder(summaryDoc); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Title; + builder.Writeln("Executive Summary"); + builder.ParagraphFormat.StyleIdentifier = StyleIdentifier.Normal; + builder.Writeln(summaryText); + builder.Writeln("\nResumen Ejecutivo (Español)"); + builder.Writeln(spanishSummary); + string outputPath = Path.Combine(Environment.CurrentDirectory, "ReportSummary.docx"); + summaryDoc.Save(outputPath); + Console.WriteLine($"\n✅ Summary saved to: {outputPath}"); + } +} +``` + +**Kết quả console dự kiến** (được rút gọn để ngắn gọn): + +``` +✅ Loaded: Quarterly Financial Review +--- Document Summary --- +The report shows a 12% YoY revenue increase driven by... +Original words: 8420 +Summary words : 842 (10.0%) +--- Translation --- +Hello world! → ¡Hola mundo! +--- Spanish Summary --- +El informe muestra un aumento del 12%... +✅ Summary saved to: C:\Projects\ReportSummary.docx +``` + +## Câu hỏi thường gặp + +| Câu hỏi | Trả lời | +|----------|--------| +| *Tôi có thể sử dụng mô hình AI khác không?* | Có. Thay `SummarizerModel.AnthropicClaudeV2` bằng `SummarizerModel.OpenAIGPT4` (cần khóa OpenAI) hoặc bất kỳ nhà cung cấp nào được liệt kê trong enum. | +| *Nếu tài liệu chứa các phần được bảo vệ thì sao?* | Aspose sẽ ném ra `ProtectedDocumentException`. Hãy mở khóa trước bằng `LoadOptions.Password` hoặc yêu cầu bản sao không được bảo vệ. | +| *Tôi có cần giấy phép Aspose trả phí cho môi trường production không?* | Bản dùng thử miễn phí hoạt động tối đa 20 trang. Đối với các báo cáo lớn hơn, giấy phép sẽ loại bỏ giới hạn trang và thêm các tối ưu hiệu năng. | +| *Trình dịch Google có đáng tin cậy cho các khối lớn không?* | Đối với các chuỗi ngắn thì ổn. Đối với dịch hàng loạt, hãy chuyển sang Cloud Translation API để tránh giới hạn kích thước yêu cầu và nhận được khả năng phát hiện ngôn ngữ tốt hơn. | + +## Kết luận + +Chúng ta vừa **tóm tắt tài liệu Word** bằng cách sử dụng Aspose.Words cùng với mô hình Anthropic Claude V2, sau đó **dịch văn bản bằng Google** tới + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/vietnamese/net/basic-conversions/_index.md b/words/vietnamese/net/basic-conversions/_index.md index 0cb9d585c5..73002acd6c 100644 --- a/words/vietnamese/net/basic-conversions/_index.md +++ b/words/vietnamese/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Basic Conversions hướng dẫn bạn cách chuyển đổi tài liệu cơ b | [Lưu PDF dưới dạng Jpeg](./pdf-to-jpeg/) | Dễ dàng chuyển đổi PDF sang JPEG bằng Aspose.Words cho .NET. Làm theo hướng dẫn chi tiết của chúng tôi với các ví dụ và câu hỏi thường gặp. Hoàn hảo cho các nhà phát triển và người đam mê. | | [Lưu PDF sang định dạng Word (Docx)](./pdf-to-docx/) | Tìm hiểu cách chuyển đổi PDF sang tài liệu Word (Docx) bằng Aspose.Words cho .NET trong hướng dẫn chi tiết từng bước này. Hoàn hảo cho các nhà phát triển. | | [Cách xuất LaTeX từ Word – Hướng dẫn từng bước](./how-to-export-latex-from-word-step-by-step-guide/) | Tìm hiểu cách xuất nội dung LaTeX từ tài liệu Word bằng Aspose.Words cho .NET qua các bước chi tiết và ví dụ thực tế. | +| [Tạo PDF có thể truy cập từ DOCX trong C# – Cách chuyển đổi Word sang PDF](./create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/) | Hướng dẫn cách tạo PDF có thể truy cập từ tệp DOCX bằng Aspose.Words cho .NET trong C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md b/words/vietnamese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md new file mode 100644 index 0000000000..bc3f235640 --- /dev/null +++ b/words/vietnamese/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/_index.md @@ -0,0 +1,212 @@ +--- +category: general +date: 2026-05-04 +description: Tạo PDF có khả năng truy cập từ tệp DOCX trong C#. Tìm hiểu cách chuyển + đổi Word sang PDF, lưu Word dưới dạng PDF và xuất docx sang PDF với tuân thủ khả + năng truy cập. +draft: false +keywords: +- create accessible pdf +- how to convert docx +- convert word to pdf +- save word as pdf +- export docx to pdf +language: vi +og_description: Tạo PDF có khả năng truy cập từ tệp DOCX trong C#. Thực hiện theo + hướng dẫn từng bước này để chuyển Word sang PDF, lưu Word dưới dạng PDF và xuất + docx sang PDF với đầy đủ khả năng truy cập. +og_title: Tạo PDF Truy cập được từ DOCX trong C# – Hướng Dẫn Nhanh +tags: +- Aspose.Words +- C# +- PDF/UA +- Document Conversion +title: Tạo PDF có khả năng truy cập từ DOCX trong C# – Cách chuyển đổi Word sang PDF +url: /vi/net/basic-conversions/create-accessible-pdf-from-docx-in-c-how-to-convert-word-to/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Tạo PDF Truy cập được từ DOCX trong C# – Cách Chuyển đổi Word sang PDF + +Bạn đã bao giờ cần **tạo PDF truy cập được** từ một tài liệu Word nhưng không chắc thư viện nào đáng tin cậy? Bạn không phải là người duy nhất—nhiều nhà phát triển gặp khó khăn tương tự khi phải đáp ứng tiêu chuẩn PDF/UA cho khả năng truy cập. Tin tốt là với Aspose.Words, bạn có thể chuyển đổi một tệp `.docx` thành PDF tuân thủ chỉ trong vài dòng mã, và sẽ nhận được một tệp mà các trình đọc màn hình thực sự có thể đọc được. + +Trong hướng dẫn này, chúng ta sẽ đi qua mọi thứ bạn cần biết để **chuyển đổi Word sang PDF**, **lưu Word dưới dạng PDF**, và thậm chí **xuất docx sang PDF** với tuân thủ PDF/UA‑1 (hoặc PDF/UA‑2). Khi kết thúc, bạn sẽ có một đoạn mã C# sẵn sàng sử dụng, hiểu vì sao mỗi thiết lập quan trọng, và sẵn sàng xử lý các trường hợp đặc biệt như thiếu phông chữ hoặc cấu hình trang tùy chỉnh. + +## Yêu cầu trước + +- .NET 6.0 hoặc cao hơn (mã cũng hoạt động với .NET Framework 4.6+) +- Giấy phép Aspose.Words for .NET (hoặc khóa dùng thử miễn phí) +- Kiến thức cơ bản về C# và Visual Studio (hoặc bất kỳ IDE nào bạn thích) +- Một tệp DOCX mà bạn muốn làm cho truy cập được (chúng tôi sẽ gọi nó là `input.docx`) + +> **Mẹo chuyên nghiệp:** Nếu bạn đang dùng bản dùng thử miễn phí, nhớ rằng PDF được tạo sẽ chứa một dấu nước “Evaluation” nhỏ. + +## Bước 1: Cài đặt Gói NuGet Aspose.Words + +Trước khi viết bất kỳ mã C# nào, thư viện Aspose.Words phải được thêm vào dự án. + +```bash +dotnet add package Aspose.Words +``` + +Chạy lệnh này sẽ khôi phục `Aspose.Words.dll` và làm cho các không gian tên sẵn sàng. Bước này rất quan trọng vì lớp `PdfSaveOptions` nằm trong gói đó. + +## Bước 2: Tải Tệp DOCX Nguồn + +Bước logic đầu tiên là tải tài liệu Word mà bạn muốn chuyển đổi. Hãy nghĩ đây như việc mở một cuốn sách trước khi bắt đầu chỉnh sửa các trang của nó. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Load the source Word document from the file system +Document document = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Tại sao lại quan trọng:** Việc tải tài liệu tạo ra một biểu diễn trong bộ nhớ bao gồm tất cả các kiểu, hình ảnh và siêu dữ liệu. Nếu tệp bị hỏng, `Document` sẽ ném ra ngoại lệ—do đó bạn có thể muốn bọc đoạn mã này trong khối try/catch cho môi trường sản xuất. + +## Bước 3: Cấu hình Tùy chọn Lưu PDF cho Khả năng Truy cập + +Aspose.Words cho phép bạn chỉ định mức độ tuân thủ PDF. PDF/UA‑1 là tiêu chuẩn truy cập gốc, trong khi PDF/UA‑2 bổ sung một vài thẻ mới. Chọn cái phù hợp với yêu cầu của khách hàng. + +```csharp +// Choose PDF/UA‑1 (PdfUax1) or PDF/UA‑2 (PdfUax2) compliance +PdfSaveOptions pdfSaveOptions = new PdfSaveOptions +{ + // This ensures the output PDF meets accessibility guidelines + Compliance = PdfCompliance.PdfUax1 +}; +``` + +> **“Compliance” làm gì:** Đặt `PdfCompliance.PdfUax1` sẽ khiến Aspose.Words nhúng các thẻ đúng, thứ tự đọc logic, và văn bản thay thế cho hình ảnh—đúng những gì phần mềm đọc màn hình tìm kiếm. + +## Bước 4: Lưu Tài liệu dưới dạng PDF Truy cập được + +Bây giờ công việc nặng đã xong; chúng ta chỉ cần yêu cầu Aspose.Words ghi tệp PDF bằng các tùy chọn đã định nghĩa. + +```csharp +// Save the document as an accessible PDF file +document.Save("YOUR_DIRECTORY/output.pdf", pdfSaveOptions); +``` + +Sau khi dòng này chạy, bạn sẽ thấy `output.pdf` trong thư mục đã chỉ định. Mở nó trong Adobe Acrobat Reader và kiểm tra **File → Properties → Description → PDF/A and PDF/UA** để xác nhận mức độ tuân thủ. + +## Bước 5: Kiểm tra Khả năng Truy cập (Tùy chọn nhưng Được Khuyến nghị) + +Mặc dù mã đã đảm bảo đầu ra PDF có thẻ, một kiểm tra thủ công nhanh sẽ giúp phát hiện bất kỳ nội dung tùy chỉnh nào cần chú ý thêm. + +1. Mở `output.pdf` trong Adobe Acrobat Pro. +2. Chọn **Tools → Accessibility → Full Check**. +3. Chạy kiểm tra và xem xét bất kỳ cảnh báo nào (ví dụ: thiếu văn bản thay thế cho hình ảnh tùy chỉnh). + +Nếu báo cáo không có lỗi, bạn đã **tạo PDF truy cập được** thành công, đáp ứng tiêu chuẩn PDF/UA‑1. + +## Các Biến thể Thông thường & Trường hợp Đặc biệt + +### Chuyển đổi Nhiều Tệp DOCX trong Vòng Lặp + +Nếu bạn có một loạt tài liệu, hãy bọc logic tải‑lưu trong một vòng lặp `foreach`. + +```csharp +string[] files = Directory.GetFiles("YOUR_DIRECTORY", "*.docx"); +foreach (var file in files) +{ + Document doc = new Document(file); + string pdfPath = Path.ChangeExtension(file, ".pdf"); + doc.Save(pdfPath, pdfSaveOptions); +} +``` + +### Chuyển sang PDF/UA‑2 + +Chỉ cần thay đổi enum `Compliance`: + +```csharp +pdfSaveOptions.Compliance = PdfCompliance.PdfUax2; +``` + +### Xử lý Phông chữ Tùy chỉnh + +Nếu DOCX của bạn sử dụng phông chữ chưa được cài đặt trên máy chủ, hãy nhúng chúng: + +```csharp +pdfSaveOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll; +``` + +Việc nhúng đảm bảo PDF hiển thị giống hệt trên mọi máy—một chi tiết quan trọng khi bạn **xuất docx sang pdf** cho các bên liên quan bên ngoài. + +## Ví dụ Hoàn chỉnh + +Dưới đây là chương trình đầy đủ, sẵn sàng chạy, kết hợp tất cả các phần lại với nhau. Sao chép‑dán vào một ứng dụng console, điều chỉnh đường dẫn, và nhấn **F5**. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + try + { + // 1️⃣ Load the DOCX you want to convert + Document document = new Document("YOUR_DIRECTORY/input.docx"); + + // 2️⃣ Set up PDF options for accessibility (PDF/UA‑1) + PdfSaveOptions pdfSaveOptions = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUax1, + // Optional: embed all fonts to avoid missing‑font issues + FontEmbeddingMode = FontEmbeddingMode.EmbedAll + }; + + // 3️⃣ Save as an accessible PDF + string outputPath = "YOUR_DIRECTORY/output.pdf"; + document.Save(outputPath, pdfSaveOptions); + + Console.WriteLine($"✅ Successfully created accessible PDF at: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Oops! Something went wrong: {ex.Message}"); + } + } +} +``` + +**Kết quả mong đợi:** Một tệp có tên `output.pdf` mở được trong bất kỳ trình xem PDF nào, mang các thẻ truy cập đúng, và có thể chia sẻ với người dùng dựa vào công nghệ hỗ trợ. + +![Ví dụ tạo PDF truy cập được](/images/create-accessible-pdf.png "Ảnh chụp màn hình hiển thị tài liệu tuân thủ PDF/UA‑1") + +*Văn bản thay thế hình ảnh:* *ví dụ tạo pdf truy cập được – ảnh chụp màn hình tài liệu tuân thủ PDF/UA‑1.* + +## Câu hỏi Thường gặp + +- **Điều này có hoạt động với .NET Core không?** + Chắc chắn. Aspose.Words đa nền tảng, vì vậy cùng một đoạn mã chạy trên Windows, Linux và macOS. + +- **Nếu DOCX của tôi chứa macro thì sao?** + Macro sẽ bị bỏ qua trong quá trình chuyển đổi; chỉ nội dung hiển thị được chuyển vào PDF. + +- **Tôi có thể thêm tiêu đề metadata PDF tùy chỉnh không?** + Có—đặt `pdfSaveOptions.Metadata.Title = "Your Custom Title";` trước khi lưu. + +- **PDF/UA‑2 có được hỗ trợ rộng rãi không?** + Hầu hết các trình đọc PDF hiện đại hiểu PDF/UA‑2, nhưng nếu bạn nhắm tới các công cụ cũ, hãy dùng PDF/UA‑1. + +## Kết luận + +Chúng ta vừa cho bạn thấy cách **tạo PDF truy cập được** từ tệp DOCX bằng Aspose.Words, bao quát từ việc cài đặt gói NuGet đến việc xác minh tuân thủ PDF/UA. Bằng cách làm theo các bước này, bạn có thể tin cậy **chuyển đổi Word sang PDF**, **lưu Word dưới dạng PDF**, và **xuất docx sang PDF** đồng thời đáp ứng các tiêu chuẩn truy cập—một kỹ năng thiết yếu cho bất kỳ nhà phát triển nào làm việc với quy trình tài liệu doanh nghiệp. + +Sẵn sàng cho thử thách tiếp theo? Hãy thử thêm tiêu đề/chân trang tùy chỉnh, nhúng thẻ PDF/A‑2b, hoặc tự động hoá quy trình trong một API ASP.NET Core. Khả năng là vô hạn, và nền tảng bạn đã xây dựng ở đây sẽ giúp bạn giải quyết chúng một cách tự tin. + +Chúc lập trình vui vẻ, và hy vọng các PDF của bạn luôn có thể đọc được! + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md b/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md index 402ae5906c..8f1bed406f 100644 --- a/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,7 @@ Words Processing with MarkdownSaveOptions là một nguồn tài nguyên chuyên | [Cách xuất LaTeX: Chuyển DOCX sang Markdown & TXT](./how-to-export-latex-convert-docx-to-markdown-txt/) | Hướng dẫn chi tiết cách xuất nội dung LaTeX từ DOCX sang Markdown và TXT bằng C# và Aspose.Words. | | [Cách đổi tên hình ảnh khi chuyển DOCX sang Markdown](./how-to-rename-images-when-converting-docx-to-markdown/) | Hướng dẫn chi tiết cách đổi tên các hình ảnh trong quá trình chuyển đổi tài liệu DOCX sang định dạng Markdown bằng Aspose.Words cho .NET. | | [Lưu docx thành markdown với Aspose.Words – Hướng dẫn đầy đủ C#](./save-docx-as-markdown-with-aspose-words-full-c-guide/) | Hướng dẫn chi tiết cách lưu file docx thành markdown bằng C# với Aspose.Words, bao gồm các tùy chọn và ví dụ thực tế. | +| [Cách lưu hình ảnh – Chuyển DOCX sang Markdown với Aspose.Words](./how-to-save-images-convert-docx-to-markdown-with-aspose-word/) | Hướng dẫn lưu hình ảnh khi chuyển đổi tài liệu DOCX sang Markdown bằng Aspose.Words cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md b/words/vietnamese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md new file mode 100644 index 0000000000..0416bdecc2 --- /dev/null +++ b/words/vietnamese/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/_index.md @@ -0,0 +1,243 @@ +--- +category: general +date: 2026-05-04 +description: Tìm hiểu cách lưu hình ảnh khi chuyển đổi DOCX sang Markdown bằng Aspose.Words. + Hướng dẫn này cũng chỉ cách trích xuất hình ảnh từ Word và lưu Word dưới dạng Markdown. +draft: false +keywords: +- how to save images +- convert docx to markdown +- extract images from word +- how to convert docx +- save word as markdown +language: vi +og_description: Cách lưu hình ảnh khi chuyển đổi DOCX sang Markdown bằng Aspose.Words. + Hướng dẫn chi tiết từng bước kèm mã C# đầy đủ. +og_title: Cách Lưu Hình Ảnh – Chuyển DOCX sang Markdown với Aspose.Words +tags: +- Aspose.Words +- C# +- Markdown conversion +title: Cách Lưu Hình Ảnh – Chuyển DOCX sang Markdown với Aspose.Words +url: /vi/net/programming-with-markdownsaveoptions/how-to-save-images-convert-docx-to-markdown-with-aspose-word/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách Lưu Hình Ảnh – Chuyển DOCX sang Markdown với Aspose.Words + +Bạn đã bao giờ tự hỏi **cách lưu hình ảnh** khi cần chuyển một tệp Word sang Markdown chưa? Bạn không phải là người duy nhất. Nhiều nhà phát triển gặp khó khăn khi quá trình chuyển đổi làm hỏng các liên kết hình ảnh, hoặc tệ hơn—mất hoàn toàn các hình ảnh. Tin tốt là Aspose.Words cung cấp cho bạn khả năng kiểm soát chi tiết, cho phép bạn trích xuất hình ảnh từ Word, quyết định nơi chúng sẽ được lưu và vẫn nhận được đầu ra Markdown sạch sẽ. + +Trong tutorial này chúng ta sẽ đi qua một ví dụ C# hoàn chỉnh, sẵn sàng chạy, cho thấy **cách lưu hình ảnh** vào một thư mục riêng khi chuyển `.docx` sang `.md`. Đồng thời, chúng ta sẽ đề cập đến **convert docx to markdown**, **extract images from word**, và câu hỏi rộng hơn **how to convert docx** để **save word as markdown** mà không mất bất kỳ tài nguyên nào. + +## Yêu cầu trước + +- .NET 6.0 hoặc mới hơn (API hoạt động tương tự trên .NET Framework 4.7+) +- Giấy phép Aspose.Words đang hoạt động hoặc bản dùng thử miễn phí (phiên bản miễn phí sẽ thêm watermark vào đầu ra, nhưng mã vẫn hoạt động như bình thường) +- Một tài liệu Word đã chứa hình ảnh (ví dụ: `DocWithImages.docx`) +- Visual Studio 2022 hoặc bất kỳ trình chỉnh sửa nào có thể biên dịch dự án C# + +> **Pro tip:** Nếu bạn đang dùng bản dùng thử, bạn vẫn có thể thử logic lưu hình ảnh; chỉ cần nhớ rằng PDF/MD cuối cùng sẽ chứa watermark của bản dùng thử. + +## Tổng quan về Giải pháp + +Ở mức cao, quy trình trông như sau: + +1. Tải tệp `.docx` nguồn bằng `Document`. +2. Tạo một đối tượng `MarkdownSaveOptions` và gắn một `IResourceSavingCallback`. +3. Trong callback, quyết định thư mục và tên tệp cho mỗi hình ảnh. +4. Lưu tài liệu dưới dạng Markdown; callback sẽ ghi mỗi hình ảnh ra đĩa. + +Đó là cốt lõi của **cách lưu hình ảnh** trong quá trình chuyển đổi. Mẫu này cũng áp dụng cho các loại tài nguyên khác (phông chữ, CSS, v.v.) nếu bạn cần. + +## Bước 1 – Tải DOCX chứa Hình Ảnh + +Đầu tiên chúng ta cần một thể hiện `Document` trỏ tới tệp Word bạn muốn chuyển đổi. Không có gì phức tạp; chỉ một lời gọi constructor đơn giản. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.IO; + +// Adjust the path to where your .docx lives +string sourcePath = @"C:\Docs\DocWithImages.docx"; + +Document sourceDoc = new Document(sourcePath); +``` + +> **Why this matters:** Loading the document is the only place where Aspose parses the Word XML, so any missing fonts or corrupted parts will throw an exception right now—before we even start saving images. + +## Bước 2 – Thiết lập MarkdownSaveOptions với Callback Lưu Hình Ảnh + +Lớp `MarkdownSaveOptions` cho phép bạn gắn vào quá trình lưu thông qua `ResourceSavingCallback`. Callback này nhận một đối tượng `ResourceSavingArgs` cho mỗi tài nguyên bên ngoài (hình ảnh, CSS, v.v.) mà Aspose cần ghi. + +```csharp +// Define where the Markdown file will be written +string markdownPath = @"C:\Docs\Doc.md"; + +// Create the options object and attach the callback +MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions +{ + // This is the heart of how to save images + ResourceSavingCallback = new ImageSavingCallback() +}; +``` + +### Triển khai Callback + +Dưới đây là triển khai đầy đủ của `ImageSavingCallback`. Nó tạo một thư mục con `Images` bên cạnh tệp Markdown, đặt tên cho mỗi ảnh theo thứ tự (`img_0.png`, `img_1.jpg`, …), và tùy chọn cho phép bạn stream ảnh tới nơi khác (ví dụ: một bucket trên cloud). + +```csharp +class ImageSavingCallback : IResourceSavingCallback +{ + public void ResourceSaving(ResourceSavingArgs args) + { + // Only handle images; other resources (like CSS) are ignored here + if (args.ResourceType != ResourceType.Image) + return; + + // Build a folder called "Images" right next to the markdown file + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + // Compose a safe file name: img_. + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // If you wanted to push the image to a remote store, you could replace args.Stream here. + // For now we just let Aspose write to the local file system. + } +} +``` + +> **How this helps you:** By customizing `args.FileName` you control exactly **how to save images**—whether in a flat folder, a date‑based hierarchy, or even a database BLOB. The callback runs for every image, so you never have to post‑process the Markdown file later. + +## Bước 3 – Lưu Tài liệu dưới dạng Markdown + +Bây giờ các tùy chọn và callback đã sẵn sàng, việc chuyển đổi thực tế chỉ là một dòng lệnh. + +```csharp +// Save the document; the callback will fire for each image automatically +sourceDoc.Save(markdownPath, markdownOptions); +``` + +Khi dòng lệnh hoàn thành, bạn sẽ có: + +- `Doc.md` – bản đại diện Markdown của nội dung Word. +- `Images\img_0.png`, `Images\img_1.jpg`, … – mọi hình ảnh được trích xuất từ DOCX gốc. + +## Ví dụ Đầy đủ, Sẵn sàng Chạy + +Kết hợp mọi thứ lại, dưới đây là một ứng dụng console tự chứa mà bạn có thể sao chép‑dán vào một dự án C# mới. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.IO; + +namespace DocxToMarkdownDemo +{ + class Program + { + static void Main(string[] args) + { + // ----------------------------------------------------------------- + // 1️⃣ Load the source DOCX that contains images + // ----------------------------------------------------------------- + string sourcePath = @"C:\Docs\DocWithImages.docx"; + Document sourceDoc = new Document(sourcePath); + + // ----------------------------------------------------------------- + // 2️⃣ Prepare Markdown options with a custom image‑saving callback + // ----------------------------------------------------------------- + string markdownPath = @"C:\Docs\Doc.md"; + MarkdownSaveOptions markdownOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new ImageSavingCallback() + }; + + // ----------------------------------------------------------------- + // 3️⃣ Perform the conversion – this is where we actually learn + // how to save images while converting docx to markdown + // ----------------------------------------------------------------- + sourceDoc.Save(markdownPath, markdownOptions); + + Console.WriteLine("Conversion complete!"); + Console.WriteLine($"Markdown file: {markdownPath}"); + Console.WriteLine("Images folder: " + Path.Combine(Path.GetDirectoryName(markdownPath), "Images")); + } + } + + // ----------------------------------------------------------------- + // 4️⃣ Callback that decides where each image ends up + // ----------------------------------------------------------------- + class ImageSavingCallback : IResourceSavingCallback + { + public void ResourceSaving(ResourceSavingArgs args) + { + if (args.ResourceType != ResourceType.Image) + return; + + string markdownDir = Path.GetDirectoryName(args.DestinationFileName); + string imagesFolder = Path.Combine(markdownDir, "Images"); + Directory.CreateDirectory(imagesFolder); + + string newFileName = $"img_{args.Index}{Path.GetExtension(args.FileName)}"; + args.FileName = Path.Combine(imagesFolder, newFileName); + + // Optional: redirect the image stream elsewhere (e.g., cloud storage) + // args.Stream = new MemoryStream(); // your custom stream here + } + } +} +``` + +### Kết quả Mong đợi + +Sau khi chạy chương trình: + +- Mở `C:\Docs\Doc.md` trong bất kỳ trình soạn thảo văn bản nào. Bạn sẽ thấy các liên kết hình ảnh Markdown như `![](Images/img_0.png)`. +- Thư mục `Images` sẽ chứa mỗi hình ảnh đã được trích xuất, đặt tên theo thứ tự. +- Tệp Markdown sẽ hiển thị đúng trong bất kỳ trình xem nào hỗ trợ hình ảnh cục bộ (xem trước VS Code, GitHub, v.v.). + +## Câu hỏi Thường gặp (FAQs) + +### Có hoạt động với các định dạng hình ảnh khác (SVG, TIFF) không? + +Có. `Path.GetExtension(args.FileName)` giữ nguyên phần mở rộng gốc, vì vậy SVG, TIFF, BMP và thậm chí EMF đều được lưu không thay đổi. Lưu ý duy nhất là một số trình render Markdown có thể không hiển thị SVG inline; trong trường hợp đó bạn có thể chuyển SVG sang PNG trước. + +### Nếu tôi cần nhúng hình ảnh dưới dạng Base64 thay vì các tệp riêng biệt thì sao? + +Trong `ResourceSaving`, bạn có thể thay thế việc ghi tệp vật lý bằng một memory stream và sau đó chỉnh sửa liên kết Markdown thủ công. Aspose không cung cấp công tắc “embed as Base64” trực tiếp, nhưng callback cho bạn quyền kiểm soát hoàn toàn `args.Stream`. + +### Điều này khác gì so với phương thức tích hợp `ExportImages`? + +`ExportImages` trích xuất tất cả hình ảnh ra một thư mục **không** tạo Markdown. Callback của chúng tôi kết hợp hai hành động, đảm bảo rằng tên tệp hình ảnh khớp với các tham chiếu trong `.md`. Sự đồng nhất này là chìa khóa để **cách lưu hình ảnh** một cách chính xác trong quá trình chuyển đổi. + +### Tôi có thể chuyển đổi nhiều tệp DOCX cùng lúc không? + +Chắc chắn. Đặt logic cốt lõi trong một vòng lặp `foreach (var file in Directory.GetFiles(..., "*.docx"))`, điều chỉnh các đường dẫn đầu ra, và tái sử dụng cùng một `ImageSavingCallback`. Chỉ cần nhớ tạo một `MarkdownSaveOptions` mới cho mỗi tài liệu, vì `args.DestinationFileName` thay đổi theo từng vòng lặp. + +## Trường hợp Cạnh và Thực hành Tốt nhất + +| Situation | What to Watch Out For | Recommended Fix | +|-----------|----------------------|-----------------| +| **Large DOCX (hundreds of MB)** | Memory pressure while loading | Use `LoadOptions` with `LoadFormat.Docx` and set `LoadOptions.LoadFormat = LoadFormat.Docx` to stream‑load parts | +| **Image names collide** | If the source already has `img_0.png` in the target folder, you could overwrite | Append a GUID: `newFileName = $"img_{args.Index}_{Guid.NewGuid():N}{Path.GetExtension(args.FileName)}"` | +| **Read‑only output folder** | Save throws `UnauthorizedAccessException` | Ensure the process runs with appropriate permissions or choose a writable path | +| **Non‑image resources (CSS, fonts)** | Callback receives them too | Guard with `if (args.ResourceType != ResourceType.Image) return;` (already shown) | +| **Unicode file names** | Some filesystems mishandle characters | Use `Path.GetInvalidFileNameChars()` to sanitize `args.FileName` before assigning | + +## Các Chủ đề Liên quan Bạn Có Thể Khám phá Tiếp theo + +- **convert docx to markdown** với các kiểu tiêu đề tùy chỉnh (sử dụng `MarkdownSaveOptions.ExportImagesAsBase64` cho hình ảnh nội tuyến) +- **extract images from word** bằng cách sử dụng `Document.GetChildNodes(NodeType.Shape, + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/words/vietnamese/net/working-with-fonts/_index.md b/words/vietnamese/net/working-with-fonts/_index.md index bbaff0e536..e63a2f7f43 100644 --- a/words/vietnamese/net/working-with-fonts/_index.md +++ b/words/vietnamese/net/working-with-fonts/_index.md @@ -52,7 +52,7 @@ Cho dù bạn muốn định dạng văn bản bằng các phông chữ khác nh | [Cách phát hiện phông chữ trong Aspose.Words – Xử lý cảnh báo & cài đặt](./how-to-detect-fonts-in-aspose-words-handle-warnings-settings/) | Tìm hiểu cách phát hiện phông chữ, quản lý cảnh báo và cấu hình cài đặt phông chữ trong Aspose.Words cho .NET. | | [Cách bắt phông chữ trong Aspose.Words – Hướng dẫn đầy đủ](./how-to-capture-fonts-in-aspose-words-complete-guide/) | Hướng dẫn chi tiết cách bắt và nhúng phông chữ trong tài liệu Word bằng Aspose.Words cho .NET. | | [Cách tải DOCX và phát hiện phông chữ thiếu – Hướng dẫn C# đầy đủ](./how-to-load-docx-and-detect-missing-fonts-complete-c-guide/) | Tìm hiểu cách tải tệp DOCX và phát hiện các phông chữ bị thiếu trong Aspose.Words cho .NET với hướng dẫn chi tiết từng bước bằng C#. | - +| [Phát hiện phông chữ thiếu trong tài liệu Word bằng Aspose Font Substitution](./aspose-font-substitution-detect-missing-fonts-in-word-docs/) | Tìm hiểu cách phát hiện các phông chữ bị thiếu trong tài liệu Word bằng Aspose Font Substitution trong Aspose.Words cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md b/words/vietnamese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md new file mode 100644 index 0000000000..944dd0ed70 --- /dev/null +++ b/words/vietnamese/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-05-04 +description: Học cách sử dụng tính năng thay thế phông chữ của Aspose để phát hiện + các phông chữ bị thiếu khi tải tài liệu Word và truy xuất chi tiết về phông chữ + thiếu—hướng dẫn chi tiết từng bước. +draft: false +keywords: +- aspose font substitution +- detect missing fonts +- load word document +- retrieve missing font +language: vi +og_description: Thành thạo việc thay thế phông chữ Aspose để phát hiện các phông chữ + thiếu khi tải tài liệu Word và lấy thông tin phông chữ thiếu bằng mã C# đầy đủ. +og_title: Thay thế phông chữ Aspose – Phát hiện phông chữ thiếu trong tài liệu Word +tags: +- Aspose.Words +- C# +- Font Management +title: 'Thay thế phông chữ Aspose: Phát hiện phông chữ thiếu trong tài liệu Word' +url: /vi/net/working-with-fonts/aspose-font-substitution-detect-missing-fonts-in-word-docs/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Thay Thế Phông Chữ Aspose – Phát Hiện Phông Chữ Thiếu Trong Tài Liệu Word + +Bạn đã bao giờ tự hỏi tại sao một tài liệu Word lại hiển thị sai trên máy khác chưa? Thường thì nguyên nhân là phông chữ thiếu, và **Aspose font substitution** là công cụ giúp bạn phát hiện những khoảng trống này trước khi chúng trở thành thảm họa về mặt hình ảnh. Trong hướng dẫn này, chúng ta sẽ đi qua cách **phát hiện phông chữ thiếu** ngay khi bạn **tải một tài liệu Word**, và sau đó **lấy thông tin phông chữ thiếu** để bạn có thể sửa hoặc thay thế chúng. + +Chúng tôi sẽ bao phủ mọi thứ từ việc thiết lập callback cảnh báo đến việc lấy danh sách sạch các phông chữ thiếu. Khi kết thúc, bạn sẽ có một đoạn mã C# sẵn sàng chạy, cho bạn biết chính xác những phông chữ nào không được tìm thấy, và bạn sẽ hiểu tại sao điều này quan trọng đối với độ trung thực của tài liệu. + +--- + +## Yêu Cầu Trước – Những Gì Bạn Cần Trước Khi Bắt Đầu + +- **Aspose.Words for .NET** (v23.12 hoặc phiên bản mới hơn được khuyến nghị). +- Môi trường phát triển .NET (Visual Studio, Rider, hoặc `dotnet` CLI). +- Một tệp DOCX mẫu có cố ý sử dụng phông chữ mà bạn chưa cài đặt—gọi nó là `DocumentWithMissingFont.docx`. +- Kiến thức cơ bản về C#—không cần phức tạp, chỉ cần khả năng chạy một ứng dụng console. + +Nếu bất kỳ mục nào trên nghe lạ, hãy tạm dừng và cài đặt gói NuGet: + +```bash +dotnet add package Aspose.Words +``` + +Xong rồi. Không cần phông chữ bổ sung, không có dịch vụ bên ngoài. + +--- + +## Bước 1: Tải Tài Liệu Word (và Kích Hoạt Kiểm Tra Phông Chữ) + +Điều đầu tiên bạn làm là **tải một tài liệu Word**. Aspose.Words phân tích tệp và, nếu không thể tìm thấy phông chữ được tham chiếu, nó sẽ đưa vào một cảnh báo *FontSubstitution*. Dưới đây là đoạn mã thực hiện việc tải: + +```csharp +using Aspose.Words; +using Aspose.Words.Fonts; + +// Path to the DOCX that may contain missing fonts +string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + +// Load the document – this is where Aspose starts checking fonts +Document doc = new Document(docPath); +``` + +> **Tại sao điều này quan trọng:** Việc tải tài liệu sớm cho phép Aspose quét mọi đoạn văn bản, kiểu dáng và đối tượng nhúng. Nếu một phông chữ không được tìm thấy trên hệ thống hoặc trong thư mục phông chữ tùy chỉnh, bạn sẽ nhận được cảnh báo sau này. + +--- + +## Bước 2: Gắn Callback Cảnh Báo Để Bắt Sự Kiện Thay Thế + +Aspose.Words sử dụng cơ chế callback để thông báo cho bạn về các vấn đề như phông chữ thiếu. Bằng cách gán một triển khai của `IWarningCallback` vào `doc.WarningCallback`, bạn có thể chặn mỗi cảnh báo khi nó xảy ra. + +```csharp +// Register the callback that will handle font substitution warnings +doc.WarningCallback = new FontSubstitutionWarningCallback(); +``` + +> **Mẹo chuyên nghiệp:** Bạn có thể gắn nhiều callback (ví dụ: ghi log, cập nhật UI) bằng cách bọc chúng trong một mẫu composite, nhưng trong hướng dẫn này một callback duy nhất giúp mọi thứ rõ ràng. + +--- + +## Bước 3: Triển Khai Callback Cảnh Báo Thay Thế Phông Chữ + +Bây giờ chúng ta định nghĩa lớp thực hiện công việc. Callback nhận một đối tượng `WarningInfo`; chúng ta lọc cho `WarningType.FontSubstitution` và lưu mô tả để sử dụng sau. + +```csharp +class FontSubstitutionWarningCallback : IWarningCallback +{ + // A thread‑safe list to collect all missing‑font messages + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + // We only care about font substitution warnings + if (info.WarningType == WarningType.FontSubstitution) + { + // Write to console for immediate feedback + Console.WriteLine($"Font substituted: {info.Description}"); + // Keep the message for later retrieval + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +> **Điều gì đang xảy ra:** Khi Aspose gặp phông chữ thiếu, nó tạo ra một cảnh báo như “Font substitution: 'Comic Sans MS' was not found, using 'Arial' instead.” Callback của chúng ta in ra dòng này và lưu lại. + +--- + +## Bước 4: Xử Lý Tài Liệu (Tùy Chọn) và Thu Thập Phông Chữ Thiếu + +Nếu bạn chỉ cần **phát hiện phông chữ thiếu**, bước tải đã đủ—các cảnh báo sẽ tự động phát sinh. Tuy nhiên, nhiều nhà phát triển cũng cần **lấy thông tin phông chữ thiếu** sau khi thực hiện một số thao tác (ví dụ: lưu, chuyển đổi). Dưới đây chúng tôi buộc một thao tác nhỏ—lưu thành PDF—để đảm bảo tất cả cảnh báo được phát ra, sau đó chúng tôi lấy các tin nhắn đã thu thập. + +```csharp +// Force a save to trigger any lazy warnings (optional but safe) +doc.Save("output.pdf"); + +// After processing, retrieve the list of missing fonts +if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) +{ + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } +} +else +{ + Console.WriteLine("\nNo missing fonts were detected."); +} +``` + +> **Kết quả dự kiến trên console** (ví dụ): +> ``` +> Font substituted: Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substituted: Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> +> === Missing Fonts Summary === +> Font substitution: 'Papyrus' was not found, using 'Times New Roman' instead. +> Font substitution: 'Brush Script MT' was not found, using 'Arial' instead. +> ``` + +Chú ý cách mỗi dòng rõ ràng chỉ ra phông chữ gốc và phông chữ dự phòng mà Aspose đã chọn. Đó là cốt lõi của báo cáo **aspose font substitution**. + +--- + +## Bước 5: Nâng Cao – Sử Dụng Nguồn Phông Chữ Tùy Chỉnh Để Giảm Thay Thế + +Đôi khi bạn *có* các phông chữ thiếu, chỉ là chúng không nằm trong thư mục hệ thống mặc định. Aspose.Words cho phép bạn chỉ đến một thư mục tùy chỉnh thông qua `FontSettings`. Thêm bước này có thể giảm đáng kể số lượng cảnh báo thay thế. + +```csharp +// Optional: Add a folder that contains your custom fonts +FontSettings fontSettings = new FontSettings(); +fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); +doc.FontSettings = fontSettings; +``` + +> **Tại sao thêm bước này?** Nếu bạn phân phối tài liệu trên nhiều máy, việc đóng gói các phông chữ cần thiết trong một thư mục đã biết đảm bảo cùng một giao diện hình ảnh ở mọi nơi. Nó cũng làm cho quy trình **detect missing fonts** của bạn chính xác hơn vì Aspose sẽ kiểm tra thư mục đó trước khi dùng phông dự phòng. + +--- + +## Ví Dụ Hoàn Chỉnh Hoạt Động + +Kết hợp tất cả lại, đây là một chương trình console sẵn sàng sao chép‑dán. Lưu nó dưới tên `Program.cs` và chạy bằng `dotnet run`. + +```csharp +using System; +using System.Collections.Generic; +using System.Linq; +using Aspose.Words; +using Aspose.Words.Fonts; + +class Program +{ + static void Main() + { + // ---------- Step 1: Load the Word document ---------- + string docPath = @"YOUR_DIRECTORY/DocumentWithMissingFont.docx"; + Document doc = new Document(docPath); + + // ---------- Optional: Point to a custom font folder ---------- + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(@"C:\MyCustomFonts", recursive: true); + doc.FontSettings = fontSettings; + + // ---------- Step 2: Register the warning callback ---------- + doc.WarningCallback = new FontSubstitutionWarningCallback(); + + // ---------- Step 3: Force a save to trigger all warnings ---------- + doc.Save("output.pdf"); + + // ---------- Step 4: Retrieve and display missing fonts ---------- + if (FontSubstitutionWarningCallback.MissingFontMessages.Any()) + { + Console.WriteLine("\n=== Missing Fonts Summary ==="); + foreach (var msg in FontSubstitutionWarningCallback.MissingFontMessages) + { + Console.WriteLine(msg); + } + } + else + { + Console.WriteLine("\nNo missing fonts were detected."); + } + } +} + +// ---------- Callback implementation ---------- +class FontSubstitutionWarningCallback : IWarningCallback +{ + public static readonly List MissingFontMessages = new List(); + + public void Warning(WarningInfo info) + { + if (info.WarningType == WarningType.FontSubstitution) + { + Console.WriteLine($"Font substituted: {info.Description}"); + lock (MissingFontMessages) + { + MissingFontMessages.Add(info.Description); + } + } + } +} +``` + +**Bạn sẽ thấy gì:** Nếu DOCX nguồn tham chiếu các phông chữ bạn không có, console sẽ in mỗi dòng thay thế kèm theo một bản tóm tắt ngắn gọn. Nếu tất cả phông chữ đều có, bạn sẽ nhận được thông báo “No missing fonts were detected.” + +--- + +## Các Rủi Ro Thường Gặp & Cách Tránh + +| Vấn đề | Nguyên nhân | Cách khắc phục | +|-------|----------------|-----| +| **Không có cảnh báo nào xuất hiện** | Tài liệu chỉ sử dụng phông chữ hệ thống, hoặc bạn đã thêm một thư mục tùy chỉnh chứa các phông chữ thiếu. | Xác minh DOCX thực sự tham chiếu một phông chữ không có. Bạn có thể mở nó trong Word và thay đổi một đoạn văn thành phông chữ hiếm (ví dụ: “Papyrus”). | +| **Tin nhắn trùng lặp** | Cùng một phông chữ được sử dụng trong nhiều đoạn, gây ra nhiều cảnh báo. | Loại bỏ trùng lặp danh sách bằng `Distinct()` nếu bạn chỉ cần một tập duy nhất. | +| **Giảm hiệu năng trên tài liệu lớn** | Mỗi cảnh báo được xử lý trên luồng UI. | Chạy việc tải trong một tác vụ nền hoặc sử dụng `Parallel.ForEach` cho xử lý sau. | +| **Phông chữ dự phòng sai** | Phông chữ dự phòng mặc định của Aspose có thể không phù hợp với thương hiệu của bạn. | Đặt `FontSettings.SubstitutionSettings.DefaultFontName` thành phông chữ dự phòng ưa thích (ví dụ: “Calibri”). | + +--- + +## Mở Rộng Giải Pháp – Xuất Phông Chữ Thiếu Ra JSON + +Nếu bạn đang xây dựng một dịch vụ web cần báo cáo phông chữ thiếu cho client, việc tuần tự hoá danh sách là rất đơn giản: + +```csharp +using System.Text.Json; + +// After gathering messages... +string json = JsonSerializer.Serialize(FontSubstitutionWarningCallback.MissingFontMessages); +File.WriteAllText("missing-fonts.json", json); +Console.WriteLine("Missing fonts exported to missing-fonts.json"); +``` + +Bây giờ API của bạn có thể trả về một payload JSON sạch sẽ mà hệ thống khác có thể tiêu thụ. + +--- + +## Kết Luận + +Trong hướng dẫn này, chúng tôi đã trình bày **Aspose font substitution** từ đầu đến cuối: tải tài liệu Word, gắn callback cảnh báo, bắt mỗi sự kiện *detect missing fonts*, và cuối cùng **lấy thông tin phông chữ thiếu** để báo cáo hoặc khắc phục. Bằng cách thêm các thư mục phông chữ tùy chỉnh tùy chọn, bạn có thể giảm danh sách các lần thay thế, và chỉ với vài dòng thêm, bạn thậm chí có thể xuất kết quả ra JSON. + +Hãy nhớ, tính toàn vẹn hình ảnh của tài liệu phụ thuộc vào các phông chữ được sử dụng. Với kỹ thuật được trình bày ở đây, bạn sẽ không bao giờ bị bất ngờ bởi một phông chữ dự phòng không mong muốn nữa. + +Sẵn sàng bước tiếp theo? Hãy thử tích hợp logic này vào một pipeline xử lý tài liệu lớn hơn, hoặc khám phá các tính năng khác của Aspose.Words như nhúng phông chữ (`doc.FontSettings.EmbeddedFonts`). Các khả năng là vô hạn, và người dùng của bạn sẽ cảm ơn bạn vì đầu ra được tinh chỉnh. + +--- + +![Screenshot of + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file