From c49c4a07cc999b4b86bb957d50fa51a1cf86772f Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Wed, 8 Apr 2026 00:06:10 +0000 Subject: [PATCH] Add 6 words net tutorials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Categories: basic-conversions, programming-with-loadoptions, programming-with-markdownsaveoptions, programming-with-officemath, programming-with-pdfsaveoptions, working-with-fonts Source: AI Search API Tutorials: - Recover Corrupted DOCX – Complete C# Guide to Fix and Save Files - Save docx as txt – Export Word Math to LaTeX in C# - How to Detect Fonts in Aspose.Words – Complete Guide - Save Word as Markdown with Custom Image Folder – Full Guide - Create Accessible PDF from Word – Step‑by‑Step Guide - Convert DOCX to PDF in C# – Complete Programming Guide Auto-generated by Professionalize.Tutorials Agent --- words/arabic/net/basic-conversions/_index.md | 1 + .../_index.md | 202 ++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 2 + .../_index.md | 288 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 270 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ words/arabic/net/working-with-fonts/_index.md | 19 +- .../_index.md | 271 ++++++++++++++++ words/chinese/net/basic-conversions/_index.md | 1 + .../_index.md | 202 ++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 248 +++++++++++++++ .../_index.md | 4 + .../_index.md | 288 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 268 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ .../chinese/net/working-with-fonts/_index.md | 2 +- .../_index.md | 269 ++++++++++++++++ words/czech/net/basic-conversions/_index.md | 1 + .../_index.md | 202 ++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 1 + .../_index.md | 290 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 270 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 1 + .../_index.md | 237 ++++++++++++++ words/czech/net/working-with-fonts/_index.md | 7 +- .../_index.md | 281 +++++++++++++++++ words/dutch/net/basic-conversions/_index.md | 1 + .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 251 +++++++++++++++ .../_index.md | 4 + .../_index.md | 294 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ words/dutch/net/working-with-fonts/_index.md | 4 +- .../_index.md | 282 +++++++++++++++++ words/english/net/basic-conversions/_index.md | 1 + .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 1 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 3 +- .../_index.md | 270 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 3 +- .../_index.md | 237 ++++++++++++++ .../english/net/working-with-fonts/_index.md | 3 +- .../_index.md | 281 +++++++++++++++++ words/french/net/basic-conversions/_index.md | 1 + .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 251 +++++++++++++++ .../_index.md | 1 + .../_index.md | 293 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 272 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 10 +- .../_index.md | 219 +++++++++++++ words/french/net/working-with-fonts/_index.md | 8 +- .../_index.md | 272 ++++++++++++++++ words/german/net/basic-conversions/_index.md | 9 +- .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 253 +++++++++++++++ .../_index.md | 3 + .../_index.md | 295 ++++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 271 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 239 ++++++++++++++ words/german/net/working-with-fonts/_index.md | 2 +- .../_index.md | 282 +++++++++++++++++ words/greek/net/basic-conversions/_index.md | 1 + .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 251 +++++++++++++++ .../_index.md | 1 + .../_index.md | 294 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 253 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 221 +++++++++++++ words/greek/net/working-with-fonts/_index.md | 1 + .../_index.md | 273 ++++++++++++++++ words/hindi/net/basic-conversions/_index.md | 13 +- .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../_index.md | 1 + .../_index.md | 294 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ words/hindi/net/working-with-fonts/_index.md | 7 +- .../_index.md | 271 ++++++++++++++++ .../hongkong/net/basic-conversions/_index.md | 1 + .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 2 +- .../_index.md | 248 +++++++++++++++ .../_index.md | 1 + .../_index.md | 290 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 268 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ .../hongkong/net/working-with-fonts/_index.md | 3 +- .../_index.md | 279 +++++++++++++++++ .../hungarian/net/basic-conversions/_index.md | 3 +- .../_index.md | 217 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 251 +++++++++++++++ .../_index.md | 1 + .../_index.md | 290 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 254 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 8 +- .../_index.md | 239 ++++++++++++++ .../net/working-with-fonts/_index.md | 4 +- .../_index.md | 283 +++++++++++++++++ .../net/basic-conversions/_index.md | 1 + .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 251 +++++++++++++++ .../_index.md | 2 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 271 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ .../net/working-with-fonts/_index.md | 2 +- .../_index.md | 281 +++++++++++++++++ words/italian/net/basic-conversions/_index.md | 1 + .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 3 +- .../_index.md | 291 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 1 + .../_index.md | 237 ++++++++++++++ .../italian/net/working-with-fonts/_index.md | 1 + .../_index.md | 279 +++++++++++++++++ .../japanese/net/basic-conversions/_index.md | 1 + .../_index.md | 214 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 248 +++++++++++++++ .../_index.md | 1 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 235 ++++++++++++++ .../japanese/net/working-with-fonts/_index.md | 1 + .../_index.md | 277 ++++++++++++++++ words/korean/net/basic-conversions/_index.md | 1 + .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 1 + .../_index.md | 290 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 4 +- .../_index.md | 237 ++++++++++++++ words/korean/net/working-with-fonts/_index.md | 2 +- .../_index.md | 280 +++++++++++++++++ words/polish/net/basic-conversions/_index.md | 1 + .../_index.md | 217 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 3 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 271 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 4 +- .../_index.md | 237 ++++++++++++++ words/polish/net/working-with-fonts/_index.md | 2 +- .../_index.md | 280 +++++++++++++++++ .../net/basic-conversions/_index.md | 2 + .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 3 + .../_index.md | 293 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 270 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ .../net/working-with-fonts/_index.md | 4 +- .../_index.md | 281 +++++++++++++++++ words/russian/net/basic-conversions/_index.md | 1 + .../_index.md | 203 ++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../_index.md | 1 + .../_index.md | 294 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 272 ++++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 238 ++++++++++++++ .../russian/net/working-with-fonts/_index.md | 3 +- .../_index.md | 272 ++++++++++++++++ words/spanish/net/basic-conversions/_index.md | 27 +- .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 1 + .../_index.md | 294 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 4 +- .../_index.md | 237 ++++++++++++++ .../spanish/net/working-with-fonts/_index.md | 2 +- .../_index.md | 281 +++++++++++++++++ words/swedish/net/basic-conversions/_index.md | 1 + .../_index.md | 204 ++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 3 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 1 + .../_index.md | 237 ++++++++++++++ .../swedish/net/working-with-fonts/_index.md | 5 +- .../_index.md | 271 ++++++++++++++++ words/thai/net/basic-conversions/_index.md | 1 + .../_index.md | 218 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 3 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 237 ++++++++++++++ words/thai/net/working-with-fonts/_index.md | 2 +- .../_index.md | 280 +++++++++++++++++ words/turkish/net/basic-conversions/_index.md | 1 + .../_index.md | 220 +++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 252 +++++++++++++++ .../_index.md | 1 + .../_index.md | 292 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 1 + .../_index.md | 253 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 2 +- .../_index.md | 239 ++++++++++++++ .../turkish/net/working-with-fonts/_index.md | 3 +- .../_index.md | 282 +++++++++++++++++ .../net/basic-conversions/_index.md | 1 + .../_index.md | 205 ++++++++++++ .../programming-with-loadoptions/_index.md | 1 + .../_index.md | 250 +++++++++++++++ .../_index.md | 1 + .../_index.md | 294 +++++++++++++++++ .../net/programming-with-officemath/_index.md | 2 +- .../_index.md | 252 +++++++++++++++ .../programming-with-pdfsaveoptions/_index.md | 4 +- .../_index.md | 237 ++++++++++++++ .../net/working-with-fonts/_index.md | 2 +- .../_index.md | 271 ++++++++++++++++ 276 files changed, 35429 insertions(+), 106 deletions(-) create mode 100644 words/arabic/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/arabic/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/arabic/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/arabic/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/arabic/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/arabic/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/chinese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/chinese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/chinese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/chinese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/chinese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/chinese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/czech/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/czech/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/czech/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/czech/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/czech/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/czech/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/dutch/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/dutch/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/dutch/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/dutch/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/dutch/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/dutch/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/english/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/english/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/english/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/english/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/english/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/english/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/french/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/french/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/french/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/french/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/french/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/french/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/german/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/german/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/german/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/german/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/german/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/german/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/greek/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/greek/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/greek/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/greek/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/greek/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/greek/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/hindi/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/hindi/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/hindi/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/hindi/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/hindi/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/hindi/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/hongkong/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/hongkong/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/hongkong/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/hongkong/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/hongkong/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/hongkong/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/hungarian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/hungarian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/hungarian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/hungarian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/hungarian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/hungarian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/indonesian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/indonesian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/indonesian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/indonesian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/indonesian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/indonesian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/italian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/italian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/italian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/italian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/italian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/italian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/japanese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/japanese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/japanese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/japanese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/japanese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/japanese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/korean/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/korean/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/korean/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/korean/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/korean/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/korean/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/polish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/polish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/polish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/polish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/polish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/polish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/portuguese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/portuguese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/portuguese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/portuguese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/portuguese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/portuguese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/russian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/russian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/russian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/russian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/russian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/russian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/spanish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/spanish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/spanish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/spanish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/spanish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/spanish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/swedish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/swedish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/swedish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/swedish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/swedish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/swedish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/thai/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/thai/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/thai/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/thai/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/thai/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/thai/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/turkish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/turkish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/turkish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/turkish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/turkish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/turkish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md create mode 100644 words/vietnamese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md create mode 100644 words/vietnamese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md create mode 100644 words/vietnamese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md create mode 100644 words/vietnamese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md create mode 100644 words/vietnamese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md create mode 100644 words/vietnamese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md diff --git a/words/arabic/net/basic-conversions/_index.md b/words/arabic/net/basic-conversions/_index.md index c94cb16ecc..ec320e930b 100644 --- a/words/arabic/net/basic-conversions/_index.md +++ b/words/arabic/net/basic-conversions/_index.md @@ -26,6 +26,7 @@ | [تحويل ملف Word إلى PDF](./docx-to-pdf/) تعرّف على كيفية تحويل ملفات Word إلى PDF بسهولة باستخدام Aspose.Words for .NET من خلال دليلنا. مثالي للمطورين الذين يبحثون عن تحويل سريع وموثوق للمستندات. | | [تحويل 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 باستخدام C# – دليل برمجي كامل](./convert-docx-to-pdf-in-c-complete-programming-guide/) | دليل برمجي كامل لتحويل ملفات DOCX إلى PDF باستخدام C# و Aspose.Words مع أمثلة مفصلة. | | [تحويل Docx إلى بايت](./docx-to-byte/) | تعلّم كيفية تحويل ملفات Docx إلى مصفوفة بايت في .NET باستخدام Aspose.Words لمعالجة مستندات فعّالة. دليل خطوة بخطوة مُرفق. | | [تحويل Docx إلى Epub](./docx-to-epub/) حوّل ملفات DOCX إلى EPUB بسهولة باستخدام Aspose.Words لـ .NET. اتبع دليلنا التعليمي لدمجها بسلاسة في تطبيقات .NET. | [تحويل Docx إلى Mhtml وإرسال البريد الإلكتروني](./docx-to-mhtml-and-sending-email/) | تعلّم كيفية تحويل DOCX إلى MHTML وإرسال رسائل البريد الإلكتروني باستخدام Aspose.Words لـ .NET في هذا الدليل التفصيلي. حسّن إنتاجيتك مع الأتمة السهلة. | diff --git a/words/arabic/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/arabic/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..67069edc78 --- /dev/null +++ b/words/arabic/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,202 @@ +--- +category: general +date: 2026-04-07 +description: تحويل DOCX إلى PDF في C# بسرعة. تعلّم كيفية حفظ Word كملف PDF، تحميل + مستند docx في C#، وضمان التوافق مع PDF/UA‑2 في دقائق. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: ar +og_description: حوّل DOCX إلى PDF في C# على الفور. يوضح لك هذا الدليل كيفية حفظ Word + كملف PDF، تحميل مستند DOCX في C# والامتثال لمعايير PDF/UA‑2. +og_title: تحويل DOCX إلى PDF في C# – دليل خطوة بخطوة +tags: +- Aspose.Words +- C# +- PDF Generation +title: تحويل DOCX إلى PDF في C# – دليل برمجي كامل +url: /ar/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تحويل DOCX إلى PDF في C# – دليل برمجة شامل + +هل احتجت يومًا إلى **convert DOCX to PDF** في تطبيق C# لكنك لم تكن متأكدًا من أين تبدأ؟ لست وحدك. يواجه العديد من المطورين صعوبة عندما يكتشفون أن زر “حفظ كـ PDF” البسيط في Word لا يتحول إلى كود. الخبر السار؟ ببضع أسطر من Aspose.Words (أو أي مكتبة مماثلة) يمكنك أتمتة العملية بالكامل، والحفاظ على الأشكال العائمة داخل النص، وحتى تحقيق توافق PDF/UA‑2 دون عناء. + +في هذا الدرس ستتعلم كيفية **save Word as PDF**، **load docx document C#**، وتعديل خيارات التصدير بحيث يكون الملف الناتج جاهزًا لتدقيق إمكانية الوصول. في النهاية ستحصل على برنامج مستقل قابل للتنفيذ يحول أي ملف `.docx` إلى PDF نظيف ومتوافق مع المعايير. + +> **لماذا يهم؟** +> تحويل DOCX إلى PDF هو مطلب شائع لأنظمة الفوترة، مولدات التقارير، وأنابيب أرشفة المستندات. أتمتته يلغي الخطوات اليدوية، يقلل الأخطاء البشرية، ويضمن أن كل مخرجات تبدو متطابقة تمامًا عبر المنصات. + +## ما الذي ستحتاجه + +- **.NET 6.0** أو أحدث (الكود يعمل أيضًا على .NET Framework 4.6+) +- **Aspose.Words for .NET** (نسخة تجريبية مجانية أو مرخصة) – يمكنك تثبيتها عبر NuGet: `dotnet add package Aspose.Words` +- عينة `input.docx` موجودة في مجلد تتحكم فيه (سنشير إليها بـ `YOUR_DIRECTORY`) +- Visual Studio، VS Code، أو أي محرر C# تفضله + +هذا كل شيء—لا خدمات إضافية، لا استدعاءات REST. مجرد C# نقي. + +## الخطوة 1: تحميل مستند DOCX في C# + +قبل أن تتمكن من **convert docx to pdf**، تحتاج إلى جلب ملف Word إلى الذاكرة. فئة `Document` تقوم بذلك لك. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**لماذا هذا مهم:** +تحميل الملف يمنحك نموذج كائنات مُحلل بالكامل—فقرات، جداول، أشكال عائمة، كل شيء. إنها الخطوة الأولى في أي سير عمل **load docx document c#**، كما أنها تتحقق من أن الملف غير تالف قبل أن تهدر الوقت في التحويل. + +> **نصيحة احترافية:** إذا كنت تتعامل مع ملفات يرفعها المستخدمون، غلف استدعاء `new Document()` بكتلة try/catch للتعامل مع ملفات DOCX غير الصالحة بأناقة. + +## الخطوة 2: تكوين خيارات حفظ PDF (الامتثال ومعالجة الأشكال) + +قد تتساءل، “هل أحتاج إلى تعديل شيء ما، أم يمكنني فقط استدعاء `Save`؟” الجواب المختصر: يمكنك ذلك، لكن ضبط الخيارات الصحيحة يجعل PDF قابلًا للوصول ومطابقًا بصريًا. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**لماذا هذا مهم:** +- `ExportFloatingShapesAsInlineTag = true` يمنع فقدان أو سوء محاذاة الكائنات العائمة عند عرض PDF على أجهزة مختلفة. +- `Compliance = PdfCompliance.PdfUa2` يضمن أن الناتج يطابق معيار PDF/UA‑2، وهو أمر حاسم لتوافق قارئات الشاشة والأرشفة القانونية. + +إذا لم تكن بحاجة إلى إمكانية الوصول، يمكنك حذف سطر `Compliance`، لكن إبقائه لا يضيف عبءً تقريبًا ويجعل حلك مستقبليًا. + +## الخطوة 3: حفظ المستند كـ PDF – الإجراء الأساسي **Convert DOCX to PDF** + +الآن بعد تحميل المستند وتعيين الخيارات، التحويل الفعلي هو استدعاء طريقة واحدة. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**ما ستلاحظه:** +تشغيل البرنامج ينتج `output.pdf` في نفس المجلد. افتحه بأي عارض PDF وستلاحظ أن: + +- كل النصوص والجداول والصور تظهر تمامًا كما في DOCX الأصلي. +- الأشكال العائمة تُحفظ داخل النص، محافظًا على التخطيط. +- الملف يجتاز أدوات التحقق الأساسية من PDF/UA‑2 (مثل Adobe Acrobat Preflight). + +## مثال كامل يعمل – من البداية إلى النهاية + +فيما يلي تطبيق console كامل وجاهز للتشغيل يوضح التدفق الكامل. انسخه والصقه في مشروع C# جديد واضغط **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**الناتج المتوقع في وحدة التحكم:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +ويوجد ملف `output.pdf` مرتب بجوار ملف المصدر الخاص بك. + +## الأسئلة المتكررة والحالات الخاصة + +| السؤال | الجواب | +|----------|--------| +| **هل يمكنني تحويل DOCX مخزن في `MemoryStream`؟** | بالتأكيد. استخدم `new Document(stream)` بدلاً من مسار الملف. | +| **ماذا لو كان DOCX يحتوي على ماكروهات؟** | Aspose.Words يتجاهل ماكروهات VBA بشكل افتراضي؛ لن تظهر في PDF. | +| **هل أحتاج إلى رخصة للإنتاج؟** | الإصدار التجريبي المجاني يضيف علامة مائية بعد عدد معين من الصفحات. للاستخدام التجاري، احصل على رخصة لإزالتها. | +| **كيف يمكنني تغيير حجم صفحة PDF؟** | قم بتعيين `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` قبل الحفظ. | +| **هل هناك طريقة لتضمين خط مخصص؟** | نعم—أضف `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +## نصائح احترافية لتجربة **Save Word as PDF** سلسة + +- **Batch processing:** غلف منطق التحويل داخل حلقة ومرره قائمة بمسارات DOCX. +- **Performance:** أعد استخدام نسخة واحدة من `PdfSaveOptions` عند تحويل العديد من الملفات؛ يقلل من ضغط الـ GC. +- **Logging:** أخرج حجم الـ PDF المُولد (`new FileInfo(outputPath).Length`) لمراقبة نتائج الضغط. +- **Error handling:** فرق بين `FileNotFoundException` (DOCX مفقود) و `UnauthorizedAccessException` (مشكلات صلاحية الكتابة). + +## الخلاصة + +أصبح لديك الآن نمط قوي وجاهز للإنتاج لـ **convert DOCX to PDF** في C#. من خلال تحميل DOCX، تكوين خيارات حفظ PDF، واستدعاء `Save`، يمكنك **save Word as PDF**، احترام تفاصيل التخطيط، والامتثال لمعايير إمكانية الوصول—كل ذلك بأقل من عشرة أسطر من الكود. + +هل أنت مستعد للتحدي التالي؟ جرّب استبدال `PdfSaveOptions` بـ `ImageSaveOptions` لـ **save Word as PNG**، أو استكشف فئة `HtmlSaveOptions` لتوليد مخرجات جاهزة للويب. في كلتا الحالتين، الأساسيات نفسها لـ **load docx document c#** تنطبق، مما يجعل قاعدة الشيفرة الخاصة بك مستقبلية. + +برمجة سعيدة، ولتكن ملفات PDF الخاصة بك دائمًا متوافقة! + +--- + +![مثال ناتج تحويل DOCX إلى PDF](convert-docx-to-pdf-output.png "مثال ناتج تحويل DOCX إلى 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-loadoptions/_index.md b/words/arabic/net/programming-with-loadoptions/_index.md index 2432802084..4aa5962c85 100644 --- a/words/arabic/net/programming-with-loadoptions/_index.md +++ b/words/arabic/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ | [تحميل ملفات Chm في مستند Word](./load-chm/) حمّل ملفات CHM بسهولة إلى مستندات Word باستخدام Aspose.Words for .NET مع هذا البرنامج التعليمي خطوة بخطوة. مثالي لتجميع وثائقك التقنية. | | [استعادة ملف DOCX باستخدام Aspose.Words – خطوة بخطوة](./how-to-recover-docx-with-aspose-words-step-by-step/) | تعلّم خطوة بخطوة كيفية استعادة ملفات DOCX التالفة باستخدام Aspose.Words لـ .NET. | | [خيارات التحميل في Aspose – تحميل DOCX بإعدادات خطوط مخصصة](./aspose-load-options-load-docx-with-custom-font-settings/) | تعلّم كيفية تحميل مستند DOCX مع إعدادات خطوط مخصصة باستخدام Aspose Load Options لتحسين مظهر المستند. | +| [استعادة ملف DOCX تالف – دليل C# كامل للإصلاح والحفظ](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | تعلم كيفية استعادة ملفات DOCX التالفة باستخدام Aspose.Words لـ .NET مع دليل خطوة بخطوة بلغة C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/arabic/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..bb0a92cdea --- /dev/null +++ b/words/arabic/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: تعلم كيفية استعادة ملفات DOCX التالفة في C# وحفظ المستند المستعاد بأمان. + دليل خطوة بخطوة مع مثال Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: ar +og_description: استعادة ملفات DOCX التالفة في C# وحفظ المستند المستعاد باستخدام Aspose.Words. + الكود الكامل، الشروحات، ونصائح أفضل الممارسات. +og_title: استعادة ملفات DOCX التالفة – دليل C# خطوة بخطوة +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: استعادة ملفات DOCX التالفة – دليل C# الكامل لإصلاح وحفظ الملفات +url: /ar/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# استعادة ملفات DOCX التالفة – دليل C# الكامل للإصلاح والحفظ + +هل حاولت فتح ملف DOCX يبدو سليمًا في المستكشف لكنه يرمي استثناءً في تطبيقك؟ هذه هي كابوس “ملف Word تالف” الكلاسيكي، وغالبًا ما ينتهي بتتبع مكدس لا تريد رؤيته. الخبر السار؟ تقدم لك Aspose.Words ميزة **recover corrupted docx** التي تتيح لك الاستمرار في العمل حتى عندما يكون الملف تالفًا. + +في هذا الدرس سنستعرض الخطوات الدقيقة لتحميل مستند مكسور، وإخبار المكتبة بالاستمرار، ثم **save recovered document** إلى ملف جديد ونظيف. بحلول النهاية ستعرف لماذا وضع الاستعادة مهم، وكيفية تكوينه، وما هي الفخاخ التي يجب تجنبها—بدون اختصارات غامضة مثل “انظر الوثائق”. + +## ما ستحتاجه + +- **Aspose.Words for .NET** (أي نسخة حديثة؛ تم استخدام 24.11 عند كتابة هذا الدليل) +- بيئة تطوير .NET (Visual Studio، Rider، أو VS Code مع امتداد C#) +- ملف DOCX تجريبي تشك في أنه تالف (يمكنك إتلاف ملف بفتحه في محرر zip وحذف جزء منه، فقط للاختبار) +- معرفة أساسية بـ C#—لا شيء معقد، فقط القدرة على إنشاء تطبيق كونسول + +إذا كان لديك كل ذلك بالفعل، رائع—لننتقل مباشرة إلى الحل. + +## الخطوة 1: إعداد LoadOptions باستراتيجية الاستعادة الصحيحة + +جوهر الإصلاح هو كائن `LoadOptions`. فهو يخبر Aspose.Words كيف يتصرف عندما يصادف XML غير صالح أو أجزاء مفقودة داخل حزمة DOCX. علم `RecoveryMode.RecoverAndContinue` هو الأكثر تسامحًا—يحاول إنقاذ ما يمكنه ويتخطى البقية. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**لماذا هذا مهم:** إذا تجاهلت `LoadOptions` أو استخدمت الوضع الافتراضي (`RecoveryMode.NoRecovery`)، فإن مُنشئ `Document` سيطرح استثناءً في اللحظة التي يكتشف فيها مشكلة. مع `RecoverAndContinue`، يلتقط الـ API الأخطاء غير الحرجة ويبني كائن مستند جزئي يمكنك الاستمرار في العمل معه. + +> **نصيحة احترافية:** بالنسبة لمجموعات ضخمة من الملفات، فكر في تغليف استدعاء التحميل داخل كتلة `try/catch` على أي حال—بعض الأخطاء تكون قاتلة فعلاً (مثل فقدان ملف `[Content_Types].xml`) ولا يمكن استعادتها. + +## الخطوة 2: تحميل ملف DOCX المحتمل أن يكون تالفًا + +الآن بعد أن أصبحت الخيارات جاهزة، قم بتحميل ملفك. المُنشئ يأخذ مسار الملف و`LoadOptions` التي أعددناها للتو. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**ما الذي يحدث خلف الكواليس؟** +يقوم Aspose.Words بتحليل حاوية ZIP، يقرأ كل جزء XML، ويحاول إعادة بناء شجرة Open XML DOM. عندما يصادف جزءًا مكسورًا، يسجل محرك الاستعادة تحذيرًا (مرئيًا في وحدة التحكم إذا فعلت التشخيص) ويتابع. قد يكون كائن `Document` الناتج يفتقد بعض الفقرات أو الصور، لكن باقي المحتوى يبقى سليمًا. + +## الخطوة 3: التحقق من المحتوى المستعاد (اختياري لكن موصى به) + +قبل حفظ الملف على القرص، من الحكمة فحص بعض العقد للتأكد من أن الأقسام المهمة نجت. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +إذا كان الناتج يبدو معقولًا، فقد نجحت في استعادة محتوى **recover corrupted docx**. إذا لاحظت أقسامًا مفقودة، يمكنك ما زال اتخاذ قرار المتابعة—فبعض الأجزاء المفقودة قد تكون مجرد ديكورات. + +## الخطوة 4: حفظ المستند المستعاد + +هذا هو الجزء الذي يسأل عنه معظم المطورين: “كيف يمكنني **save recovered document** دون إعادة إدخال الفساد الأصلي؟” الجواب هو ببساطة استدعاء `Document.Save` مع مسار جديد. تقوم Aspose.Words بكتابة حزمة ZIP جديدة تمامًا، لذا أي أجزاء مكسورة متبقية تُترك خلفها. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**لماذا هذا يعمل:** طريقة `Save` تسلسل شجرة DOM الموجودة في الذاكرة مرة أخرى إلى حزمة Open XML نظيفة. بما أن الأجزاء المكسورة لم تُحمَّل أبدًا إلى DOM (تم التخلص منها أثناء الاستعادة)، فإنها لا تصل أبدًا إلى الملف الجديد. النتيجة هي DOCX سليم يفتح في Word أو Google Docs أو أي عارض آخر. + +## الخطوة 5: أتمتة العملية لملفات متعددة (مكافأة) + +في سيناريوهات العالم الحقيقي غالبًا ما يكون لديك مجلد مليء بملفات إشكالية. ضع الخطوات السابقة داخل حلقة، وستحصل على أداة استعادة صغيرة. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +الآن يمكنك وضع دليل كامل من ملفات DOCX المكسورة في `C:\Docs\Batch` والسماح للسكريبت بتنظيفها تلقائيًا. + +## أسئلة شائعة وحالات حافة + +| السؤال | الإجابة | +|----------|--------| +| **هل يعمل هذا مع ملفات .doc؟** | ينطبق نفس صف `LoadOptions`، لكن يجب الإشارة إلى تنسيق Word القديم (`doc`). لا يزال Aspose.Words قادرًا على الاستعادة، رغم أن أنماط الأخطاء تختلف. | +| **ماذا لو كان الملف محميًا بكلمة مرور؟** | الاستعادة لن تتجاوز التشفير. تحتاج إلى توفير كلمة المرور عبر `LoadOptions.Password`. | +| **هل ستفقد الصور؟** | فقط الصور التي هي جزء من جزء XML تالف قد تُحذف. البقية تُحفظ لأنها مخزنة كتيارات ثنائية منفصلة. | +| **هل يمكنني تسجيل التحذيرات التي يولدها Aspose؟** | نعم—اضبط `LoadOptions.LoadFormat` إلى `LoadFormat.Docx` واشترك في `Document.WarningCallback` لالتقاط الرسائل التفصيلية. | +| **هل `RecoverAndContinue` آمن للإنتاج؟** | عمومًا نعم، لكن اختبره مع بياناتك. في خطوط الأنابيب الحرجة قد ترغب في وضع علامة على المستندات التي احتاجت إلى الاستعادة للمراجعة لاحقًا. | + +## مثال كامل يعمل (جاهز للنسخ واللصق) + +فيما يلي البرنامج الكامل الذي يمكنك تجميعه كتطبيق كونسول. يتضمن جميع الخطوات، ومعالجة الأخطاء، ومنطق المعالجة الدفعية الاختياري. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**النتيجة المتوقعة:** بعد تشغيل البرنامج، يفتح `Recovered.docx` في Microsoft Word دون مربع الحوار الخطأ الأصلي. أي أجزاء كانت متضررة جدًا تُحذف ببساطة، لكن النص الرئيسي والعناوين ومعظم الصور تبقى سليمة. + +![مثال على استعادة DOCX تالف](https://example.com/images/recover-corrupted-docx.png "استعادة DOCX تالف – مقارنة بصرية قبل/بعد") + +## الخلاصة + +لقد غطينا كل ما تحتاجه لاستعادة ملفات **recover corrupted docx** باستخدام Aspose.Words، من تكوين `LoadOptions` إلى **save recovered document** بأمان. النقاط الرئيسية هي: + +- استخدم `RecoveryMode.RecoverAndContinue` للسماح للمكتبة بتجاهل الأخطاء غير الحرجة. +- تحقق من المحتوى المحمَّل قبل حفظه، خاصةً عند التعامل مع مستندات أعمال حرجة. +- حفظ المستند يولّد حزمة ZIP نظيفة، مما يزيل الفساد الأصلي بفعالية. +- النمط نفسه يتوسع إلى عمليات الدفعات، مما يتيح تنظيفًا آليًا لمستودعات المستندات الكبيرة. + +هل أنت مستعد للخطوة التالية؟ جرّب دمج هذه المنطق في خدمة خلفية تراقب مجلد التحميل، أو جرب `WarningCallback` لإنشاء تقرير بالملفات التي احتاجت إلى الاستعادة. كلما لعبت أكثر مع الـ API، كلما أدركت مدى قوة Aspose.Words في معالجة المستندات في العالم الحقيقي. + +هل لديك تعديل ترغب في مشاركته—ربما التعامل مع ملفات محمية بكلمة مرور أو دمج المستندات المستعادة؟ اترك تعليقًا أدناه، ولنستمر في النقاش. برمجة سعيدة! + +{{< /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 46ce6eb44b..a5ba2ea4f8 100644 --- a/words/arabic/net/programming-with-markdownsaveoptions/_index.md +++ b/words/arabic/net/programming-with-markdownsaveoptions/_index.md @@ -42,6 +42,8 @@ ### [كيفية تصدير Markdown من DOCX – دليل كامل](./how-to-export-markdown-from-docx-complete-guide/) +### [حفظ Word كـ Markdown مع مجلد صور مخصص – دليل كامل](./save-word-as-markdown-with-custom-image-folder-full-guide/) + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/arabic/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..c1e895d6c4 --- /dev/null +++ b/words/arabic/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,288 @@ +--- +category: general +date: 2026-04-07 +description: احفظ مستند Word كملف Markdown واستخرج الصور من ملف docx باستخدام رد نداء. + تعلّم كيفية استخدام رد النداء لتخزين مجلد صور الـ Markdown بكفاءة. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: ar +og_description: احفظ مستند Word كـ Markdown واستخرج الصور من ملف docx باستخدام رد + النداء. يوضح هذا الدليل كيفية استخدام رد النداء لإنشاء مجلد صور Markdown. +og_title: حفظ ملف Word كـ Markdown – دليل خطوة بخطوة كامل +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: حفظ ملف وورد كماركداون مع مجلد صور مخصص – دليل كامل +url: /ar/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# حفظ Word كـ Markdown – دليل خطوة‑بخطوة كامل + +هل احتجت يومًا إلى **حفظ Word كـ Markdown** لكنك لم تكن متأكدًا مما يجب فعله بالصور المدمجة؟ أنت لست وحدك. في العديد من المشاريع يبدو ناتج الـ markdown رائعًا—*حتى* تدرك أن روابط الصور مكسورة لأن الملفات لم تغادر حزمة Word أبداً. + +الخبر السار هو أن Aspose.Words يوفّر لك طريقة نظيفة لـ **استخراج الصور من docx** ووضعها تمامًا حيث تريد، باستخدام **callback** يتيح لك التحكم في مجلد صور الـ markdown. في هذا الدرس سنستعرض العملية بالكامل، من تحميل ملف `.docx` إلى الحصول على مجلد منظم يحتوي على PNGs (أو أي صيغة لديك) وملف markdown يشير إليها. + +بحلول نهاية هذا الدليل ستتمكن من: + +* تحويل أي مستند Word إلى Markdown بسطر واحد من الكود. +* تفريغ كل صورة تلقائيًا في مجلد فرعي مخصص `images`. +* تخصيص أسماء الملفات بحيث لا تتصادم أبدًا، حتى عندما يحتوي المصدر على عشرات الصور. + +بدون سكريبتات خارجية، بدون نسخ ولصق يدوي—فقط C# نقي و Aspose.Words. + +## المتطلبات المسبقة + +قبل أن نبدأ، تأكد من أن لديك: + +* **Aspose.Words for .NET** (أحدث نسخة مستقرة؛ عند كتابة هذا الدليل هي 24.9). +* بيئة تطوير .NET (Visual Studio، Rider، أو `dotnet` CLI). +* مستند Word (`.docx`) يحتوي على صورة واحدة على الأقل—سميه `DocWithImages.docx`. + +إذا لم تستخدم Aspose.Words من قبل، لا تقلق. المكتبة مُدارة بالكامل، لا تتطلب أي تفاعل COM، وتعمل على .NET 6+ وكذلك .NET Framework 4.8. + +## الخطوة 1 – إعداد المشروع وتثبيت الحزمة + +أولاً، أنشئ تطبيق console جديد (أو أضف الكود إلى مشروع موجود). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **نصيحة احترافية:** إذا كنت تستهدف .NET 6، فإن `Program.cs` الافتراضي يستخدم بالفعل عبارات المستوى العلوي، مما يجعل العينة مختصرة. + +## الخطوة 2 – إنشاء Callback للتحكم في حفظ الصور + +Aspose.Words يستدعي `IResourceSavingCallback.ResourceSaving` لكل مورد خارجي يحتاج إلى كتابته (صور، CSS، إلخ). من خلال تنفيذ هذه الواجهة نحصل على صلاحية كاملة للتحكم في **كيفية بناء مجلد صور الـ markdown**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### لماذا نستخدم callback؟ + +* **تحكم دقيق** – أنت تقرر بنية المجلد ومخطط التسمية. +* **الأداء** – تكتب الدفق مرة واحدة، متجنبًا كتابة المكتبة المزدوجة. +* **المرونة** – يمكنك إضافة تسجيل، تحسين الصور، أو حتى رفعها إلى التخزين السحابي في هذه المرحلة. + +## الخطوة 3 – تحميل مستند Word + +الآن بعد أن أصبح الـ callback جاهزًا، نحتاج فقط لتوجيه Aspose.Words إلى ملف المصدر. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **ماذا لو لم يُعثر على الملف؟** +> سيُطلق `Document` استثناءً من نوع `FileNotFoundException`. غلف عملية التحميل بـ `try/catch` إذا كنت تتوقع مسارات ديناميكية. + +## الخطوة 4 – ربط MarkdownSaveOptions + +فئة `MarkdownSaveOptions` تتيح لنا توصيل الـ callback الذي أنشأناه للتو. كما نحدد المجلد الذي ستعيش فيه الصور بالنسبة لملف الـ markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +خاصية `ImagesFolder` تخبر Aspose بإنشاء روابط markdown مثل `![Alt text](images/img_123.png)`. لأننا أيضًا قمنا بتعيين `ResourceFileName` داخل الـ callback، فإن الملف الفعلي يُوضع تمامًا هناك. + +## الخطوة 5 – حفظ كـ Markdown والتحقق من النتيجة + +أخيرًا، نكتب ملف الـ markdown. الـ callback سيكون قد ملأ بالفعل المجلد الفرعي `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### النتيجة المتوقعة + +تشغيل البرنامج يجب أن يطبع شيئًا مشابهًا لـ: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +افتح `Doc.md` في أي عارض markdown؛ سترى روابط الصور التي تشير بشكل صحيح إلى مجلد `images`. + +--- + +## الأسئلة المتكررة (FAQ) + +### كيف **استخراج الصور من docx** دون التحويل إلى markdown؟ + +يمكنك إعادة استخدام نفس `MyMarkdownResourceCallback` ولكن تمريره إلى `doc.Save("images.zip", SaveFormat.Zip)`. سيظل الـ callback يُستدعى لكل صورة، مما يتيح لك وضعها في أي مكان تريده. + +### ماذا لو احتجت **صيغ صور مختلفة**؟ + +`args.FileName` يحتوي بالفعل على الامتداد الأصلي (`.png`, `.jpg`, إلخ). إذا كان عليك تحويل جميع الصور إلى صيغة واحدة، أضف خطوة التحويل داخل `ResourceSaving` قبل كتابة الدفق. + +### هل يمكنني **تخصيص مجلد صور الـ markdown** لكل مستند؟ + +بالطبع. الـ callback يستقبل مسار المجلد عبر المُنشئ الخاص به، لذا يمكنك إنشاء callback جديد بمجلد مختلف لكل مستند في عملية دفعة. + +### هل يعمل هذا مع **مستندات كبيرة** (مئات الصور)؟ + +نعم. الـ callback يبث الصورة مباشرة إلى القرص، مما يحافظ على انخفاض استهلاك الذاكرة. فقط تأكد من أن القرص الهدف يحتوي على مساحة كافية وأنك لا تتجاوز حدود مقابض الملفات في نظام التشغيل. + +## مثال كامل يعمل + +فيما يلي البرنامج الكامل جاهز للنسخ واللصق. استبدل `YOUR_DIRECTORY` بمسار مطلق أو نسبي يناسب بيئتك. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +{{< /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-officemath/_index.md b/words/arabic/net/programming-with-officemath/_index.md index e45267ceb3..5a0ae42b2b 100644 --- a/words/arabic/net/programming-with-officemath/_index.md +++ b/words/arabic/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ | العنوان | الوصف | | --- | --- | | [معادلات الرياضيات](./math-equations/) | تعلّم كيفية إعداد المعادلات الرياضية في مستندات Word باستخدام Aspose.Words لـ .NET. دليل خطوة بخطوة مع أمثلة وأسئلة شائعة والمزيد. | +| [حفظ docx كملف txt – تصدير معادلات Word إلى LaTeX في C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | تعلّم كيفية حفظ مستند DOCX كملف TXT وتصدير معادلات Word Math إلى LaTeX باستخدام C# و Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/arabic/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..1e68f4da4e --- /dev/null +++ b/words/arabic/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-04-07 +description: احفظ ملفات docx كملفات txt بسرعة وتعلم كيفية تصدير الرياضيات إلى LaTeX. + حوّل Word إلى txt، وتعامل مع Office Math، واحفظ المعادلات دون تعديل. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: ar +og_description: احفظ ملف docx كملف txt مع تصدير رياضيات LaTeX. دليل C# خطوة بخطوة + يوضح كيفية تحويل Word إلى txt مع الحفاظ على المعادلات. +og_title: حفظ ملف docx كملف txt – دليل C# لتصدير معادلات Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: حفظ ملف docx كملف txt – تصدير معادلات Word إلى LaTeX في C# +url: /ar/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# حفظ docx كملف txt – تصدير رياضيات Word إلى LaTeX في C# + +هل احتجت يوماً إلى **حفظ docx كملف txt** لكنك كنت قلقاً من أن تتحول معادلاتك إلى فوضى من الرموز؟ لست وحدك. يواجه العديد من المطورين هذه المشكلة عندما يحاولون **تحويل word إلى txt** للمعالجة اللاحقة، خاصةً عندما يحتوي المصدر على كائنات Office Math. + +الخبر السار؟ ببضع أسطر من C# والخيارات الصحيحة للحفظ، يمكنك الحفاظ على كل معادلة بصيغة LaTeX نظيفة، مما يجعل ملف النص العادي مقروءاً للبشر وجاهزاً للأنابيب العلمية. في هذا الدرس سنستعرض العملية بالكامل، نجيب على *كيفية تصدير الرياضيات* من ملف Word، ونظهر لك *كيفية تحويل docx* دون فقدان أي دقة للرياضيات. + +## ما ستتعلمه + +- تحميل ملف `.docx` باستخدام Aspose.Words (أو أي مكتبة متوافقة). +- تهيئة `TxtSaveOptions` بحيث يتم تصدير Office Math كـ LaTeX. +- حفظ المستند كملف `.txt` يحتفظ بالمعادلات دون تعديل. +- نصائح للتعامل مع الحالات الخاصة مثل المعادلات المخفية أو المستندات الكبيرة. +- عينة شفرة كاملة قابلة للتنفيذ يمكنك نسخها‑لصقها الآن. + +لا حاجة لأدوات بناء معقدة، فقط مشروع .NET وحزمة Aspose.Words عبر NuGet. لنبدأ. + +--- + +## المتطلبات المسبقة + +| المتطلب | سبب أهميته | +|-------------|----------------| +| .NET 6.0 أو أحدث | ميزات لغة حديثة وأداء أفضل. | +| Aspose.Words for .NET (NuGet) | يوفر `Document` و `TxtSaveOptions` و `OfficeMathExportMode`. | +| ملف Word (`.docx`) يحتوي على معادلات | لمشاهدة تصدير LaTeX عملياً. | +| معرفة أساسية بـ C# | ستتبع الشفرة سطرًا بسطر. | + +إذا لم تقم بإضافة Aspose.Words بعد، نفّذ: + +```bash +dotnet add package Aspose.Words +``` + +هذا كل شيء—لا حاجة لتكوين إضافي. + +--- + +## الخطوة 1: تحميل ملف DOCX + +أولاً، نحتاج إلى جلب المستند المصدر إلى الذاكرة. فكر في ذلك كفتح كتاب قبل أن تبدأ القراءة. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **نصيحة احترافية:** استخدم مسارًا مطلقًا أثناء الاختبار لتجنب مفاجآت “الملف غير موجود”. في بيئة الإنتاج ربما ستحصل على المسار من ملف إعدادات أو من رفع المستخدم. + +--- + +## الخطوة 2: تهيئة خيارات حفظ TXT لتصدير الرياضيات + +بشكل افتراضي، `TxtSaveOptions` يصدّر نصًا عاديًا ويزيل Office Math. لا نريد ذلك. ضبط `OfficeMathExportMode` إلى `LaTeX` يخبر المكتبة بترجمة كل معادلة إلى تمثيلها بصيغة LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### لماذا LaTeX؟ + +LaTeX هو اللغة المشتركة للنشر العلمي. عندما تقوم لاحقًا بتمرير ملف `.txt` إلى معالج markdown أو دفتر Jupyter أو أي أداة تدعم LaTeX، تُظهر المعادلات بشكل مثالي. إذا كنت تفضّل الرموز Unicode العادية بدلاً من ذلك، يمكنك التحويل إلى `OfficeMathExportMode.Unicode`، لكن LaTeX يمنحك أقصى تحكم. + +--- + +## الخطوة 3: حفظ المستند كملف نص عادي + +الآن يحدث السحر. طريقة `Save` تكتب المستند إلى القرص باستخدام الخيارات التي عرّفناها للتو. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +بعد تشغيل هذا السطر، سيحتوي `Math.txt` على: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +لاحظ كيف تظهر المعادلة داخل `\[` و `\]` — بالضبط ما يتوقعه LaTeX. + +--- + +## كيفية تصدير الرياضيات من المستندات المعقدة + +### التعامل مع المعادلات المخفية أو المضمنة + +بعض ملفات Word تخزن المعادلات داخل إطارات نص مخفية. Aspose.Words يتعامل معها كالمعادلات الظاهرة، لذا يعمل تصدير LaTeX تلقائيًا. ومع ذلك، إذا لاحظت فقدان معادلات، تحقق مرة أخرى من أن كائن `Document` ليس مُعدًا لتجاهل المحتوى المخفي: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### المستندات الكبيرة واستهلاك الذاكرة + +حفظ رسالة مكوّنة من 500 صفحة قد يستهلك الكثير من الذاكرة. لتقليل البصمة الذاكرية، يمكنك بث الإخراج: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +البث يكتب أجزاء إلى القرص أثناء إنشائها، مما يمنع وجود الملف بالكامل في الذاكرة دفعة واحدة. + +--- + +## الأخطاء الشائعة وكيفية تجنّبها + +| المشكلة | العَرَض | الحل | +|---------|---------|-----| +| فقدان أقواس LaTeX | تظهر المعادلات ككود خام (`E = mc^{2}`) | تأكد من `OfficeMathExportMode = LaTeX`. | +| ملف ناتج فارغ | مسار خاطئ أو أذونات غير كافية | تحقق من وجود دليل الإخراج وأنه قابل للكتابة. | +| حروف مشوشة | الملف مشفر بـ UTF‑8 بدون BOM على نظام يتوقع ANSI | أضف `txtSaveOptions.Encoding = Encoding.UTF8;` | +| اختفاء المعادلات بعد التحويل | تم تحميل المستند باستخدام `LoadOptions` التي تستبعد الرياضيات | استخدم `LoadOptions` الافتراضية أو اضبط `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## مثال كامل يعمل + +فيما يلي البرنامج الكامل الذي يمكنك تجميعه وتشغيله. يتضمن معالجة الأخطاء، والتحقق من صحة المسار، وسجل وحدة تحكم صغير لتعرف أن كل شيء نجح. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**الناتج المتوقع** (مقتطف من `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +يمكنك الآن تمرير هذا الملف إلى أي معالج يدعم LaTeX، وستظهر المعادلات بشكل جميل. + +--- + +## كيفية تحويل DOCX إلى TXT دون فقدان التنسيق + +إذا كنت تحتاج فقط إلى نص عادي ولا تهتم بالرياضيات، ما عليك سوى حذف سطر `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +ولكن تذكر، **كيفية تصدير الرياضيات** هي ما يميز سير العمل العلمي. الحفاظ على LaTeX كما هو هو ما يجعل التحويل مفيدًا حقًا. + +--- + +## الخطوات التالية والمواضيع ذات الصلة + +- **تحويل دفعي:** غلف الشفرة داخل حلقة `foreach` لمعالجة مجلد كامل من ملفات `.docx`. +- **إنشاء Markdown:** أضف رؤوس `#` أو نقاط `*` إلى النص لإنتاج markdown جاهز للنشر. +- **تصدير PDF:** استخدم `PdfSaveOptions` لإنشاء نسخة PDF إلى جانب ملف txt. +- **تعديل LaTeX متقدم:** عالج الناتج لاحقًا باستخدام regex لاستبدال `\[`/`\]` بـ `$...$` للمعادلات المضمنة. + +كل من هذه يعتمد على الأساس نفسه — تحميل `Document` واختيار `SaveOptions` المناسبة. لا تتردد في التجربة؛ الـ API مرن بما يكفي لمعظم سيناريوهات أتمتة المستندات. + +--- + +## الخلاصة + +لقد غطينا كل ما تحتاجه **لحفظ docx كملف txt** مع الحفاظ على كل معادلة بصيغة LaTeX. من تحميل الملف المصدر، تهيئة `TxtSaveOptions` لـ **كيفية تصدير الرياضيات**، إلى كتابة ملف النص النهائي، يتناسب سير العمل بالكامل مع بضع جمل مختصرة في C#. + +الآن يمكنك أتمتة تحويل تقارير Word، الأوراق الأكاديمية، أو أي مستند يدمج النص والرياضيات، وتمرير ملف `.txt` الناتج إلى الأدوات اللاحقة دون فقدان أي تفاصيل علمية. + +جرّبه، عدّل الخيارات وفق احتياجاتك، وأخبرنا في التعليقات كيف كان الأداء بالنسبة لك. برمجة سعيدة! + +![مخطط يوضح خط أنابيب التحويل من DOCX → معالجة C# → TXT مع رياضيات LaTeX](https://example.com/images/save-docx-as-txt.png "خط أنابيب حفظ docx كملف txt") + +{{< /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-pdfsaveoptions/_index.md b/words/arabic/net/programming-with-pdfsaveoptions/_index.md index 9e6e92466c..08b8d211d9 100644 --- a/words/arabic/net/programming-with-pdfsaveoptions/_index.md +++ b/words/arabic/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ | [تحديث آخر خاصية مطبوعة في مستند PDF](./update-last-printed-property/) |تعرف على كيفية تحديث آخر خاصية مطبوعة في مستند PDF باستخدام Aspose.Words لـ .NET من خلال دليلنا خطوة بخطوة. | | [عرض تأثيرات DML 3D ثلاثية الأبعاد في مستند PDF](./dml-3deffects-rendering/) |تعرف على كيفية تقديم تأثيرات DML ثلاثية الأبعاد المذهلة في مستندات PDF باستخدام Aspose.Words for .NET باستخدام هذا الدليل الشامل خطوة بخطوة. | | [استيفاء الصور في مستند PDF](./interpolate-images/) | تعلّم كيفية دمج الصور في مستند PDF باستخدام Aspose.Words for .NET من خلال دليلنا المفصل. حسّن جودة صور ملف PDF بسهولة. | - +| [إنشاء PDF قابل للوصول من Word – دليل خطوة بخطوة](./create-accessible-pdf-from-word-step-by-step-guide/) | تعلم كيفية إنشاء ملفات PDF قابلة للوصول من مستندات Word باستخدام Aspose.Words لـ .NET خطوة بخطوة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/arabic/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..0d6a2a1fc6 --- /dev/null +++ b/words/arabic/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: إنشاء ملف PDF قابل للوصول من ملف DOCX باستخدام C#. تعلّم كيفية تحويل + Word إلى PDF، حفظ ملف docx كـ PDF، وضمان توافق PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: ar +og_description: إنشاء ملف PDF قابل للوصول من Word باستخدام C#. يوضح هذا الدليل كيفية + تحويل Word إلى PDF، حفظ ملف docx كـ PDF، والامتثال لمعايير PDF/UA. +og_title: إنشاء PDF ميسر – دليل C# الكامل +tags: +- Aspose.Words +- PDF accessibility +- C# +title: إنشاء ملف PDF قابل للوصول من Word – دليل خطوة بخطوة +url: /ar/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# إنشاء PDF قابل للوصول من Word – دليل برمجي كامل + +هل احتجت يوماً إلى **إنشاء PDF قابل للوصول** من مستند Word لكنك لم تكن متأكدًا من الإعدادات التي يجب تعديلها؟ لست وحدك. في العديد من الشركات، الامتثال لمعيار PDF/UA (الوصولية الشاملة) هو شرط أساسي، وزر “تحويل إلى PDF” العادي لا يكفي. + +في هذا الدليل سنستعرض حلاً مختصراً من البداية إلى النهاية **يحوّل Word إلى PDF**، **يحفظ docx كـ PDF**، ويضمن أن الناتج يطابق معايير الوصولية. لا مراجع غامضة—فقط الكود الذي يمكنك نسخه‑لصقه، بالإضافة إلى “السبب” وراء كل سطر. + +> **TL;DR:** حمّل ملف `.docx`، عيّن `PdfSaveOptions.Compliance` إلى `PdfUa1` (أو `PdfUa2`)، ثم استدعِ `Document.Save`. هذا كل ما تحتاجه **لإنشاء PDF قابل للوصول** باستخدام Aspose.Words لـ .NET. + +--- + +## ما ستتعلمه + +- كيفية **تحويل Word إلى PDF** مع الحفاظ على العناوين، النص البديل، وترتيب القراءة. +- الفرق بين `PdfUa1` و `PdfUa2` ومتى تختار كل منهما. +- كيفية **حفظ docx كـ PDF** باستخدام بضع أسطر فقط من C#. +- المشكلات الشائعة (الخطوط المفقودة، العلامات غير المدعومة) والحلول السريعة. +- مثال شفرة جاهز للتنفيذ يمكنك إدراجه في أي مشروع .NET. + +### المتطلبات المسبقة + +- .NET 6 أو أحدث (الكود يعمل أيضاً على .NET Framework 4.7+). +- Aspose.Words for .NET مثبت عبر NuGet (`Install-Package Aspose.Words`). +- ملف Word (`input.docx`) يحتوي بالفعل على بنية صحيحة (أنماط، نص بديل للصور). + +إذا لم تقم بإضافة Aspose.Words بعد، نفّذ الأمر أدناه في Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +هذا هو الاعتماد الخارجي الوحيد الذي تحتاجه. + +--- + +## إنشاء PDF قابل للوصول – لماذا الوصولية مهمة + +عندما يتم وضع علامة على PDF كـ **PDF/UA** (الوصولية الشاملة)، يمكن لقارئات الشاشة التنقل بين العناوين، الجداول، وحقول النماذج كما لو كانت في ملف Word الأصلي. هذا ليس مجرد ميزة إضافية؛ العديد من الحكومات والشركات تعتبر الامتثال لـ PDF/UA متطلبًا قانونيًا. + +تعيين خاصية `Compliance` في `PdfSaveOptions` يخبر المكتبة بدمج العلامات اللازمة، ضبط لغة المستند الصحيحة، وإضافة ترتيب قراءة منطقي. تخطي هذه الخطوة ينتج PDF “بصري‑فقط” يفشل في اختبارات الوصولية. + +--- + +## تحويل Word إلى PDF باستخدام Aspose.Words + +فيما يلي أبسط طريقة **لتحويل Word إلى PDF** مع الحفاظ على إمكانية الوصول للوثيقة. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +> **ما الذي يحدث هنا؟** + +- `Document` يقرأ ملف Word، محافظًا على جميع الأنماط والبنية. +- `PdfSaveOptions.Compliance` يخبر Aspose.Words بوضع علامة على الناتج كـ PDF/UA. +- `doc.Save` يكتب ملف PDF إلى القرص، مدمجًا العلامات تلقائيًا. + +> **نصيحة احترافية:** إذا كان ملف Word المصدر يستخدم أنماط عناوين مخصصة، تأكد من ربطها بمستويات العناوين المدمجة (`Heading1`, `Heading2`, …). هذا يضمن أن PDF المُنتج يحصل على علامات العناوين الصحيحة. + +--- + +## حفظ Docx كـ PDF – تكوين امتثال PDF/UA + +إذا كنت بالفعل على دراية بفئة `PdfSaveOptions`، قد تتساءل عما إذا كان هناك مفاتيح أخرى تؤثر على الوصولية. بعض الخصائص المفيدة: + +| الخاصية | التأثير على الوصولية | القيمة النموذجية | +|----------|------------------------|---------------| +| `Compliance` | يفعل/يعطل وضع علامات PDF/UA | `PdfCompliance.PdfUa1` أو `PdfUa2` | +| `EmbedFullFonts` | يضمن أن القارئ يرى الخطوط المقصودة | `true` (الافتراضي) | +| `OptimizeOutput` | يقلل حجم الملف دون إزالة العلامات | `true` | + +يمكنك توسيع المقتطف السابق كالتالي: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +التحويل إلى `PdfUa2` يضيف دعمًا لميزات PDF/UA الأحدث مثل وضع علامة *artifact* للصور الزخرفية. إذا لم تكن بحاجة إلى ذلك، ابقَ على `PdfUa1` لأقصى توافق مع التقنيات المساعدة القديمة. + +--- + +## تصدير Docx إلى PDF – مثال عملي كامل + +فيما يلي تطبيق console مستقل يوضح التدفق الكامل، من تحميل الملف إلى التحقق من الناتج. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### النتيجة المتوقعة + +- يظهر ملف باسم **Compliant.pdf** في نفس المجلد الذي يحتوي على الملف التنفيذي. +- فتح PDF في Adobe Acrobat Pro → *Tools → Accessibility → Full Check* يجب أن يُظهر **لا توجد مشكلات وصولية** (بافتراض أن ملف Word المصدر منظم جيدًا). +- تبويب *Properties → Advanced* في PDF سيظهر **PDF/UA** تحت قسم “PDF/A and PDF/UA compliance”. + +--- + +## حالات الحافة الشائعة وكيفية التعامل معها + +| الحالة | لماذا يهم | الحل السريع | +|-----------|----------------|-----------| +| **Missing fonts** | قد يلجأ PDF إلى خط افتراضي، مما يفسد التخطيط البصري. | عيّن `EmbedFullFonts = true` (وهو الافتراضي) وتأكد من أن ملفات الخطوط متاحة على جهاز البناء. | +| **Images without alt‑text** | قارئات الشاشة ستقرأ “صورة” بدون وصف. | أضف `Alt Text` في Word (`Right‑click → Format Picture → Alt Text`) قبل التحويل. | +| **Custom styles not recognized as headings** | يحتاج PDF/UA إلى علامات عناوين صحيحة. | اربط الأنماط المخصصة بالعناوين المدمجة عبر `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | تحويل ملف من 500 صفحة قد يرفع استهلاك الذاكرة. | استخدم `doc.Save(outputPath, options)` مع `options.SaveFormat = SaveFormat.Pdf` وفكّر في المعالجة على دفعات إذا واجهت `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | أحيانًا تريد PDF بصري سريع فقط. | احذف إعداد `Compliance` أو عيّنه إلى `PdfCompliance.Pdf15`. | + +--- + +## مثال صورة (نص بديل متضمن) + +![لقطة شاشة تُظهر شجرة علامات PDF/UA في Adobe Acrobat – تُظهر أننا نجحنا في إنشاء PDF قابل للوصول](https://example.com/images/accessible-pdf-screenshot.png) + +*النص البديل أعلاه يعزز الكلمة المفتاحية الأساسية ويساعد كلًا من المستخدمين ونماذج الذكاء الاصطناعي على فهم سياق الصورة.* + +--- + +## الأسئلة المتكررة + +**س: هل يعمل هذا مع .NET Core؟** +ج: بالتأكيد. Aspose.Words متعدد المنصات؛ فقط أضف حزمة NuGet إلى مشروع .NET 6+ الخاص بك. + +**س: هل يمكنني معالجة عدة ملفات DOCX دفعةً؟** +ج: نعم. ضع منطق التحميل والحفظ داخل حلقة `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. تذكّر إعادة استخدام كائن `PdfSaveOptions` واحد لتحسين الأداء. + +**س: ماذا لو احتجت لإضافة علامة PDF/UA مخصصة لا تُنشئها Aspose تلقائيًا؟** +ج: استخدم واجهة PDF منخفضة المستوى (`PdfSaveOptions.CustomProperties`) أو عالج PDF لاحقًا بمكتبة مثل iText 7 التي تسمح بإدراج العلامات يدويًا. + +--- + +## الخلاصة + +أنت + +{{< /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 f958b30423..3de151a971 100644 --- a/words/arabic/net/working-with-fonts/_index.md +++ b/words/arabic/net/working-with-fonts/_index.md @@ -26,28 +26,29 @@ | العنوان | الوصف | | --- | --- | | [تنسيق الخط](./font-formatting/) |تعرف على كيفية تنسيق الخطوط في مستندات Word باستخدام Aspose.Words for .NET من خلال دليل مفصل خطوة بخطوة. | -| [الحصول على تباعد أسطر الخط](./get-font-line-spacing/) تعلّم كيفية ضبط مسافات أسطر الخطوط باستخدام Aspose.Words لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. مثالي للمطورين. +| [الحصول على تباعد أسطر الخط](./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-fonts-folders/) تعرّف على كيفية إعداد مجلدات خطوط مخصصة في Aspose.Words لـ .NET من خلال هذا الدليل الشامل خطوة بخطوة. مثالي للمطورين الذين يرغبون في تحسين خطوط المستندات. -| [تمكين تعطيل استبدال الخط](./enable-disable-font-substitution/) تعرّف على كيفية تفعيل أو تعطيل استبدال الخطوط في مستندات Word باستخدام Aspose.Words لـ .NET. تأكد من تناسق مستنداتك على جميع المنصات. +| [تعيين علامة التأكيد على الخط](./set-font-emphasis-mark/) تعرّف على كيفية ضبط علامات توكيد الخطوط في مستندات Word باستخدام 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 بسهولة. -| [تعيين مجلدات الخطوط مجلدات متعددة](./set-fonts-folders-multiple-folders/) تعرّف على كيفية تعيين مجلدات خطوط متعددة في مستندات Word باستخدام Aspose.Words لـ .NET. يضمن هذا الدليل التفصيلي استخدام مستنداتك للخطوط التي تحتاجها بالضبط. +| [تعيين مثيلات مجلدات الخطوط الافتراضية](./set-fonts-folders-default-instance/) تعرّف على كيفية تعيين مجلدات الخطوط للنسخة الافتراضية في Aspose.Words لـ .NET من خلال هذا البرنامج التعليمي خطوة بخطوة. خصّص مستندات Word بسهولة. | +| [تعيين مجلدات الخطوط مجلدات متعددة](./set-fonts-folders-multiple-folders/) تعرّف على كيفية تعيين مجلدات خطوط متعددة في مستندات Word باستخدام Aspose.Words لـ .NET. يضمن هذا الدليل التفصيلي استخدام مستنداتك للخطوط التي تحتاجها بالضبط. | | [تعيين نظام مجلدات الخطوط والمجلد المخصص](./set-fonts-folders-system-and-custom-folder/) |تعرف على كيفية تعيين مجلدات الخطوط المخصصة والنظامية في مستندات Word باستخدام Aspose.Words لـ .NET، مما يضمن عرض مستنداتك بشكل صحيح عبر بيئات مختلفة. | | [تعيين مجلدات الخطوط حسب الأولوية](./set-fonts-folders-with-priority/) | تعرّف على كيفية تحديد أولوية مجلدات الخطوط في مستندات Word باستخدام Aspose.Words لـ .NET. يضمن دليلنا عرض مستنداتك بشكل مثالي في كل مرة. | | [تعيين مجلد خطوط True Type](./set-true-type-fonts-folder/) | تعرّف على كيفية إعداد مجلد خطوط True Type في مستندات Word باستخدام Aspose.Words لـ .NET. اتبع دليلنا المفصل خطوة بخطوة لضمان إدارة متسقة للخطوط. | -| [تحديد الخط الافتراضي عند العرض](./specify-default-font-when-rendering/) تعرّف على كيفية تحديد خط افتراضي لعرض مستندات Word باستخدام Aspose.Words لـ .NET. احرص على تناسق مظهر المستندات على مختلف المنصات. -| [إعدادات الخط مع خيارات التحميل](./font-settings-with-load-options/) تعرّف على كيفية إدارة إعدادات الخطوط باستخدام خيارات التحميل في Aspose.Words لـ .NET. دليل خطوة بخطوة للمطورين لضمان تناسق مظهر الخطوط في مستندات Word. +| [تحديد الخط الافتراضي عند العرض](./specify-default-font-when-rendering/) تعرّف على كيفية تحديد خط افتراضي لعرض مستندات Word باستخدام Aspose.Words لـ .NET. احرص على تناسق مظهر المستندات على مختلف المنصات. | +| [إعدادات الخط مع خيارات التحميل](./font-settings-with-load-options/) تعرّف على كيفية إدارة إعدادات الخطوط باستخدام خيارات التحميل في Aspose.Words لـ .NET. دليل خطوة بخطوة للمطورين لضمان تناسق مظهر الخطوط في مستندات Word. | | [تعيين مجلد الخطوط](./set-fonts-folder/) |تعرف على كيفية تعيين مجلد خطوط مخصصة في Aspose.Words لـ .NET لضمان عرض مستندات Word الخاصة بك بشكل صحيح دون فقدان الخطوط. | | [إعدادات الخط الافتراضية](./font-settings-default-instance/) |في هذا البرنامج التعليمي، تعلم كيفية تكوين إعدادات الخط الافتراضية في مستند Word باستخدام Aspose.Words لـ .NET. | -| [احصل على قائمة الخطوط المتوفرة](./get-list-of-available-fonts/) اكتشف كيفية الحصول على قائمة بالخطوط المتاحة باستخدام Aspose.Words لـ .NET في هذا الدليل التعليمي المفصل خطوة بخطوة. طوّر مهاراتك في إدارة الخطوط. +| [احصل على قائمة الخطوط المتوفرة](./get-list-of-available-fonts/) اكتشف كيفية الحصول على قائمة بالخطوط المتاحة باستخدام Aspose.Words لـ .NET في هذا الدليل التعليمي المفصل خطوة بخطوة. طوّر مهاراتك في إدارة الخطوط. | | [تلقي إشعارات الخطوط](./receive-notifications-of-fonts/) |تعرف على كيفية تلقي إشعارات الخطوط المفقودة أو المستبدلة عند استخدام Aspose.Words لـ .NET. | | [تلقي إشعار تحذير](./receive-warning-notification/) |تعرف على كيفية تلقي إشعار تحذير عند استخدام Aspose.Words لـ .NET وإدارة أي مشكلات أو تحذيرات في مستنداتك. | | [مثال على مصدر خط Steam](./resource-steam-font-source-example/) |تعرف على كيفية استخدام مصدر خط Resource Stream لتحميل الخطوط المخصصة في Aspose.Words لـ .NET. | | [الحصول على الاستبدال بدون لاحقات](./get-substitution-without-suffixes/) |في هذا البرنامج التعليمي، تعلم كيفية الحصول على تجاوزات بدون لاحقات في مستند Word باستخدام Aspose.Words لـ .NET. | +| [كيفية اكتشاف الخطوط في Aspose.Words – دليل شامل](./how-to-detect-fonts-in-aspose-words-complete-guide/) |تعرف على كيفية اكتشاف الخطوط المستخدمة في مستندات Word باستخدام Aspose.Words لـ .NET من خلال دليل شامل خطوة بخطوة. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/arabic/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/arabic/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..29e2b9bb72 --- /dev/null +++ b/words/arabic/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: تعلم كيفية اكتشاف الخطوط وكيفية التقاط التحذيرات أثناء التعامل مع الخطوط + المفقودة في C# باستخدام Aspose.Words. يتضمن كودًا خطوة بخطوة. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: ar +og_description: كيف تكتشف الخطوط في Aspose.Words؟ اتبع هذا الدرس لالتقاط التحذيرات + ومعالجة الخطوط المفقودة بسهولة. +og_title: كيفية اكتشاف الخطوط في Aspose.Words – الدليل الكامل +tags: +- Aspose.Words +- C# +- Font handling +title: كيفية اكتشاف الخطوط في Aspose.Words – الدليل الكامل +url: /ar/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية اكتشاف الخطوط في Aspose.Words – دليل كامل + +هل تساءلت يومًا **كيف يتم اكتشاف الخطوط** المفقودة من مستند Word قبل نشره في بيئة الإنتاج؟ لست وحدك. في العديد من سيناريوهات الشركات، يمكن أن يتسبب خط غير موجود في تعطل خط أنابيب تحويل PDF أو يسبب عيوبًا في التخطيط تبدو غير احترافية. الخبر السار هو أن Aspose.Words يوفر لك طريقة مدمجة لاكتشاف تلك الخطوط الغائبة وعرض تحذيرات واضحة. + +في هذا الدرس سنستعرض خطوة بخطوة **كيفية اكتشاف الخطوط**، **كيفية التقاط التحذيرات**، وأفضل الممارسات **للتعامل مع الخطوط المفقودة** بحيث يبقى تطبيقك قويًا. لا أدوات خارجية، لا تخمين—فقط كود C# نقي يمكنك إدراجه في مشروعك الآن. + +> **معاينة سريعة:** في النهاية ستحصل على `FontSubstitutionWarningCollector` قابل لإعادة الاستخدام يجمع كل رسائل استبدال الخط أثناء تحميل المستند، وستعرف كيف تتعامل عندما لا يمكن العثور على خط. + +--- + +## ما ستتعلمه + +- كيفية تكوين `LoadOptions` للاستماع إلى تحذيرات استبدال الخط. +- كيفية التقاط تلك التحذيرات في فئة جامع مخصصة. +- كيفية معالجة التحذيرات المجمعة وتحديد ما إذا كان يجب إيقاف العملية، أو تسجيلها، أو استبدال الخطوط. +- معالجة الحالات الحدية للمستندات التي تشير إلى خطوط عن بُعد أو مضمنة. + +**المتطلبات المسبقة:** .NET 6+ (أو .NET Framework 4.6+)، Aspose.Words for .NET (أحدث نسخة)، ومعرفة أساسية بـ C#. إذا لم تستخدم Aspose.Words من قبل، لا تقلق—هذا الدليل يفترض فقط بضع دقائق من إعداد البيئة. + +## كيفية اكتشاف الخطوط باستخدام Aspose.Words LoadOptions + +الخطوة الأولى لاكتشاف الخطوط المفقودة هي إخبار Aspose.Words بالإبلاغ عنها. يتم ذلك عبر خاصية `LoadOptions.WarningCallback` التي تقبل أي فئة تنفذ `IWarningCallback`. أدناه نقوم بإنشاء جامع صغير يخزن كل تحذير للمراجعة لاحقًا. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**لماذا هذا مهم:** بدون رد نداء التحذير، يقوم Aspose.Words باستبدال الخطوط المفقودة بصمت بخط افتراضي، ولن تعرف أن هناك مشكلة. من خلال التقاط `WarningType.FontSubstitution` نحصل على رؤية كاملة—وهي البيانات التي تحتاجها **لاكتشاف الخطوط** غير المتوفرة على الجهاز المضيف. + +الآن نقوم بربط الجامع بـ `LoadOptions` ونحمّل مستندًا: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **نصيحة احترافية:** إذا كنت تتعامل مع العديد من المستندات دفعة واحدة، أعد استخدام نفس مثيل `FontSubstitutionWarningCollector` لكن تذكر استدعاء `Clear()` بين عمليات التحميل لتجنب خلط التحذيرات من ملفات مختلفة. + +## التقاط التحذيرات أثناء تحميل المستند + +بعد تحميل المستند، يحتفظ الجامع بالفعل بكل التحذيرات المتعلقة بالخطوط. السؤال المنطقي التالي هو: *كيف يمكنني التقاط التحذيرات* بطريقة سهلة للتسجيل أو العرض؟ + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +المخرجات النموذجية تبدو هكذا: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**ما الذي يخبرك به هذا:** كل سطر يكشف عن اسم الخط الأصلي والبديل الذي اختاره Aspose.Words. مع هذه المعلومات يمكنك اتخاذ قرار ما إذا كان البديل مقبولًا أو إذا كنت بحاجة إلى تضمين الخط المفقود يدويًا. + +## التعامل مع الخطوط المفقودة بشكل سلس + +اكتشاف التقاط التحذيرات هو نصف المعركة فقط. القيمة الحقيقية تظهر عندما **تتعامل مع الخطوط المفقودة** بطريقة جاهزة للإنتاج. فيما يلي ثلاث استراتيجيات شائعة: + +1. **سجل واستمر** – مناسب لمعالجة الدُفعات حيث تحتاج فقط إلى سجل تدقيق. +2. **إيقاف عند الخطوط الحرجة** – إلقاء استثناء إذا كان خط معين (مثل خط علامة تجارية) مفقودًا. +3. **تضمين الخط أثناء التشغيل** – تحميل الخط المفقود من مجلد معروف وتسجيله في Aspose.Words قبل إعادة تحميل المستند. + +### مثال: إيقاف عند خط حرج + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### مثال: تضمين الخطوط المفقودة تلقائيًا + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**لماذا تساعد هذه الأنماط:** من خلال اتخاذ قرار صريح حول ما يجب فعله عندما يكون الخط مفقودًا، تُزيل الاستبدالات الصامتة التي قد تضر بالعلامة التجارية أو القراءة. هذا هو جوهر **التعامل مع الخطوط المفقودة** بطريقة مُتحكم فيها. + +## مثال عملي كامل + +بجمع كل شيء معًا، إليك برنامج واحد جاهز للتنفيذ يوضح **كيفية اكتشاف الخطوط**، **كيفية التقاط التحذيرات**، وسياسة بسيطة **للتعامل مع الخطوط المفقودة** عن طريق تسجيلها. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**النتيجة المتوقعة:** عند تشغيل البرنامج على مستند يشير إلى خط غير موجود على الجهاز، ستعرض وحدة التحكم كل تحذير استبدال. إذا كان أي تحذير يتعلق بخط من مجموعة `critical`، سيخرج البرنامج مبكرًا، مما يمنع إنشاء PDF معيب. + +## الأسئلة المتكررة (FAQs) + +| السؤال | الجواب | +|----------|--------| +| *هل أحتاج إلى ترخيص لـ Aspose.Words لاستخدام هذا الكود؟* | نعم، الترخيص الصالح لـ Aspose.Words يزيل العلامات المائية للتقييم ويفتح كامل الوظائف. | +| *هل يمكن لهذه الطريقة اكتشاف الخطوط المضمنة؟* | الخطوط المضمنة هي بالفعل جزء من الملف، لذا لا يطلق Aspose.Words تحذير استبدال. يمكنك فحص `Document.FontInfos` لتعداد الخطوط المضمنة إذا لزم الأمر. | +| *ماذا لو كان الخط المفقود خط نظام على Windows لكنه غير موجود على Linux؟* | سيظهر نفس التحذير على Linux لأن الخط غير مثبت هناك. استخدم استراتيجية “التعامل مع الخطوط المفقودة” لتضمين ملفات `.ttf` المطلوبة مع تطبيقك. | +| *هل جامع التحذيرات يعمل في خيط* | | + +{{< /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 b1a77577d3..1596eacecb 100644 --- a/words/chinese/net/basic-conversions/_index.md +++ b/words/chinese/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ | [如何从 Word 导出 LaTeX – 步骤指南](./how-to-export-latex-from-word-step-by-step-guide/) | 学习如何使用 Aspose.Words for .NET 将 Word 文档导出为 LaTeX,提供分步指南和代码示例,帮助开发者实现文档转换。| | [使用 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,提供完整的分步指南和代码示例。| +| [在 C# 中将 DOCX 转换为 PDF – 完整编程指南](./convert-docx-to-pdf-in-c-complete-programming-guide/) | 学习如何使用 Aspose.Words for .NET 在 C# 中将 DOCX 转换为 PDF,提供完整的分步指南和代码示例。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/chinese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..65004ec959 --- /dev/null +++ b/words/chinese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,202 @@ +--- +category: general +date: 2026-04-07 +description: 在 C# 中快速将 DOCX 转换为 PDF。学习如何将 Word 保存为 PDF、在 C# 中加载 docx 文档,并在几分钟内确保 PDF/UA‑2 + 合规。 +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: zh +og_description: 在 C# 中即时将 DOCX 转换为 PDF。本指南展示如何将 Word 保存为 PDF,加载 C# 中的 docx 文档,并符合 + PDF/UA‑2 标准。 +og_title: 在 C# 中将 DOCX 转换为 PDF – 步骤指南 +tags: +- Aspose.Words +- C# +- PDF Generation +title: 在 C# 中将 DOCX 转换为 PDF – 完整编程指南 +url: /zh/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中将 DOCX 转换为 PDF – 完整编程指南 + +是否曾经需要在 C# 应用程序中 **convert DOCX to PDF**,但不知从何入手?你并非唯一遇到这种情况的人。许多开发者在发现 Word 中的“另存为 PDF”按钮并不能直接转化为代码时会卡住。好消息是?只需几行 Aspose.Words(或任何类似库)的代码,你就能自动化整个过程,保持浮动形状内联,甚至轻松实现 PDF/UA‑2 合规。 + +在本教程中,你将学习如何 **save Word as PDF**、**load docx document C#**,以及调整导出选项,使生成的文件准备好进行可访问性审计。完成后,你将拥有一个自包含、可运行的程序,能够将任何 `.docx` 文件转换为干净、符合标准的 PDF。 + +> **为什么要在意?** +> 将 DOCX 转换为 PDF 是发票系统、报告生成器和文档归档流水线的常见需求。自动化此过程可消除手动步骤,降低人为错误,并确保所有输出在各平台上完全一致。 + +## 你需要的内容 + +- **.NET 6.0** 或更高版本(代码同样适用于 .NET Framework 4.6+) +- **Aspose.Words for .NET**(免费试用或授权版本)——你可以通过 NuGet 安装:`dotnet add package Aspose.Words` +- 一个示例 `input.docx` 放置在你可控制的文件夹中(我们将其称为 `YOUR_DIRECTORY`) +- Visual Studio、VS Code,或任何你喜欢的 C# 编辑器 + +就是这样——无需额外服务,无需 REST 调用。纯粹的 C#。 + +## 步骤 1:在 C# 中加载 DOCX 文档 + +在你能够 **convert docx to pdf** 之前,需要将 Word 文件加载到内存中。`Document` 类为你完成此操作。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Why this matters:** +加载文件后,你将获得完整解析的对象模型——段落、表格、浮动形状等。这是任何 **load docx document c#** 工作流的第一步,同时它还能在你浪费时间进行转换之前验证文件是否损坏。 + +> **Pro tip:** 如果你处理用户上传的文件,请将 `new Document()` 调用包装在 try/catch 块中,以优雅地处理损坏的 DOCX 文件。 + +## 步骤 2:配置 PDF 保存选项(合规性与形状处理) + +你可能会想,‘我需要调整任何设置吗,还是只调用 `Save` 就行?’ 简短的答案是:可以,但设置正确的选项会让 PDF 更加可访问且视觉上忠实。 + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Why this matters:** +- `ExportFloatingShapesAsInlineTag = true` 可防止浮动对象在不同设备上查看 PDF 时丢失或错位。 +- `Compliance = PdfCompliance.PdfUa2` 确保输出符合 PDF/UA‑2 标准,这对屏幕阅读器兼容性和法律归档至关重要。 + +如果你不需要可访问性,可以去掉 `Compliance` 行,但保留它几乎不增加开销,并为你的解决方案提供未来保障。 + +## 步骤 3:将文档保存为 PDF – 核心 **Convert DOCX to PDF** 操作 + +现在文档已加载且选项已设置,实际的转换只需一次方法调用。 + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**What you’ll see:** +运行程序后会在同一文件夹生成 `output.pdf`。使用任意 PDF 查看器打开,你会注意到: + +- 所有文本、表格和图像都与原始 DOCX 完全一致。 +- 浮动形状以内联方式保留,保持布局。 +- 文件通过基本的 PDF/UA‑2 验证工具(例如 Adobe Acrobat Preflight)。 + +## 完整工作示例 – 从头到尾 + +下面是一个完整的、可直接运行的控制台应用程序,演示整个流程。复制粘贴到新的 C# 项目中并按 **F5** 运行。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**控制台的预期输出:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +一个整洁的 `output.pdf` 会与源文件并列。 + +## 常见问题与边缘情况 + +| 问题 | 答案 | +|----------|--------| +| **我可以转换存储在 `MemoryStream` 中的 DOCX 吗?** | 当然可以。使用 `new Document(stream)` 替代文件路径。 | +| **如果 DOCX 包含宏怎么办?** | Aspose.Words 默认会忽略 VBA 宏;它们不会出现在 PDF 中。 | +| **生产环境需要许可证吗?** | 免费试用版在超过一定页数后会添加水印。商业使用请获取许可证以去除水印。 | +| **如何更改 PDF 页面尺寸?** | 在保存前设置 `pdfOptions.PageSetup.PaperSize = PaperSize.A4;`。 | +| **有没有办法嵌入自定义字体?** | 可以——添加 `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`。 | + +## 顺畅 **Save Word as PDF** 体验的专业技巧 + +- **批量处理:** 将转换逻辑放入循环中,并提供 DOCX 路径列表。 +- **性能:** 在转换多个文件时复用同一个 `PdfSaveOptions` 实例,可降低 GC 压力。 +- **日志记录:** 输出生成的 PDF 大小(`new FileInfo(outputPath).Length`)以监控压缩效果。 +- **错误处理:** 区分 `FileNotFoundException`(DOCX 缺失)和 `UnauthorizedAccessException`(写入权限问题)。 + +## 结论 + +你现在拥有一个稳固、可用于生产的 **convert DOCX to PDF** 模式。通过加载 DOCX、配置 PDF 保存选项并调用 `Save`,你可以 **save Word as PDF**,保留布局细节,并满足可访问性标准——全部代码不超过十几行。 + +准备好迎接下一个挑战了吗?尝试将 `PdfSaveOptions` 替换为 `ImageSaveOptions` 以 **save Word as PNG**,或探索 `HtmlSaveOptions` 类生成网页就绪的输出。无论哪种方式,相同的 **load docx document c#** 基础都适用,使你的代码库具备未来兼容性。 + +祝编码愉快,愿你的 PDF 始终符合规范! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/chinese/net/programming-with-loadoptions/_index.md index 21a5d66354..46b831ea77 100644 --- a/words/chinese/net/programming-with-loadoptions/_index.md +++ b/words/chinese/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Aspose.Words for .NET 教程为希望掌握使用 LoadOptions 进行文字处理 | [在 Word 文档中加载 Chm 文件](./load-chm/) 按照本分步教程,使用 Aspose.Words for .NET 轻松将 CHM 文件加载到 Word 文档中。非常适合整合您的技术文档。| | [如何使用 Aspose.Words 恢复 docx – 分步指南](./how-to-recover-docx-with-aspose-words-step-by-step/) 按照本分步指南,使用 Aspose.Words for .NET 恢复受损的 docx 文档。| | [Aspose Load Options – 使用自定义字体设置加载 DOCX](./aspose-load-options-load-docx-with-custom-font-settings/) 了解如何使用 Aspose.Words for .NET 的 LoadOptions 在加载 DOCX 时自定义字体设置,确保文档正确渲染。| +| [恢复损坏的 DOCX – 完整的 C# 修复与保存指南](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) 了解如何使用 Aspose.Words for .NET 在 C# 中恢复损坏的 DOCX 文件并保存修复后的文档。分步指南。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/chinese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..9cd66ed1eb --- /dev/null +++ b/words/chinese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-04-07 +description: 学习如何在 C# 中恢复损坏的 DOCX 文件并安全保存恢复后的文档。提供 Aspose.Words 示例的分步指南。 +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: zh +og_description: 在 C# 中恢复损坏的 DOCX 文件,并使用 Aspose.Words 保存恢复后的文档。完整代码、说明和最佳实践技巧。 +og_title: 恢复损坏的 DOCX – 步骤详解 C# 指南 +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: 恢复损坏的 DOCX – 完整的 C# 修复与保存文件指南 +url: /zh/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 恢复损坏的 DOCX – 完整 C# 修复与保存指南 + +是否曾尝试打开一个在资源管理器中看起来正常、但在应用程序中抛出异常的 DOCX?这就是经典的“Word 文件损坏”噩梦,通常会伴随一堆你不想看到的堆栈跟踪。好消息是?Aspose.Words 提供了 **recover corrupted docx** 功能,即使文件受损也能继续工作。 + +在本教程中,我们将逐步演示如何加载损坏的文档、让库继续处理,然后 **save recovered document** 到一个全新的、干净的文件。结束时,你将了解恢复模式为何重要、如何配置以及需要规避的陷阱——不再依赖模糊的“查看文档”快捷方式。 + +## 你需要准备的东西 + +- **Aspose.Words for .NET**(任意近期版本;本指南编写时使用的是 24.11) +- .NET 开发环境(Visual Studio、Rider,或带 C# 扩展的 VS Code) +- 一个你怀疑已损坏的 DOCX 示例(可以通过在 zip 编辑器中打开并删除某个部件来人为损坏,以便测试) +- 基础的 C# 知识——不需要高级技巧,只要会创建一个控制台应用即可 + +如果这些都已经准备好,太好了——直接进入解决方案。 + +## 步骤 1:使用正确的恢复策略设置 LoadOptions + +修复的核心是 `LoadOptions` 对象。它告诉 Aspose.Words 在遇到 DOCX 包内部的 XML 格式错误或缺失部件时该如何行为。`RecoveryMode.RecoverAndContinue` 标志是最宽容的——它会尽可能抢救可用内容,并跳过其余部分。 + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**为什么这很重要:** 如果省略 `LoadOptions` 或使用默认模式(`RecoveryMode.NoRecovery`),`Document` 构造函数会在发现问题的瞬间抛出异常。使用 `RecoverAndContinue`,API 会吞掉非关键错误,生成一个仍可操作的部分文档对象。 + +> **专业提示:** 对于大量文件的批处理,仍建议将加载调用包装在 `try/catch` 块中——有些错误是真正致命的(例如缺少 `[Content_Types].xml` 文件),无法恢复。 + +## 步骤 2:加载可能已损坏的 DOCX + +选项准备好后,加载文件。构造函数接受文件路径和我们刚才准备的 `LoadOptions`。 + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**内部到底发生了什么?** +Aspose.Words 解析 ZIP 容器,读取每个 XML 部件,并尝试重建 Open XML DOM。当遇到损坏的部件时,恢复引擎会记录警告(如果启用了诊断,则在控制台可见),随后继续。生成的 `Document` 对象可能缺少少量段落或图片,但其余内容保持完整。 + +## 步骤 3:验证恢复后的内容(可选但推荐) + +在将文件写入磁盘之前,最好检查几个节点,确保关键章节完整。 + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +如果输出看起来合理,说明你已经成功 **recover corrupted docx** 内容。若发现缺失的章节,你仍可自行决定是否继续——有时丢失的部分仅是装饰性内容。 + +## 步骤 4:保存恢复后的文档 + +这是大多数开发者关心的点:“如何 **save recovered document** 而不把原来的损坏重新带进去?”答案很简单:调用 `Document.Save` 并提供一个全新的路径。Aspose.Words 会写入一个全新的 ZIP 包,任何残留的损坏部件都会被抛弃。 + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**为什么这样可行:** `Save` 方法将内存中的 DOM 序列化回干净的 Open XML 包。由于损坏的部件在恢复过程中已经被丢弃,它们不会出现在新文件中。结果是一个健康的 DOCX,能够在 Word、Google Docs 或其他查看器中正常打开。 + +## 步骤 5:为多个文件自动化此过程(进阶) + +在实际场景中,你常常会面对一整文件夹的有问题文件。将前面的步骤放入循环,即可得到一个小型恢复工具。 + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +现在,你只需把一整目录的损坏 DOCX 放入 `C:\Docs\Batch`,脚本就会自动清理它们。 + +## 常见问题与边缘情况 + +| 问题 | 回答 | +|----------|--------| +| **这能处理 .doc 文件吗?** | 同样使用 `LoadOptions` 类,但需要引用旧的 Word 格式(`doc`)。Aspose.Words 仍可恢复,只是错误模式不同。 | +| **如果文件受密码保护怎么办?** | 恢复不会绕过加密。需要通过 `LoadOptions.Password` 提供密码。 | +| **图片会丢失吗?** | 只有属于损坏 XML 部件的图片可能被省略。其余图片因为是独立的二进制流,会被完整保留。 | +| **我可以记录 Aspose 产生的警告吗?** | 可以——将 `LoadOptions.LoadFormat` 设置为 `LoadFormat.Docx`,并订阅 `Document.WarningCallback` 以捕获详细信息。 | +| **`RecoverAndContinue` 在生产环境安全么?** | 一般来说可以,但请先用你的数据做测试。在关键业务流水线中,建议对需要恢复的文档打标签,以便后续审查。 | + +## 完整可运行示例(复制粘贴即用) + +下面是可以编译为控制台应用的完整程序示例,包含所有步骤、错误处理以及可选的批处理逻辑。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**预期结果:** 运行程序后,`Recovered.docx` 能在 Microsoft Word 中打开且不再弹出原始错误对话框。过于损坏的部件会被省略,但正文、标题和大多数图片仍然完整。 + +![恢复损坏的 docx 示例](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## 结论 + +我们已经完整覆盖了使用 Aspose.Words **recover corrupted docx** 文件的全部要点,从配置 `LoadOptions` 到安全 **save recovered document**。关键要点如下: + +- 使用 `RecoveryMode.RecoverAndContinue` 让库忽略非关键错误。 +- 在提交之前验证加载的内容,尤其是处理关键业务文档时。 +- 保存文档会生成一个干净的 ZIP 包,彻底剔除原始损坏。 +- 同样的模式可以扩展到批量操作,实现大规模文档库的自动清理。 + +准备好下一步了吗?可以尝试将此逻辑集成到监控上传文件夹的后台服务中,或利用 `WarningCallback` 生成需要恢复的文件报告。玩得越多,你会越欣赏 Aspose.Words 在真实场景下的强大与稳健。 + +有什么新想法想分享——比如处理受密码保护的文件或合并恢复后的文档?在下方留言,让我们一起讨论。祝编码愉快! + +{{< /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 5c051cfedf..6b0df7e483 100644 --- a/words/chinese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/chinese/net/programming-with-markdownsaveoptions/_index.md @@ -51,6 +51,10 @@ 使用 Aspose.Words for .NET 将 DOCX 文档导出为 Markdown,提供完整的 C# 示例和分步指南。 +### [将 Word 保存为 Markdown 并使用自定义图像文件夹 – 完整指南](./save-word-as-markdown-with-custom-image-folder-full-guide/) + +使用 Aspose.Words for .NET 将 Word 文档保存为 Markdown,并自定义图像文件夹,提供完整示例和步骤指南。 + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/chinese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..6c2d20edc6 --- /dev/null +++ b/words/chinese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,288 @@ +--- +category: general +date: 2026-04-07 +description: 使用回调将 Word 保存为 Markdown 并从 docx 中提取图片。了解如何使用回调高效地存储 Markdown 图片文件夹。 +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: zh +og_description: 将 Word 保存为 Markdown 并使用回调提取 docx 中的图片。本指南展示如何使用回调创建 Markdown 图片文件夹。 +og_title: 将 Word 保存为 Markdown – 完整的逐步指南 +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: 将 Word 文档保存为 Markdown 并使用自定义图片文件夹 – 完整指南 +url: /zh/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 将 Word 保存为 Markdown – 完整分步指南 + +是否曾经需要 **将 Word 保存为 Markdown**,但不确定如何处理嵌入的图片?你并不孤单。在许多项目中,markdown 输出看起来很棒——*直到*你发现图片链接失效,因为文件从未离开 Word 包。 + +好消息是 Aspose.Words 为你提供了一种简洁的方式来 **从 docx 中提取图像** 并将其放置在你想要的位置,使用一个 **回调** 来控制 markdown 图像文件夹。在本教程中,我们将完整演示整个过程,从加载 `.docx` 文件到最终得到一个整洁的 PNG(或其他格式)文件夹以及指向这些图片的 markdown 文件。 + +通过本指南,你将能够: + +* 使用一行代码将任意 Word 文档转换为 Markdown。 +* 自动将每张图片导出到专用的 `images` 子文件夹。 +* 自定义文件名,确保即使源文档包含数十张图片也不会冲突。 + +无需外部脚本,无需手动复制粘贴——仅使用纯 C# 和 Aspose.Words。 + +## 前置条件 + +在开始之前,请确保你拥有: + +* **Aspose.Words for .NET**(最新稳定版本;撰写时为 24.9)。 +* .NET 开发环境(Visual Studio、Rider 或 `dotnet` CLI)。 +* 包含至少一张图片的 Word 文档(`.docx`),比如 `DocWithImages.docx`。 + +如果你从未使用过 Aspose.Words,请放心。该库是完全托管的,不需要 COM 互操作,并且可在 .NET 6+ 以及 .NET Framework 4.8 上运行。 + +## 第一步 – 设置项目并安装包 + +首先,创建一个新的控制台应用程序(或将代码添加到现有项目中)。 + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **技巧提示:** 如果你针对 .NET 6,默认的 `Program.cs` 已经使用顶级语句,这使示例更简洁。 + +## 第二步 – 创建回调以控制图像保存 + +Aspose.Words 会为每个需要写入的外部资源(图像、CSS 等)调用 `IResourceSavingCallback.ResourceSaving`。通过实现此接口,我们可以完全控制 **markdown 图像文件夹的构建方式**。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### 为什么使用回调? + +* **细粒度控制** – 你决定文件夹结构和命名方案。 +* **性能** – 只写入一次流,避免库的双写回退。 +* **灵活性** – 你可以在此添加日志、图像优化,甚至上传到云存储。 + +## 第三步 – 加载 Word 文档 + +现在回调已经准备好,只需让 Aspose.Words 指向源文件即可。 + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **如果文件未找到怎么办?** +> `Document` 会抛出 `FileNotFoundException`。如果路径是动态的,请在加载时使用 `try/catch` 包裹。 + +## 第四步 – 配置 MarkdownSaveOptions + +`MarkdownSaveOptions` 类让我们可以插入刚才构建的回调。我们还设置了相对于 markdown 文件的图像存放文件夹。 + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder` 属性告诉 Aspose 生成类似 `![Alt text](images/img_123.png)` 的 markdown 链接。由于我们在回调中也设置了 `ResourceFileName`,实际文件正好保存到该位置。 + +## 第五步 – 保存为 Markdown 并验证结果 + +最后,我们写入 markdown 文件。回调已经将 `images` 子文件夹填充完毕。 + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### 预期输出 + +运行程序应输出类似以下内容: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +在任意 markdown 查看器中打开 `Doc.md`;你会看到正确指向 `images` 文件夹的图片链接。 + +--- + +## 常见问题 (FAQ) + +### 如何在不转换为 markdown 的情况下 **从 docx 中提取图像**? + +你可以复用相同的 `MyMarkdownResourceCallback`,但将其传递给 `doc.Save("images.zip", SaveFormat.Zip)`。回调仍会针对每张图片触发,让你可以将它们保存到任意位置。 + +### 如果我需要 **不同的图像格式**怎么办? + +`args.FileName` 已经包含原始扩展名(`.png`、`.jpg` 等)。如果必须将所有图像转换为单一格式,可在 `ResourceSaving` 中写入流之前添加转换步骤。 + +### 我能为每个文档 **自定义 markdown 图像文件夹** 吗? + +当然可以。回调通过构造函数接收文件夹路径,因此在批处理时,你可以为每个文档实例化一个使用不同文件夹的回调。 + +### 这在 **大型文档**(数百张图片)中有效吗? + +是的。回调会直接将图像流式写入磁盘,保持低内存占用。只需确保目标驱动器有足够空间,并且没有触及操作系统的文件句柄限制。 + +## 完整工作示例 + +下面是完整的、可直接复制粘贴的程序。将 `YOUR_DIRECTORY` 替换为适合你环境的绝对或相对路径。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +运行程序(`dotnet run`),你会看到新生成的 `Doc.md`,以及包含 ... 的 `images` 子文件夹。 + +{{< /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-officemath/_index.md b/words/chinese/net/programming-with-officemath/_index.md index f11ad92b0c..4112389817 100644 --- a/words/chinese/net/programming-with-officemath/_index.md +++ b/words/chinese/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ Aspose.Words for .NET 教程“使用 OfficeMath 进行文字处理”将指导 标题 | 描述 | | --- | --- | | [数学方程式](./math-equations/) 了解如何使用 Aspose.Words for .NET 在 Word 文档中配置数学公式。包含示例、常见问题解答等内容的分步指南。| - +| [将 docx 保存为 txt – 在 C# 中将 Word Math 导出为 LaTeX](./save-docx-as-txt-export-word-math-to-latex-in-c/) 演示如何使用 Aspose.Words for .NET 将包含数学公式的 docx 文档导出为 txt 文件,并将公式转换为 LaTeX 表达式。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/chinese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..7c47705124 --- /dev/null +++ b/words/chinese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-04-07 +description: 快速将 docx 保存为 txt,并学习如何将数学公式导出为 LaTeX。将 Word 转换为 txt,处理 Office Math,保持公式完整。 +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: zh +og_description: 将 docx 保存为 txt 并导出 LaTeX 数学公式。一步一步的 C# 教程,展示如何将 Word 转换为 txt 并保留公式。 +og_title: 将 docx 保存为 txt – C# 导出 Word 数学公式指南 +tags: +- C# +- Aspose.Words +- DocumentConversion +title: 将 docx 保存为 txt – 在 C# 中将 Word 公式导出为 LaTeX +url: /zh/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 将 docx 保存为 txt – 在 C# 中将 Word 数学导出为 LaTeX + +是否曾经需要 **save docx as txt**,但担心你的公式会变成一堆符号?你并不孤单。许多开发者在尝试 **convert word to txt** 进行下游处理时都会遇到这个问题,尤其是源文件中包含 Office Math 对象时。 + +好消息是?只需几行 C# 代码和正确的保存选项,你就可以将每个公式保留为干净的 LaTeX,使纯文本文件既可读又适合科学流水线。在本教程中,我们将完整演示整个过程,回答 *how to export math*(如何导出数学公式)以及展示 *how to convert docx*(如何转换 docx)而不丢失任何数学精度。 + +## 您将学到 + +- 使用 Aspose.Words(或任何兼容的库)加载 `.docx` 文件。 +- 配置 `TxtSaveOptions`,使 Office Math 导出为 LaTeX。 +- 将文档保存为保留公式完整性的 `.txt` 文件。 +- 处理隐藏公式或大文档等边缘情况的技巧。 +- 一个完整、可直接复制粘贴运行的代码示例。 + +无需花哨的构建工具,只需一个 .NET 项目和 Aspose.Words NuGet 包。让我们开始吧。 + +--- + +## 前置条件 + +| 需求 | 原因 | +|------|------| +| .NET 6.0 或更高版本 | 现代语言特性和更佳性能。 | +| Aspose.Words for .NET(NuGet) | 提供 `Document`、`TxtSaveOptions` 和 `OfficeMathExportMode`。 | +| 包含公式的 Word 文件(`.docx`) | 用于查看 LaTeX 导出效果。 | +| 基本的 C# 知识 | 你将逐行阅读代码。 | + +如果你还没有添加 Aspose.Words,请运行: + +```bash +dotnet add package Aspose.Words +``` + +就这么简单——无需额外配置。 + +--- + +## 第 1 步:加载 DOCX 文件 + +首先,我们需要将源文档加载到内存中。可以把它想象成在阅读之前先打开一本书。 + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **专业提示:** 在测试时使用绝对路径,以避免 “file not found” 的意外。在生产环境中,你可能会从配置文件或用户上传中获取路径。 + +--- + +## 第 2 步:为数学导出配置 TXT 保存选项 + +默认情况下,`TxtSaveOptions` 只会导出纯文本并剥离 Office Math。我们不想这样。将 `OfficeMathExportMode` 设置为 `LaTeX`,即可让库把每个公式翻译为其 LaTeX 表示。 + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### 为什么选择 LaTeX? + +LaTeX 是科学出版的通用语言。当你随后将 `.txt` 输入到 markdown 处理器、Jupyter Notebook 或任何支持 LaTeX 的工具时,公式会完美渲染。如果你更倾向于使用普通 Unicode 符号,也可以切换为 `OfficeMathExportMode.Unicode`,但 LaTeX 能提供最强的控制力。 + +--- + +## 第 3 步:将文档保存为纯文本文件 + +现在魔法开始发挥作用。`Save` 方法会使用我们刚才定义的选项将文档写入磁盘。 + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +运行此行代码后,`Math.txt` 将包含: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +请注意,公式被包裹在 `\[` 和 `\]` 之间——这正是 LaTeX 所期望的格式。 + +--- + +## 如何从复杂文档中导出数学公式 + +### 处理隐藏或行内公式 + +某些 Word 文件会将公式存放在隐藏的文本框中。Aspose.Words 会将它们视为可见公式,因此 LaTeX 导出会自动生效。不过,如果你发现公式缺失,请检查 `Document` 对象是否被设置为忽略隐藏内容: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### 大文档与内存使用 + +保存一篇 500 页的论文可能会消耗大量内存。为降低内存占用,你可以采用流式写入: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +流式写入会在生成过程中将块写入磁盘,从而避免一次性将整个文件全部加载到内存。 + +--- + +## 常见问题 & 规避方法 + +| 常见问题 | 表现 | 解决方案 | +|----------|------|----------| +| 缺少 LaTeX 括号 | 公式显示为原始代码 (`E = mc^{2}`) | 确保 `OfficeMathExportMode = LaTeX`。 | +| 输出文件为空 | 路径错误或权限不足 | 确认输出目录存在且可写。 | +| 字符乱码 | 文件以 UTF‑8(无 BOM)编码,但系统期望 ANSI 编码 | 添加 `txtSaveOptions.Encoding = Encoding.UTF8;` | +| 转换后公式消失 | 使用排除数学的 `LoadOptions` 加载文档 | 使用默认的 `LoadOptions`,或设置 `LoadOptions.LoadFormat = LoadFormat.Docx`。 | + +--- + +## 完整可运行示例 + +下面是可以直接编译运行的完整程序示例。它包含错误处理、路径校验以及简短的控制台日志,帮助你确认一切顺利。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**预期输出**(`Math.txt` 的摘录): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +现在你可以将此文件输入任意支持 LaTeX 的处理器,公式将会美观渲染。 + +--- + +## 如何在不丢失格式的情况下将 DOCX 转换为 TXT + +如果你只需要纯文本且不在乎公式,只需省略 `OfficeMathExportMode` 那一行: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +但请记住,**how to export math** 是科学工作流的关键区别点。保持 LaTeX 完整是使转换真正有价值的关键。 + +--- + +## 后续步骤 & 相关主题 + +- **批量转换:** 将代码包装在 `foreach` 循环中,以处理整个文件夹的 `.docx` 文件。 +- **Markdown 生成:** 在文本中追加 `#` 标题或 `*` 项目符号,以生成可直接发布的 markdown。 +- **PDF 导出:** 使用 `PdfSaveOptions` 创建与 txt 并行的 PDF 版本。 +- **高级 LaTeX 调整:** 使用正则表达式后处理输出,将 `\[`/`\]` 替换为 `$...$` 以实现行内公式。 + +这些都基于相同的基础——加载 `Document` 并选择合适的 `SaveOptions`。尽情实验吧,API 足够灵活,能够满足大多数文档自动化场景。 + +--- + +## 结论 + +我们已经覆盖了在 **save docx as txt** 的同时将每个公式保留为 LaTeX 的全部要点。从加载源文件、配置 `TxtSaveOptions`(即 **how to export math**),到写入最终的纯文本文件,整个工作流只需几行简洁的 C# 代码。 + +现在,你可以自动化转换 Word 报告、学术论文或任何混合文本与数学的文档,并将生成的 `.txt` 输入下游工具而不丢失任何科学细节。 + +试一试吧,根据自己的需求微调选项,并在评论中告诉我们你的使用体验。祝编码愉快! + +![展示从 DOCX → C# 处理 → 带 LaTeX 数学的 TXT 转换管道的示意图](https://example.com/images/save-docx-as-txt.png "将 docx 保存为 txt 的管道") + +{{< /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-pdfsaveoptions/_index.md b/words/chinese/net/programming-with-pdfsaveoptions/_index.md index cc048035e4..39ae8a14de 100644 --- a/words/chinese/net/programming-with-pdfsaveoptions/_index.md +++ b/words/chinese/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Aspose.Words for .NET 教程“使用 PdfSaveOptions 进行文字处理”将引 | [更新 PDF 文档中的最后打印属性](./update-last-printed-property/) 通过我们的分步指南了解如何使用 Aspose.Words for .NET 更新 PDF 文档中最后打印的属性。| | [在 PDF 文档中渲染 3D DML 3DEffects](./dml-3deffects-rendering/) | 通过本全面的分步指南了解如何使用 Aspose.Words for .NET 在 PDF 文档中呈现令人惊叹的 3D DML 效果。| | [在 PDF 文档中插入图像](./interpolate-images/) 学习如何使用 Aspose.Words for .NET 在 PDF 文档中插入图像,并遵循我们的分步指南。轻松提升 PDF 图像质量。| - +| [从 Word 创建可访问 PDF – 分步指南](./create-accessible-pdf-from-word-step-by-step-guide/) 通过本分步指南了解如何使用 Aspose.Words for .NET 将 Word 文档转换为符合可访问性标准的 PDF。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/chinese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..04f157d8de --- /dev/null +++ b/words/chinese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: 在 C# 中从 DOCX 文件创建可访问的 PDF。学习如何将 Word 转换为 PDF,将 docx 保存为 PDF,并确保符合 PDF/UA + 标准。 +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: zh +og_description: 在 C# 中从 Word 创建可访问的 PDF。本指南展示如何将 Word 转换为 PDF、将 docx 保存为 PDF,并符合 PDF/UA + 标准。 +og_title: 创建可访问的 PDF – 完整 C# 教程 +tags: +- Aspose.Words +- PDF accessibility +- C# +title: 从 Word 创建可访问的 PDF – 步骤指南 +url: /zh/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 从 Word 创建可访问的 PDF – 完整编程教程 + +是否曾需要 **创建可访问的 PDF**,但不确定该调整哪些设置?你并不孤单。在许多企业中,遵循 PDF/UA(通用可访问性)是硬性要求,而普通的 “转换为 PDF” 按钮根本无法满足需求。 + +在本指南中,我们将一步步演示一个简洁的端到端解决方案,**将 Word 转换为 PDF**、**将 docx 保存为 PDF**,并确保输出符合可访问性标准。没有模糊的引用——只有可以直接复制粘贴的代码,以及每行代码背后的 “原因”。 + +> **TL;DR:** 加载 `.docx`,将 `PdfSaveOptions.Compliance` 设置为 `PdfUa1`(或 `PdfUa2`),然后调用 `Document.Save`。这就是使用 Aspose.Words for .NET **创建可访问的 PDF** 所需的全部操作。 + +--- + +## 您将学到 + +- 如何 **将 Word 转换为 PDF**,同时保留标题、替代文本和阅读顺序。 +- `PdfUa1` 与 `PdfUa2` 的区别以及何时选择。 +- 如何仅用几行 C# **将 docx 保存为 PDF**。 +- 常见陷阱(缺失字体、不受支持的标签)及快速解决方案。 +- 一个可直接运行的代码示例,您可以将其放入任何 .NET 项目中。 + +### 前置条件 + +- .NET 6 或更高版本(代码同样适用于 .NET Framework 4.7+)。 +- 通过 NuGet 安装 Aspose.Words for .NET(`Install-Package Aspose.Words`)。 +- 一个已经包含正确结构(样式、图片替代文本)的 Word 文件(`input.docx`)。 + +如果尚未添加 Aspose.Words,请在包管理器控制台中运行以下命令: + +```powershell +Install-Package Aspose.Words +``` + +这就是唯一需要的外部依赖。 + +--- + +## 创建可访问的 PDF – 为什么可访问性很重要 + +当 PDF 被标记为 **PDF/UA**(通用可访问性)时,屏幕阅读器能够像在原始 Word 文件中一样导航标题、表格和表单字段。这不仅是锦上添花;许多政府和企业将 PDF/UA 合规视为法律要求。 + +在 `PdfSaveOptions` 上设置 `Compliance` 属性会指示库嵌入必要的标签、设置正确的文档语言,并添加逻辑阅读顺序。跳过此步骤会生成仅“视觉”PDF,无法通过可访问性审计。 + +--- + +## 使用 Aspose.Words 将 Word 转换为 PDF + +下面是保持文档可访问性的 **将 Word 转换为 PDF** 的最简方法。 + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**这里发生了什么?** + +- `Document` 读取 Word 文件,保留所有样式和结构。 +- `PdfSaveOptions.Compliance` 告诉 Aspose.Words 将输出标记为 PDF/UA。 +- `doc.Save` 将 PDF 写入磁盘,并自动嵌入标签。 + +> **专业提示:** 如果源 Word 文件使用了自定义标题样式,请确保将它们映射到内置标题级别(`Heading1`、`Heading2` …)。这可确保生成的 PDF 获得正确的标题标签。 + +--- + +## 将 Docx 保存为 PDF – 配置 PDF/UA 合规性 + +如果您已经熟悉 `PdfSaveOptions` 类,可能会想了解还有哪些开关会影响可访问性。以下是几个有用的属性: + +| 属性 | 对可访问性的影响 | 典型值 | +|----------|------------------------|---------------| +| `Compliance` | 开启/关闭 PDF/UA 标记 | `PdfCompliance.PdfUa1` 或 `PdfUa2` | +| `EmbedFullFonts` | 确保阅读器显示预期的排版 | `true`(默认) | +| `OptimizeOutput` | 在不剥离标签的情况下减小文件大小 | `true` | + +您可以这样扩展前面的代码片段: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +切换到 `PdfUa2` 会为装饰性图片等新增 *artifact* 标记等新特性。如果不需要这些功能,使用 `PdfUa1` 可获得对旧版辅助技术的最大兼容性。 + +--- + +## 导出 Docx 为 PDF – 完整可运行示例 + +下面是一个自包含的控制台应用程序,演示从加载文件到验证输出的完整流程。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### 预期结果 + +- 在可执行文件所在文件夹中生成名为 **Compliant.pdf** 的文件。 +- 在 Adobe Acrobat Pro 中打开 PDF → *工具 → 可访问性 → 完整检查*,应显示 **无可访问性问题**(前提是源 Word 文件结构良好)。 +- PDF 的 *属性 → 高级* 选项卡会在 “PDF/A and PDF/UA compliance” 部分显示 **PDF/UA**。 + +--- + +## 常见边缘情况及处理方法 + +| 情况 | 为什么重要 | 快速解决方案 | +|-----------|----------------|-----------| +| **Missing fonts**(缺失字体) | PDF 可能回退到默认字体,导致布局错乱。 | 将 `EmbedFullFonts = true`(已是默认)并确保构建机器上可以访问相应字体文件。 | +| **Images without alt‑text**(图片缺少替代文本) | 屏幕阅读器只能读到 “image”,没有描述。 | 在 Word 中为图片添加 `Alt Text`(右键 → 设置图片格式 → 替代文本)后再转换。 | +| **Custom styles not recognized as headings**(自定义样式未被识别为标题) | PDF/UA 需要正确的标题标签。 | 通过 `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` 将自定义样式映射到内置标题。 | +| **Large documents cause memory pressure**(大文档导致内存压力) | 转换 500 页文件可能导致 RAM 飙升。 | 使用 `doc.Save(outputPath, options)` 并将 `options.SaveFormat = SaveFormat.Pdf`,如遇 `OutOfMemoryException` 可考虑分块处理。 | +| **Need to export docx to pdf without accessibility**(需要导出不带可访问性的 PDF) | 有时只想快速得到视觉 PDF。 | 省略 `Compliance` 设置或将其设为 `PdfCompliance.Pdf15`。 | + +--- + +## 图片示例(包含 Alt Text) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*上述替代文本强化了主要关键词,帮助用户和 AI 模型理解图片内容。* + +--- + +## 常见问答 + +**Q: 这在 .NET Core 上能工作吗?** +A: 完全可以。Aspose.Words 跨平台,只需在 .NET 6+ 项目中引用 NuGet 包即可。 + +**Q: 我可以批量处理多个 DOCX 文件吗?** +A: 可以。将加载和保存逻辑放入 `foreach (var file in Directory.GetFiles(folder, "*.docx"))` 循环中。为提升性能,请复用同一个 `PdfSaveOptions` 实例。 + +**Q: 如果需要添加 Aspose 未自动生成的自定义 PDF/UA 标签怎么办?** +A: 使用低层 PDF API(`PdfSaveOptions.CustomProperties`)或使用如 iText 7 等库对 PDF 进行后处理,以手动插入标签。 + +--- + +## 结论 + +You + +{{< /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 4edfb64b65..ed97afed5f 100644 --- a/words/chinese/net/working-with-fonts/_index.md +++ b/words/chinese/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ | [接收警告通知](./receive-warning-notification/) 了解如何在使用 Aspose.Words for .NET 时接收警告通知并管理文档中的任何问题或警告。| | [资源 Steam 字体源示例](./resource-steam-font-source-example/) 了解如何使用资源流字体源将自定义字体加载到 Aspose.Words for .NET 中。| | [获取不带后缀的替换](./get-substitution-without-suffixes/) 在本教程中,学习如何使用 Aspose.Words for .NET 在 Word 文档中获取无后缀覆盖。| - +| [如何检测 Aspose.Words 中的字体 – 完整指南](./how-to-detect-fonts-in-aspose-words-complete-guide/) 通过本完整指南学习如何在 Aspose.Words for .NET 中检测文档使用的字体,帮助您进行字体管理和兼容性检查。| {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/chinese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/chinese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..f4f149cf17 --- /dev/null +++ b/words/chinese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-04-07 +description: 学习如何检测字体以及在使用 Aspose.Words 处理缺失字体时捕获警告。附带一步步的代码示例。 +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: zh +og_description: 如何在 Aspose.Words 中检测字体?请按照本教程轻松捕获警告并处理缺失的字体。 +og_title: 如何在 Aspose.Words 中检测字体 – 完整指南 +tags: +- Aspose.Words +- C# +- Font handling +title: 如何在 Aspose.Words 中检测字体 – 完整指南 +url: /zh/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何检测 Aspose.Words 中的字体 – 完整指南 + +是否曾经想过 **如何检测字体** 在 Word 文档中缺失,在将其投入生产之前?你并不孤单。在许多企业场景中,偶然的字体缺失会导致 PDF 转换管道中断或出现看起来不专业的布局故障。好消息是,Aspose.Words 为你提供了内置的方式来嗅探这些缺失的字体并显示明确的警告。 + +在本教程中,我们将逐步演示 **如何检测字体**、**如何捕获警告**,以及处理缺失字体的最佳实践,以确保你的应用保持稳健。无需外部工具,无需猜测——只需将纯 C# 代码直接放入你的项目中即可。 + +> **快速预览:** 完成后,你将拥有一个可重用的 `FontSubstitutionWarningCollector`,它会在文档加载期间收集每个字体替换消息,并且你将知道在找不到字体时该如何响应。 + +--- + +## 你将学到的内容 + +- 如何配置 `LoadOptions` 以监听字体替换警告。 +- 如何在自定义收集器类中捕获这些警告。 +- 如何处理收集到的警告并决定是中止、记录还是替换字体。 +- 对引用远程或嵌入式字体的文档进行边缘情况处理。 + +**先决条件:** .NET 6+(或 .NET Framework 4.6+),Aspose.Words for .NET(最新版本),以及对 C# 的基本了解。如果你从未使用过 Aspose.Words,也无需担心——本指南只假设几分钟的设置时间。 + +## 使用 Aspose.Words LoadOptions 检测字体 + +检测缺失字体的第一步是让 Aspose.Words 报告它们。这通过 `LoadOptions.WarningCallback` 属性实现,该属性接受实现 `IWarningCallback` 的任意类。下面我们创建一个小型收集器,用于存储每个警告以供后续检查。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**为什么这很重要:** 如果没有警告回调,Aspose.Words 会悄悄地用默认字体替换缺失的字体,而你永远不会知道问题的存在。通过捕获 `WarningType.FontSubstitution`,我们获得了完整的可见性——正是你需要的用于 **检测字体** 的数据,这些字体在主机上不可用。 + +现在我们将收集器挂接到 `LoadOptions` 并加载文档: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **专业提示:** 如果你批量处理许多文档,请复用同一个 `FontSubstitutionWarningCollector` 实例,但记得在每次加载之间调用 `Clear()`,以避免混合不同文件的警告。 + +## 在文档加载期间捕获警告 + +文档加载后,收集器已经保存了每个与字体相关的警告。接下来的合乎逻辑的问题是:*如何捕获警告* 以便轻松记录或显示? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +典型的输出如下: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**这告诉你什么:** 每行显示原始字体名称以及 Aspose.Words 选择的替代字体。凭借这些信息,你可以决定替代字体是否可接受,或是否需要手动嵌入缺失的字体。 + +## 优雅地处理缺失字体 + +检测并捕获警告只是成功的一半。当你在生产环境中 **处理缺失字体** 时,真正的价值才显现。下面是三种常见策略: + +1. **记录并继续** – 适用于只需要审计跟踪的批处理。 +2. **关键字体时中止** – 如果缺少特定字体(例如品牌专用字体),则抛出异常。 +3. **即时嵌入字体** – 从已知文件夹加载缺失的字体,并在重新加载文档之前将其注册到 Aspose.Words。 + +### 示例:在关键字体缺失时中止 + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### 示例:自动嵌入缺失字体 + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**为什么这些模式有帮助:** 通过明确决定在字体缺失时的处理方式,你可以消除可能损害品牌或可读性的静默替代。这就是以受控方式 **处理缺失字体** 的本质。 + +## 完整可运行示例 + +将所有内容整合在一起,下面是一个可直接运行的程序示例,演示 **如何检测字体**、**如何捕获警告**,以及通过记录日志的简单策略来 **处理缺失字体**。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**预期结果:** 当你对引用了机器上不存在的字体的文档运行程序时,控制台会列出每个替换警告。如果任何警告涉及 `critical` 集合中的字体,程序将提前退出,防止生成有缺陷的 PDF。 + +## 常见问题解答 (FAQs) + +| Question | Answer | +|----------|--------| +| *我需要 Aspose.Words 的许可证才能使用这段代码吗?* | 是的,有效的 Aspose.Words 许可证会去除评估水印并解锁全部功能。 | +| *此方法能检测嵌入的字体吗?* | 嵌入的字体已经是文件的一部分,因此 Aspose.Words 不会触发替代警告。如有需要,你可以检查 `Document.FontInfos` 来枚举嵌入的字体。 | +| *如果缺失的字体在 Windows 上是系统字体,但在 Linux 上不存在怎么办?* | 在 Linux 上同样会触发警告,因为该字体未安装。请使用 “处理缺失字体” 策略,将所需的 `.ttf` 文件随应用一起分发。 | +| *警告收集器是线程* | | + +{{< /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 923bae116a..a2d609f7f2 100644 --- a/words/czech/net/basic-conversions/_index.md +++ b/words/czech/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ Základní konverze vás provede základními konverzemi dokumentů pomocí knih | [Jak exportovat LaTeX z Wordu – krok za krokem](./how-to-export-latex-from-word-step-by-step-guide/) | Naučte se, jak pomocí Aspose.Words pro .NET exportovat obsah Wordu do formátu LaTeX. Praktický průvodce s ukázkovým kódem. | | [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. | +| [Převod DOCX do PDF v C# – Kompletní průvodce](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Naučte se, jak převést DOCX do PDF v C# pomocí Aspose.Words s podrobným návodem a ukázkovým kódem. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/czech/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..6a3c495e01 --- /dev/null +++ b/words/czech/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,202 @@ +--- +category: general +date: 2026-04-07 +description: Rychle převádějte DOCX na PDF v C#. Naučte se, jak uložit Word jako PDF, + načíst dokument DOCX v C# a během několika minut zajistit soulad s PDF/UA‑2. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: cs +og_description: Převádějte DOCX na PDF v C# okamžitě. Tento průvodce vám ukáže, jak + uložit Word jako PDF, načíst docx dokument v C# a splnit standardy PDF/UA‑2. +og_title: Převod DOCX na PDF v C# – Průvodce krok za krokem +tags: +- Aspose.Words +- C# +- PDF Generation +title: Převod DOCX na PDF v C# – Kompletní programovací průvodce +url: /cs/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Převod DOCX do PDF v C# – Kompletní programovací průvodce + +Už jste někdy potřebovali **convert DOCX to PDF** v aplikaci C#, ale nevedeli jste, kde začít? Nejste v tom sami. Mnoho vývojářů narazí na problém, když zjistí, že jednoduché tlačítko „uložit jako PDF“ ve Wordu se nedá přímo použít v kódu. Dobrá zpráva? S několika řádky Aspose.Words (nebo jakékoli jiné podobné knihovny) můžete celý proces automatizovat, udržet plovoucí tvary v řádku a dokonce dosáhnout souladu s PDF/UA‑2 bez potíží. + +V tomto tutoriálu se naučíte, jak **save Word as PDF**, **load docx document C#**, a upravit možnosti exportu, aby výsledný soubor byl připravený na audity přístupnosti. Na konci budete mít samostatný spustitelný program, který převádí jakýkoli soubor `.docx` na čistý, standardy‑vyhovující PDF. + +> **Proč na tom záleží?** +> Převod DOCX do PDF je běžná požadavek pro fakturační systémy, generátory reportů a pipeline pro archivaci dokumentů. Automatizace eliminuje ruční kroky, snižuje lidské chyby a zajišťuje, že každý výstup vypadá naprosto stejně na všech platformách. + +## Co budete potřebovat + +- **.NET 6.0** nebo novější (kód funguje také na .NET Framework 4.6+) +- **Aspose.Words for .NET** (bezplatná zkušební verze nebo licencovaná verze) – můžete jej nainstalovat přes NuGet: `dotnet add package Aspose.Words` +- Vzorek `input.docx` umístěný ve složce, kterou ovládáte (budeme na něj odkazovat jako `YOUR_DIRECTORY`) +- Visual Studio, VS Code nebo jakýkoli editor C#, který máte rád + +To je vše—žádné extra služby, žádné REST volání. Jen čistý C#. + +## Krok 1: Načtení DOCX dokumentu v C# + +Než budete moci **convert docx to pdf**, musíte načíst Word soubor do paměti. Třída `Document` to za vás udělá. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Proč je to důležité:** +Načtení souboru vám poskytne plně analyzovaný objektový model—odstavce, tabulky, plovoucí tvary, vše. Je to první krok v jakémkoli workflow **load docx document c#**, a také ověří, že soubor není poškozený, než ztratíte čas konverzí. + +> **Pro tip:** Pokud pracujete s uživateli nahrávanými soubory, obalte volání `new Document()` do try/catch bloku, abyste poškozené DOCX soubory ošetřili elegantně. + +## Krok 2: Nastavení možností uložení PDF (Soulad & Zpracování tvarů) + +Možná se ptáte, „Potřebuji něco upravit, nebo mohu jen zavolat `Save`?“ Krátká odpověď: můžete, ale nastavení správných možností zajistí, že PDF bude přístupné a vizuálně věrné. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Proč je to důležité:** +- `ExportFloatingShapesAsInlineTag = true` zabraňuje ztrátě nebo nesprávnému zarovnání plovoucích objektů při prohlížení PDF na různých zařízeních. +- `Compliance = PdfCompliance.PdfUa2` zajišťuje, že výstup splňuje standard PDF/UA‑2, což je klíčové pro kompatibilitu se čtečkami obrazovky a právní archivaci. + +Pokud nepotřebujete přístupnost, můžete řádek `Compliance` vynechat, ale jeho ponechání téměř žádné zatížení nepřidává a budoucnost vaší řešení zabezpečuje. + +## Krok 3: Uložení dokumentu jako PDF – Hlavní akce **Convert DOCX to PDF** + +Jakmile je dokument načten a možnosti nastaveny, skutečná konverze je jediným voláním metody. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Co uvidíte:** +Spuštěním programu se ve stejné složce vytvoří `output.pdf`. Otevřete jej libovolným PDF prohlížečem a všimnete si, že: + +- Veškerý text, tabulky a obrázky se zobrazí přesně tak, jako v původním DOCX. +- Plovoucí tvary jsou zachovány v řádku, čímž se zachová rozvržení. +- Soubor projde základními nástroji pro validaci PDF/UA‑2 (např. Adobe Acrobat Preflight). + +## Kompletní funkční příklad – od začátku do konce + +Níže je kompletní, připravená ke spuštění konzolová aplikace, která ukazuje celý tok. Zkopírujte a vložte ji do nového C# projektu a stiskněte **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Očekávaný výstup v konzoli:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +A úhledný `output.pdf` leží vedle vašeho zdrojového souboru. + +## Často kladené otázky a okrajové případy + +| Otázka | Odpověď | +|----------|--------| +| **Mohu převést DOCX uložený v `MemoryStream`?** | Samozřejmě. Použijte `new Document(stream)` místo cesty k souboru. | +| **Co když DOCX obsahuje makra?** | Aspose.Words ve výchozím nastavení ignoruje VBA makra; v PDF se neobjeví. | +| **Potřebuji licenci pro produkci?** | Bezplatná zkušební verze přidá vodoznak po určitém počtu stránek. Pro komerční použití si pořiďte licenci, abyste ho odstranili. | +| **Jak změním velikost stránky PDF?** | Nastavte `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` před uložením. | +| **Je možné vložit vlastní font?** | Ano—přidejte `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +## Pro tipy pro plynulý zážitek **Save Word as PDF** + +- **Dávkové zpracování:** Zabalte logiku konverze do smyčky a předávejte jí seznam cest k DOCX souborům. +- **Výkon:** Znovu použijte jedinou instanci `PdfSaveOptions` při konverzi mnoha souborů; snižuje to zatížení GC. +- **Logování:** Vypište velikost vygenerovaného PDF (`new FileInfo(outputPath).Length`) pro sledování výsledků komprese. +- **Ošetření chyb:** Rozlišujte mezi `FileNotFoundException` (chybějící DOCX) a `UnauthorizedAccessException` (problémy s oprávněním zápisu). + +## Závěr + +Nyní máte solidní, připravený pro produkci vzor pro **convert DOCX to PDF** v C#. Načtením DOCX, nastavením možností uložení PDF a voláním `Save` můžete **save Word as PDF**, respektovat nuance rozvržení a splnit standardy přístupnosti—vše během méně než deseti řádků kódu. + +Jste připraveni na další výzvu? Zkuste vyměnit `PdfSaveOptions` za `ImageSaveOptions` pro **save Word as PNG**, nebo prozkoumejte třídu `HtmlSaveOptions` pro generování výstupu připraveného pro web. V každém případě se uplatní stejné základy **load docx document c#**, což vaši kódovou základnu učiní budoucnost‑bezpečnou. + +Šťastné programování a ať jsou vaše PDF vždy v souladu! + +--- + +![Příklad výstupu převodu DOCX do PDF](convert-docx-to-pdf-output.png "Příklad výstupu převodu DOCX do 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/czech/net/programming-with-loadoptions/_index.md b/words/czech/net/programming-with-loadoptions/_index.md index f6665694ae..77bc554635 100644 --- a/words/czech/net/programming-with-loadoptions/_index.md +++ b/words/czech/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ V těchto tutoriálech se naučíte, jak používat LoadOptions k načítání d | [Načtení souborů CHM do dokumentu Word](./load-chm/) | Snadno načtěte soubory CHM do dokumentů Wordu pomocí Aspose.Words pro .NET s tímto podrobným návodem. Ideální pro konsolidaci vaší technické dokumentace. | | [Jak obnovit DOCX pomocí Aspose.Words – krok za krokem](./how-to-recover-docx-with-aspose-words-step-by-step/) | Naučte se, jak pomocí Aspose.Words obnovit poškozené soubory DOCX krok za krokem. | | [Aspose Load Options – Načíst DOCX s vlastními nastaveními písma](./aspose-load-options-load-docx-with-custom-font-settings/) | Naučte se, jak načíst soubor DOCX s vlastními nastaveními písma pomocí Aspose.LoadOptions v .NET. | +| [Obnovit poškozený DOCX – Kompletní průvodce C# pro opravu a uložení souborů](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Naučte se, jak opravit poškozené soubory DOCX a uložit je pomocí Aspose.Words pro .NET v C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/czech/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..a721f93c02 --- /dev/null +++ b/words/czech/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Naučte se, jak obnovit poškozené soubory DOCX v C# a bezpečně uložit + obnovený dokument. Podrobný návod s příkladem Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: cs +og_description: Obnovte poškozené soubory DOCX v C# a uložte obnovený dokument pomocí + Aspose.Words. Kompletní kód, vysvětlení a tipy na osvědčené postupy. +og_title: Obnova poškozených DOCX – krok za krokem průvodce v C# +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Obnovení poškozených DOCX – Kompletní průvodce v C# pro opravu a uložení souborů +url: /cs/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Obnovte poškozený DOCX – Kompletní průvodce v C# pro opravu a uložení souborů + +Už jste někdy zkusili otevřít DOCX, který v Průzkumníku vypadá v pořádku, ale ve vaší aplikaci vyvolá výjimku? To je klasický noční můra „poškozený soubor Word“, a obvykle končí stack‑trace, kterou nechcete vidět. Dobrá zpráva? Aspose.Words vám poskytuje funkci **recover corrupted docx**, která vám umožní pokračovat v práci i když je soubor poškozený. + +V tomto tutoriálu vás provedeme přesnými kroky, jak načíst poškozený dokument, říct knihovně, aby pokračovala, a následně **save recovered document** do nového, čistého souboru. Na konci budete vědět, proč je režim obnovy důležitý, jak jej nastavit a jakých úskalí se vyhnout — žádné vágní odkazy typu „viz dokumentace“. + +## Co budete potřebovat + +- **Aspose.Words for .NET** (jakákoli recentní verze; při psaní tohoto průvodce byla použita verze 24.11) +- Vývojové prostředí .NET (Visual Studio, Rider nebo VS Code s rozšířením C#) +- Vzorek DOCX, o kterém se domníváte, že je poškozený (soubor můžete poškozit otevřením v zip editoru a smazáním části, jen pro testování) +- Základní znalosti C# — nic složitého, jen schopnost vytvořit konzolovou aplikaci + +Pokud už to máte, skvělé — přejděme rovnou k řešení. + +## Krok 1: Nastavte LoadOptions s vhodnou strategií obnovy + +Jádrem opravy je objekt `LoadOptions`. Říká Aspose.Words, jak se má chovat, když narazí na poškozený XML nebo chybějící části uvnitř balíčku DOCX. Příznak `RecoveryMode.RecoverAndContinue` je nejshovívavější — snaží se zachránit, co může, a zbytek přeskočí. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Proč je to důležité:** Pokud vynecháte `LoadOptions` nebo použijete výchozí režim (`RecoveryMode.NoRecovery`), konstruktor `Document` vyhodí výjimku v okamžiku, kdy zaznamená problém. S `RecoverAndContinue` API pohlcuje nekritické chyby a vytvoří částečný objekt dokumentu, se kterým můžete i nadále pracovat. + +> **Tip:** Pro obrovské dávky souborů zvažte obalení volání načtení do `try/catch` bloku — některé chyby jsou skutečně fatální (např. chybějící soubor `[Content_Types].xml`) a nelze je obnovit. + +## Krok 2: Načtěte potenciálně poškozený DOCX + +Jakmile jsou možnosti připravené, načtěte svůj soubor. Konstruktor přijímá cestu k souboru a `LoadOptions`, které jsme právě připravili. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Co se děje pod kapotou?** +Aspose.Words parsuje ZIP kontejner, čte každou XML část a snaží se rekonstruovat Open XML DOM. Když narazí na poškozenou část, engine pro obnovu zaznamená varování (viditelné v konzoli, pokud povolíte diagnostiku) a pokračuje. Výsledný objekt `Document` může postrádat několik odstavců nebo obrázků, ale zbytek obsahu zůstane nedotčen. + +## Krok 3: Ověřte obnovený obsah (volitelné, ale doporučené) + +Než soubor zapíšete na disk, je rozumné prověřit několik uzlů, abyste se ujistili, že důležité sekce přežily. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Pokud výstup vypadá rozumně, úspěšně jste **recover corrupted docx** obsah. Pokud si všimnete chybějících sekcí, můžete se stále rozhodnout, zda pokračovat — někdy jsou ztracené části jen dekorativní. + +## Krok 4: Uložte obnovený dokument + +Zde je část, na kterou se většina vývojářů ptá: „Jak **save recovered document** bez opětovného zavedení původní korupce?“ Odpověď je jednoduchá – zavolejte `Document.Save` s novou cestou. Aspose.Words zapíše zcela nový ZIP balíček, takže všechny zbylé poškozené části zůstanou za sebou. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Proč to funguje:** Metoda `Save` serializuje DOM v paměti zpět do čistého Open XML balíčku. Protože poškozené části nebyly nikdy načteny do DOM (byly během obnovy zahazeny), nikdy se nedostanou do nového souboru. Výsledkem je zdravý DOCX, který se otevře ve Wordu, Google Docs nebo jakémkoli jiném prohlížeči. + +## Krok 5: Automatizujte proces pro více souborů (bonus) + +V reálných scénářích často máte složku plnou problematických souborů. Zabalte předchozí kroky do smyčky a získáte malý nástroj pro obnovu. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Nyní můžete vložit celý adresář poškozených DOCX souborů do `C:\Docs\Batch` a nechat skript je automaticky vyčistit. + +## Často kladené otázky a okrajové případy + +| Question | Answer | +|----------|--------| +| **Funguje to i s .doc soubory?** | Stejná třída `LoadOptions` se používá, ale musíte odkazovat na starší formát Wordu (`doc`). Aspose.Words může stále obnovit, i když se vzory chyb liší. | +| **Co když je soubor chráněn heslem?** | Obnova nepřekoná šifrování. Musíte zadat heslo pomocí `LoadOptions.Password`. | +| **Budou obrázky ztraceny?** | Pouze obrázky, které jsou součástí poškozené XML části, mohou být vynechány. Zbytek je zachován, protože jsou uloženy jako samostatné binární proudy. | +| **Mohu zaznamenávat varování generovaná Aspose?** | Ano — nastavte `LoadOptions.LoadFormat` na `LoadFormat.Docx` a přihlaste se k `Document.WarningCallback`, abyste zachytili podrobné zprávy. | +| **Je `RecoverAndContinue` bezpečný pro produkci?** | Obecně ano, ale otestujte to s vašimi daty. V kritických pipelinech můžete chtít označit dokumenty, které vyžadovaly obnovu, pro pozdější revizi. | + +## Kompletní funkční příklad (připravený ke kopírování a vložení) + +Níže je kompletní program, který můžete zkompilovat jako konzolovou aplikaci. Obsahuje všechny kroky, zpracování chyb a volitelnou logiku dávkového zpracování. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Očekávaný výsledek:** Po spuštění programu se `Recovered.docx` otevře v Microsoft Word bez původního chybového dialogu. Jakékoli části, které byly příliš poškozené, jsou jednoduše vynechány, ale hlavní tělo, nadpisy a většina obrázků zůstane nedotčena. + +![příklad obnovení poškozeného docx](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – vizuální porovnání před/po") + +## Závěr + +Probrali jsme vše, co potřebujete k **recover corrupted docx** souborům pomocí Aspose.Words, od nastavení `LoadOptions` až po bezpečné **save recovered document**. Hlavní poznatky jsou: + +- Použijte `RecoveryMode.RecoverAndContinue`, aby knihovna ignorovala nekritické chyby. +- Ověřte načtený obsah před jeho zápisem, zejména při práci s kritickými obchodními dokumenty. +- Uložení dokumentu vytvoří čistý ZIP balíček, který efektivně odstraní původní poškození. +- Stejný vzor se škáluje na dávkové operace, umožňující automatické čištění velkých úložišť dokumentů. + +Jste připraveni na další krok? Zkuste integrovat tuto logiku do background služby, která monitoruje složku pro nahrávání, nebo experimentujte s `WarningCallback`, abyste vytvořili zprávu o tom, které soubory potřebovaly obnovu. Čím více si budete hrát s API, tím více oceníte, jak robustní je Aspose.Words pro zpracování dokumentů ve skutečném světě. + +Máte nějaký tip, který byste chtěli sdílet — třeba zpracování souborů chráněných heslem nebo slučování obnovených dokumentů? Zanechte komentář níže a pojďme konverzaci udržet. Šť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/programming-with-markdownsaveoptions/_index.md b/words/czech/net/programming-with-markdownsaveoptions/_index.md index 2f80977c12..3d680b9248 100644 --- a/words/czech/net/programming-with-markdownsaveoptions/_index.md +++ b/words/czech/net/programming-with-markdownsaveoptions/_index.md @@ -32,6 +32,7 @@ Zpracování textu pomocí MarkdownSaveOptions je podrobný návod, který vás | [Exportovat Markdown z Wordu – kompletní průvodce v C#](./how-to-export-markdown-from-word-complete-c-guide/) | Naučte se, jak exportovat Markdown z Wordu pomocí kompletního průvodce v C#. | | [Jak uložit Markdown z DOCX – krok za krokem průvodce](./how-to-save-markdown-from-docx-step-by-step-guide/) | Naučte se krok za krokem ukládat soubory DOCX jako Markdown pomocí Aspose.Words pro .NET. | | [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í Wordu jako Markdown s vlastní složkou obrázků – Kompletní průvodce](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Naučte se, jak uložit dokument Word jako Markdown a nastavit vlastní složku pro obrázky pomocí Aspose.Words pro .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/czech/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..2b570f2879 --- /dev/null +++ b/words/czech/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,290 @@ +--- +category: general +date: 2026-04-07 +description: Uložte Word jako Markdown a extrahujte obrázky z docx pomocí callbacku. + Naučte se, jak použít callback k efektivnímu ukládání složky s obrázky v markdownu. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: cs +og_description: Uložte Word jako Markdown a extrahujte obrázky z docx pomocí callbacku. + Tento průvodce ukazuje, jak použít callback k vytvoření složky s obrázky v Markdownu. +og_title: Uložte Word jako Markdown – Kompletní průvodce krok za krokem +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Uložte Word jako Markdown s vlastní složkou obrázků – Kompletní průvodce +url: /cs/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Uložte Word jako Markdown – Kompletní průvodce krok za krokem + +Už jste někdy potřebovali **uložit Word jako Markdown**, ale nebyli jste si jisti, co dělat s vloženými obrázky? Nejste v tom sami. V mnoha projektech výstup v markdownu vypadá skvěle—*dokud* si neuvědomíte, že odkazy na obrázky jsou poškozené, protože soubory nikdy neopustily balíček Word. + +Dobrou zprávou je, že Aspose.Words vám poskytuje čistý způsob, jak **extrahovat obrázky z docx** a umístit je přesně tam, kde chcete, pomocí **callbacku**, který vám umožní řídit složku s obrázky v markdownu. V tomto tutoriálu projdeme celý proces, od načtení souboru `.docx` až po vytvoření uklizené složky s PNG (nebo jakýmkoli formátem, který máte) a markdown souboru, který na ně odkazuje. + +Na konci tohoto průvodce budete schopni: + +* Převést libovolný Word dokument do Markdownu jedním řádkem kódu. +* Automaticky uložit každý obrázek do vyhrazené podsložky `images`. +* Přizpůsobit názvy souborů tak, aby se nikdy nekřížily, i když zdroj obsahuje desítky obrázků. + +Žádné externí skripty, žádné ruční kopírování—pouze čisté C# a Aspose.Words. + +## Požadavky + +Než se pustíme dál, ujistěte se, že máte: + +* **Aspose.Words for .NET** (nejnovější stabilní verze; v době psaní je to 24.9). +* Vývojové prostředí .NET (Visual Studio, Rider nebo `dotnet` CLI). +* Word dokument (`.docx`), který obsahuje alespoň jeden obrázek—nazvěte jej `DocWithImages.docx`. + +Pokud jste s Aspose.Words nikdy nepracovali, nebojte se. Knihovna je plně spravovaná, nevyžaduje COM interop a funguje na .NET 6+ i na .NET Framework 4.8. + +## Krok 1 – Nastavení projektu a instalace balíčku + +Nejprve vytvořte novou konzolovou aplikaci (nebo přidejte kód do existujícího projektu). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Tip:** Pokud cílíte na .NET 6, výchozí `Program.cs` již používá top‑level statements, což udržuje ukázku stručnou. + +## Krok 2 – Vytvoření callbacku pro řízení ukládání obrázků + +Aspose.Words volá `IResourceSavingCallback.ResourceSaving` pro každý externí zdroj, který potřebuje zapsat (obrázky, CSS atd.). Implementací tohoto rozhraní získáme plnou kontrolu nad **tím, jak je složka s obrázky v markdownu** vytvořena. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Proč použít callback? + +* **Jemná kontrola** – rozhodujete o struktuře složek a schématu pojmenování. +* **Výkon** – zapíšete stream jednou, čímž se vyhnete dvojitému zápisu knihovny. +* **Flexibilita** – můžete přidat logování, optimalizaci obrázků nebo dokonce nahrát do cloudového úložiště v tomto kroku. + +## Krok 3 – Načtení Word dokumentu + +Nyní, když je callback připraven, stačí nasměrovat Aspose.Words na zdrojový soubor. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Co když soubor není nalezen?** +> `Document` vyhodí `FileNotFoundException`. Zabalte načítání do `try/catch`, pokud očekáváte dynamické cesty. + +## Krok 4 – Nastavení MarkdownSaveOptions + +Třída `MarkdownSaveOptions` nám umožňuje připojit callback, který jsme právě vytvořili. Také nastavíme složku, kde budou obrázky umístěny relativně k markdown souboru. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Vlastnost `ImagesFolder` říká Aspose, aby generoval markdown odkazy jako `![Alt text](images/img_123.png)`. Protože jsme také v callbacku nastavili `ResourceFileName`, skutečný soubor se uloží přesně tam. + +## Krok 5 – Uložení jako Markdown a ověření výsledku + +Nakonec zapíšeme markdown soubor. Callback již předem naplnil podsložku `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Očekávaný výstup + +Spuštění programu by mělo vypsat něco jako: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Otevřete `Doc.md` v libovolném markdown prohlížeči; uvidíte odkazy na obrázky, které správně ukazují na složku `images`. + +--- + +## Často kladené otázky (FAQ) + +### Jak **extrahovat obrázky z docx** bez konverze do markdownu? + +Můžete znovu použít stejný `MyMarkdownResourceCallback`, ale předat jej do `doc.Save("images.zip", SaveFormat.Zip)`. Callback se stále spustí pro každý obrázek, což vám umožní umístit je kamkoliv chcete. + +### Co když potřebuji **různé formáty obrázků**? + +`args.FileName` již obsahuje původní příponu (`.png`, `.jpg` atd.). Pokud musíte všechny obrázky převést na jeden formát, přidejte krok konverze uvnitř `ResourceSaving` před zápisem streamu. + +### Můžu **přizpůsobit složku s obrázky v markdownu** pro každý dokument? + +Určitě. Callback získává cestu ke složce přes svůj konstruktor, takže můžete vytvořit nový callback s jinou složkou pro každý dokument ve hromadném zpracování. + +### Funguje to s **velkými dokumenty** (stovky obrázků)? + +Ano. Callback streamuje obrázek přímo na disk, čímž udržuje nízkou spotřebu paměti. Jen se ujistěte, že cílový disk má dostatek místa a že nepřekračujete limity počtu otevřených souborových deskriptorů OS. + +## Kompletní funkční příklad + +Níže je kompletní program připravený ke zkopírování a vložení. Nahraďte `YOUR_DIRECTORY` absolutní nebo relativní cestou, která vyhovuje vašemu prostředí. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Spusťte program (`dotnet run`) a uvidíte nově vytvořený `Doc.md` vedle podsložky `images`, která obsahuje + +{{< /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-officemath/_index.md b/words/czech/net/programming-with-officemath/_index.md index 48cadedee0..023e99b461 100644 --- a/words/czech/net/programming-with-officemath/_index.md +++ b/words/czech/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Výukové programy Aspose.Words pro .NET o zpracování textu v OfficeMath vás | Název | Popis | | --- | --- | | [Matematické rovnice](./math-equations/) | Naučte se, jak konfigurovat matematické rovnice v dokumentech Wordu pomocí Aspose.Words pro .NET. Podrobný návod s příklady, nejčastějšími dotazy a dalšími informacemi. | +| [Uložit docx jako txt – Exportovat Word Math do LaTeXu v C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Naučte se, jak převést rovnice OfficeMath z dokumentu DOCX do formátu LaTeX a uložit jej jako TXT pomocí C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/czech/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..d8fd97094e --- /dev/null +++ b/words/czech/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-04-07 +description: Rychle uložte docx jako txt a naučte se, jak exportovat matematiku do + LaTeXu. Převádějte Word na txt, pracujte s Office Math a zachovejte rovnice nedotčené. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: cs +og_description: Uložte docx jako txt s exportem LaTeXových rovnic. Krok za krokem + C# tutoriál, který ukazuje, jak převést Word na txt a zachovat rovnice. +og_title: Uložte docx jako txt – průvodce C# pro export matematických rovnic z Wordu +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Uložit docx jako txt – Exportovat Word Math do LaTeXu v C# +url: /cs/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Uložte docx jako txt – Exportujte Word Math do LaTeXu v C# + +Už jste někdy potřebovali **save docx as txt**, ale obávali jste se, že se vaše rovnice promění v nepořádek symbolů? Nejste v tom sami. Mnoho vývojářů narazí na tento problém, když se snaží **convert word to txt** pro následné zpracování, zejména pokud zdroj obsahuje objekty Office Math. + +Dobrá zpráva? S několika řádky C# a správnými možnostmi ukládání můžete zachovat každou rovnici jako čistý LaTeX, což z plain‑textového souboru učiní čitelný pro člověka i připravený pro vědecké pipeline. V tomto tutoriálu projdeme celý proces, odpovíme na otázku *how to export math* z Word souboru a ukážeme vám *how to convert docx* bez ztráty věrnosti rovnic. + +## Co se naučíte + +- Načtěte soubor `.docx` pomocí Aspose.Words (nebo jakékoli kompatibilní knihovny). +- Nakonfigurujte `TxtSaveOptions`, aby Office Math byl exportován jako LaTeX. +- Uložte dokument jako soubor `.txt`, který zachová rovnice nedotčené. +- Tipy pro zpracování okrajových případů, jako jsou skryté rovnice nebo velké dokumenty. +- Kompletní, spustitelný ukázkový kód, který můžete okamžitě zkopírovat a vložit. + +Žádné složité nástroje pro sestavení, jen .NET projekt a balíček Aspose.Words NuGet. Pojďme začít. + +--- + +## Požadavky + +| Požadavek | Proč je důležitý | +|-------------|----------------| +| .NET 6.0 nebo novější | Moderní jazykové funkce a lepší výkon. | +| Aspose.Words pro .NET (NuGet) | Poskytuje `Document`, `TxtSaveOptions` a `OfficeMathExportMode`. | +| Word soubor (`.docx`) obsahující rovnice | Pro zobrazení exportu LaTeX v praxi. | +| Základní znalost C# | Budete sledovat kód řádek po řádku. | + +Pokud jste ještě nepřidali Aspose.Words, spusťte: + +```bash +dotnet add package Aspose.Words +``` + +To je vše—žádná další konfigurace není potřeba. + +--- + +## Krok 1: Načtěte soubor DOCX + +Nejprve musíme načíst zdrojový dokument do paměti. Představte si to jako otevření knihy, než začnete číst. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Tip:** Používejte během testování absolutní cestu, abyste se vyhnuli překvapením typu „soubor nenalezen“. Ve výrobě pravděpodobně získáte cestu z konfiguračního souboru nebo od uživatelského nahrání. + +--- + +## Krok 2: Nakonfigurujte TXT možnosti ukládání pro export matematiky + +Ve výchozím nastavení `TxtSaveOptions` vypisuje prostý text a odstraňuje Office Math. To nechceme. Nastavením `OfficeMathExportMode` na `LaTeX` řeknete knihovně, aby každou rovnici přeložila do její LaTeXové reprezentace. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Proč LaTeX? + +LaTeX je lingua franca vědeckého publikování. Když později vložíte `.txt` do markdown procesoru, Jupyter notebooku nebo jakéhokoli nástroje podporujícího LaTeX, rovnice se vykreslí perfektně. Pokud dáváte přednost prostým Unicode symbolům, můžete přepnout na `OfficeMathExportMode.Unicode`, ale LaTeX vám poskytuje největší kontrolu. + +--- + +## Krok 3: Uložte dokument jako plain‑textový soubor + +Nyní se děje magie. Metoda `Save` zapíše dokument na disk s použitím právě definovaných možností. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Po spuštění tohoto řádku bude `Math.txt` obsahovat: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Všimněte si, že rovnice se objevuje uvnitř `\[` a `\]` — přesně to, co LaTeX očekává. + +--- + +## Jak exportovat matematiku z komplexních dokumentů + +### Zpracování skrytých nebo vložených rovnic + +Některé Word soubory ukládají rovnice do skrytých textových rámců. Aspose.Words je zachází stejně jako s viditelnými rovnicemi, takže export do LaTeXu funguje automaticky. Pokud však zaznamenáte chybějící rovnice, zkontrolujte, že objekt `Document` není nastaven na ignorování skrytého obsahu: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Velké dokumenty a využití paměti + +Uložení 500‑stránkové diplomové práce může spotřebovat hodně RAM. Pro udržení nízké paměťové náročnosti můžete streamovat výstup: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming zapisuje úseky na disk, jak jsou generovány, čímž zabraňuje tomu, aby celý soubor byl najednou v paměti. + +--- + +## Časté úskalí a jak se jim vyhnout + +| Úskalí | Příznak | Oprava | +|---------|---------|-----| +| Chybějící LaTeX závorky | Rovnice se zobrazují jako surový kód (`E = mc^{2}`) | Zajistěte `OfficeMathExportMode = LaTeX`. | +| Prázdný výstupní soubor | Špatná cesta nebo nedostatečná oprávnění | Ověřte, že výstupní adresář existuje a je zapisovatelný. | +| Poškozené znaky | Soubor kódovaný v UTF‑8 bez BOM na systému očekávajícím ANSI | Přidejte `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Rovnice zmizí po konverzi | Dokument načten s `LoadOptions`, které vylučují matematiku | Použijte výchozí `LoadOptions` nebo nastavte `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Kompletní funkční příklad + +Níže je kompletní program, který můžete zkompilovat a spustit. Obsahuje ošetření chyb, validaci cesty a malý výstup do konzole, abyste věděli, že vše proběhlo úspěšně. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Očekávaný výstup** (úryvek z `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Nyní můžete tento soubor vložit do libovolného nástroje podporujícího LaTeX a rovnice se vykreslí krásně. + +--- + +## Jak převést DOCX na TXT bez ztráty formátování + +Pokud potřebujete jen prostý text a nezáleží vám na matematice, jednoduše vynechte řádek `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Ale pamatujte, **how to export math** je rozdílem pro vědecké workflowy. Zachování LaTeXu nedotčeného je to, co dělá konverzi skutečně užitečnou. + +--- + +## Další kroky a související témata + +- **Dávková konverze:** Zabalte kód do smyčky `foreach`, abyste zpracovali celý adresář souborů `.docx`. +- **Generování markdownu:** Přidejte `#` nadpisy nebo `*` odrážky do textu, abyste vytvořili připravený markdown k publikaci. +- **Export do PDF:** Použijte `PdfSaveOptions` k vytvoření PDF verze vedle txt. +- **Pokročilé ladění LaTeXu:** Po‑zpracujte výstup pomocí regexu a nahraďte `\[`/`\]` za `$...$` pro inline rovnice. + +Každý z nich staví na stejném základu — načtení `Document` a výběr správných `SaveOptions`. Klidně experimentujte; API je dostatečně flexibilní pro většinu scénářů automatizace dokumentů. + +--- + +## Závěr + +Probrali jsme vše, co potřebujete k **save docx as txt**, přičemž zachováte každou rovnici jako LaTeX. Od načtení zdrojového souboru, konfigurace `TxtSaveOptions` pro **how to export math**, až po zápis finálního plain‑textového souboru, celý workflow se vejde do několika stručných C# příkazů. + +Nyní můžete automatizovat konverzi Word reportů, akademických prací nebo jakéhokoli dokumentu, který kombinuje text a matematiku, a vložit výsledný `.txt` do následných nástrojů bez ztráty vědeckých detailů. + +Vyzkoušejte to, upravte možnosti podle svého případu a dejte nám vědět v komentářích, jak to fungovalo. Šťastné programování! + +![Diagram ukazující konverzní pipeline od DOCX → C# zpracování → TXT s LaTeX matematikou](https://example.com/images/save-docx-as-txt.png "pipeline pro uložení docx jako txt") + +{{< /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-pdfsaveoptions/_index.md b/words/czech/net/programming-with-pdfsaveoptions/_index.md index d786a68f8c..806596b913 100644 --- a/words/czech/net/programming-with-pdfsaveoptions/_index.md +++ b/words/czech/net/programming-with-pdfsaveoptions/_index.md @@ -45,6 +45,7 @@ Ať už chcete převést dokumenty Wordu do PDF pro online distribuci, archivaci | [Aktualizovat poslední vytištěnou vlastnost v dokumentu PDF](./update-last-printed-property/) | Naučte se, jak aktualizovat poslední vytištěnou vlastnost v dokumentu PDF pomocí Aspose.Words pro .NET s naším podrobným návodem. | | [Renderování 3D DML 3DEfektů v PDF dokumentu](./dml-3deffects-rendering/) | Naučte se, jak vykreslit úžasné 3D DML efekty v PDF dokumentech pomocí Aspose.Words pro .NET s tímto komplexním podrobným návodem. | | [Interpolace obrázků v dokumentu PDF](./interpolate-images/) | Naučte se, jak interpolovat obrázky v PDF dokumentu pomocí Aspose.Words pro .NET s naším podrobným návodem. Snadno vylepšete kvalitu obrázků ve vašem PDF. | +| [Vytvoření přístupného PDF z Wordu – krok za krokem](./create-accessible-pdf-from-word-step-by-step-guide/) | Naučte se, jak pomocí Aspose.Words pro .NET vytvořit přístupný PDF soubor z dokumentu Word s podrobným krok za krokem návodem. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/czech/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/czech/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..f8e5b7cccb --- /dev/null +++ b/words/czech/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Vytvořte přístupný PDF z DOCX souboru v C#. Naučte se, jak převést Word + na PDF, uložit docx jako PDF a zajistit soulad s PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: cs +og_description: Vytvořte přístupný PDF z Wordu v C#. Tento průvodce ukazuje, jak převést + Word na PDF, uložit docx jako PDF a splnit standardy PDF/UA. +og_title: Vytvořte přístupný PDF – kompletní C# tutoriál +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Vytvořte přístupný PDF z Wordu – průvodce krok za krokem +url: /cs/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Vytvoření přístupného PDF z Wordu – Kompletní programovací tutoriál + +Už jste někdy potřebovali **vytvořit přístupné PDF** z dokumentu Word, ale nebyli jste si jisti, jaká nastavení upravit? Nejste v tom sami. V mnoha podnicích je dodržování PDF/UA (Universal Accessibility) přísnou požadavkem a běžné tlačítko „převést na PDF“ prostě nestačí. + +V tomto průvodci projdeme stručné, end‑to‑end řešení, které **převádí Word do PDF**, **ukládá docx jako PDF** a zaručuje, že výstup splňuje standardy přístupnosti. Žádné vágní odkazy – jen kód, který můžete zkopírovat a vložit, plus „proč“ za každým řádkem. + +> **TL;DR:** Načtěte `.docx`, nastavte `PdfSaveOptions.Compliance` na `PdfUa1` (nebo `PdfUa2`) a zavolejte `Document.Save`. To je vše, co potřebujete k **vytvoření přístupného PDF** s Aspose.Words pro .NET. + +--- + +## Co se naučíte + +- Jak **převést Word do PDF** při zachování nadpisů, alt‑textu a pořadí čtení. +- Rozdíl mezi `PdfUa1` a `PdfUa2` a kdy který zvolit. +- Jak **uložit docx jako PDF** pomocí jen několika řádků C#. +- Běžné úskalí (chybějící fonty, nepodporované značky) a rychlé opravy. +- Připravený ukázkový kód, který můžete vložit do libovolného .NET projektu. + +### Předpoklady + +- .NET 6 nebo novější (kód také funguje na .NET Framework 4.7+). +- Aspose.Words pro .NET nainstalovaný přes NuGet (`Install-Package Aspose.Words`). +- Soubor Word (`input.docx`), který již obsahuje správnou strukturu (styly, alt‑text pro obrázky). + +Pokud jste ještě nepřidali Aspose.Words, spusťte níže uvedený příkaz v Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +To je jediná externí závislost, kterou potřebujete. + +--- + +## Vytvoření přístupného PDF – Proč je přístupnost důležitá + +Když je PDF označeno jako **PDF/UA** (Universal Accessibility), čtečky obrazovky mohou procházet nadpisy, tabulky a formulářová pole stejně jako v původním souboru Word. Není to jen hezké doplnění; mnoho vlád a korporací považuje dodržování PDF/UA za právní požadavek. + +Nastavení vlastnosti `Compliance` na `PdfSaveOptions` říká knihovně, aby vložila potřebné značky, nastavila správný jazyk dokumentu a přidala logické pořadí čtení. Vynechání tohoto kroku vytvoří „pouze vizuální“ PDF, které neprojde audity přístupnosti. + +--- + +## Převod Wordu do PDF pomocí Aspose.Words + +Níže je nejjednodušší způsob, jak **převést Word do PDF** a zároveň zachovat přístupnost dokumentu. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Co se zde děje?** + +- `Document` načte soubor Word a zachová všechny styly a strukturu. +- `PdfSaveOptions.Compliance` říká Aspose.Words, aby označil výstup jako PDF/UA. +- `doc.Save` zapíše PDF na disk a automaticky vloží značky. + +> **Tip:** Pokud váš zdrojový soubor Word používá vlastní styly nadpisů, ujistěte se, že jsou namapovány na vestavěné úrovně nadpisů (`Heading1`, `Heading2`, …). To zajistí, že vygenerované PDF získá správné značky nadpisů. + +--- + +## Uložení Docx jako PDF – Konfigurace souladu s PDF/UA + +Pokud už znáte třídu `PdfSaveOptions`, možná se ptáte, zda existují další přepínače, které ovlivňují přístupnost. Několik užitečných vlastností: + +| Property | Efekt na přístupnost | Typická hodnota | +|----------|----------------------|-----------------| +| `Compliance` | Zapíná/vypíná PDF/UA značkování | `PdfCompliance.PdfUa1` nebo `PdfUa2` | +| `EmbedFullFonts` | Zajišťuje, že čtečky zobrazí zamýšlenou typografii | `true` (výchozí) | +| `OptimizeOutput` | Snižuje velikost souboru bez odebrání značek | `true` | + +Můžete rozšířit předchozí úryvek takto: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Přepnutím na `PdfUa2` získáte podporu novějších funkcí PDF/UA, jako je značkování *artifact* pro dekorativní obrázky. Pokud je nepotřebujete, zůstaňte u `PdfUa1` pro maximální kompatibilitu se staršími asistenčními technologiemi. + +--- + +## Export Docx do PDF – Kompletní funkční příklad + +Níže je samostatná konzolová aplikace, která demonstruje celý proces, od načtení souboru po ověření výstupu. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Očekávaný výsledek + +- Soubor pojmenovaný **Compliant.pdf** se objeví ve stejné složce jako spustitelný soubor. +- Otevření PDF v Adobe Acrobat Pro → *Tools → Accessibility → Full Check* by mělo hlásit **Žádné problémy s přístupností** (předpokládá se, že zdrojový soubor Word byl dobře strukturovaný). +- Na kartě *Properties → Advanced* PDF se zobrazí **PDF/UA** v sekci „PDF/A and PDF/UA compliance“. + +--- + +## Běžné okrajové případy a jak je řešit + +| Situation | Proč je to důležité | Rychlé řešení | +|-----------|----------------------|---------------| +| **Missing fonts** | PDF může přejít na výchozí font, což naruší vizuální rozvržení. | Nastavte `EmbedFullFonts = true` (již výchozí) a ujistěte se, že soubory fontů jsou přístupné na stroji, kde se sestavuje. | +| **Images without alt‑text** | Čtečky obrazovky přečtou „obrázek“ bez popisu. | Přidejte `Alt Text` ve Wordu (`Right‑click → Format Picture → Alt Text`) před konverzí. | +| **Custom styles not recognized as headings** | PDF/UA potřebuje správné značky nadpisů. | Namapujte vlastní styly na vestavěné nadpisy pomocí `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Převod 500‑stránkového souboru může zvýšit využití RAM. | Použijte `doc.Save(outputPath, options)` s `options.SaveFormat = SaveFormat.Pdf` a zvažte zpracování po částech, pokud narazíte na `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | Někdy chcete jen rychlé vizuální PDF. | Vynechte nastavení `Compliance` nebo jej nastavte na `PdfCompliance.Pdf15`. | + +--- + +## Příklad obrázku (s alt textem) + +![Snímek obrazovky ukazující strom značek PDF/UA v Adobe Acrobat – ukazuje, že jsme úspěšně vytvořili přístupné PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Alt‑text výše posiluje hlavní klíčové slovo a pomáhá jak uživatelům, tak AI modelům pochopit kontext obrázku.* + +--- + +## Často kladené otázky + +**Q: Funguje to s .NET Core?** +A: Rozhodně. Aspose.Words je multiplatformní; stačí odkazovat na NuGet balíček ve vašem projektu .NET 6+. + +**Q: Můžu hromadně zpracovávat více souborů DOCX?** +A: Ano. Zabalte logiku načítání a ukládání do smyčky `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Pamatujte, že pro výkon je vhodné znovu použít jedinou instanci `PdfSaveOptions`. + +**Q: Co když potřebuji přidat vlastní PDF/UA značku, kterou Aspose automaticky nevytváří?** +A: Použijte nízkoúrovňové PDF API (`PdfSaveOptions.CustomProperties`) nebo po‑zpracujte PDF pomocí knihovny jako iText 7, která umožňuje ruční vkládání značek. + +--- + +## Závěr + +You + +{{< /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 906092d16c..9f3f48de5e 100644 --- a/words/czech/net/working-with-fonts/_index.md +++ b/words/czech/net/working-with-fonts/_index.md @@ -38,14 +38,15 @@ Ať už chcete formátovat text pomocí různých fontů, nastavit pravidla pro | [Nastavení písem Složky Více složek](./set-fonts-folders-multiple-folders/) | Naučte se, jak nastavit více složek s písmy v dokumentech Word pomocí Aspose.Words pro .NET. Tento podrobný návod zajistí, že vaše dokumenty budou používat přesně ta písma, která potřebujete. | | [Nastavení systémových a vlastních složek písem](./set-fonts-folders-system-and-custom-folder/) Naučte se, jak nastavit systémové a vlastní složky s písmy v dokumentech Word pomocí Aspose.Words pro .NET a jak zajistit, aby se vaše dokumenty zobrazovaly správně v různých prostředích. | | [Nastavení složek s písmy s prioritou](./set-fonts-folders-with-priority/) | Naučte se, jak nastavit prioritu složek písem v dokumentech Word pomocí Aspose.Words pro .NET. Náš průvodce zajistí, že se vaše dokumenty pokaždé vykreslí perfektně. | -| [Nastavení složky s fonty True Type](./set-true-type-fonts-folder/) | Naučte se, jak nastavit složku s písmy True Type v dokumentech Wordu pomocí Aspose.Words pro .NET. Postupujte podle našeho podrobného návodu krok za krokem, abyste zajistili konzistentní správu písem. | +| [Nastavení složky s fonty True Type](./set-true-type-fonts-folder/) | Naučte se, jak nastavit složku s písy True Type v dokumentech Wordu pomocí Aspose.Words pro .NET. Postupujte podle našeho podrobného návodu krok za krokem, abyste zajistili konzistentní správu písem. | | [Zadání výchozího písma při vykreslování](./specify-default-font-when-rendering/) | Naučte se, jak zadat výchozí písmo při vykreslování dokumentů Word pomocí Aspose.Words pro .NET. Zajistěte konzistentní vzhled dokumentu napříč platformami. | -| [Nastavení písma s možnostmi načtení](./font-settings-with-load-options/) Naučte se, jak spravovat nastavení písma pomocí možností načítání v Aspose.Words pro .NET. Podrobný návod pro vývojáře, jak zajistit konzistentní vzhled písma v dokumentech Wordu. +| [Nastavení písma s možnostmi načtení](./font-settings-with-load-options/) Naučte se, jak spravovat nastavení písma pomocí možností načítání v Aspose.Words pro .NET. Podrobný návod pro vývojáře, jak zajistit konzistentní vzhled písma v dokumentech Wordu. | | [Nastavit složku písem](./set-fonts-folder/) | Naučte se, jak nastavit vlastní složku s fonty v Aspose.Words pro .NET, abyste zajistili správné vykreslování dokumentů Wordu bez chybějících fontů. | | [Výchozí instance nastavení písma](./font-settings-default-instance/) | V tomto tutoriálu se naučíte, jak nakonfigurovat výchozí nastavení písma v dokumentu Word pomocí Aspose.Words pro .NET. | | [Zobrazit seznam dostupných písem](./get-list-of-available-fonts/) | Zjistěte, jak získat seznam dostupných písem pomocí Aspose.Words pro .NET v tomto podrobném návodu krok za krokem. Zlepšete si své dovednosti v oblasti správy písem. | +| [Jak detekovat písma v Aspose.Words – Kompletní průvodce](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Naučte se, jak v Aspose.Words detekovat použité písma v dokumentu a získat podrobné informace o nich. | | [Dostávat oznámení o písmech](./receive-notifications-of-fonts/) | Zjistěte, jak dostávat upozornění na chybějící nebo nahrazená písma při používání Aspose.Words pro .NET. | -| [Přijímat varovné oznámení](./receive-warning-notification/) Naučte se, jak přijímat varovné upozornění při používání Aspose.Words pro .NET a jak řešit případné problémy nebo varování v dokumentech. | +| [Přijímat varovné oznámení](./receive-warning-notification/) Naučte se, jak získat varovné upozornění při používání Aspose.Words pro .NET a jak řešit případné problémy nebo varování v dokumentech. | | [Příklad zdroje písma Steam](./resource-steam-font-source-example/) | Naučte se, jak používat zdroj písem Resource Stream k načtení vlastních písem do Aspose.Words pro .NET. | | [Získat substituci bez přípon](./get-substitution-without-suffixes/) | V tomto tutoriálu se naučíte, jak získat přepsání bez přípon v dokumentu Word pomocí Aspose.Words pro .NET. | diff --git a/words/czech/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/czech/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..dd8e7a64ab --- /dev/null +++ b/words/czech/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-04-07 +description: Naučte se, jak detekovat písma a jak zachytit varování při zpracování + chybějících písem v C# pomocí Aspose.Words. Kód krok za krokem je zahrnut. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: cs +og_description: Jak detekovat písma v Aspose.Words? Postupujte podle tohoto tutoriálu, + abyste zachytili varování a snadno řešili chybějící písma. +og_title: Jak detekovat písma v Aspose.Words – kompletní průvodce +tags: +- Aspose.Words +- C# +- Font handling +title: Jak detekovat písma v Aspose.Words – kompletní průvodce +url: /cs/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak detekovat písma v Aspose.Words – Kompletní průvodce + +Už jste se někdy zamýšleli **jak detekovat písma**, která ve Word dokumentu chybí, ještě před tím, než jej nasadíte do produkce? Nejste v tom sami. V mnoha podnikových scénářích může chybějící písmo rozbít pipeline pro konverzi do PDF nebo způsobit rozložení, které vypadá neprofesionálně. Dobrou zprávou je, že Aspose.Words poskytuje vestavěný způsob, jak odhalit tyto chybějící typy písma a zobrazit jasná varování. + +V tomto tutoriálu si projdeme **jak detekovat písma**, **jak zachytit varování** a nejlepší postupy **jak zacházet s chybějícími písmy**, aby vaše aplikace zůstala robustní. Žádné externí nástroje, žádné hádání — pouze čistý C# kód, který můžete hned vložit do svého projektu. + +> **Rychlý náhled:** Na konci budete mít znovupoužitelný `FontSubstitutionWarningCollector`, který sbírá každou zprávu o substituci písma během načítání dokumentu, a budete vědět, jak reagovat, když písmo nelze najít. + +--- + +## Co se naučíte + +- Jak nakonfigurovat `LoadOptions`, aby naslouchala varováním o substituci písma. +- Jak zachytit tato varování v vlastní třídě sběrače. +- Jak zpracovat nasbíraná varování a rozhodnout, zda ukončit, zalogovat nebo nahradit písma. +- Jak řešit okrajové případy u dokumentů, které odkazují na vzdálená nebo vložená písma. + +**Požadavky:** .NET 6+ (nebo .NET Framework 4.6+), Aspose.Words pro .NET (nejnovější verze) a základní znalost C#. Pokud jste s Aspose.Words nikdy nepracovali, nebojte se — tento průvodce předpokládá jen pár minut nastavení. + +--- + +## Jak detekovat písma pomocí Aspose.Words LoadOptions + +Prvním krokem k detekci chybějících písem je říci Aspose.Words, aby je hlásila. To se provádí pomocí vlastnosti `LoadOptions.WarningCallback`, která přijímá libovolnou třídu implementující `IWarningCallback`. Níže vytvoříme malý sběrač, který ukládá každé varování pro pozdější kontrolu. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Proč je to důležité:** Bez callbacku pro varování Aspose.Words tiše nahrazuje chybějící písma výchozím, a nikdy se nedozvíte, že problém existuje. Zachycením `WarningType.FontSubstitution` získáte úplnou přehlednost — právě data, která potřebujete k **detekci písem**, která nejsou na hostitelském stroji dostupná. + +Nyní připojíme sběrač k `LoadOptions` a načteme dokument: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Tip:** Pokud pracujete s mnoha dokumenty najednou, znovu použijte stejnou instanci `FontSubstitutionWarningCollector`, ale nezapomeňte mezi načteními zavolat `Clear()`, aby nedošlo ke smíchání varování z různých souborů. + +--- + +## Zachycení varování během načítání dokumentu + +Po načtení dokumentu už sběrač obsahuje všechna varování související s písmy. Další logická otázka je: *Jak zachytit varování* tak, aby se dala snadno zalogovat nebo zobrazit? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typický výstup vypadá takto: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Co vám to říká:** Každý řádek odhaluje původní název písma a náhradní, které Aspose.Words zvolilo. S těmito informacemi můžete rozhodnout, zda je náhrada přijatelna, nebo zda musíte chybějící písmo vložit ručně. + +--- + +## Elegantní zacházení s chybějícími písmy + +Detekce a zachycení varování je jen polovina boje. Skutečná hodnota přichází, když **zacházíte s chybějícími písmy** připraveným způsobem pro produkci. Níže jsou tři běžné strategie: + +1. **Logovat a pokračovat** – Vhodné pro dávkové zpracování, kde stačí auditní stopa. +2. **Ukončit při kritických písmenech** – Vyhodit výjimku, pokud chybí konkrétní písmo (např. firemní typ písma). +3. **Vložit písmo za běhu** – Načíst chybějící písmo ze známé složky a zaregistrovat jej v Aspose.Words před opětovným načtením dokumentu. + +### Příklad: Ukončit při kritickém písmu + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Příklad: Automaticky vložit chybějící písma + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Proč tyto vzory pomáhají:** Tím, že explicitně rozhodnete, co dělat, když písmo chybí, eliminujete tiché náhrady, které by mohly ohrozit značku nebo čitelnost. To je podstata **zacházení s chybějícími písmy** kontrolovaným způsobem. + +--- + +## Kompletní funkční příklad + +Spojením všeho dohromady získáte jeden připravený program, který demonstruje **jak detekovat písma**, **jak zachytit varování** a jednoduchou politiku **zacházení s chybějícími písmy** prostřednictvím jejich logování. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Očekávaný výsledek:** Když spustíte program proti dokumentu, který odkazuje na písmo, jež na stroji není, konzole vypíše každé varování o substituci. Pokud některé varování zahrnuje písmo ze sady `critical`, program se předčasně ukončí, čímž zabrání vytvoření poškozeného PDF. + +--- + +## Často kladené otázky (FAQ) + +| Otázka | Odpověď | +|----------|--------| +| *Potřebuji licenci pro Aspose.Words, abych mohl použít tento kód?* | Ano, platná licence Aspose.Words odstraní evaluační vodoznaky a odemkne plnou funkcionalitu. | +| *Dokáže tento přístup detekovat vložená písma?* | Vložená písma jsou již součástí souboru, takže Aspose.Words nevyvolá varování o substituci. Pro výčet vložených písem můžete použít `Document.FontInfos`. | +| *Co když chybějící písmo existuje jako systémové na Windows, ale ne na Linuxu?* | Na Linuxu se spustí stejné varování, protože písmo není nainstalováno. Použijte strategii „zacházení s chybějícími písmy“ a přiložte potřebné soubory `.ttf` k aplikaci. | +| *Je sběrač varování thread...* | | + +{{< /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 efcb8258a3..1f0ba63299 100644 --- a/words/dutch/net/basic-conversions/_index.md +++ b/words/dutch/net/basic-conversions/_index.md @@ -25,6 +25,7 @@ Basisconversies begeleidt u door basisdocumentconversies met behulp van de Aspos | [Converteer Docx naar Rtf](./docx-to-rtf/) | Leer hoe u DOCX naar RTF converteert met Aspose.Words voor .NET met onze stapsgewijze handleiding. Eenvoudige conversie voor naadloze documentverwerking. | | [Word-bestand naar PDF converteren](./docx-to-pdf/) Leer hoe u eenvoudig Word-bestanden naar PDF kunt converteren met Aspose.Words voor .NET met onze gids. Perfect voor ontwikkelaars die op zoek zijn naar snelle en betrouwbare documentconversie. | | [Word naar PDF converteren in C# met Aspose.Words – Gids](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Leer hoe u Word-documenten naar PDF converteert in C# met Aspose.Words. Stapsgewijze handleiding met voorbeeldcode. | +| [DOCX naar PDF converteren in C# – Complete programmeergids](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Leer stap voor stap hoe u DOCX-bestanden naar PDF converteert met Aspose.Words in C#. | | [Converteer Docx naar Byte](./docx-to-byte/) | Leer hoe u Docx naar een byte-array in .NET converteert met Aspose.Words voor efficiënte documentverwerking. Inclusief stapsgewijze handleiding. | | [Converteer Docx naar Epub](./docx-to-epub/) | Converteer DOCX eenvoudig naar EPUB met Aspose.Words voor .NET. Volg onze tutorial voor naadloze integratie in uw .NET-applicaties. | | [Converteer Docx naar Mhtml en verstuur e-mail](./docx-to-mhtml-and-sending-email/) | Leer hoe u DOCX naar MHTML converteert en e-mails verstuurt met Aspose.Words voor .NET in deze stapsgewijze handleiding. Verhoog uw productiviteit met eenvoudige automatisering. | diff --git a/words/dutch/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/dutch/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..ebe40f8307 --- /dev/null +++ b/words/dutch/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: Converteer DOCX naar PDF in C# snel. Leer hoe je Word als PDF opslaat, + een docx‑document laadt in C#, en binnen enkele minuten PDF/UA‑2‑conformiteit waarborgt. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: nl +og_description: Converteer DOCX naar PDF in C# direct. Deze gids laat zien hoe je + Word opslaat als PDF, een docx‑document laadt in C# en voldoet aan de PDF/UA‑2‑standaarden. +og_title: DOCX naar PDF converteren in C# – Stapsgewijze gids +tags: +- Aspose.Words +- C# +- PDF Generation +title: DOCX naar PDF converteren in C# – Complete programmeergids +url: /nl/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# DOCX naar PDF converteren in C# – Complete programmeergids + +Heb je ooit **DOCX naar PDF moeten converteren** in een C#‑applicatie, maar wist je niet waar te beginnen? Je bent niet de enige. Veel ontwikkelaars komen vast te zitten wanneer ze ontdekken dat een eenvoudige “opslaan als PDF”‑knop in Word niet naar code vertaald kan worden. Het goede nieuws? Met een paar regels Aspose.Words (of een vergelijkbare bibliotheek) kun je het hele proces automatiseren, zwevende vormen inline houden en zelfs PDF/UA‑2‑conformiteit behalen zonder moeite. + +In deze tutorial leer je hoe je **Word als PDF opslaat**, **docx‑document laadt in C#**, en de exportopties aanpast zodat het resulterende bestand klaar is voor toegankelijkheidscontroles. Aan het einde heb je een zelfstandige, uitvoerbare applicatie die elk `.docx`‑bestand omzet in een nette, standaarden‑conforme PDF. + +> **Waarom zou je dit willen?** +> Het converteren van DOCX naar PDF is een veelvoorkomende eis voor factureringssystemen, rapportgeneratoren en documentarchiverings‑pipelines. Automatisering elimineert handmatige stappen, vermindert menselijke fouten en zorgt ervoor dat elke output er exact hetzelfde uitziet op alle platformen. + +--- + +## Wat je nodig hebt + +- **.NET 6.0** of later (de code werkt ook op .NET Framework 4.6+) +- **Aspose.Words for .NET** (gratis proefversie of gelicentieerde versie) – je kunt het installeren via NuGet: `dotnet add package Aspose.Words` +- Een voorbeeld‑`input.docx` in een map die je beheert (we noemen deze `YOUR_DIRECTORY`) +- Visual Studio, VS Code, of een andere C#‑editor naar keuze + +Dat is alles—geen extra services, geen REST‑calls. Alleen pure C#. + +--- + +## Stap 1: Laad het DOCX‑document in C# + +Voordat je **docx naar pdf kunt converteren**, moet je het Word‑bestand in het geheugen laden. De `Document`‑klasse doet dat voor je. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Waarom dit belangrijk is:** +Het laden van het bestand geeft je een volledig geparseerd objectmodel—paragrafen, tabellen, zwevende vormen, alles. Het is de eerste stap in elke **load docx document c#**‑workflow, en het valideert ook dat het bestand niet corrupt is voordat je tijd verspilt aan conversie. + +> **Pro tip:** Als je te maken hebt met door gebruikers geüploade bestanden, wikkel je de `new Document()`‑aanroep in een try/catch‑blok om misvormde DOCX‑bestanden netjes af te handelen. + +--- + +## Stap 2: Configureer PDF‑opslaan‑opties (Conformiteit & Vormafhandeling) + +Je vraagt je misschien af: “Moet ik iets aanpassen, of kan ik gewoon `Save` aanroepen?” Het korte antwoord: je kunt, maar de juiste opties instellen maakt de PDF toegankelijk en visueel getrouw. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Waarom dit belangrijk is:** +- `ExportFloatingShapesAsInlineTag = true` voorkomt dat zwevende objecten verloren gaan of verkeerd uitgelijnd worden wanneer de PDF op verschillende apparaten wordt bekeken. +- `Compliance = PdfCompliance.PdfUa2` zorgt ervoor dat de output voldoet aan de PDF/UA‑2‑norm, wat cruciaal is voor schermlezer‑compatibiliteit en wettelijke archivering. + +Als je geen toegankelijkheid nodig hebt, kun je de `Compliance`‑regel weglaten, maar het behouden voegt vrijwel geen overhead toe en maakt je oplossing toekomstbestendig. + +--- + +## Stap 3: Sla het document op als PDF – De kern **Convert DOCX to PDF**‑actie + +Nu het document is geladen en de opties zijn ingesteld, is de daadwerkelijke conversie één enkele methode‑aanroep. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Wat je zult zien:** +Het uitvoeren van het programma produceert `output.pdf` in dezelfde map. Open het met een willekeurige PDF‑viewer en je merkt dat: + +- Alle tekst, tabellen en afbeeldingen verschijnen exact zoals in de originele DOCX. +- Zwevende vormen blijven inline behouden, waardoor de lay‑out behouden blijft. +- Het bestand slaagt voor basis PDF/UA‑2‑validatietools (bijv. Adobe Acrobat Preflight). + +--- + +## Volledig werkend voorbeeld – Van boven naar beneden + +Hieronder staat een complete, kant‑klaar console‑app die de volledige stroom demonstreert. Kopieer‑plak het in een nieuw C#‑project en druk op **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Verwachte uitvoer in de console:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +En een nette `output.pdf` staat naast je bronbestand. + +--- + +## Veelgestelde vragen & randgevallen + +| Vraag | Antwoord | +|----------|--------| +| **Kan ik een DOCX die in een `MemoryStream` staat converteren?** | Absoluut. Gebruik `new Document(stream)` in plaats van een bestands‑pad. | +| **Wat als de DOCX macro’s bevat?** | Aspose.Words negeert VBA‑macro’s standaard; ze verschijnen niet in de PDF. | +| **Heb ik een licentie nodig voor productie?** | De gratis proefversie voegt een watermerk toe na een bepaald aantal pagina’s. Voor commercieel gebruik moet je een licentie aanschaffen om dit te verwijderen. | +| **Hoe wijzig ik de PDF‑paginasize?** | Stel `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` in vóór het opslaan. | +| **Is er een manier om een aangepast lettertype in te sluiten?** | Ja—voeg `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` toe. | + +--- + +## Pro‑tips voor een soepele **Save Word as PDF**‑ervaring + +- **Batchverwerking:** Plaats de conversielogica in een lus en geef een lijst met DOCX‑paden door. +- **Prestaties:** Hergebruik één `PdfSaveOptions`‑instantie bij het converteren van veel bestanden; dit vermindert GC‑druk. +- **Logging:** Log de grootte van de gegenereerde PDF (`new FileInfo(outputPath).Length`) om compressieresultaten te monitoren. +- **Foutafhandeling:** Onderscheid tussen `FileNotFoundException` (ontbrekende DOCX) en `UnauthorizedAccessException` (problemen met schrijfrechten). + +--- + +## Conclusie + +Je beschikt nu over een solide, productieklare patroon om **DOCX naar PDF te converteren** in C#. Door het DOCX te laden, PDF‑opslaan‑opties te configureren en `Save` aan te roepen, kun je **Word als PDF opslaan**, lay‑outdetails behouden en aan toegankelijkheidsnormen voldoen—alles in minder dan een tiental regels code. + +Klaar voor de volgende uitdaging? Probeer `PdfSaveOptions` te vervangen door `ImageSaveOptions` om **Word als PNG op te slaan**, of verken de `HtmlSaveOptions`‑klasse om web‑klare output te genereren. In beide gevallen blijven de **load docx document c#**‑fundamentals gelden, waardoor je codebase toekomstbestendig blijft. + +Veel programmeerplezier, en moge je PDF‑bestanden altijd conform zijn! + +--- + +![Convert DOCX to PDF voorbeeldoutput](convert-docx-to-pdf-output.png "Convert DOCX to PDF voorbeeldoutput") + +{{< /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-loadoptions/_index.md b/words/dutch/net/programming-with-loadoptions/_index.md index 3af6498651..02a9b2a745 100644 --- a/words/dutch/net/programming-with-loadoptions/_index.md +++ b/words/dutch/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ In deze tutorials leert u hoe u LoadOptions kunt gebruiken om Word-documenten me | [Chm-bestanden laden in Word-document](./load-chm/) | Laad CHM-bestanden eenvoudig in Word-documenten met Aspose.Words voor .NET met deze stapsgewijze tutorial. Perfect voor het consolideren van uw technische documentatie. | | [Hoe een DOCX te herstellen met Aspose.Words – stap voor stap](./how-to-recover-docx-with-aspose-words-step-by-step/) | Leer hoe u beschadigde DOCX-bestanden kunt herstellen met Aspose.Words in een stapsgewijze handleiding. | | [Aspose Load Options – DOCX laden met aangepaste lettertype‑instellingen](./aspose-load-options-load-docx-with-custom-font-settings/) | Leer hoe u een DOCX-document kunt laden met aangepaste lettertype‑instellingen via LoadOptions in Aspose.Words voor .NET. | +| [Herstel beschadigde DOCX – Complete C#-gids om bestanden te repareren en op te slaan](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Leer hoe u beschadigde DOCX-bestanden kunt herstellen en opslaan met een volledige C#-handleiding. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/dutch/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..7e9ead9e47 --- /dev/null +++ b/words/dutch/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-07 +description: Leer hoe u corrupte DOCX‑bestanden in C# kunt herstellen en het herstelde + document veilig kunt opslaan. Stapsgewijze handleiding met een Aspose.Words‑voorbeeld. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: nl +og_description: Herstel corrupte DOCX‑bestanden in C# en sla het herstelde document + op met Aspose.Words. Volle code, uitleg en best‑practice‑tips. +og_title: Herstel corrupte DOCX – Stapsgewijze C#‑gids +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Herstel corrupte DOCX – Complete C#-gids om bestanden te repareren en op te + slaan +url: /nl/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Beschadigde DOCX herstellen – Complete C# gids om bestanden te repareren en op te slaan + +Heb je ooit geprobeerd een DOCX te openen die er prima uitziet in Verkenner, maar een uitzondering veroorzaakt in je applicatie? Dat is de klassieke “corrupt Word‑bestand” nachtmerrie, en het eindigt meestal met een stack‑trace die je niet wilt zien. Het goede nieuws? Aspose.Words biedt een **recover corrupted docx**‑functie waarmee je kunt blijven werken, zelfs als het bestand beschadigd is. + +In deze tutorial lopen we stap voor stap door hoe je een defect document laadt, de bibliotheek vertelt door te gaan, en vervolgens **save recovered document** naar een nieuw, schoon bestand opslaat. Aan het einde weet je waarom de herstelmodus belangrijk is, hoe je deze configureert, en welke valkuilen je moet vermijden—geen vage “zie de docs” shortcuts. + +## Wat je nodig hebt + +- **Aspose.Words for .NET** (any recent version; 24.11 was used when writing this guide) +- Een .NET‑ontwikkelomgeving (Visual Studio, Rider, of VS Code met de C#‑extensie) +- Een voorbeeld‑DOCX waarvan je vermoedt dat deze corrupt is (je kunt een bestand corrupt maken door het in een zip‑editor te openen en een onderdeel te verwijderen, alleen voor testdoeleinden) +- Basiskennis van C# — niets ingewikkelds, alleen het vermogen om een console‑applicatie te maken + +Als je die al hebt, geweldig—laten we meteen naar de oplossing gaan. + +## Stap 1: LoadOptions instellen met de juiste herstelstrategie + +Het hart van de oplossing is het `LoadOptions`‑object. Het vertelt Aspose.Words hoe zich te gedragen wanneer het misvormde XML of ontbrekende onderdelen in het DOCX‑pakket tegenkomt. De `RecoveryMode.RecoverAndContinue`‑vlag is het meest tolerant—het probeert zoveel mogelijk te redden en slaat de rest over. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Waarom dit belangrijk is:** Als je `LoadOptions` weglaat of de standaardmodus gebruikt (`RecoveryMode.NoRecovery`), zal de `Document`‑constructor een uitzondering gooien op het moment dat er een probleem wordt gedetecteerd. Met `RecoverAndContinue` negeert de API niet‑kritieke fouten en bouwt een gedeeltelijk documentobject dat je nog steeds kunt gebruiken. + +> **Pro tip:** Voor enorme batches bestanden, overweeg toch de laad‑aanroep in een `try/catch`‑blok te wikkelen—sommige fouten zijn echt fataal (bijv. het ontbreken van het `[Content_Types].xml`‑bestand) en kunnen niet worden hersteld. + +## Stap 2: Laad de mogelijk corrupte DOCX + +Nu de opties klaar zijn, laad je bestand. De constructor neemt het bestandspad en de `LoadOptions` die we zojuist hebben voorbereid. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Wat er onder de motorkap gebeurt:** +Aspose.Words parseert de ZIP‑container, leest elk XML‑deel, en probeert de Open XML‑DOM opnieuw op te bouwen. Wanneer het een defect onderdeel tegenkomt, logt de herstelengine een waarschuwing (zichtbaar in de console als je diagnostiek inschakelt) en gaat door. Het resulterende `Document`‑object kan een paar alinea’s of afbeeldingen missen, maar de rest van de inhoud blijft intact. + +## Stap 3: Controleer de herstelde inhoud (optioneel maar aanbevolen) + +Voordat je het bestand naar schijf schrijft, is het verstandig een paar knooppunten te inspecteren om er zeker van te zijn dat de belangrijke secties behouden zijn gebleven. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Als de uitvoer logisch lijkt, heb je met succes **recover corrupted docx**‑inhoud hersteld. Als je ontbrekende secties opmerkt, kun je nog steeds beslissen of je wilt doorgaan—soms zijn de verloren delen alleen decoratief. + +## Stap 4: Sla het herstelde document op + +Hier is het deel waar de meeste ontwikkelaars naar vragen: “Hoe kan ik **save recovered document** zonder de oorspronkelijke corruptie opnieuw te introduceren?” Het antwoord is simpel: roep `Document.Save` aan met een nieuw pad. Aspose.Words schrijft een gloednieuwe ZIP‑package, zodat eventuele achtergebleven defecte delen worden weggelaten. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Waarom dit werkt:** De `Save`‑methode serialiseert de in‑memory DOM terug naar een schoon Open XML‑pakket. Omdat de defecte delen nooit in de DOM werden geladen (ze werden tijdens het herstel weggegooid), komen ze niet in het nieuwe bestand terecht. Het resultaat is een gezond DOCX‑bestand dat opent in Word, Google Docs of elke andere viewer. + +## Stap 5: Automatiseer het proces voor meerdere bestanden (bonus) + +In real‑world scenario’s heb je vaak een map vol problematische bestanden. Wikkel de vorige stappen in een lus, en je hebt een klein herstel‑hulpmiddel. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Nu kun je een hele map met kapotte DOCX‑bestanden in `C:\Docs\Batch` plaatsen en het script automatisch laten opschonen. + +## Veelgestelde vragen & randgevallen + +| Vraag | Antwoord | +|----------|--------| +| **Werkt dit met .doc‑bestanden?** | Dezelfde `LoadOptions`‑klasse is van toepassing, maar je moet verwijzen naar het oudere Word‑formaat (`doc`). Aspose.Words kan nog steeds herstellen, hoewel de foutpatronen verschillen. | +| **Wat als het bestand met een wachtwoord is beveiligd?** | Herstel omzeilt de encryptie niet. Je moet het wachtwoord opgeven via `LoadOptions.Password`. | +| **Worden afbeeldingen verloren?** | Alleen afbeeldingen die deel uitmaken van een corrupt XML‑deel kunnen worden weggelaten. De rest wordt bewaard omdat ze als afzonderlijke binaire streams worden opgeslagen. | +| **Kan ik de waarschuwingen die Aspose genereert loggen?** | Ja—stel `LoadOptions.LoadFormat` in op `LoadFormat.Docx` en abonneer je op `Document.WarningCallback` om gedetailleerde berichten vast te leggen. | +| **Is `RecoverAndContinue` veilig voor productie?** | Over het algemeen ja, maar test met je eigen data. In mission‑critical pipelines wil je misschien documenten die herstel nodig hadden markeren voor latere controle. | + +## Volledig werkend voorbeeld (klaar om te kopiëren en plakken) + +Hieronder staat het complete programma dat je kunt compileren als een console‑app. Het bevat alle stappen, foutafhandeling en optionele batch‑verwerkingslogica. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Verwacht resultaat:** Na het uitvoeren van het programma opent `Recovered.docx` in Microsoft Word zonder het oorspronkelijke foutdialoogvenster. Eventuele delen die te zwaar beschadigd waren, worden simpelweg weggelaten, maar de hoofdtekst, koppen en de meeste afbeeldingen blijven behouden. + +![voorbeeld van herstel van corrupte docx](https://example.com/images/recover-corrupted-docx.png "herstel van corrupte docx – visuele voor/na vergelijking") + +## Conclusie + +We hebben alles behandeld wat je nodig hebt om **recover corrupted docx**‑bestanden te herstellen met Aspose.Words, van het configureren van `LoadOptions` tot het veilig **save recovered document**. De belangrijkste inzichten zijn: + +- Gebruik `RecoveryMode.RecoverAndContinue` zodat de bibliotheek niet‑kritieke fouten negeert. +- Controleer de geladen inhoud voordat je deze commit, vooral bij kritieke zakelijke documenten. +- Het opslaan van het document genereert een schone ZIP‑package, waardoor de oorspronkelijke corruptie effectief wordt verwijderd. +- Hetzelfde patroon schaalt naar batch‑operaties, waardoor geautomatiseerde opschoning van grote document‑repositories mogelijk is. + +Klaar voor de volgende stap? Probeer deze logica te integreren in een achtergrondservice die een upload‑map bewaakt, of experimenteer met de `WarningCallback` om een rapport te maken van welke bestanden herstel nodig hadden. Hoe meer je met de API speelt, hoe meer je de robuustheid van Aspose.Words zult waarderen voor documentverwerking in de echte wereld. + +Heb je een twist die je wilt delen—misschien het omgaan met wachtwoord‑beveiligde bestanden of het samenvoegen van herstelde documenten? Laat een reactie achter hieronder, en laten we het gesprek gaande houden. 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/programming-with-markdownsaveoptions/_index.md b/words/dutch/net/programming-with-markdownsaveoptions/_index.md index 5167a87a1d..7b18c43d6a 100644 --- a/words/dutch/net/programming-with-markdownsaveoptions/_index.md +++ b/words/dutch/net/programming-with-markdownsaveoptions/_index.md @@ -54,6 +54,10 @@ Leer hoe u docx-bestanden opslaat als markdown en afbeeldingen extraheert met ee Leer hoe u DOCX-bestanden naar Markdown converteert met een duidelijke stap‑voor‑stap handleiding. +### [Word opslaan als Markdown met aangepaste afbeeldingsmap – Volledige gids](./save-word-as-markdown-with-custom-image-folder-full-guide/) + +Leer hoe u Word-documenten opslaat als Markdown en afbeeldingen in een aangepaste map plaatst met een volledige C#‑handleiding. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/dutch/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..be9d51ea47 --- /dev/null +++ b/words/dutch/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-04-07 +description: Sla Word op als Markdown en extraheer afbeeldingen uit docx met behulp + van een callback. Leer hoe je een callback kunt gebruiken om de map met markdown‑afbeeldingen + efficiënt op te slaan. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: nl +og_description: Sla Word op als Markdown en extraheer afbeeldingen uit docx met behulp + van een callback. Deze gids laat zien hoe je een callback gebruikt om een map voor + markdown‑afbeeldingen te maken. +og_title: Word opslaan als Markdown – Volledige stap‑voor‑stap gids +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Word opslaan als Markdown met aangepaste afbeeldingsmap – Volledige gids +url: /nl/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word opslaan als Markdown – Complete stapsgewijze gids + +Heb je ooit **Word als Markdown** moeten opslaan maar wist je niet wat te doen met de ingesloten afbeeldingen? Je bent niet de enige. In veel projecten ziet de markdown‑output er geweldig uit—*totdat* je realiseert dat de afbeeldingslinks kapot zijn omdat de bestanden nooit het Word‑pakket hebben verlaten. + +Het goede nieuws is dat Aspose.Words je een nette manier biedt om **afbeeldingen uit docx** te **extraheren** en ze precies daar te plaatsen waar je wilt, met behulp van een **callback** die je de controle geeft over de markdown‑afbeeldingsmap. In deze tutorial lopen we het volledige proces door, van het laden van een `.docx`‑bestand tot het eindresultaat: een nette map met PNG’s (of welk formaat je ook hebt) en een markdown‑bestand dat ernaar verwijst. + +Aan het einde van deze gids kun je: + +* Elk Word‑document naar Markdown converteren met één regel code. +* Automatisch elke afbeelding wegschrijven naar een speciale `images` submap. +* Bestandsnamen aanpassen zodat ze nooit conflicteren, zelfs niet wanneer de bron tientallen afbeeldingen bevat. + +Geen externe scripts, geen handmatig kopiëren‑plakken—alleen pure C# en Aspose.Words. + +## Vereisten + +Voordat we beginnen, zorg dat je het volgende hebt: + +* **Aspose.Words for .NET** (de nieuwste stabiele versie; op het moment van schrijven is het 24.9). +* Een .NET‑ontwikkelomgeving (Visual Studio, Rider, of de `dotnet` CLI). +* Een Word‑document (`.docx`) dat minstens één afbeelding bevat—noem het `DocWithImages.docx`. + +Als je Aspose.Words nog nooit hebt gebruikt, maak je geen zorgen. De bibliotheek is volledig beheerd, vereist geen COM‑interop, en werkt op .NET 6+ evenals op .NET Framework 4.8. + +## Stap 1 – Het project opzetten en het pakket installeren + +Maak eerst een nieuwe console‑app (of voeg de code toe aan een bestaand project). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tip:** Als je .NET 6 targett, gebruikt de standaard `Program.cs` al top‑level statements, waardoor het voorbeeld beknopt blijft. + +## Stap 2 – Een callback maken om het opslaan van afbeeldingen te regelen + +Aspose.Words roept `IResourceSavingCallback.ResourceSaving` aan voor elke externe resource die het moet schrijven (afbeeldingen, CSS, enz.). Door deze interface te implementeren krijgen we volledige controle over **hoe de markdown‑afbeeldingsmap** wordt opgebouwd. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Waarom een callback gebruiken? + +* **Gedetailleerde controle** – je bepaalt de mapstructuur en naamgevingsschema. +* **Prestaties** – je schrijft de stream één keer, waardoor je de dubbele‑schrijf fallback van de bibliotheek vermijdt. +* **Flexibiliteit** – je kunt logging, afbeelding‑optimalisatie, of zelfs uploaden naar cloudopslag toevoegen op dit punt. + +## Stap 3 – Het Word‑document laden + +Nu de callback klaar is, hoeven we Aspose.Words alleen nog maar naar het bronbestand te wijzen. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Wat als het bestand niet wordt gevonden?** +> `Document` zal een `FileNotFoundException` gooien. Plaats het laden in een `try/catch` als je dynamische paden verwacht. + +## Stap 4 – De MarkdownSaveOptions configureren + +De `MarkdownSaveOptions`‑klasse stelt ons in staat de callback die we zojuist hebben gemaakt te koppelen. We stellen ook de map in waar de afbeeldingen relatief aan het markdown‑bestand zullen worden opgeslagen. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +De eigenschap `ImagesFolder` vertelt Aspose om markdown‑links te genereren zoals `![Alt text](images/img_123.png)`. Omdat we ook `ResourceFileName` in de callback hebben ingesteld, wordt het daadwerkelijke bestand precies daar geplaatst. + +## Stap 5 – Opslaan als Markdown en het resultaat verifiëren + +Tot slot schrijven we het markdown‑bestand. De callback heeft de `images` submap al gevuld. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Verwachte output + +Het uitvoeren van het programma zou iets moeten afdrukken als: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Open `Doc.md` in een markdown‑viewer; je ziet afbeeldingslinks die correct naar de `images` map wijzen. + +--- + +## Veelgestelde vragen (FAQ) + +### Hoe **afbeeldingen uit docx** te **extraheren** zonder te converteren naar markdown? + +Je kunt dezelfde `MyMarkdownResourceCallback` hergebruiken maar deze doorgeven aan `doc.Save("images.zip", SaveFormat.Zip)`. De callback wordt nog steeds geactiveerd voor elke afbeelding, waardoor je ze kunt plaatsen waar je wilt. + +### Wat als ik **verschillende afbeeldingsformaten** nodig heb? + +`args.FileName` bevat al de originele extensie (`.png`, `.jpg`, enz.). Als je alle afbeeldingen naar één formaat moet converteren, voeg dan een conversiestap toe binnen `ResourceSaving` voordat je de stream schrijft. + +### Kan ik de **markdown‑afbeeldingsmap** per document **aanpassen**? + +Absoluut. De callback ontvangt het mappad via zijn constructor, zodat je voor elk document in een batchproces een nieuwe callback kunt instantiëren met een andere map. + +### Werkt dit met **grote documenten** (honderden afbeeldingen)? + +Ja. De callback streamt de afbeelding direct naar de schijf, waardoor het geheugenverbruik laag blijft. Zorg er alleen voor dat de doel‑schijf voldoende ruimte heeft en dat je geen OS‑limieten voor bestandshandelingen bereikt. + +--- + +## Volledig werkend voorbeeld + +Hieronder staat het volledige, kant‑klaar‑te‑kopiëren‑en‑plakken programma. Vervang `YOUR_DIRECTORY` door een absoluut of relatief pad dat bij jouw omgeving past. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Voer het programma uit (`dotnet run`) en je ziet een nieuw aangemaakt `Doc.md` naast een `images` submap die bevat + +{{< /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-officemath/_index.md b/words/dutch/net/programming-with-officemath/_index.md index 89239c437d..3d53c8648d 100644 --- a/words/dutch/net/programming-with-officemath/_index.md +++ b/words/dutch/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ De Aspose.Words voor .NET-tutorials over tekstverwerking met OfficeMath begeleid | Titel | Beschrijving | | --- | --- | | [Wiskundige vergelijkingen](./math-equations/) | Leer hoe u wiskundige vergelijkingen in Word-documenten configureert met Aspose.Words voor .NET. Stapsgewijze handleiding met voorbeelden, veelgestelde vragen en meer. | - +| [Docx opslaan als txt – Exporteer Word-wiskunde naar LaTeX in C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Leer hoe u een DOCX-bestand opslaat als TXT en wiskundige vergelijkingen exporteert naar LaTeX met C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/dutch/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..86cf26ec9c --- /dev/null +++ b/words/dutch/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: Sla docx snel op als txt en leer hoe je wiskunde naar LaTeX exporteert. + Converteer Word naar txt, verwerk Office Math en behoud de vergelijkingen intact. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: nl +og_description: Sla docx op als txt met LaTeX‑wiskunde‑export. Een stapsgewijze C#‑tutorial + die laat zien hoe je Word naar txt converteert en formules behoudt. +og_title: Docx opslaan als txt – C#‑gids voor het exporteren van Word‑wiskunde +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Docx opslaan als txt – Word‑wiskunde exporteren naar LaTeX in C# +url: /nl/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Docx opslaan als txt – Export Word-wiskunde naar LaTeX in C# + +Heb je ooit **docx opslaan als txt** moeten doen, maar maak je je zorgen dat je vergelijkingen veranderen in een warboel van symbolen? Je bent niet de enige. Veel ontwikkelaars lopen tegen dit probleem aan wanneer ze proberen **word naar txt te converteren** voor verdere verwerking, vooral wanneer de bron Office Math‑objecten bevat. + +Het goede nieuws? Met een paar regels C# en de juiste opslaan‑opties kun je elke vergelijking behouden als nette LaTeX, waardoor het platte‑tekstbestand zowel mens‑leesbaar als klaar voor wetenschappelijke pipelines is. In deze tutorial lopen we het volledige proces door, beantwoorden we *hoe wiskunde te exporteren* uit een Word‑bestand, en laten we je zien *hoe docx te converteren* zonder verlies van wiskundige nauwkeurigheid. + +## Wat je zult leren + +- Laad een `.docx`‑bestand met Aspose.Words (of een andere compatibele bibliotheek). +- Configureer `TxtSaveOptions` zodat Office Math wordt geëxporteerd als LaTeX. +- Sla het document op als een `.txt`‑bestand dat vergelijkingen intact houdt. +- Tips voor het omgaan met randgevallen zoals verborgen vergelijkingen of grote documenten. +- Een volledige, uitvoerbare code‑voorbeeld dat je direct kunt copy‑pasten. + +Geen ingewikkelde build‑tools, alleen een .NET‑project en het Aspose.Words‑NuGet‑pakket. Laten we beginnen. + +--- + +## Vereisten + +| Vereiste | Waarom het belangrijk is | +|----------|--------------------------| +| .NET 6.0 of later | Moderne taalfeatures en betere prestaties. | +| Aspose.Words for .NET (NuGet) | Biedt `Document`, `TxtSaveOptions` en `OfficeMathExportMode`. | +| Een Word‑bestand (`.docx`) dat vergelijkingen bevat | Om de LaTeX‑export in actie te zien. | +| Basis C#‑kennis | Je volgt de code regel‑voor‑regel. | + +Als je Aspose.Words nog niet hebt toegevoegd, voer dan uit: + +```bash +dotnet add package Aspose.Words +``` + +Dat is alles—geen extra configuratie nodig. + +## Stap 1: Laad het DOCX‑bestand + +Eerst moeten we het bron‑document in het geheugen laden. Beschouw dit als het openen van een boek voordat je begint te lezen. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** Gebruik een absoluut pad tijdens het testen om “bestand niet gevonden” verrassingen te vermijden. In productie ontvang je het pad waarschijnlijk uit een configuratie‑bestand of een gebruikersupload. + +## Stap 2: Configureer TXT‑opslaan‑opties voor wiskunde‑export + +Standaard schrijft `TxtSaveOptions` platte tekst weg en verwijdert Office Math. Dat willen we niet. Het instellen van `OfficeMathExportMode` op `LaTeX` vertelt de bibliotheek elke vergelijking te vertalen naar de LaTeX‑representatie. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Waarom LaTeX? + +LaTeX is de lingua franca van wetenschappelijke publicaties. Wanneer je later het `.txt`‑bestand in een markdown‑processor, Jupyter‑notebook of een andere LaTeX‑bewuste tool stopt, worden de vergelijkingen perfect weergegeven. Als je liever platte Unicode‑symbolen gebruikt, kun je overschakelen naar `OfficeMathExportMode.Unicode`, maar LaTeX biedt de meeste controle. + +## Stap 3: Sla het document op als een platte‑tekst‑bestand + +Nu gebeurt de magie. De `Save`‑methode schrijft het document naar schijf met de opties die we zojuist hebben gedefinieerd. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Na het uitvoeren van deze regel zal `Math.txt` bevatten: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Let op hoe de vergelijking verschijnt binnen `\[` en `\]` — precies wat LaTeX verwacht. + +## Hoe wiskunde te exporteren uit complexe documenten + +### Omgaan met verborgen of inline‑vergelijkingen + +Sommige Word‑bestanden slaan vergelijkingen op in verborgen tekstframes. Aspose.Words behandelt ze hetzelfde als zichtbare vergelijkingen, dus de LaTeX‑export werkt automatisch. Als je echter ontbrekende vergelijkingen opmerkt, controleer dan of het `Document`‑object niet is ingesteld om verborgen inhoud te negeren: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Grote documenten en geheugengebruik + +Het opslaan van een scriptie van 500 pagina's kan veel RAM verbruiken. Om de geheugengebruik laag te houden, kun je de uitvoer streamen: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming schrijft blokken naar schijf terwijl ze worden gegenereerd, waardoor het volledige bestand niet in één keer in het geheugen hoeft te staan. + +## Veelvoorkomende valkuilen & hoe ze te vermijden + +| Valstrik | Symptoom | Oplossing | +|----------|----------|-----------| +| Ontbrekende LaTeX‑haakjes | Vergelijkingen verschijnen als ruwe code (`E = mc^{2}`) | Zorg ervoor dat `OfficeMathExportMode = LaTeX`. | +| Leeg uitvoerbestand | Verkeerd pad of onvoldoende rechten | Controleer of de uitvoermap bestaat en schrijfbaar is. | +| Vervormde tekens | Bestand gecodeerd in UTF‑8 zonder BOM op een systeem dat ANSI verwacht | Voeg `txtSaveOptions.Encoding = Encoding.UTF8;` toe. | +| Vergelijkingen verdwijnen na conversie | Document geladen met `LoadOptions` die wiskunde uitsluiten | Gebruik de standaard `LoadOptions` of stel `LoadOptions.LoadFormat = LoadFormat.Docx` in. | + +## Volledig werkend voorbeeld + +Hieronder staat het volledige programma dat je kunt compileren en uitvoeren. Het bevat foutafhandeling, padvalidatie en een kleine console‑log zodat je weet dat alles geslaagd is. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Verwachte output** (fragment uit `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Je kunt dit bestand nu in elke LaTeX‑bewuste processor voeren, en de vergelijkingen zullen prachtig worden weergegeven. + +## Hoe DOCX naar TXT te converteren zonder opmaakverlies + +Als je alleen platte tekst nodig hebt en je maakt je geen zorgen over wiskunde, laat dan simpelweg de `OfficeMathExportMode`‑regel weg: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Maar onthoud, **hoe wiskunde te exporteren** is het onderscheidende kenmerk voor wetenschappelijke workflows. Het behouden van LaTeX intact maakt de conversie echt nuttig. + +## Volgende stappen & gerelateerde onderwerpen + +- **Batch conversion:** Wrap de code in een `foreach`‑lus om een hele map met `.docx`‑bestanden te verwerken. +- **Markdown generation:** Voeg `#`‑koppen of `*`‑opsommingstekens toe aan de tekst om kant‑klaar markdown te produceren. +- **PDF export:** Gebruik `PdfSaveOptions` om een PDF‑versie naast de txt te maken. +- **Advanced LaTeX tweaking:** Verwerk de output na met regex om `\[`/`\]` te vervangen door `$...$` voor inline‑vergelijkingen. + +Elk van deze bouwt voort op dezelfde basis — een `Document` laden en de juiste `SaveOptions` kiezen. Voel je vrij om te experimenteren; de API is flexibel genoeg voor de meeste document‑automatiseringsscenario's. + +## Conclusie + +We hebben alles behandeld wat je nodig hebt om **docx op te slaan als txt** terwijl elke vergelijking behouden blijft als LaTeX. Van het laden van het bronbestand, het configureren van `TxtSaveOptions` voor **hoe wiskunde te exporteren**, tot het schrijven van het uiteindelijke platte‑tekst‑bestand, de volledige workflow past in een handvol beknopte C#‑statements. + +Nu kun je de conversie van Word‑rapporten, academische papers of elk document dat tekst en wiskunde combineert automatiseren, en het resulterende `.txt`‑bestand in downstream‑tools voeren zonder verlies van wetenschappelijke details. + +Probeer het, pas de opties aan voor jouw situatie, en laat ons in de reacties weten hoe het voor jou werkte. Veel programmeerplezier! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/dutch/net/programming-with-pdfsaveoptions/_index.md index fd597d9b5e..b258b8a728 100644 --- a/words/dutch/net/programming-with-pdfsaveoptions/_index.md +++ b/words/dutch/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Of u nu Word-documenten naar PDF wilt converteren voor online distributie, archi | [Laatst afgedrukte eigenschap in PDF-document bijwerken](./update-last-printed-property/) | Leer hoe u de laatst afgedrukte eigenschap in een PDF-document kunt bijwerken met Aspose.Words voor .NET met onze stapsgewijze handleiding. | | [3D DML 3D-effecten renderen in een PDF-document](./dml-3deffects-rendering/) | Leer hoe u verbluffende 3D DML-effecten kunt maken in PDF-documenten met Aspose.Words voor .NET met deze uitgebreide stapsgewijze handleiding. | | [Afbeeldingen in een PDF-document interpoleren](./interpolate-images/) | Leer hoe u afbeeldingen in een PDF-document kunt interpoleren met Aspose.Words voor .NET met onze stapsgewijze handleiding. Verbeter eenvoudig de beeldkwaliteit van uw PDF. | - +| [Toegankelijke PDF maken vanuit Word – Stapsgewijze handleiding](./create-accessible-pdf-from-word-step-by-step-guide/) | Leer hoe u een toegankelijke PDF genereert vanuit een Word-document met Aspose.Words voor .NET in deze stapsgewijze handleiding. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/dutch/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2b777a8f40 --- /dev/null +++ b/words/dutch/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Maak een toegankelijke PDF van een DOCX‑bestand in C#. Leer hoe je Word + naar PDF converteert, een DOCX opslaat als PDF, en zorg voor PDF/UA‑conformiteit. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: nl +og_description: Maak een toegankelijke PDF van Word in C#. Deze gids laat zien hoe + je Word naar PDF converteert, docx opslaat als PDF, en voldoet aan de PDF/UA-standaarden. +og_title: Maak een toegankelijke PDF – Complete C#‑handleiding +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Maak een toegankelijke PDF vanuit Word – Stapsgewijze handleiding +url: /nl/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Maak Toegankelijke PDF van Word – Complete Programmeertutorial + +Heb je ooit een **toegankelijke PDF** moeten maken van een Word‑document, maar wist je niet welke instellingen je moest aanpassen? Je bent niet de enige. In veel bedrijven is naleving van PDF/UA (Universal Accessibility) een harde eis, en de gewone “convert‑to‑PDF”‑knop voldoet gewoon niet. + +In deze gids lopen we stap voor stap door een beknopte, end‑to‑end oplossing die **Word naar PDF converteert**, **docx als PDF opslaat**, en garandeert dat de output voldoet aan de toegankelijkheidsnormen. Geen vage verwijzingen—alleen de code die je kunt copy‑pasten, plus de “waarom” achter elke regel. + +> **TL;DR:** Laad een `.docx`, stel `PdfSaveOptions.Compliance` in op `PdfUa1` (of `PdfUa2`), en roep `Document.Save` aan. Dat is alles wat je nodig hebt om een **toegankelijke PDF** te **maken** met Aspose.Words voor .NET. + +--- + +## Wat je zult leren + +- Hoe je **Word naar PDF converteert** terwijl je koppen, alt‑tekst en leesvolgorde behoudt. +- Het verschil tussen `PdfUa1` en `PdfUa2` en wanneer je elk moet kiezen. +- Hoe je **docx als PDF opslaat** met slechts een paar regels C#. +- Veelvoorkomende valkuilen (ontbrekende lettertypen, niet‑ondersteunde tags) en snelle oplossingen. +- Een kant‑klaar code‑voorbeeld dat je in elk .NET‑project kunt plaatsen. + +### Prerequisites + +- .NET 6 of later (de code werkt ook op .NET Framework 4.7+). +- Aspose.Words voor .NET geïnstalleerd via NuGet (`Install-Package Aspose.Words`). +- Een Word‑bestand (`input.docx`) dat al een juiste structuur bevat (stijlen, alt‑tekst voor afbeeldingen). + +Als je Aspose.Words nog niet hebt toegevoegd, voer dan de onderstaande opdracht uit in de Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +Dat is de enige externe afhankelijkheid die je nodig hebt. + +--- + +## Maak Toegankelijke PDF – Waarom Toegankelijkheid Belangrijk Is + +Wanneer een PDF gemarkeerd is als **PDF/UA** (Universal Accessibility), kunnen schermlezers koppen, tabellen en formuliervelden navigeren net zoals ze dat in het oorspronkelijke Word‑bestand zouden doen. Dit is niet alleen een “nice‑to‑have”; veel overheden en bedrijven beschouwen PDF/UA‑naleving als een wettelijke verplichting. + +Het instellen van de `Compliance`‑eigenschap op `PdfSaveOptions` vertelt de bibliotheek om de benodigde tags in te sluiten, de juiste documenttaal in te stellen en een logische leesvolgorde toe te voegen. Als je deze stap overslaat, krijg je een “visueel‑alleen” PDF die faalt bij toegankelijkheidsaudits. + +--- + +## Converteer Word naar PDF met Aspose.Words + +Hieronder staat de eenvoudigste manier om **Word naar PDF te converteren** terwijl je het document toegankelijk houdt. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Wat gebeurt er hier?** + +- `Document` leest het Word‑bestand en behoudt alle stijlen en structuur. +- `PdfSaveOptions.Compliance` vertelt Aspose.Words om de output te taggen als PDF/UA. +- `doc.Save` schrijft de PDF naar schijf en voegt de tags automatisch in. + +> **Pro tip:** Als je bron‑Word‑bestand aangepaste kopstijlen gebruikt, zorg er dan voor dat ze zijn gemapt naar ingebouwde kopniveaus (`Heading1`, `Heading2`, …). Dat zorgt ervoor dat de gegenereerde PDF de juiste kop‑tags krijgt. + +--- + +## Sla Docx op als PDF – PDF/UA‑naleving configureren + +Als je al bekend bent met de `PdfSaveOptions`‑klasse, vraag je je misschien af of er andere schakelaars zijn die de toegankelijkheid beïnvloeden. Een paar handige eigenschappen: + +| Property | Effect on Accessibility | Typical Value | +|----------|------------------------|---------------| +| `Compliance` | Zet PDF/UA‑tagging aan/uit | `PdfCompliance.PdfUa1` of `PdfUa2` | +| `EmbedFullFonts` | Zorgt ervoor dat lezers de bedoelde typografie zien | `true` (default) | +| `OptimizeOutput` | Vermindert de bestandsgrootte zonder tags te verwijderen | `true` | + +Je kunt het vorige fragment als volgt uitbreiden: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Overschakelen naar `PdfUa2` voegt ondersteuning toe voor nieuwere PDF/UA‑functies, zoals *artifact*‑tagging voor decoratieve afbeeldingen. Als je die niet nodig hebt, blijf dan bij `PdfUa1` voor maximale compatibiliteit met oudere assistieve technologieën. + +--- + +## Exporteer Docx naar PDF – Volledig Werkend Voorbeeld + +Hieronder staat een zelfstandige console‑app die de volledige stroom demonstreert, van het laden van een bestand tot het verifiëren van de output. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Verwacht Resultaat + +- Een bestand met de naam **Compliant.pdf** verschijnt in dezelfde map als het uitvoerbare bestand. +- Het openen van de PDF in Adobe Acrobat Pro → *Tools → Accessibility → Full Check* zou **No accessibility issues** moeten rapporteren (ervan uitgaande dat het bron‑Word‑bestand goed gestructureerd was). +- Het tabblad *Properties → Advanced* van de PDF toont **PDF/UA** onder de sectie “PDF/A and PDF/UA compliance”. + +--- + +## Veelvoorkomende Edge Cases & Hoe ze op te lossen + +| Situation | Why it matters | Quick fix | +|-----------|----------------|-----------| +| **Missing fonts** | De PDF kan terugvallen op een standaardlettertype, waardoor de visuele lay‑out kapot gaat. | Stel `EmbedFullFonts = true` in (reeds de default) en zorg dat de lettertypebestanden toegankelijk zijn op de build‑machine. | +| **Images without alt‑text** | Schermlezers lezen “image” zonder beschrijving. | Voeg `Alt Text` toe in Word (`Right‑click → Format Picture → Alt Text`) vóór conversie. | +| **Custom styles not recognized as headings** | PDF/UA heeft correcte kop‑tags nodig. | Map aangepaste stijlen naar ingebouwde koppen via `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Het converteren van een bestand van 500 pagina’s kan het RAM‑gebruik laten pieken. | Gebruik `doc.Save(outputPath, options)` met `options.SaveFormat = SaveFormat.Pdf` en overweeg verwerking in delen als je een `OutOfMemoryException` tegenkomt. | +| **Need to export docx to pdf without accessibility** | Soms wil je alleen een snelle visuele PDF. | Laat de `Compliance`‑instelling weg of stel deze in op `PdfCompliance.Pdf15`. | + +--- + +## Afbeeldingsvoorbeeld (Alt‑tekst Inbegrepen) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*De bovenstaande alt‑tekst versterkt het primaire zoekwoord en helpt zowel gebruikers als AI‑modellen de context van de afbeelding te begrijpen.* + +--- + +## Veelgestelde Vragen + +**Q: Werkt dit met .NET Core?** +A: Absoluut. Aspose.Words is cross‑platform; voeg simpelweg het NuGet‑pakket toe aan je .NET 6+ project. + +**Q: Kan ik meerdere DOCX‑bestanden batch‑verwerken?** +A: Ja. Plaats de laad‑ en opsla‑logica in een `foreach (var file in Directory.GetFiles(folder, "*.docx"))`‑lus. Hergebruik een enkele `PdfSaveOptions`‑instantie voor betere prestaties. + +**Q: Wat als ik een aangepaste PDF/UA‑tag moet toevoegen die Aspose niet automatisch genereert?** +A: Gebruik de low‑level PDF‑API (`PdfSaveOptions.CustomProperties`) of verwerk de PDF na‑dat met een bibliotheek zoals iText 7 die handmatige tag‑invoeging mogelijk maakt. + +--- + +## Conclusie + +You + +{{< /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 4195f5f070..e295b73d00 100644 --- a/words/dutch/net/working-with-fonts/_index.md +++ b/words/dutch/net/working-with-fonts/_index.md @@ -43,12 +43,12 @@ Of u nu tekst wilt opmaken met verschillende lettertypen, regels voor lettertype | [Lettertype-instellingen met laadopties](./font-settings-with-load-options/) Leer hoe u lettertype-instellingen beheert met laadopties in Aspose.Words voor .NET. Stapsgewijze handleiding voor ontwikkelaars om een consistente lettertypeweergave in Word-documenten te garanderen.| | [Map met lettertypen instellen](./set-fonts-folder/) | Leer hoe u een aangepaste lettertypemap instelt in Aspose.Words voor .NET, zodat uw Word-documenten correct worden weergegeven en er geen lettertypen ontbreken. | | [Lettertype-instellingen Standaardinstantie](./font-settings-default-instance/) | In deze tutorial leert u hoe u standaardlettertype-instellingen in een Word-document kunt configureren met Aspose.Words voor .NET. | -| [Lijst met beschikbare lettertypen ophalen](./get-list-of-available-fonts/) Ontdek hoe je een lijst met beschikbare lettertypen kunt verkrijgen met Aspose.Words voor .NET in deze gedetailleerde stapsgewijze tutorial. Verbeter je vaardigheden in lettertypebeheer. +| [Lijst met beschikbare lettertypen ophalen](./get-list-of-available-fonts/) Ontdek hoe je een lijst met beschikbare lettertypen kunt verkrijgen met Aspose.Words voor .NET in deze gedetailleerde stapsgewijze tutorial. Verbeter je vaardigheden in lettertypebeheer. | | [Ontvang meldingen over lettertypen](./receive-notifications-of-fonts/) | Leer hoe u meldingen over ontbrekende of vervangen lettertypen ontvangt wanneer u Aspose.Words voor .NET gebruikt. | | [Waarschuwingsmelding ontvangen](./receive-warning-notification/) Leer hoe u een waarschuwingsmelding ontvangt wanneer u Aspose.Words voor .NET gebruikt en hoe u problemen of waarschuwingen in uw documenten beheert. | | [Bron van Steam-lettertypebronvoorbeeld](./resource-steam-font-source-example/) | Leer hoe u de Resource Stream Font Source gebruikt om aangepaste lettertypen in Aspose.Words voor .NET te laden. | | [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 – volledige gids](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Leer hoe u lettertypen in Word-documenten kunt detecteren met Aspose.Words voor .NET met deze stapsgewijze handleiding. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/dutch/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/dutch/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..d249e96abf --- /dev/null +++ b/words/dutch/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-04-07 +description: Leer hoe u lettertypen kunt detecteren en hoe u waarschuwingen kunt vastleggen + bij het afhandelen van ontbrekende lettertypen in C# met Aspose.Words. Stapsgewijze + code inbegrepen. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: nl +og_description: Hoe detecteer je lettertypen in Aspose.Words? Volg deze tutorial om + waarschuwingen vast te leggen en ontbrekende lettertypen moeiteloos te verwerken. +og_title: Hoe lettertypen in Aspose.Words te detecteren – Complete gids +tags: +- Aspose.Words +- C# +- Font handling +title: Hoe lettertypen detecteren in Aspose.Words – Complete gids +url: /nl/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe lettertypen te detecteren in Aspose.Words – Complete gids + +Heb je je ooit afgevraagd **hoe je lettertypen** kunt detecteren die ontbreken in een Word‑document voordat je het naar productie brengt? Je bent niet de enige. In veel enterprise‑scenario's kan een verdwaald lettertype een PDF‑conversiepijplijn breken of lay‑out‑glitches veroorzaken die er onprofessioneel uitzien. Het goede nieuws is dat Aspose.Words een ingebouwde manier biedt om die afwezige lettertypen op te sporen en duidelijke waarschuwingen te geven. + +In deze tutorial lopen we precies door **hoe je lettertypen detecteert**, **hoe je waarschuwingen opvangt**, en de beste praktijken om **ontbrekende lettertypen af te handelen** zodat je applicatie robuust blijft. Geen externe tools, geen giswerk—alleen pure C#‑code die je direct in je project kunt plaatsen. + +> **Snel overzicht:** Aan het einde heb je een herbruikbare `FontSubstitutionWarningCollector` die elk lettertype‑substitutie‑bericht tijdens het laden van een document verzamelt, en weet je hoe je moet reageren wanneer een lettertype niet gevonden kan worden. + +--- + +## Wat je zult leren + +- Hoe je `LoadOptions` configureert om te luisteren naar waarschuwingen voor lettertype‑substitutie. +- Hoe je die waarschuwingen opvangt in een aangepaste collector‑klasse. +- Hoe je de verzamelde waarschuwingen verwerkt en beslist of je moet afbreken, loggen of lettertypen moet substitueren. +- Edge‑case‑afhandeling voor documenten die verwijzen naar externe of ingebedde lettertypen. + +**Prerequisites:** .NET 6+ (of .NET Framework 4.6+), Aspose.Words for .NET (nieuwste versie), en een basiskennis van C#. Als je nog nooit met Aspose.Words hebt gewerkt, maak je geen zorgen—deze gids gaat uit van slechts een paar minuten installatie‑tijd. + +--- + +## Hoe lettertypen te detecteren met Aspose.Words LoadOptions + +De eerste stap om ontbrekende lettertypen te detecteren is Aspose.Words te laten melden dat ze ontbreken. Dit gebeurt via de eigenschap `LoadOptions.WarningCallback`, die elke klasse accepteert die `IWarningCallback` implementeert. Hieronder maken we een kleine collector die elke waarschuwing opslaat voor later onderzoek. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Waarom dit belangrijk is:** Zonder een warning‑callback substitueert Aspose.Words stilzwijgend ontbrekende lettertypen door een standaardlettertype, en je merkt nooit dat er een probleem is. Door `WarningType.FontSubstitution` op te vangen, krijg je volledige zichtbaarheid—precies de gegevens die je nodig hebt om **lettertypen te detecteren** die niet beschikbaar zijn op de host‑machine. + +Nu koppelen we de collector aan `LoadOptions` en laden we een document: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Pro tip:** Als je met veel documenten in één batch werkt, hergebruik dan dezelfde `FontSubstitutionWarningCollector`‑instantie, maar vergeet niet `Clear()` aan te roepen tussen de loads om te voorkomen dat waarschuwingen van verschillende bestanden door elkaar raken. + +--- + +## Waarschuwingen tijdens het laden van een document opvangen + +Nadat het document is geladen, bevat de collector al elke lettertype‑gerelateerde waarschuwing. De logische volgende vraag is: *Hoe vang ik waarschuwingen* op een manier die makkelijk te loggen of weer te geven is? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typische output ziet er als volgt uit: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Wat dit je vertelt:** Elke regel onthult de oorspronkelijke lettertype‑naam en de fallback die Aspose.Words heeft gekozen. Met deze informatie kun je bepalen of de fallback acceptabel is of dat je het ontbrekende lettertype handmatig moet insluiten. + +--- + +## Ontbrekende lettertypen elegant afhandelen + +Het detecteren en opvangen van waarschuwingen is slechts de helft van de strijd. De echte waarde komt wanneer je **ontbrekende lettertypen** op een productie‑klare manier **afhandelt**. Hieronder staan drie veelvoorkomende strategieën: + +1. **Loggen en doorgaan** – Geschikt voor batch‑verwerking waar je alleen een audit‑trail nodig hebt. +2. **Afbreken bij kritieke lettertypen** – Gooi een uitzondering als een specifiek lettertype (bijv. een merk‑specifiek lettertype) ontbreekt. +3. **Lettertype on‑the‑fly insluiten** – Laad het ontbrekende lettertype uit een bekende map en registreer het bij Aspose.Words voordat je het document opnieuw laadt. + +### Voorbeeld: Afbreken bij een kritisch lettertype + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Voorbeeld: Ontbrekende lettertypen automatisch insluiten + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Waarom deze patronen helpen:** Door expliciet te bepalen wat er gebeurt wanneer een lettertype ontbreekt, elimineer je stille substituties die de branding of leesbaarheid kunnen ondermijnen. Dit is de essentie van **ontbrekende lettertypen afhandelen** op een gecontroleerde manier. + +--- + +## Volledig werkend voorbeeld + +Alles samengevoegd, hier is een enkel, kant‑klaar programma dat **hoe je lettertypen detecteert**, **hoe je waarschuwingen opvangt**, en een eenvoudige beleidsregel toont om **ontbrekende lettertypen** te **loggen**. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Verwacht resultaat:** Wanneer je het programma uitvoert tegen een document dat een lettertype refereert dat niet op de machine aanwezig is, zal de console elke substitutie‑waarschuwing weergeven. Als een waarschuwing een lettertype uit de `critical`‑set betreft, stopt het programma vroegtijdig, waardoor een gebrekkige PDF niet wordt gegenereerd. + +--- + +## Veelgestelde vragen (FAQ) + +| Vraag | Antwoord | +|-------|----------| +| *Heb ik een licentie voor Aspose.Words nodig om deze code te gebruiken?* | Ja, een geldige Aspose.Words‑licentie verwijdert evaluatiewatermerken en ontgrendelt de volledige functionaliteit. | +| *Kan deze aanpak ingebedde lettertypen detecteren?* | Ingebedde lettertypen maken al deel uit van het bestand, dus Aspose.Words zal geen substitutie‑waarschuwing geven. Je kunt `Document.FontInfos` gebruiken om ingebedde lettertypen te enumereren indien nodig. | +| *Wat als het ontbrekende lettertype een systeemlettertype is op Windows maar niet op Linux?* | Dezelfde waarschuwing wordt op Linux getoond omdat het lettertype daar niet geïnstalleerd is. Gebruik de “ontbrekende lettertypen afhandelen”‑strategie om de benodigde `.ttf`‑bestanden met je app mee te leveren. | +| *Is de waarschuwingverzamelaar thread‑veilig?* | De collector zelf is niet thread‑veilig; als je meerdere threads gebruikt, moet je een eigen synchronisatie‑mechanisme implementeren of een aparte collector per thread aanhouden. | + +{{< /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 0ae161b7d7..cbbcefcb5b 100644 --- a/words/english/net/basic-conversions/_index.md +++ b/words/english/net/basic-conversions/_index.md @@ -36,6 +36,7 @@ Basic Conversions walks you through basic document conversions using the Aspose. | [How to Export LaTeX from Word – Step‑by‑Step Guide](./how-to-export-latex-from-word-step-by-step-guide/) | Learn how to export LaTeX from Word using Aspose.Words for .NET. Step‑by‑step guide with code examples for developers. | | [convert word to pdf in C# using Aspose.Words – Guide](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Learn how to convert Word documents to PDF in C# using Aspose.Words. Step‑by‑step guide with code examples for developers. | | [Save Word as PDF with Aspose.Words – Complete C# Guide](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Learn how to save Word documents as PDF using Aspose.Words in C#. Detailed step‑by‑step guide with code examples. | +| [Convert DOCX to PDF in C# – Complete Programming Guide](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Learn how to convert DOCX to PDF in C# using Aspose.Words with a complete programming guide. Step‑by‑step code examples for developers. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/english/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/english/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..6e4bc8460b --- /dev/null +++ b/words/english/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: Convert DOCX to PDF in C# quickly. Learn how to save Word as PDF, load + docx document C#, and ensure PDF/UA‑2 compliance in minutes. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: en +og_description: Convert DOCX to PDF in C# instantly. This guide shows you how to save + Word as PDF, load docx document C# and meet PDF/UA‑2 standards. +og_title: Convert DOCX to PDF in C# – Step‑by‑Step Guide +tags: +- Aspose.Words +- C# +- PDF Generation +title: Convert DOCX to PDF in C# – Complete Programming Guide +url: /net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Convert DOCX to PDF in C# – Complete Programming Guide + +Ever needed to **convert DOCX to PDF** in a C# application but weren’t sure where to start? You’re not the only one. Many developers hit a wall when they discover that a simple “save as PDF” button in Word doesn’t translate to code. The good news? With a few lines of Aspose.Words (or any comparable library) you can automate the whole process, keep floating shapes inline, and even hit PDF/UA‑2 compliance without breaking a sweat. + +In this tutorial you’ll learn how to **save Word as PDF**, **load docx document C#**, and tweak the export options so the resulting file is ready for accessibility audits. By the end you’ll have a self‑contained, runnable program that turns any `.docx` file into a clean, standards‑compliant PDF. + +> **Why care?** +> Converting DOCX to PDF is a common requirement for invoicing systems, report generators, and document archiving pipelines. Automating it eliminates manual steps, reduces human error, and ensures every output looks exactly the same across platforms. + +--- + +## What You’ll Need + +- **.NET 6.0** or later (the code works on .NET Framework 4.6+ as well) +- **Aspose.Words for .NET** (free trial or licensed version) – you can install it via NuGet: `dotnet add package Aspose.Words` +- A sample `input.docx` placed in a folder you control (we’ll refer to it as `YOUR_DIRECTORY`) +- Visual Studio, VS Code, or any C# editor you like + +That’s it—no extra services, no REST calls. Just pure C#. + +--- + +## Step 1: Load the DOCX Document in C# + +Before you can **convert docx to pdf**, you need to bring the Word file into memory. The `Document` class does that for you. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Why this matters:** +Loading the file gives you a fully parsed object model—paragraphs, tables, floating shapes, everything. It’s the first step in any **load docx document c#** workflow, and it also validates that the file isn’t corrupted before you waste time on conversion. + +> **Pro tip:** If you’re dealing with user‑uploaded files, wrap the `new Document()` call in a try/catch block to handle malformed DOCX files gracefully. + +--- + +## Step 2: Configure PDF Save Options (Compliance & Shape Handling) + +You might wonder, “Do I need to tweak anything, or can I just call `Save`?” The short answer: you can, but setting the right options makes the PDF accessible and visually faithful. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Why this matters:** +- `ExportFloatingShapesAsInlineTag = true` prevents floating objects from being lost or mis‑aligned when the PDF is viewed on different devices. +- `Compliance = PdfCompliance.PdfUa2` ensures the output meets the PDF/UA‑2 standard, which is crucial for screen‑reader compatibility and legal archiving. + +If you don’t need accessibility, you can drop the `Compliance` line, but keeping it adds almost no overhead and future‑proofs your solution. + +--- + +## Step 3: Save the Document as PDF – The Core **Convert DOCX to PDF** Action + +Now that the document is loaded and the options are set, the actual conversion is a single method call. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**What you’ll see:** +Running the program produces `output.pdf` in the same folder. Open it with any PDF viewer and you’ll notice that: + +- All text, tables, and images appear exactly as in the original DOCX. +- Floating shapes are retained inline, preserving the layout. +- The file passes basic PDF/UA‑2 validation tools (e.g., Adobe Acrobat Preflight). + +--- + +## Full Working Example – From Top to Bottom + +Below is a complete, ready‑to‑run console app that demonstrates the entire flow. Copy‑paste it into a new C# project and hit **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Expected output in the console:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +And a tidy `output.pdf` sits beside your source file. + +--- + +## Frequently Asked Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Can I convert a DOCX stored in a `MemoryStream`?** | Absolutely. Use `new Document(stream)` instead of a file path. | +| **What if the DOCX contains macros?** | Aspose.Words ignores VBA macros by default; they won’t appear in the PDF. | +| **Do I need a license for production?** | The free trial adds a watermark after a certain page count. For commercial use, obtain a license to remove it. | +| **How do I change the PDF page size?** | Set `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` before saving. | +| **Is there a way to embed a custom font?** | Yes—add `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Pro Tips for a Smooth **Save Word as PDF** Experience + +- **Batch processing:** Wrap the conversion logic in a loop and feed it a list of DOCX paths. +- **Performance:** Reuse a single `PdfSaveOptions` instance when converting many files; it reduces GC pressure. +- **Logging:** Output the size of the generated PDF (`new FileInfo(outputPath).Length`) to monitor compression results. +- **Error handling:** Distinguish between `FileNotFoundException` (missing DOCX) and `UnauthorizedAccessException` (write permission issues). + +--- + +## Conclusion + +You now have a solid, production‑ready pattern to **convert DOCX to PDF** in C#. By loading the DOCX, configuring PDF save options, and invoking `Save`, you can **save Word as PDF**, respect layout nuances, and meet accessibility standards—all in under a dozen lines of code. + +Ready for the next challenge? Try swapping `PdfSaveOptions` for `ImageSaveOptions` to **save Word as PNG**, or explore the `HtmlSaveOptions` class to generate web‑ready output. Either way, the same **load docx document c#** fundamentals apply, making your codebase future‑proof. + +Happy coding, and may your PDFs always be compliant! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/english/net/programming-with-loadoptions/_index.md index 6a6636883a..9326fbb319 100644 --- a/words/english/net/programming-with-loadoptions/_index.md +++ b/words/english/net/programming-with-loadoptions/_index.md @@ -35,6 +35,7 @@ In these tutorials, you will learn how to use LoadOptions to load Word documents | [Load Chm Files In Word Document](./load-chm/) | Easily load CHM files into Word documents using Aspose.Words for .NET with this step-by-step tutorial. Perfect for consolidating your technical documentation. | | [how to recover docx with Aspose.Words – step by step](./how-to-recover-docx-with-aspose-words-step-by-step/) | Learn how to recover corrupted DOCX files using Aspose.Words for .NET with this detailed step-by-step guide. | | [Aspose Load Options – Load DOCX with Custom Font Settings](./aspose-load-options-load-docx-with-custom-font-settings/) | Learn how to load DOCX files with custom font settings using Aspose Load Options in .NET. Step-by-step guide. | +| [Recover Corrupted DOCX – Complete C# Guide to Fix and Save Files](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Learn how to recover and fix corrupted DOCX files using Aspose.Words for .NET with a comprehensive C# guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/english/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/english/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..5c6b2c7fc1 --- /dev/null +++ b/words/english/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Learn how to recover corrupted DOCX files in C# and save recovered document + safely. Step‑by‑step guide with Aspose.Words example. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: en +og_description: Recover corrupted DOCX files in C# and save recovered document with + Aspose.Words. Full code, explanations, and best‑practice tips. +og_title: Recover Corrupted DOCX – Step‑by‑Step C# Guide +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Recover Corrupted DOCX – Complete C# Guide to Fix and Save Files +url: /net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Recover Corrupted DOCX – Complete C# Guide to Fix and Save Files + +Ever tried to open a DOCX that looks fine in Explorer but throws an exception in your app? That’s the classic “corrupt Word file” nightmare, and it usually ends with a stack‑trace you don’t want to see. The good news? Aspose.Words gives you a **recover corrupted docx** feature that lets you keep working even when the file is damaged. + +In this tutorial we’ll walk through the exact steps to load a broken document, tell the library to keep going, and then **save recovered document** to a new, clean file. By the end you’ll know why the recovery mode matters, how to configure it, and what pitfalls to avoid—no vague “see the docs” shortcuts. + +## What You’ll Need + +- **Aspose.Words for .NET** (any recent version; 24.11 was used when writing this guide) +- A .NET development environment (Visual Studio, Rider, or VS Code with the C# extension) +- A sample DOCX that you suspect is corrupted (you can corrupt a file by opening it in a zip editor and deleting a part, just for testing) +- Basic C# knowledge—nothing fancy, just the ability to create a console app + +If you already have those, great—let’s jump straight into the solution. + +## Step 1: Set Up LoadOptions with the Right Recovery Strategy + +The heart of the fix is the `LoadOptions` object. It tells Aspose.Words how to behave when it encounters malformed XML or missing parts inside the DOCX package. The `RecoveryMode.RecoverAndContinue` flag is the most tolerant—it attempts to salvage whatever it can and skips over the rest. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Why this matters:** If you omit `LoadOptions` or use the default mode (`RecoveryMode.NoRecovery`), the `Document` constructor will throw an exception the moment it spots a problem. With `RecoverAndContinue`, the API swallows non‑critical errors and builds a partial document object you can still work with. + +> **Pro tip:** For huge batches of files, consider wrapping the load call in a `try/catch` block anyway—some errors are truly fatal (e.g., missing the `[Content_Types].xml` file) and cannot be recovered. + +## Step 2: Load the Potentially Corrupted DOCX + +Now that the options are ready, load your file. The constructor takes the file path and the `LoadOptions` we just prepared. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**What’s happening under the hood?** +Aspose.Words parses the ZIP container, reads each XML part, and tries to reconstruct the Open XML DOM. When it hits a broken part, the recovery engine logs a warning (visible in the console if you enable diagnostics) and continues. The resulting `Document` object may be missing a few paragraphs or images, but the rest of the content stays intact. + +## Step 3: Verify the Recovered Content (Optional but Recommended) + +Before you commit the file to disk, it’s wise to inspect a few nodes to make sure the important sections survived. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +If the output looks sensible, you’ve successfully **recover corrupted docx** content. If you notice missing sections, you can still decide whether to proceed—sometimes the lost bits are decorative only. + +## Step 4: Save the Recovered Document + +Here’s the part that most developers ask about: “How do I **save recovered document** without re‑introducing the original corruption?” The answer is simply to call `Document.Save` with a fresh path. Aspose.Words writes a brand‑new ZIP package, so any lingering broken parts are left behind. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Why this works:** The `Save` method serializes the in‑memory DOM back into a clean Open XML package. Since the broken bits were never loaded into the DOM (they were discarded during recovery), they never make it into the new file. The result is a healthy DOCX that opens in Word, Google Docs, or any other viewer. + +## Step 5: Automate the Process for Multiple Files (Bonus) + +In real‑world scenarios you often have a folder full of problematic files. Wrap the previous steps in a loop, and you’ll have a tiny recovery utility. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Now you can drop a whole directory of broken DOCX files into `C:\Docs\Batch` and let the script clean them up automatically. + +## Common Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Does this work with .doc files?** | The same `LoadOptions` class applies, but you must reference the older Word format (`doc`). Aspose.Words can still recover, though the error patterns differ. | +| **What if the file is password‑protected?** | Recovery won’t bypass encryption. You need to provide the password via `LoadOptions.Password`. | +| **Will images be lost?** | Only images that are part of a corrupted XML part may be omitted. The rest are preserved because they’re stored as separate binary streams. | +| **Can I log the warnings Aspose generates?** | Yes—set `LoadOptions.LoadFormat` to `LoadFormat.Docx` and subscribe to `Document.WarningCallback` to capture detailed messages. | +| **Is `RecoverAndContinue` safe for production?** | Generally yes, but test with your data. In mission‑critical pipelines you might want to flag documents that required recovery for later review. | + +## Full Working Example (Copy‑Paste Ready) + +Below is the complete program you can compile as a console app. It includes all the steps, error handling, and optional batch processing logic. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Expected result:** After running the program, `Recovered.docx` opens in Microsoft Word without the original error dialog. Any parts that were too damaged are simply omitted, but the main body, headings, and most images remain intact. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Conclusion + +We’ve covered everything you need to **recover corrupted docx** files using Aspose.Words, from configuring `LoadOptions` to safely **save recovered document**. The key takeaways are: + +- Use `RecoveryMode.RecoverAndContinue` to let the library ignore non‑critical errors. +- Verify the loaded content before committing it, especially when dealing with critical business documents. +- Saving the document generates a clean ZIP package, effectively stripping out the original corruption. +- The same pattern scales to batch operations, enabling automated cleanup of large document repositories. + +Ready for the next step? Try integrating this logic into a background service that monitors an upload folder, or experiment with the `WarningCallback` to build a report of which files needed recovery. The more you play with the API, the more you’ll appreciate how robust Aspose.Words is for real‑world document processing. + +Got a twist you’d like to share—maybe handling password‑protected files or merging recovered documents? Drop a comment below, and let’s keep the conversation going. 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/programming-with-markdownsaveoptions/_index.md b/words/english/net/programming-with-markdownsaveoptions/_index.md index 530ef54fd0..af5bc50686 100644 --- a/words/english/net/programming-with-markdownsaveoptions/_index.md +++ b/words/english/net/programming-with-markdownsaveoptions/_index.md @@ -33,6 +33,7 @@ Words Processing with MarkdownSaveOptions is an in-depth resource that walks you | [How to Export Markdown from Word – Complete C# Guide](./how-to-export-markdown-from-word-complete-c-guide/) | | | [How to Export Markdown from DOCX – Complete Guide](./how-to-export-markdown-from-docx-complete-guide/) | | | [How to Save Markdown from DOCX – Step‑by‑Step Guide](./how-to-save-markdown-from-docx-step-by-step-guide/) | Learn how to save DOCX as Markdown with a detailed step‑by‑step guide using Aspose.Words for .NET. | +| [Save Word as Markdown with Custom Image Folder – Full Guide](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Learn how to save Word documents as Markdown while storing images in a custom folder using Aspose.Words for .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/english/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/english/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..34b7cb81a7 --- /dev/null +++ b/words/english/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: Save Word as Markdown and extract images from docx using a callback. + Learn how to use callback to store markdown images folder efficiently. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: en +og_description: Save Word as Markdown and extract images from docx using a callback. + This guide shows how to use callback to create a markdown images folder. +og_title: Save Word as Markdown – Complete Step‑by‑Step Guide +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Save Word as Markdown with Custom Image Folder – Full Guide +url: /net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Save Word as Markdown – Complete Step‑by‑Step Guide + +Ever needed to **save Word as Markdown** but weren’t sure what to do with the embedded pictures? You’re not alone. In many projects the markdown output looks great—*until* you realize the image links are broken because the files never left the Word package. + +The good news is that Aspose.Words gives you a clean way to **extract images from docx** and place them exactly where you want, using a **callback** that lets you control the markdown images folder. In this tutorial we’ll walk through the whole process, from loading a `.docx` file to ending up with a tidy folder of PNGs (or whatever format you have) and a markdown file that points at them. + +By the end of this guide you’ll be able to: + +* Convert any Word document to Markdown with a single line of code. +* Automatically dump every picture into a dedicated `images` sub‑folder. +* Customize filenames so they never clash, even when the source contains dozens of pictures. + +No external scripts, no manual copy‑pasting—just pure C# and Aspose.Words. + +## Prerequisites + +Before we dive in, make sure you have: + +* **Aspose.Words for .NET** (the latest stable version; at the time of writing it’s 24.9). +* A .NET development environment (Visual Studio, Rider, or the `dotnet` CLI). +* A Word document (`.docx`) that contains at least one image—call it `DocWithImages.docx`. + +If you’ve never used Aspose.Words before, don’t worry. The library is fully managed, requires no COM interop, and works on .NET 6+ as well as .NET Framework 4.8. + +## Step 1 – Set Up the Project and Install the Package + +First, create a new console app (or add the code to an existing project). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tip:** If you’re targeting .NET 6, the default `Program.cs` already uses top‑level statements, which keeps the sample concise. + +## Step 2 – Create a Callback to Control Image Saving + +Aspose.Words calls `IResourceSavingCallback.ResourceSaving` for every external resource it needs to write (images, CSS, etc.). By implementing this interface we gain full authority over **how the markdown images folder** is built. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Why use a callback? + +* **Granular control** – you decide the folder structure and naming scheme. +* **Performance** – you write the stream once, avoiding the library’s double‑write fallback. +* **Flexibility** – you can add logging, image‑optimisation, or even upload to cloud storage at this point. + +## Step 3 – Load the Word Document + +Now that the callback is ready, we just need to point Aspose.Words at the source file. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **What if the file isn’t found?** +> `Document` will throw a `FileNotFoundException`. Wrap the load in a `try/catch` if you expect dynamic paths. + +## Step 4 – Wire Up the MarkdownSaveOptions + +The `MarkdownSaveOptions` class lets us plug the callback we just built. We also set the folder where the images will live relative to the markdown file. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +The `ImagesFolder` property tells Aspose to generate markdown links like `![Alt text](images/img_123.png)`. Because we also set `ResourceFileName` inside the callback, the actual file lands exactly there. + +## Step 5 – Save as Markdown and Verify the Result + +Finally, we write the markdown file. The callback will have already populated the `images` sub‑folder. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Expected output + +Running the program should print something like: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Open `Doc.md` in any markdown viewer; you’ll see image links that correctly point to the `images` folder. + +--- + +## Frequently Asked Questions (FAQ) + +### How to **extract images from docx** without converting to markdown? + +You can reuse the same `MyMarkdownResourceCallback` but feed it to `doc.Save("images.zip", SaveFormat.Zip)`. The callback will still fire for each image, letting you place them wherever you like. + +### What if I need **different image formats**? + +`args.FileName` already contains the original extension (`.png`, `.jpg`, etc.). If you must convert all images to a single format, add a conversion step inside `ResourceSaving` before writing the stream. + +### Can I **customize the markdown images folder** per document? + +Absolutely. The callback receives the folder path via its constructor, so you can instantiate a new callback with a different folder for each document in a batch process. + +### Does this work with **large documents** (hundreds of images)? + +Yes. The callback streams the image directly to disk, keeping memory usage low. Just ensure the target drive has enough space and that you’re not hitting OS file‑handle limits. + +--- + +## Full Working Example + +Below is the complete, copy‑and‑paste‑ready program. Replace `YOUR_DIRECTORY` with an absolute or relative path that suits your environment. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Run the program (`dotnet run`) and you’ll see a freshly created `Doc.md` alongside an `images` sub‑folder containing + +{{< /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-officemath/_index.md b/words/english/net/programming-with-officemath/_index.md index 78bb41568f..2a26e5ac7d 100644 --- a/words/english/net/programming-with-officemath/_index.md +++ b/words/english/net/programming-with-officemath/_index.md @@ -22,6 +22,7 @@ The Aspose.Words for .NET tutorials on Words Processing with OfficeMath will gui | Title | Description | | --- | --- | | [Math Equations](./math-equations/) | Learn how to configure mathematical equations in Word documents using Aspose.Words for .NET. Step-by-step guide with examples, FAQs, and more. | +| [Save docx as txt – Export Word Math to LaTeX in C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Learn how to export Word Math equations to LaTeX by saving a DOCX as TXT using C# and Aspose.Words for .NET. | {{< /blocks/products/pf/tutorial-page-section >}} @@ -32,4 +33,4 @@ The Aspose.Words for .NET tutorials on Words Processing with OfficeMath will gui {{< /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/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/english/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..168b8a6bd2 --- /dev/null +++ b/words/english/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-04-07 +description: Save docx as txt quickly and learn how to export math to LaTeX. Convert + word to txt, handle Office Math, and keep equations intact. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: en +og_description: Save docx as txt with LaTeX math export. A step‑by‑step C# tutorial + that shows how to convert word to txt and keep equations. +og_title: Save docx as txt – C# guide to export Word math +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Save docx as txt – Export Word Math to LaTeX in C# +url: /net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Save docx as txt – Export Word Math to LaTeX in C# + +Ever needed to **save docx as txt** but worried your equations would turn into a mess of symbols? You're not alone. Many developers hit that wall when they try to **convert word to txt** for downstream processing, especially when the source contains Office Math objects. + +The good news? With a few lines of C# and the right save options, you can preserve every equation as clean LaTeX, making the plain‑text file both human‑readable and ready for scientific pipelines. In this tutorial we’ll walk through the whole process, answer *how to export math* from a Word file, and show you *how to convert docx* without losing any math fidelity. + +## What You’ll Learn + +- Load a `.docx` file using Aspose.Words (or any compatible library). +- Configure `TxtSaveOptions` so Office Math is exported as LaTeX. +- Save the document as a `.txt` file that keeps equations intact. +- Tips for handling edge cases like hidden equations or large documents. +- A complete, runnable code sample you can copy‑paste right now. + +No fancy build tools, just a .NET project and the Aspose.Words NuGet package. Let’s get started. + +--- + +## Prerequisites + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6.0 or later | Modern language features and better performance. | +| Aspose.Words for .NET (NuGet) | Provides `Document`, `TxtSaveOptions`, and `OfficeMathExportMode`. | +| A Word file (`.docx`) that contains equations | To see the LaTeX export in action. | +| Basic C# knowledge | You’ll follow the code line‑by‑line. | + +If you haven’t added Aspose.Words yet, run: + +```bash +dotnet add package Aspose.Words +``` + +That’s it—no extra configuration needed. + +--- + +## Step 1: Load the DOCX File + +First, we need to bring the source document into memory. Think of this as opening a book before you start reading. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** Use an absolute path during testing to avoid “file not found” surprises. In production you’ll probably receive the path from a configuration file or a user upload. + +--- + +## Step 2: Configure TXT Save Options for Math Export + +By default, `TxtSaveOptions` dumps plain text and strips out Office Math. We don’t want that. Setting `OfficeMathExportMode` to `LaTeX` tells the library to translate each equation into its LaTeX representation. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Why LaTeX? + +LaTeX is the lingua franca of scientific publishing. When you later feed the `.txt` into a markdown processor, Jupyter notebook, or any LaTeX‑aware tool, the equations render perfectly. If you prefer plain Unicode symbols instead, you could switch to `OfficeMathExportMode.Unicode`, but LaTeX gives you the most control. + +--- + +## Step 3: Save the Document as a Plain‑Text File + +Now the magic happens. The `Save` method writes the document to disk using the options we just defined. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +After this line runs, `Math.txt` will contain: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Notice how the equation appears inside `\[` and `\]`—exactly what LaTeX expects. + +--- + +## How to Export Math from Complex Documents + +### Handling Hidden or Inline Equations + +Some Word files store equations inside hidden text frames. Aspose.Words treats them the same as visible equations, so the LaTeX export works automatically. However, if you notice missing equations, double‑check that the `Document` object isn’t set to ignore hidden content: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Large Documents and Memory Usage + +Saving a 500‑page thesis can consume a lot of RAM. To keep memory footprint low, you can stream the output: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming writes chunks to disk as they’re generated, preventing the whole file from living in memory at once. + +--- + +## Common Pitfalls & How to Avoid Them + +| Pitfall | Symptom | Fix | +|---------|---------|-----| +| Missing LaTeX brackets | Equations appear as raw code (`E = mc^{2}`) | Ensure `OfficeMathExportMode = LaTeX`. | +| Blank output file | Wrong path or insufficient permissions | Verify the output directory exists and is writable. | +| Garbled characters | File encoded in UTF‑8 without BOM on a system expecting ANSI | Add `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Equations disappear after conversion | Document loaded with `LoadOptions` that exclude math | Use default `LoadOptions` or set `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Full Working Example + +Below is the complete program you can compile and run. It includes error handling, path validation, and a small console log so you know everything succeeded. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Expected output** (excerpt from `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +You can now feed this file into any LaTeX‑aware processor, and the equations will render beautifully. + +--- + +## How to Convert DOCX to TXT Without Losing Formatting + +If you only need plain text and don’t care about math, simply omit the `OfficeMathExportMode` line: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +But remember, **how to export math** is the differentiator for scientific workflows. Keeping LaTeX intact is what makes the conversion truly useful. + +--- + +## Next Steps & Related Topics + +- **Batch conversion:** Wrap the code in a `foreach` loop to process an entire folder of `.docx` files. +- **Markdown generation:** Append `#` headers or `*` bullets to the text to produce ready‑to‑publish markdown. +- **PDF export:** Use `PdfSaveOptions` to create a PDF version alongside the txt. +- **Advanced LaTeX tweaking:** Post‑process the output with regex to replace `\[`/`\]` with `$...$` for inline equations. + +Each of these builds on the same foundation—loading a `Document` and choosing the right `SaveOptions`. Feel free to experiment; the API is flexible enough for most document‑automation scenarios. + +--- + +## Conclusion + +We’ve covered everything you need to **save docx as txt** while preserving every equation as LaTeX. From loading the source file, configuring `TxtSaveOptions` for **how to export math**, to writing the final plain‑text file, the entire workflow fits in a handful of concise C# statements. + +Now you can automate the conversion of Word reports, academic papers, or any document that mixes text and math, and feed the resulting `.txt` into downstream tools without losing any scientific detail. + +Give it a try, tweak the options for your own use case, and let us know in the comments how it worked for you. Happy coding! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/english/net/programming-with-pdfsaveoptions/_index.md index 24cc1c990d..b0aad4b79d 100644 --- a/words/english/net/programming-with-pdfsaveoptions/_index.md +++ b/words/english/net/programming-with-pdfsaveoptions/_index.md @@ -46,6 +46,7 @@ Whether you want to convert Word documents to PDF for online distribution, archi | [Update Last Printed Property in PDF Document](./update-last-printed-property/) | Learn how to update the last printed property in a PDF document using Aspose.Words for .NET with our step-by-step guide. | | [Render 3D DML 3DEffects in a PDF Document](./dml-3deffects-rendering/) | Learn how to render stunning 3D DML effects in PDF documents using Aspose.Words for .NET with this comprehensive step-by-step guide. | | [Interpolate Images in a PDF Document](./interpolate-images/) | Learn how to interpolate images in a PDF document using Aspose.Words for .NET with our step-by-step guide. Improve your PDF's image quality easily. | +| [Create Accessible PDF from Word – Step‑by‑Step Guide](./create-accessible-pdf-from-word-step-by-step-guide/) | Learn how to create accessible PDFs from Word documents using Aspose.Words for .NET in this step-by-step guide. | {{< /blocks/products/pf/tutorial-page-section >}} @@ -56,4 +57,4 @@ Whether you want to convert Word documents to PDF for online distribution, archi {{< /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/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/english/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..55dfefc77d --- /dev/null +++ b/words/english/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Create accessible PDF from a DOCX file in C#. Learn how to convert Word + to PDF, save docx as PDF, and ensure PDF/UA compliance. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: en +og_description: Create accessible PDF from Word in C#. This guide shows how to convert + Word to PDF, save docx as PDF, and meet PDF/UA standards. +og_title: Create Accessible PDF – Complete C# Tutorial +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Create Accessible PDF from Word – Step‑by‑Step Guide +url: /net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Create Accessible PDF from Word – Complete Programming Tutorial + +Ever needed to **create accessible PDF** from a Word document but weren’t sure which settings to tweak? You’re not alone. In many enterprises, compliance with PDF/UA (Universal Accessibility) is a hard requirement, and the usual “convert‑to‑PDF” button just won’t cut it. + +In this guide we’ll walk through a concise, end‑to‑end solution that **converts Word to PDF**, **saves docx as PDF**, and guarantees the output meets accessibility standards. No vague references—just the code you can copy‑paste, plus the “why” behind each line. + +> **TL;DR:** Load a `.docx`, set `PdfSaveOptions.Compliance` to `PdfUa1` (or `PdfUa2`), and call `Document.Save`. That’s all you need to **create accessible PDF** with Aspose.Words for .NET. + +--- + +## What You’ll Learn + +- How to **convert Word to PDF** while preserving headings, alt‑text, and reading order. +- The difference between `PdfUa1` and `PdfUa2` and when to pick each. +- How to **save docx as PDF** using just a few lines of C#. +- Common pitfalls (missing fonts, unsupported tags) and quick fixes. +- A ready‑to‑run code sample that you can drop into any .NET project. + +### Prerequisites + +- .NET 6 or later (the code also works on .NET Framework 4.7+). +- Aspose.Words for .NET installed via NuGet (`Install-Package Aspose.Words`). +- A Word file (`input.docx`) that already contains proper structure (styles, alt‑text for images). + +If you haven’t added Aspose.Words yet, run the command below in the Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +That’s the only external dependency you need. + +--- + +## Create Accessible PDF – Why Accessibility Matters + +When a PDF is marked as **PDF/UA** (Universal Accessibility), screen readers can navigate headings, tables, and form fields just like they would in the original Word file. This isn’t just a nice‑to‑have; many governments and corporations treat PDF/UA compliance as a legal requirement. + +Setting the `Compliance` property on `PdfSaveOptions` tells the library to embed the necessary tags, set the correct document language, and add a logical reading order. Skipping this step produces a “visual‑only” PDF that fails accessibility audits. + +--- + +## Convert Word to PDF with Aspose.Words + +Below is the simplest way to **convert Word to PDF** while keeping the document accessible. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**What’s happening here?** + +- `Document` reads the Word file, preserving all styles and structure. +- `PdfSaveOptions.Compliance` tells Aspose.Words to tag the output as PDF/UA. +- `doc.Save` writes the PDF to disk, embedding the tags automatically. + +> **Pro tip:** If your source Word file uses custom heading styles, make sure they’re mapped to built‑in heading levels (`Heading1`, `Heading2`, …). That ensures the generated PDF gets proper heading tags. + +--- + +## Save Docx as PDF – Configuring PDF/UA Compliance + +If you’re already familiar with the `PdfSaveOptions` class, you might wonder whether there are other switches that affect accessibility. A couple of useful properties: + +| Property | Effect on Accessibility | Typical Value | +|----------|------------------------|---------------| +| `Compliance` | Turns PDF/UA tagging on/off | `PdfCompliance.PdfUa1` or `PdfUa2` | +| `EmbedFullFonts` | Guarantees that readers see the intended typography | `true` (default) | +| `OptimizeOutput` | Reduces file size without stripping tags | `true` | + +You can extend the previous snippet like this: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Switching to `PdfUa2` adds support for newer PDF/UA features such as *artifact* tagging for decorative images. If you don’t need those, stick with `PdfUa1` for maximum compatibility with older assistive technologies. + +--- + +## Export Docx to PDF – Full Working Example + +Below is a self‑contained console app that demonstrates the entire flow, from loading a file to verifying the output. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Expected Result + +- A file named **Compliant.pdf** appears in the same folder as the executable. +- Opening the PDF in Adobe Acrobat Pro → *Tools → Accessibility → Full Check* should report **No accessibility issues** (assuming the source Word file was well‑structured). +- The PDF’s *Properties → Advanced* tab will show **PDF/UA** under the “PDF/A and PDF/UA compliance” section. + +--- + +## Common Edge Cases & How to Handle Them + +| Situation | Why it matters | Quick fix | +|-----------|----------------|-----------| +| **Missing fonts** | The PDF may fall back to a default font, breaking the visual layout. | Set `EmbedFullFonts = true` (already the default) and ensure the font files are accessible on the build machine. | +| **Images without alt‑text** | Screen readers will read “image” with no description. | Add `Alt Text` in Word (`Right‑click → Format Picture → Alt Text`) before conversion. | +| **Custom styles not recognized as headings** | PDF/UA needs proper heading tags. | Map custom styles to built‑in headings via `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Converting a 500‑page file can spike RAM usage. | Use `doc.Save(outputPath, options)` with `options.SaveFormat = SaveFormat.Pdf` and consider processing in chunks if you run into `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | Sometimes you want a quick visual PDF only. | Omit the `Compliance` setting or set it to `PdfCompliance.Pdf15`. | + +--- + +## Image Example (Alt Text Included) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*The alt‑text above reinforces the primary keyword and helps both users and AI models understand the image context.* + +--- + +## Frequently Asked Questions + +**Q: Does this work with .NET Core?** +A: Absolutely. Aspose.Words is cross‑platform; just reference the NuGet package in your .NET 6+ project. + +**Q: Can I batch‑process multiple DOCX files?** +A: Yes. Wrap the loading and saving logic inside a `foreach (var file in Directory.GetFiles(folder, "*.docx"))` loop. Remember to reuse a single `PdfSaveOptions` instance for performance. + +**Q: What if I need to add a custom PDF/UA tag that Aspose doesn’t emit automatically?** +A: Use the low‑level PDF API (`PdfSaveOptions.CustomProperties`) or post‑process the PDF with a library like iText 7 that allows manual tag insertion. + +--- + +## Conclusion + +You + +{{< /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 96816bbca5..080aada4e2 100644 --- a/words/english/net/working-with-fonts/_index.md +++ b/words/english/net/working-with-fonts/_index.md @@ -49,6 +49,7 @@ Whether you want to format text with different fonts, set font substitution rule | [Receive Warning Notification](./receive-warning-notification/) | Learn how to receive a warning notification when using Aspose.Words for .NET and manage any issues or warnings in your documents. | | [Resource Steam Font Source Example](./resource-steam-font-source-example/) | Learn how to use the Resource Stream Font Source to load custom fonts into Aspose.Words for .NET. | | [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 Detect Fonts in Aspose.Words – Complete Guide](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Learn how to detect fonts in Word documents using Aspose.Words for .NET with this comprehensive, step-by-step guide. | {{< /blocks/products/pf/tutorial-page-section >}} @@ -59,4 +60,4 @@ Whether you want to format text with different fonts, set font substitution rule {{< /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/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/english/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..197d35a9bd --- /dev/null +++ b/words/english/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-04-07 +description: Learn how to detect fonts and how to capture warnings while handling + missing fonts in C# using Aspose.Words. Step‑by‑step code included. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: en +og_description: How to detect fonts in Aspose.Words? Follow this tutorial to capture + warnings and handle missing fonts effortlessly. +og_title: How to Detect Fonts in Aspose.Words – Complete Guide +tags: +- Aspose.Words +- C# +- Font handling +title: How to Detect Fonts in Aspose.Words – Complete Guide +url: /net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to Detect Fonts in Aspose.Words – Complete Guide + +Ever wondered **how to detect fonts** that are missing from a Word document before you ship it to production? You're not alone. In many enterprise scenarios a stray font can break a PDF conversion pipeline or cause layout glitches that look unprofessional. The good news is that Aspose.Words gives you a built‑in way to sniff out those absent typefaces and surface clear warnings. + +In this tutorial we’ll walk through exactly **how to detect fonts**, **how to capture warnings**, and the best practices to **handle missing fonts** so your application stays robust. No external tools, no guesswork—just pure C# code you can drop into your project right now. + +> **Quick preview:** By the end you’ll have a reusable `FontSubstitutionWarningCollector` that gathers every font‑substitution message during document loading, and you’ll know how to react when a font can’t be found. + +--- + +## What You’ll Learn + +- How to configure `LoadOptions` to listen for font‑substitution warnings. +- How to capture those warnings in a custom collector class. +- How to process the collected warnings and decide whether to abort, log, or substitute fonts. +- Edge‑case handling for documents that reference remote or embedded fonts. + +**Prerequisites:** .NET 6+ (or .NET Framework 4.6+), Aspose.Words for .NET (latest version), and a basic familiarity with C#. If you’ve never used Aspose.Words before, don’t worry—this guide assumes only a few minutes of setup time. + +--- + +## How to Detect Fonts Using Aspose.Words LoadOptions + +The first step toward detecting missing fonts is to tell Aspose.Words to report them. This is done through the `LoadOptions.WarningCallback` property, which accepts any class implementing `IWarningCallback`. Below we create a tiny collector that stores every warning for later inspection. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Why this matters:** Without a warning callback, Aspose.Words silently substitutes missing fonts with a default one, and you never know a problem exists. By capturing `WarningType.FontSubstitution` we gain full visibility—exactly the data you need to **detect fonts** that aren’t available on the host machine. + +Now we hook the collector into `LoadOptions` and load a document: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Pro tip:** If you work with many documents in a batch, reuse the same `FontSubstitutionWarningCollector` instance but remember to call `Clear()` between loads to avoid mixing warnings from different files. + +--- + +## Capture Warnings During Document Load + +After the document is loaded, the collector already holds every font‑related warning. The next logical question is: *How do I capture warnings* in a way that’s easy to log or display? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typical output looks like: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**What this tells you:** Each line reveals the original font name and the fallback that Aspose.Words chose. Armed with this information you can decide whether the fallback is acceptable or if you need to embed the missing font manually. + +--- + +## Handle Missing Fonts Gracefully + +Detecting and capturing warnings is only half the battle. The real value comes when you **handle missing fonts** in a production‑ready way. Below are three common strategies: + +1. **Log and Continue** – Suitable for batch processing where you just need an audit trail. +2. **Abort on Critical Fonts** – Throw an exception if a particular font (e.g., a brand‑specific typeface) is missing. +3. **Embed the Font On‑The‑Fly** – Load the missing font from a known folder and register it with Aspose.Words before re‑loading the document. + +### Example: Abort on a Critical Font + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Example: Auto‑Embed Missing Fonts + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Why these patterns help:** By explicitly deciding what to do when a font is missing, you eliminate silent fallbacks that could compromise branding or readability. This is the essence of **handling missing fonts** in a controlled manner. + +--- + +## Complete Working Example + +Putting everything together, here’s a single, ready‑to‑run program that demonstrates **how to detect fonts**, **how to capture warnings**, and a simple policy to **handle missing fonts** by logging them. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Expected result:** When you run the program against a document that references a font not present on the machine, the console will list each substitution warning. If any warning involves a font from the `critical` set, the program exits early, preventing a flawed PDF from being generated. + +--- + +## Frequently Asked Questions (FAQs) + +| Question | Answer | +|----------|--------| +| *Do I need a license for Aspose.Words to use this code?* | Yes, a valid Aspose.Words license removes evaluation watermarks and unlocks full functionality. | +| *Can this approach detect embedded fonts?* | Embedded fonts are already part of the file, so Aspose.Words won’t raise a substitution warning. You can check `Document.FontInfos` to enumerate embedded fonts if needed. | +| *What if the missing font is a system font on Windows but not on Linux?* | The same warning will fire on Linux because the font isn’t installed there. Use the “handle missing fonts” strategy to ship the required `.ttf` files with your app. | +| *Is the warning collector thread + +{{< /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 b7640635ad..f15aa5b2e1 100644 --- a/words/french/net/basic-conversions/_index.md +++ b/words/french/net/basic-conversions/_index.md @@ -34,6 +34,7 @@ Conversions de base vous guide dans les conversions de documents de base avec la | [Enregistrer un PDF au format Jpeg](./pdf-to-jpeg/) | Convertissez facilement des PDF en JPEG avec Aspose.Words pour .NET. Suivez notre guide détaillé avec exemples et FAQ. Idéal pour les développeurs et les passionnés. | | [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. | +| [Convertir DOCX en PDF en C# – Guide de programmation complet](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Apprenez à convertir un fichier DOCX en PDF en C# avec Aspose.Words, guide complet é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. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/french/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..970b808bea --- /dev/null +++ b/words/french/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: Convertissez DOCX en PDF en C# rapidement. Apprenez à enregistrer Word + au format PDF, à charger un document DOCX en C#, et à garantir la conformité PDF/UA‑2 + en quelques minutes. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: fr +og_description: Convertissez DOCX en PDF en C# instantanément. Ce guide vous montre + comment enregistrer Word en PDF, charger un document DOCX en C# et respecter les + normes PDF/UA‑2. +og_title: Convertir DOCX en PDF avec C# – Guide étape par étape +tags: +- Aspose.Words +- C# +- PDF Generation +title: Convertir DOCX en PDF en C# – Guide complet de programmation +url: /fr/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Convertir DOCX en PDF en C# – Guide de programmation complet + +Vous avez déjà eu besoin de **convertir DOCX en PDF** dans une application C# sans savoir par où commencer ? Vous n'êtes pas seul. De nombreux développeurs se heurtent à un mur lorsqu'ils découvrent que le simple bouton « Enregistrer sous PDF » de Word ne se traduit pas en code. Bonne nouvelle : avec quelques lignes d’Aspose.Words (ou toute bibliothèque comparable) vous pouvez automatiser tout le processus, conserver les formes flottantes en ligne, et même atteindre la conformité PDF/UA‑2 sans effort. + +Dans ce tutoriel, vous apprendrez à **enregistrer Word en PDF**, à **charger un document docx C#**, et à ajuster les options d’exportation afin que le fichier résultant soit prêt pour les audits d’accessibilité. À la fin, vous disposerez d’un programme autonome, exécutable, qui transforme n’importe quel fichier `.docx` en un PDF propre et conforme aux normes. + +> **Pourquoi s’en préoccuper ?** +> La conversion DOCX → PDF est une exigence courante pour les systèmes de facturation, les générateurs de rapports et les pipelines d’archivage de documents. L’automatiser élimine les étapes manuelles, réduit les erreurs humaines et garantit que chaque sortie a exactement le même aspect sur toutes les plateformes. + +--- + +## Ce dont vous avez besoin + +- **.NET 6.0** ou version ultérieure (le code fonctionne également avec .NET Framework 4.6+) +- **Aspose.Words for .NET** (version d’essai gratuite ou version sous licence) – vous pouvez l’installer via NuGet : `dotnet add package Aspose.Words` +- Un fichier d’exemple `input.docx` placé dans un répertoire que vous contrôlez (nous l’appellerons `YOUR_DIRECTORY`) +- Visual Studio, VS Code ou tout éditeur C# de votre choix + +C’est tout — aucune dépendance externe, aucun appel REST. Juste du pur C#. + +--- + +## Étape 1 : Charger le document DOCX en C# + +Avant de pouvoir **convertir docx en pdf**, il faut charger le fichier Word en mémoire. La classe `Document` s’en charge pour vous. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Pourquoi c’est important :** +Le chargement du fichier vous fournit un modèle d’objet entièrement analysé — paragraphes, tableaux, formes flottantes, tout. C’est la première étape de tout flux **load docx document c#**, et cela valide également que le fichier n’est pas corrompu avant de perdre du temps en conversion. + +> **Astuce pro :** Si vous traitez des fichiers téléchargés par des utilisateurs, encapsulez l’appel `new Document()` dans un bloc try/catch afin de gérer gracieusement les fichiers DOCX malformés. + +--- + +## Étape 2 : Configurer les options d’enregistrement PDF (Conformité & Gestion des formes) + +Vous vous demandez peut‑être : « Dois‑je ajuster quelque chose, ou puis‑je simplement appeler `Save` ? » La réponse courte : vous pouvez, mais définir les bonnes options rend le PDF accessible et visuellement fidèle. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Pourquoi c’est important :** +- `ExportFloatingShapesAsInlineTag = true` empêche les objets flottants d’être perdus ou mal alignés lorsque le PDF est visualisé sur différents appareils. +- `Compliance = PdfCompliance.PdfUa2` garantit que la sortie respecte la norme PDF/UA‑2, essentielle pour la compatibilité avec les lecteurs d’écran et l’archivage légal. + +Si vous n’avez pas besoin d’accessibilité, vous pouvez supprimer la ligne `Compliance`, mais la garder n’ajoute pratiquement aucun surcoût et rend votre solution pérenne. + +--- + +## Étape 3 : Enregistrer le document en PDF – L’action principale **Convertir DOCX en PDF** + +Une fois le document chargé et les options définies, la conversion réelle se résume à un seul appel de méthode. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Ce que vous verrez :** +L’exécution du programme produit `output.pdf` dans le même répertoire. Ouvrez‑le avec n’importe quel lecteur PDF et vous constaterez que : + +- Tout le texte, les tableaux et les images apparaissent exactement comme dans le DOCX d’origine. +- Les formes flottantes sont conservées en ligne, préservant la mise en page. +- Le fichier passe les outils de validation PDF/UA‑2 de base (par ex. Adobe Acrobat Preflight). + +--- + +## Exemple complet fonctionnel – De A à Z + +Voici une application console complète, prête à être exécutée, qui illustre le flux entier. Copiez‑collez‑le dans un nouveau projet C# et appuyez sur **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Sortie attendue dans la console :** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Et un `output.pdf` bien propre se trouve à côté de votre fichier source. + +--- + +## Questions fréquentes & cas particuliers + +| Question | Réponse | +|----------|---------| +| **Puis‑je convertir un DOCX stocké dans un `MemoryStream` ?** | Bien sûr. Utilisez `new Document(stream)` au lieu d’un chemin de fichier. | +| **Que se passe‑t‑il si le DOCX contient des macros ?** | Aspose.Words ignore les macros VBA par défaut ; elles n’apparaissent pas dans le PDF. | +| **Ai‑je besoin d’une licence pour la production ?** | La version d’essai ajoute un filigrane après un certain nombre de pages. Pour un usage commercial, obtenez une licence afin de le supprimer. | +| **Comment changer la taille de page du PDF ?** | Définissez `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` avant l’enregistrement. | +| **Existe‑t‑il un moyen d’incorporer une police personnalisée ?** | Oui — ajoutez `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Astuces pro pour une expérience **Enregistrer Word en PDF** fluide + +- **Traitement par lots :** Enveloppez la logique de conversion dans une boucle et alimentez‑la avec une liste de chemins DOCX. +- **Performance :** Réutilisez une même instance de `PdfSaveOptions` lors de la conversion de nombreux fichiers ; cela réduit la pression sur le GC. +- **Journalisation :** Affichez la taille du PDF généré (`new FileInfo(outputPath).Length`) pour suivre les résultats de compression. +- **Gestion des erreurs :** Distinguez `FileNotFoundException` (DOCX manquant) de `UnauthorizedAccessException` (problèmes de permission d’écriture). + +--- + +## Conclusion + +Vous disposez désormais d’un modèle solide, prêt pour la production, afin de **convertir DOCX en PDF** en C#. En chargeant le DOCX, en configurant les options d’enregistrement PDF, puis en appelant `Save`, vous pouvez **enregistrer Word en PDF**, respecter les subtilités de mise en page et satisfaire les normes d’accessibilité — le tout en moins d’une douzaine de lignes de code. + +Prêt pour le prochain défi ? Essayez de remplacer `PdfSaveOptions` par `ImageSaveOptions` pour **enregistrer Word en PNG**, ou explorez la classe `HtmlSaveOptions` afin de générer une sortie prête pour le web. Dans tous les cas, les fondamentaux **load docx document c#** restent les mêmes, rendant votre base de code pérenne. + +Bon codage, et que vos PDFs soient toujours conformes ! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/french/net/programming-with-loadoptions/_index.md index d3a4b45d43..7828318778 100644 --- a/words/french/net/programming-with-loadoptions/_index.md +++ b/words/french/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Dans ces tutoriels, vous apprendrez à utiliser LoadOptions pour charger des doc | [Charger des fichiers Chm dans un document Word](./load-chm/) | Chargez facilement des fichiers CHM dans des documents Word avec Aspose.Words pour .NET grâce à ce tutoriel étape par étape. Idéal pour consolider votre documentation technique. | | [Comment récupérer un docx avec Aspose.Words – étape par étape](./how-to-recover-docx-with-aspose-words-step-by-step/) | Apprenez à récupérer un fichier DOCX endommagé avec Aspose.Words pour .NET grâce à ce guide détaillé étape par étape. | | [Aspose Load Options – Charger un DOCX avec des paramètres de police personnalisés](./aspose-load-options-load-docx-with-custom-font-settings/) | Apprenez à charger un fichier DOCX en spécifiant des polices personnalisées grâce aux LoadOptions d'Aspose.Words pour .NET. | +| [Récupérer un DOCX corrompu – Guide complet C# pour réparer et enregistrer les fichiers](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Apprenez à réparer et sauvegarder des fichiers DOCX corrompus avec Aspose.Words pour .NET en C#. Guide étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/french/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..bfc6acaea9 --- /dev/null +++ b/words/french/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-07 +description: Apprenez à récupérer des fichiers DOCX corrompus en C# et à enregistrer + le document récupéré en toute sécurité. Guide étape par étape avec un exemple Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: fr +og_description: Récupérez les fichiers DOCX corrompus en C# et enregistrez le document + récupéré avec Aspose.Words. Code complet, explications et conseils de bonnes pratiques. +og_title: Récupérer un DOCX corrompu – Guide C# étape par étape +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Récupérer les DOCX corrompus – Guide complet C# pour réparer et enregistrer + les fichiers +url: /fr/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Récupérer un DOCX corrompu – Guide complet C# pour réparer et enregistrer les fichiers + +Vous avez déjà essayé d’ouvrir un DOCX qui semble correct dans l’Explorateur mais qui lève une exception dans votre application ? C’est le cauchemar classique du « fichier Word corrompu », et cela se termine généralement par une trace de pile que vous ne voulez pas voir. Bonne nouvelle : Aspose.Words propose une fonctionnalité **recover corrupted docx** qui vous permet de continuer à travailler même lorsque le fichier est endommagé. + +Dans ce tutoriel, nous passerons en revue les étapes exactes pour charger un document endommagé, indiquer à la bibliothèque de poursuivre, puis **save recovered document** dans un nouveau fichier propre. À la fin, vous comprendrez pourquoi le mode de récupération est important, comment le configurer et quels pièges éviter—sans raccourcis vagues du type « voir la documentation ». + +## Ce dont vous avez besoin + +- **Aspose.Words for .NET** (toute version récente ; 24.11 a été utilisée lors de la rédaction de ce guide) +- Un environnement de développement .NET (Visual Studio, Rider ou VS Code avec l’extension C#) +- Un fichier DOCX que vous suspectez d’être corrompu (vous pouvez corrompre un fichier en l’ouvrant dans un éditeur zip et en supprimant une partie, juste pour tester) +- Connaissances de base en C#—rien de sophistiqué, juste la capacité de créer une application console + +Si vous avez déjà tout cela, super—passons directement à la solution. + +## Étape 1 : Configurer LoadOptions avec la bonne stratégie de récupération + +Le cœur de la solution est l’objet `LoadOptions`. Il indique à Aspose.Words comment se comporter lorsqu’il rencontre du XML mal formé ou des parties manquantes dans le package DOCX. Le drapeau `RecoveryMode.RecoverAndContinue` est le plus tolérant —il tente de récupérer tout ce qu’il peut et ignore le reste. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Pourquoi c’est important :** Si vous omettez `LoadOptions` ou utilisez le mode par défaut (`RecoveryMode.NoRecovery`), le constructeur `Document` lèvera une exception dès qu’il détectera un problème. Avec `RecoverAndContinue`, l’API absorbe les erreurs non critiques et construit un objet `Document` partiel avec lequel vous pouvez toujours travailler. + +> **Astuce :** Pour de gros lots de fichiers, envisagez quand même d’envelopper l’appel de chargement dans un bloc `try/catch`—certaines erreurs sont réellement fatales (par ex., l’absence du fichier `[Content_Types].xml`) et ne peuvent pas être récupérées. + +## Étape 2 : Charger le DOCX potentiellement corrompu + +Maintenant que les options sont prêtes, chargez votre fichier. Le constructeur prend le chemin du fichier et le `LoadOptions` que nous venons de préparer. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Que se passe-t-il en coulisses ?** +Aspose.Words analyse le conteneur ZIP, lit chaque partie XML et tente de reconstruire le DOM Open XML. Lorsqu’il rencontre une partie défectueuse, le moteur de récupération consigne un avertissement (visible dans la console si vous activez le diagnostic) et continue. L’objet `Document` résultant peut manquer quelques paragraphes ou images, mais le reste du contenu reste intact. + +## Étape 3 : Vérifier le contenu récupéré (Optionnel mais recommandé) + +Avant d’écrire le fichier sur le disque, il est judicieux d’inspecter quelques nœuds pour s’assurer que les sections importantes ont survécu. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Si la sortie semble sensée, vous avez réussi à **recover corrupted docx** le contenu. Si vous remarquez des sections manquantes, vous pouvez toujours décider de poursuivre—parfois les parties perdues ne sont que décoratives. + +## Étape 4 : Enregistrer le document récupéré + +Voici la partie que la plupart des développeurs demandent : « Comment **save recovered document** sans réintroduire la corruption d’origine ? » La réponse est simplement d’appeler `Document.Save` avec un nouveau chemin. Aspose.Words écrit un tout nouveau package ZIP, de sorte que les parties défectueuses restantes sont laissées derrière. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Pourquoi cela fonctionne :** La méthode `Save` sérialise le DOM en mémoire dans un package Open XML propre. Puisque les parties corrompues n’ont jamais été chargées dans le DOM (elles ont été rejetées pendant la récupération), elles n’apparaissent jamais dans le nouveau fichier. Le résultat est un DOCX sain qui s’ouvre dans Word, Google Docs ou tout autre visualiseur. + +## Étape 5 : Automatiser le processus pour plusieurs fichiers (Bonus) + +Dans les scénarios réels, vous avez souvent un dossier rempli de fichiers problématiques. Enveloppez les étapes précédentes dans une boucle, et vous obtiendrez un petit utilitaire de récupération. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Vous pouvez maintenant déposer tout un répertoire de fichiers DOCX cassés dans `C:\Docs\Batch` et laisser le script les nettoyer automatiquement. + +## Questions fréquentes & cas particuliers + +| Question | Réponse | +|----------|---------| +| **Cela fonctionne-t-il avec les fichiers .doc ?** | La même classe `LoadOptions` s’applique, mais vous devez référencer le format Word plus ancien (`doc`). Aspose.Words peut toujours récupérer, bien que les modèles d’erreurs diffèrent. | +| **Et si le fichier est protégé par mot de passe ?** | La récupération ne contourne pas le chiffrement. Vous devez fournir le mot de passe via `LoadOptions.Password`. | +| **Les images seront‑elles perdues ?** | Seules les images faisant partie d’une partie XML corrompue peuvent être omises. Les autres sont conservées car elles sont stockées comme flux binaires séparés. | +| **Puis‑je journaliser les avertissements générés par Aspose ?** | Oui—définissez `LoadOptions.LoadFormat` sur `LoadFormat.Docx` et abonnez‑vous à `Document.WarningCallback` pour capturer les messages détaillés. | +| **`RecoverAndContinue` est‑il sûr en production ?** | En général oui, mais testez avec vos données. Dans des pipelines critiques, vous pourriez vouloir marquer les documents qui ont nécessité une récupération pour une révision ultérieure. | + +## Exemple complet fonctionnel (Copier‑coller) + +Voici le programme complet que vous pouvez compiler en tant qu’application console. Il inclut toutes les étapes, la gestion des erreurs et la logique optionnelle de traitement par lots. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Résultat attendu :** Après l’exécution du programme, `Recovered.docx` s’ouvre dans Microsoft Word sans la boîte de dialogue d’erreur d’origine. Les parties trop endommagées sont simplement omises, mais le corps principal, les titres et la plupart des images restent intacts. + +![exemple de récupération de docx corrompu](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – comparaison visuelle avant/après") + +## Conclusion + +Nous avons couvert tout ce dont vous avez besoin pour **recover corrupted docx** à l’aide d’Aspose.Words, de la configuration de `LoadOptions` à l’enregistrement sécurisé du **save recovered document**. Les points clés sont : + +- Utilisez `RecoveryMode.RecoverAndContinue` pour laisser la bibliothèque ignorer les erreurs non critiques. +- Vérifiez le contenu chargé avant de le sauvegarder, surtout lorsqu’il s’agit de documents métier critiques. +- L’enregistrement du document génère un package ZIP propre, éliminant effectivement la corruption d’origine. +- Le même schéma s’étend aux opérations par lots, permettant un nettoyage automatisé de grands dépôts de documents. + +Prêt pour l’étape suivante ? Essayez d’intégrer cette logique dans un service en arrière‑plan qui surveille un dossier de téléchargement, ou expérimentez avec le `WarningCallback` pour créer un rapport des fichiers ayant nécessité une récupération. Plus vous jouerez avec l’API, plus vous apprécierez la robustesse d’Aspose.Words pour le traitement de documents en conditions réelles. + +Vous avez une variante à partager—peut‑être la gestion de fichiers protégés par mot de passe ou la fusion de documents récupérés ? Laissez un commentaire ci‑dessous, et continuons la discussion. 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/programming-with-markdownsaveoptions/_index.md b/words/french/net/programming-with-markdownsaveoptions/_index.md index 0439984b15..de04d30227 100644 --- a/words/french/net/programming-with-markdownsaveoptions/_index.md +++ b/words/french/net/programming-with-markdownsaveoptions/_index.md @@ -25,6 +25,7 @@ Traitement de texte avec MarkdownSaveOptions est une ressource approfondie qui v | [Définir le dossier d'images](./set-images-folder/) | Convertissez des documents Word en Markdown avec un alignement de tableaux correct grâce à Aspose.Words pour .NET. Suivez notre guide détaillé pour des résultats parfaits. | | [Comment utiliser Markdown : convertir DOCX en Markdown avec des équations LaTeX](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | Apprenez à convertir des fichiers DOCX en Markdown en conservant les équations LaTeX grâce à Aspose.Words pour .NET. | | [Enregistrer docx en markdown – Guide complet C# avec extraction d'images](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | Apprenez à enregistrer des fichiers DOCX en Markdown tout en extrayant les images grâce à Aspose.Words pour .NET. | +| [Enregistrer Word en Markdown avec dossier d'images personnalisé – Guide complet](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Apprenez à enregistrer des documents Word en Markdown en spécifiant un dossier d'images personnalisé avec Aspose.Words pour .NET. | ### [Enregistrer Word en PDF et récupérer un Word corrompu – Convertir Word en Markdown – Convertir Word en Markdown en C#](./save-word-as-pdf-and-recover-corrupted-word-convert-word-to/) diff --git a/words/french/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/french/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..a253986384 --- /dev/null +++ b/words/french/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,293 @@ +--- +category: general +date: 2026-04-07 +description: Enregistrez le document Word au format Markdown et extrayez les images + du docx à l'aide d'un callback. Apprenez comment utiliser le callback pour stocker + efficacement le dossier d'images Markdown. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: fr +og_description: Enregistrez Word au format Markdown et extrayez les images d’un docx + à l’aide d’un callback. Ce guide montre comment utiliser le callback pour créer + un dossier d’images Markdown. +og_title: Enregistrer Word au format Markdown – Guide complet étape par étape +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Enregistrer Word au format Markdown avec un dossier d'images personnalisé – + Guide complet +url: /fr/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Enregistrer Word en Markdown – Guide complet étape par étape + +Vous avez déjà eu besoin de **save Word as Markdown** mais vous ne saviez pas quoi faire avec les images intégrées ? Vous n'êtes pas seul. Dans de nombreux projets, la sortie markdown a l'air parfaite—*jusqu'à* ce que vous vous rendiez compte que les liens d'images sont cassés parce que les fichiers n'ont jamais quitté le package Word. + +La bonne nouvelle, c'est qu'Aspose.Words vous offre une méthode propre pour **extract images from docx** et les placer exactement où vous le souhaitez, en utilisant un **callback** qui vous permet de contrôler le dossier des images markdown. Dans ce tutoriel, nous parcourrons l'ensemble du processus, du chargement d'un fichier `.docx` jusqu'à l'obtention d'un dossier bien rangé de PNG (ou tout autre format que vous avez) et d'un fichier markdown qui y fait référence. + +À la fin de ce guide, vous serez capable de : + +* Convertir n'importe quel document Word en Markdown avec une seule ligne de code. +* Déverser automatiquement chaque image dans un sous‑dossier dédié `images`. +* Personnaliser les noms de fichiers afin qu'ils ne se chevauchent jamais, même lorsque la source contient des dizaines d'images. + +Pas de scripts externes, pas de copier‑coller manuel—juste du pur C# et Aspose.Words. + +## Prérequis + +Avant de commencer, assurez‑vous d'avoir : + +* **Aspose.Words for .NET** (la dernière version stable ; au moment de la rédaction, c’est la 24.9). +* Un environnement de développement .NET (Visual Studio, Rider ou le CLI `dotnet`). +* Un document Word (`.docx`) contenant au moins une image—appelez‑le `DocWithImages.docx`. + +Si vous n'avez jamais utilisé Aspose.Words auparavant, ne vous inquiétez pas. La bibliothèque est entièrement gérée, ne nécessite aucune interop COM, et fonctionne sur .NET 6+ ainsi que sur .NET Framework 4.8. + +## Étape 1 – Configurer le projet et installer le package + +Tout d'abord, créez une nouvelle application console (ou ajoutez le code à un projet existant). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Astuce :** Si vous ciblez .NET 6, le `Program.cs` par défaut utilise déjà les instructions de niveau supérieur, ce qui rend l'exemple concis. + +## Étape 2 – Créer un callback pour contrôler l'enregistrement des images + +Aspose.Words appelle `IResourceSavingCallback.ResourceSaving` pour chaque ressource externe qu'il doit écrire (images, CSS, etc.). En implémentant cette interface, nous obtenons le plein contrôle sur **la façon dont le dossier des images markdown** est construit. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Pourquoi utiliser un callback ? + +* **Contrôle granulaire** – vous décidez de la structure du dossier et du schéma de nommage. +* **Performance** – vous écrivez le flux une seule fois, évitant le re‑écriture de secours de la bibliothèque. +* **Flexibilité** – vous pouvez ajouter de la journalisation, de l'optimisation d'images, ou même télécharger vers un stockage cloud à ce stade. + +## Étape 3 – Charger le document Word + +Maintenant que le callback est prêt, il ne nous reste plus qu'à indiquer à Aspose.Words le fichier source. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Et si le fichier n’est pas trouvé ?** +> `Document` lèvera une `FileNotFoundException`. Enveloppez le chargement dans un `try/catch` si vous prévoyez des chemins dynamiques. + +## Étape 4 – Configurer les MarkdownSaveOptions + +La classe `MarkdownSaveOptions` nous permet d’y brancher le callback que nous venons de créer. Nous définissons également le dossier où les images seront stockées, relatif au fichier markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +La propriété `ImagesFolder` indique à Aspose de générer des liens markdown comme `![Alt text](images/img_123.png)`. Comme nous définissons également `ResourceFileName` dans le callback, le fichier réel atterrit exactement à cet endroit. + +## Étape 5 – Enregistrer en Markdown et vérifier le résultat + +Enfin, nous écrivons le fichier markdown. Le callback aura déjà rempli le sous‑dossier `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Sortie attendue + +L'exécution du programme devrait afficher quelque chose comme : + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Ouvrez `Doc.md` dans n'importe quel visualiseur markdown ; vous verrez des liens d'images qui pointent correctement vers le dossier `images`. + +--- + +## Questions fréquemment posées (FAQ) + +### Comment **extract images from docx** sans convertir en markdown ? + +Vous pouvez réutiliser le même `MyMarkdownResourceCallback` mais le passer à `doc.Save("images.zip", SaveFormat.Zip)`. Le callback sera toujours déclenché pour chaque image, vous permettant de les placer où vous le souhaitez. + +### Et si j'ai besoin de **different image formats** ? + +`args.FileName` contient déjà l'extension originale (`.png`, `.jpg`, etc.). Si vous devez convertir toutes les images en un seul format, ajoutez une étape de conversion dans `ResourceSaving` avant d'écrire le flux. + +### Puis‑je **customize the markdown images folder** par document ? + +Absolument. Le callback reçoit le chemin du dossier via son constructeur, vous pouvez donc instancier un nouveau callback avec un dossier différent pour chaque document dans un traitement par lots. + +### Cette méthode fonctionne‑t‑elle avec des **documents volumineux** (des centaines d'images) ? + +Oui. Le callback transmet l'image directement sur le disque, maintenant une faible utilisation de la mémoire. Assurez‑vous simplement que le disque cible dispose de suffisamment d'espace et que vous n'atteignez pas les limites de descripteurs de fichiers du système d'exploitation. + +## Exemple complet fonctionnel + +Ci‑dessous se trouve le programme complet, prêt à copier‑coller. Remplacez `YOUR_DIRECTORY` par un chemin absolu ou relatif adapté à votre environnement. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Exécutez le programme (`dotnet run`) et vous verrez un `Doc.md` fraîchement créé à côté d'un sous‑dossier `images` contenant + +{{< /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-officemath/_index.md b/words/french/net/programming-with-officemath/_index.md index adea5736dd..7c2b095fbf 100644 --- a/words/french/net/programming-with-officemath/_index.md +++ b/words/french/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ Les tutoriels Aspose.Words pour .NET sur le traitement de texte avec OfficeMath | Titre | Description | | --- | --- | | [Équations mathématiques](./math-equations/) | Apprenez à configurer des équations mathématiques dans des documents Word avec Aspose.Words pour .NET. Guide étape par étape avec exemples, FAQ et plus encore. | - +| [Enregistrer un docx en txt – Exporter les formules Word vers LaTeX en C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Apprenez à enregistrer un document Word au format texte et à convertir les équations OfficeMath en LaTeX avec C# et Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/french/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..e731147575 --- /dev/null +++ b/words/french/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-04-07 +description: Enregistrez rapidement un docx en txt et apprenez à exporter les formules + en LaTeX. Convertissez Word en txt, gérez Office Math et conservez les équations + intactes. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: fr +og_description: Enregistrez le docx en txt avec exportation des formules LaTeX. Un + tutoriel C# étape par étape qui montre comment convertir Word en txt tout en conservant + les équations. +og_title: Enregistrer un docx en txt – Guide C# pour exporter les formules Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Enregistrer le docx en txt – Exporter les formules Word en LaTeX en C# +url: /fr/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Enregistrer docx en txt – Exporter les formules Word en LaTeX avec C# + +Vous avez déjà eu besoin de **save docx as txt** mais vous craigniez que vos équations ne se transforment en un fouillis de symboles ? Vous n'êtes pas seul. De nombreux développeurs rencontrent ce problème lorsqu'ils essaient de **convert word to txt** pour un traitement en aval, surtout lorsque la source contient des objets Office Math. + +Bonne nouvelle ? Avec quelques lignes de C# et les bonnes options d’enregistrement, vous pouvez conserver chaque équation sous forme de LaTeX propre, rendant le fichier texte à la fois lisible par l’homme et prêt pour les pipelines scientifiques. Dans ce tutoriel, nous parcourrons l’ensemble du processus, répondrons à *how to export math* depuis un fichier Word, et vous montrerons *how to convert docx* sans perdre la fidélité des formules. + +## Ce que vous allez apprendre + +- Charger un fichier `.docx` en utilisant Aspose.Words (ou toute bibliothèque compatible). +- Configurer `TxtSaveOptions` afin que Office Math soit exporté en LaTeX. +- Enregistrer le document en tant que fichier `.txt` qui conserve les équations intactes. +- Conseils pour gérer les cas particuliers comme les équations cachées ou les documents volumineux. +- Un exemple de code complet et exécutable que vous pouvez copier‑coller immédiatement. + +Pas d’outils de construction sophistiqués, juste un projet .NET et le package NuGet Aspose.Words. Commençons. + +--- + +## Prérequis + +| Exigence | Pourquoi c’est important | +|----------|---------------------------| +| .NET 6.0 ou ultérieur | Fonctionnalités modernes du langage et meilleures performances. | +| Aspose.Words pour .NET (NuGet) | Fournit `Document`, `TxtSaveOptions` et `OfficeMathExportMode`. | +| Un fichier Word (`.docx`) contenant des équations | Pour voir l’exportation LaTeX en action. | +| Connaissances de base en C# | Vous suivrez le code ligne par ligne. | + +Si vous n’avez pas encore ajouté Aspose.Words, exécutez : + +```bash +dotnet add package Aspose.Words +``` + +C’est tout — aucune configuration supplémentaire requise. + +--- + +## Étape 1 : Charger le fichier DOCX + +Tout d’abord, nous devons charger le document source en mémoire. Considérez cela comme l’ouverture d’un livre avant de commencer à le lire. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Astuce :** Utilisez un chemin absolu pendant les tests pour éviter les surprises « fichier introuvable ». En production, vous recevrez probablement le chemin depuis un fichier de configuration ou un téléchargement d’utilisateur. + +--- + +## Étape 2 : Configurer les options d’enregistrement TXT pour l’exportation des formules + +Par défaut, `TxtSaveOptions` génère du texte brut et supprime Office Math. Ce n’est pas ce que nous voulons. Définir `OfficeMathExportMode` sur `LaTeX` indique à la bibliothèque de traduire chaque équation en sa représentation LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Pourquoi LaTeX ? + +LaTeX est la lingua franca de la publication scientifique. Lorsque vous injecterez plus tard le `.txt` dans un processeur markdown, un notebook Jupyter ou tout outil compatible LaTeX, les équations seront rendues parfaitement. Si vous préférez des symboles Unicode simples, vous pouvez passer à `OfficeMathExportMode.Unicode`, mais LaTeX vous offre le plus de contrôle. + +--- + +## Étape 3 : Enregistrer le document en tant que fichier texte brut + +Maintenant, la magie opère. La méthode `Save` écrit le document sur le disque en utilisant les options que nous venons de définir. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Après l’exécution de cette ligne, `Math.txt` contiendra : + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Remarquez comment l’équation apparaît entre `\[` et `\]` — exactement ce que LaTeX attend. + +--- + +## Comment exporter les formules depuis des documents complexes + +### Gestion des équations cachées ou en ligne + +Certains fichiers Word stockent les équations dans des cadres de texte cachés. Aspose.Words les traite de la même façon que les équations visibles, donc l’exportation LaTeX fonctionne automatiquement. Cependant, si vous constatez des équations manquantes, vérifiez que l’objet `Document` n’est pas configuré pour ignorer le contenu caché : + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Documents volumineux et utilisation de la mémoire + +Enregistrer une thèse de 500 pages peut consommer beaucoup de RAM. Pour garder une empreinte mémoire faible, vous pouvez diffuser la sortie : + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Le streaming écrit des morceaux sur le disque au fur et à mesure qu’ils sont générés, empêchant le fichier complet de résider en mémoire d’un seul coup. + +--- + +## Pièges courants et comment les éviter + +| Piège | Symptôme | Solution | +|-------|----------|----------| +| Manque de crochets LaTeX | Les équations apparaissent comme du code brut (`E = mc^{2}`) | Assurez‑vous que `OfficeMathExportMode = LaTeX`. | +| Fichier de sortie vide | Chemin incorrect ou permissions insuffisantes | Vérifiez que le répertoire de sortie existe et est accessible en écriture. | +| Caractères corrompus | Fichier encodé en UTF‑8 sans BOM sur un système s’attendant à de l’ANSI | Ajoutez `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Disparition des équations après conversion | Document chargé avec `LoadOptions` qui exclut les formules | Utilisez les `LoadOptions` par défaut ou définissez `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Exemple complet fonctionnel + +Voici le programme complet que vous pouvez compiler et exécuter. Il inclut la gestion des erreurs, la validation des chemins, et un petit journal console pour vous indiquer que tout s’est bien passé. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Sortie attendue** (extrait de `Math.txt`) : + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Vous pouvez maintenant fournir ce fichier à n’importe quel processeur compatible LaTeX, et les équations seront rendues magnifiquement. + +--- + +## Comment convertir DOCX en TXT sans perdre le formatage + +Si vous avez seulement besoin de texte brut et que les formules ne vous intéressent pas, il suffit d’omettre la ligne `OfficeMathExportMode` : + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Mais rappelez‑vous, **how to export math** est le facteur différenciant pour les flux de travail scientifiques. Conserver le LaTeX intact est ce qui rend la conversion réellement utile. + +--- + +## Prochaines étapes et sujets associés + +- **Conversion par lots :** Enveloppez le code dans une boucle `foreach` pour traiter un dossier complet de fichiers `.docx`. +- **Génération Markdown :** Ajoutez des en‑têtes `#` ou des puces `*` au texte pour produire du markdown prêt à publier. +- **Export PDF :** Utilisez `PdfSaveOptions` pour créer une version PDF en même temps que le txt. +- **Ajustement avancé de LaTeX :** Post‑traitez la sortie avec des expressions régulières pour remplacer `\[`/`\]` par `$...$` pour les équations en ligne. + +Chacune de ces étapes repose sur la même base — charger un `Document` et choisir les bons `SaveOptions`. N’hésitez pas à expérimenter ; l’API est suffisamment flexible pour la plupart des scénarios d’automatisation de documents. + +--- + +## Conclusion + +Nous avons couvert tout ce dont vous avez besoin pour **save docx as txt** tout en conservant chaque équation en LaTeX. De la charge du fichier source, à la configuration de `TxtSaveOptions` pour **how to export math**, jusqu’à l’écriture du fichier texte final, l’ensemble du flux de travail tient dans quelques instructions C# concises. + +Vous pouvez maintenant automatiser la conversion de rapports Word, d’articles académiques ou de tout document mêlant texte et formules, et fournir le `.txt` résultant aux outils en aval sans perdre aucun détail scientifique. + +Essayez‑le, ajustez les options selon votre cas d’utilisation, et dites‑nous dans les commentaires comment cela a fonctionné pour vous. Bon codage ! + +![Diagramme montrant le pipeline de conversion de DOCX → traitement C# → TXT avec des formules LaTeX](https://example.com/images/save-docx-as-txt.png "pipeline de conversion docx en txt") + +{{< /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-pdfsaveoptions/_index.md b/words/french/net/programming-with-pdfsaveoptions/_index.md index 8b3260f861..b07efed9f0 100644 --- a/words/french/net/programming-with-pdfsaveoptions/_index.md +++ b/words/french/net/programming-with-pdfsaveoptions/_index.md @@ -29,23 +29,23 @@ Que vous souhaitiez convertir des documents Word en PDF pour une distribution en | [Ajouter une signature numérique au PDF à l'aide du titulaire du certificat](./digitally-signed-pdf-using-certificate-holder/) |Sécurisez vos fichiers PDF avec une signature numérique grâce à Aspose.Words pour .NET. Suivez ce guide étape par étape pour ajouter facilement une signature numérique à vos PDF. | | [Incorporer des polices dans un document PDF](./embedded-all-fonts/) Intégrez facilement des polices dans vos documents PDF grâce à Aspose.Words pour .NET grâce à ce guide détaillé, étape par étape. Assurez une apparence cohérente sur tous les appareils. | [Intégrer des sous-ensembles de polices dans un document PDF](./embedded-subset-fonts/) Réduisez la taille de vos fichiers PDF en intégrant uniquement les sous-ensembles de polices nécessaires grâce à Aspose.Words pour .NET. Suivez notre guide étape par étape pour optimiser efficacement vos PDF. | -| [Réduire la taille du PDF en désactivant les polices intégrées](./disable-embed-windows-fonts/) Réduisez la taille de vos PDF en désactivant les polices intégrées avec Aspose.Words pour .NET. Suivez notre guide étape par étape pour optimiser vos documents et les stocker et les partager efficacement. -| [Optimisez la taille de votre PDF en ignorant les polices Arial et Times Roman intégrées](./skip-embedded-arial-and-times-roman-fonts/) Optimisez la taille de vos PDF en ignorant les polices Arial et Times Roman intégrées grâce à Aspose.Words pour .NET. Suivez ce guide étape par étape pour optimiser vos fichiers PDF. +| [Réduire la taille du PDF en désactivant les polices intégrées](./disable-embed-windows-fonts/) Réduisez la taille de vos PDF en désactivant les polices intégrées avec Aspose.Words pour .NET. Suivez notre guide étape par étape pour optimiser vos documents et les stocker et les partager efficacement. | +| [Optimisez la taille de votre PDF en ignorant les polices Arial et Times Roman intégrées](./skip-embedded-arial-and-times-roman-fonts/) Optimisez la taille de vos PDF en ignorant les polices Arial et Times Roman intégrées grâce à Aspose.Words pour .NET. Suivez ce guide étape par étape pour optimiser vos fichiers PDF. | | [Réduire la taille du fichier PDF en n'incorporant pas les polices principales](./avoid-embedding-core-fonts/) | Découvrez comment réduire la taille de vos fichiers PDF en n'incorporant pas les polices principales avec Aspose.Words pour .NET. Suivez notre guide étape par étape pour optimiser vos PDF. | | [Échapper à l'URI dans un document PDF](./escape-uri/) Apprenez à échapper les URI dans les PDF avec Aspose.Words pour .NET. Ce guide détaillé vous guide pas à pas. | | [Exporter les signets d'en-tête, de pied de page et de document Word vers un document PDF](./export-header-footer-bookmarks/) | Apprenez à exporter les signets d'en-tête et de pied de page d'un document Word vers PDF à l'aide d'Aspose.Words pour .NET avec notre guide étape par étape. | | [Réduire la taille du PDF en adaptant les polices WMF à la taille du métafichier](./scale-wmf-fonts-to-metafile-size/) | Guide étape par étape pour réduire la taille du PDF en mettant à l'échelle les polices WMF à la taille du métafichier lors de la conversion au format PDF avec Aspose.Words pour .NET. | | [Améliorez le positionnement du texte PDF grâce à un positionnement de texte supplémentaire](./additional-text-positioning/) | Apprenez à améliorer le positionnement du texte de vos PDF avec Aspose.Words pour .NET en quelques étapes simples. Améliorez l'apparence de votre document. | | [Convertir un document Word en PDF 1.7](./conversion-to-pdf-17/) | Convertissez facilement vos documents Word en PDF 1.7 grâce à Aspose.Words pour .NET. Suivez ce guide pour garantir l'accessibilité universelle et la mise en forme professionnelle de vos documents. | -| [Réduisez la taille des documents PDF grâce au sous-échantillonnage des images](./downsampling-images/) Réduisez la taille de vos documents PDF en sous-échantillonnant les images avec Aspose.Words pour .NET. Optimisez vos PDF pour des temps de téléchargement plus rapides. +| [Réduisez la taille des documents PDF grâce au sous-échantillonnage des images](./downsampling-images/) Réduisez la taille de vos documents PDF en sous-échantillonnant les images avec Aspose.Words pour .NET. Optimisez vos PDF pour des temps de téléchargement plus rapides. | | [Définir les options de plan dans un document PDF](./set-outline-options/) | Apprenez à définir les options de plan dans un document PDF avec Aspose.Words pour .NET. Améliorez la navigation PDF en configurant les niveaux de titre et les plans étendus. | | [Exporter les propriétés personnalisées dans un document PDF](./custom-properties-export/) | Apprenez à exporter des propriétés personnalisées dans un document PDF à l'aide d'Aspose.Words pour .NET avec notre guide détaillé étape par étape. | -| [Exporter la structure d'un document Word vers un document PDF](./export-document-structure/) Exportez la structure d'un document Word au format PDF avec Aspose.Words pour .NET. Suivez notre guide étape par étape pour préserver la mise en page du document et améliorer la navigation dans les PDF. +| [Exporter la structure d'un document Word vers un document PDF](./export-document-structure/) Exportez la structure d'un document Word au format PDF avec Aspose.Words pour .NET. Suivez notre guide étape par étape pour préserver la mise en page du document et améliorer la navigation dans les PDF. | | [Compression d'image dans un document PDF](./image-compression/) Apprenez à compresser des images dans des documents PDF avec Aspose.Words pour .NET. Suivez ce guide pour optimiser la taille et la qualité de vos fichiers. | | [Mettre à jour la dernière propriété imprimée dans le document PDF](./update-last-printed-property/) | Apprenez à mettre à jour la dernière propriété imprimée dans un document PDF à l'aide d'Aspose.Words pour .NET avec notre guide étape par étape. | | [Rendu 3D DML 3DEffects dans un document PDF](./dml-3deffects-rendering/) | Apprenez à restituer de superbes effets DML 3D dans des documents PDF à l'aide d'Aspose.Words pour .NET avec ce guide complet étape par étape. | | [Interpoler des images dans un document PDF](./interpolate-images/) | Découvrez comment interpoler des images dans un document PDF avec Aspose.Words pour .NET grâce à notre guide étape par étape. Améliorez facilement la qualité d'image de votre PDF. | - +| [Créer un PDF accessible à partir de Word – Guide étape par étape](./create-accessible-pdf-from-word-step-by-step-guide/) | Apprenez à créer un PDF accessible à partir d'un document Word avec Aspose.Words pour .NET, étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/french/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..e4b0fdf4b6 --- /dev/null +++ b/words/french/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,219 @@ +--- +category: general +date: 2026-04-07 +description: Créer un PDF accessible à partir d’un fichier DOCX en C#. Apprenez comment + convertir Word en PDF, enregistrer le DOCX en PDF et garantir la conformité PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: fr +og_description: Créer un PDF accessible à partir de Word en C#. Ce guide montre comment + convertir Word en PDF, enregistrer un docx en PDF et respecter les normes PDF/UA. +og_title: Créer un PDF accessible – Tutoriel complet C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Créer un PDF accessible à partir de Word – Guide étape par étape +url: /fr/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Créer un PDF accessible à partir de Word – Tutoriel complet de programmation + +Vous avez déjà eu besoin de **créer un PDF accessible** à partir d'un document Word mais vous n'étiez pas sûr des paramètres à ajuster ? Vous n'êtes pas seul. Dans de nombreuses entreprises, la conformité au PDF/UA (Universal Accessibility) est une exigence stricte, et le bouton habituel « convertir en PDF » ne suffit pas. + +Dans ce guide, nous parcourrons une solution concise, de bout en bout, qui **convertit Word en PDF**, **enregistre le docx en PDF**, et garantit que la sortie respecte les normes d'accessibilité. Pas de références vagues — seulement le code que vous pouvez copier‑coller, ainsi que le « pourquoi » de chaque ligne. + +> **TL;DR :** Chargez un `.docx`, définissez `PdfSaveOptions.Compliance` sur `PdfUa1` (ou `PdfUa2`), et appelez `Document.Save`. C’est tout ce dont vous avez besoin pour **créer un PDF accessible** avec Aspose.Words pour .NET. + +## Ce que vous allez apprendre + +- Comment **convertir Word en PDF** tout en préservant les titres, le texte alternatif et l'ordre de lecture. +- La différence entre `PdfUa1` et `PdfUa2` et quand choisir l'un ou l'autre. +- Comment **enregistrer le docx en PDF** en utilisant seulement quelques lignes de C#. +- Les pièges courants (polices manquantes, balises non prises en charge) et les solutions rapides. +- Un exemple de code prêt à l'exécution que vous pouvez intégrer dans n'importe quel projet .NET. + +### Prérequis + +- .NET 6 ou ultérieur (le code fonctionne également sur .NET Framework 4.7+). +- Aspose.Words pour .NET installé via NuGet (`Install-Package Aspose.Words`). +- Un fichier Word (`input.docx`) qui contient déjà une structure correcte (styles, texte alternatif pour les images). + +Si vous n'avez pas encore ajouté Aspose.Words, exécutez la commande ci-dessous dans la console du gestionnaire de packages : + +```powershell +Install-Package Aspose.Words +``` + +C’est la seule dépendance externe dont vous avez besoin. + +## Créer un PDF accessible – Pourquoi l'accessibilité est importante + +Lorsqu'un PDF est marqué comme **PDF/UA** (Universal Accessibility), les lecteurs d'écran peuvent naviguer parmi les titres, les tableaux et les champs de formulaire comme ils le feraient dans le fichier Word original. Ce n'est pas seulement un plus ; de nombreux gouvernements et entreprises considèrent la conformité au PDF/UA comme une exigence légale. + +Définir la propriété `Compliance` sur `PdfSaveOptions` indique à la bibliothèque d'incorporer les balises nécessaires, de définir la langue correcte du document et d'ajouter un ordre de lecture logique. Ignorer cette étape produit un PDF « visuel uniquement » qui échoue aux audits d'accessibilité. + +## Convertir Word en PDF avec Aspose.Words + +Voici la façon la plus simple de **convertir Word en PDF** tout en conservant l'accessibilité du document. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Que se passe-t-il ici ?** + +- `Document` lit le fichier Word, en préservant tous les styles et la structure. +- `PdfSaveOptions.Compliance` indique à Aspose.Words de baliser la sortie en PDF/UA. +- `doc.Save` écrit le PDF sur le disque, en incorporant les balises automatiquement. + +> **Pro tip :** Si votre fichier Word source utilise des styles de titre personnalisés, assurez‑vous qu'ils sont mappés aux niveaux de titre intégrés (`Heading1`, `Heading2`, …). Cela garantit que le PDF généré obtient les balises de titre appropriées. + +## Enregistrer le Docx en PDF – Configurer la conformité PDF/UA + +Si vous êtes déjà familier avec la classe `PdfSaveOptions`, vous vous demandez peut‑être s'il existe d'autres paramètres qui affectent l'accessibilité. Voici quelques propriétés utiles : + +| Propriété | Effet sur l'accessibilité | Valeur typique | +|-----------|---------------------------|----------------| +| `Compliance` | Active ou désactive le balisage PDF/UA | `PdfCompliance.PdfUa1` ou `PdfUa2` | +| `EmbedFullFonts` | Garantit que les lecteurs voient la typographie prévue | `true` (par défaut) | +| `OptimizeOutput` | Réduit la taille du fichier sans supprimer les balises | `true` | + +Vous pouvez étendre l'extrait précédent comme suit : + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Passer à `PdfUa2` ajoute la prise en charge des nouvelles fonctionnalités PDF/UA telles que le balisage *artifact* pour les images décoratives. Si vous n'en avez pas besoin, restez sur `PdfUa1` pour une compatibilité maximale avec les technologies d'assistance plus anciennes. + +## Exporter le Docx en PDF – Exemple complet fonctionnel + +Voici une application console autonome qui démontre le flux complet, du chargement d'un fichier à la vérification de la sortie. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Résultat attendu + +- Un fichier nommé **Compliant.pdf** apparaît dans le même dossier que l'exécutable. +- L'ouverture du PDF dans Adobe Acrobat Pro → *Outils → Accessibilité → Vérification complète* doit indiquer **Aucun problème d'accessibilité** (en supposant que le fichier Word source était bien structuré). +- L'onglet *Propriétés → Avancé* du PDF affichera **PDF/UA** sous la section « conformité PDF/A et PDF/UA ». + +## Cas limites courants et comment les gérer + +| Situation | Pourquoi c'est important | Solution rapide | +|-----------|--------------------------|-----------------| +| **Polices manquantes** | Le PDF peut revenir à une police par défaut, perturbant la mise en page visuelle. | Définissez `EmbedFullFonts = true` (déjà la valeur par défaut) et assurez‑vous que les fichiers de police sont accessibles sur la machine de construction. | +| **Images sans texte alternatif** | Les lecteurs d'écran liront « image » sans description. | Ajoutez le `Alt Text` dans Word (`Clic droit → Format de l'image → Texte alternatif`) avant la conversion. | +| **Styles personnalisés non reconnus comme titres** | PDF/UA nécessite des balises de titre appropriées. | Mappez les styles personnalisés aux titres intégrés via `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Documents volumineux entraînant une pression mémoire** | Convertir un fichier de 500 pages peut augmenter l'utilisation de RAM. | Utilisez `doc.Save(outputPath, options)` avec `options.SaveFormat = SaveFormat.Pdf` et envisagez de traiter par morceaux si vous rencontrez `OutOfMemoryException`. | +| **Besoin d'exporter le docx en pdf sans accessibilité** | Parfois vous voulez simplement un PDF visuel rapide. | Omettez le paramètre `Compliance` ou définissez‑le à `PdfCompliance.Pdf15`. | + +## Exemple d'image (Texte alternatif inclus) + +![Capture d'écran montrant l'arbre de balises PDF/UA dans Adobe Acrobat – démontre que nous avons créé avec succès un PDF accessible](https://example.com/images/accessible-pdf-screenshot.png) + +*Le texte alternatif ci‑dessus renforce le mot‑clé principal et aide à la fois les utilisateurs et les modèles d'IA à comprendre le contexte de l'image.* + +## Questions fréquemment posées + +**Q : Cela fonctionne-t-il avec .NET Core ?** +R : Absolument. Aspose.Words est multiplateforme ; il suffit de référencer le package NuGet dans votre projet .NET 6+. + +**Q : Puis‑je traiter plusieurs fichiers DOCX en lot ?** +R : Oui. Enveloppez la logique de chargement et d'enregistrement dans une boucle `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. N'oubliez pas de réutiliser une seule instance de `PdfSaveOptions` pour les performances. + +**Q : Que faire si je dois ajouter une balise PDF/UA personnalisée qu'Aspose n'émet pas automatiquement ?** +R : Utilisez l'API PDF de bas niveau (`PdfSaveOptions.CustomProperties`) ou post‑traitez le PDF avec une bibliothèque comme iText 7 qui permet l'insertion manuelle de balises. + +## Conclusion + +Vous + +{{< /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 84a3f00a8a..6f9e22d39a 100644 --- a/words/french/net/working-with-fonts/_index.md +++ b/words/french/net/working-with-fonts/_index.md @@ -39,16 +39,16 @@ Que vous souhaitiez formater du texte avec différentes polices, définir des r | [Définir les dossiers de polices, le système et le dossier personnalisé](./set-fonts-folders-system-and-custom-folder/) Apprenez à définir les dossiers de polices système et personnalisées dans les documents Word à l'aide d'Aspose.Words pour .NET, en vous assurant que vos documents s'affichent correctement dans différents environnements. | | [Définir les dossiers de polices avec priorité](./set-fonts-folders-with-priority/) | Apprenez à définir des dossiers de polices prioritaires dans vos documents Word avec Aspose.Words pour .NET. Notre guide garantit un rendu parfait de vos documents à chaque fois. | | [Définir le dossier des polices True Type](./set-true-type-fonts-folder/) | Apprenez à définir un dossier de polices True Type dans vos documents Word avec Aspose.Words pour .NET. Suivez notre guide détaillé étape par étape pour une gestion cohérente des polices. | -| [Spécifier la police par défaut lors du rendu](./specify-default-font-when-rendering/) | Apprenez à spécifier une police par défaut lors du rendu de documents Word avec Aspose.Words pour .NET. Assurez une apparence cohérente des documents sur toutes les plateformes. | -| [Paramètres de police avec options de chargement](./font-settings-with-load-options/) Apprenez à gérer les paramètres de police avec les options de chargement dans Aspose.Words pour .NET. Guide étape par étape pour les développeurs afin de garantir une apparence cohérente des polices dans les documents Word. +| [Spécifier la police par défaut lors du rendu](./specify-default-font-when-rendering/) | Apprenez à spécifier une police par défaut lors du rendu de documents Word avec Aspose.Words pour .NET. Assur une apparence cohérente des documents sur toutes les plateformes. | +| [Paramètres de police avec options de chargement](./font-settings-with-load-options/) Apprenez à gérer les paramètres de police avec les options de chargement dans Aspose.Words pour .NET. Guide étape par étape pour les développeurs afin de garantir une apparence cohérente des polices dans les documents Word. | | [Définir le dossier des polices](./set-fonts-folder/) | Apprenez à définir un dossier de polices personnalisé dans Aspose.Words pour .NET pour garantir que vos documents Word sont rendus correctement sans polices manquantes. | | [Paramètres de police Instance par défaut](./font-settings-default-instance/) | Dans ce didacticiel, découvrez comment configurer les paramètres de police par défaut dans un document Word avec Aspose.Words pour .NET. | -| [Obtenir la liste des polices disponibles](./get-list-of-available-fonts/) Découvrez comment obtenir la liste des polices disponibles avec Aspose.Words pour .NET grâce à ce tutoriel détaillé, étape par étape. Améliorez vos compétences en gestion des polices. +| [Obtenir la liste des polices disponibles](./get-list-of-available-fonts/) Découvrez comment obtenir la liste des polices disponibles avec Aspose.Words pour .NET grâce à ce tutoriel détaillé, étape par étape. Améliorez vos compétences en gestion des polices. | | [Recevoir des notifications de polices](./receive-notifications-of-fonts/) | Découvrez comment recevoir des notifications de polices manquantes ou remplacées lors de l'utilisation d'Aspose.Words pour .NET. | | [Recevoir une notification d'avertissement](./receive-warning-notification/) Apprenez à recevoir une notification d'avertissement lors de l'utilisation d'Aspose.Words pour .NET et à gérer les problèmes ou les avertissements dans vos documents. | | [Exemple de source de police Steam](./resource-steam-font-source-example/) | Apprenez à utiliser la source de polices Resource Stream pour charger des polices personnalisées dans Aspose.Words pour .NET. | | [Obtenir une substitution sans suffixes](./get-substitution-without-suffixes/) | Dans ce didacticiel, découvrez comment obtenir des remplacements sans suffixe dans un document Word avec Aspose.Words pour .NET. | - +| [Comment détecter les polices dans Aspose.Words – Guide complet](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Apprenez à détecter les polices utilisées dans un document Word avec Aspose.Words pour .NET grâce à ce guide complet étape par étape. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/french/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/french/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..5dbb67d1e7 --- /dev/null +++ b/words/french/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-04-07 +description: Apprenez à détecter les polices et à capturer les avertissements lors + de la gestion des polices manquantes en C# avec Aspose.Words. Code étape par étape + inclus. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: fr +og_description: Comment détecter les polices dans Aspose.Words ? Suivez ce tutoriel + pour capturer les avertissements et gérer les polices manquantes sans effort. +og_title: Comment détecter les polices dans Aspose.Words – Guide complet +tags: +- Aspose.Words +- C# +- Font handling +title: Comment détecter les polices dans Aspose.Words – Guide complet +url: /fr/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment détecter les polices dans Aspose.Words – Guide complet + +Vous vous êtes déjà demandé **comment détecter les polices** manquantes dans un document Word avant de le mettre en production ? Vous n'êtes pas seul. Dans de nombreux scénarios d'entreprise, une police errante peut interrompre une chaîne de conversion PDF ou provoquer des défauts de mise en page qui semblent peu professionnels. La bonne nouvelle, c’est qu’Aspose.Words vous offre un moyen intégré de repérer ces polices absentes et d’afficher des avertissements clairs. + +Dans ce tutoriel, nous allons parcourir exactement **comment détecter les polices**, **comment capturer les avertissements**, et les meilleures pratiques pour **gérer les polices manquantes** afin que votre application reste robuste. Aucun outil externe, aucune supposition — juste du code C# pur que vous pouvez intégrer immédiatement à votre projet. + +> **Aperçu rapide :** À la fin, vous disposerez d’un `FontSubstitutionWarningCollector` réutilisable qui recueille chaque message de substitution de police lors du chargement du document, et vous saurez comment réagir lorsqu’une police est introuvable. + +--- + +## Ce que vous apprendrez + +- Comment configurer `LoadOptions` pour écouter les avertissements de substitution de police. +- Comment capturer ces avertissements dans une classe collectrice personnalisée. +- Comment traiter les avertissements collectés et décider d’abandonner, de consigner ou de substituer les polices. +- Gestion des cas limites pour les documents qui référencent des polices distantes ou incorporées. + +**Prérequis :** .NET 6+ (ou .NET Framework 4.6+), Aspose.Words pour .NET (dernière version), et une connaissance de base du C#. Si vous n’avez jamais utilisé Aspose.Words auparavant, ne vous inquiétez pas — ce guide suppose seulement quelques minutes de configuration. + +## Comment détecter les polices avec Aspose.Words LoadOptions + +La première étape pour détecter les polices manquantes consiste à indiquer à Aspose.Words de les signaler. Cela se fait via la propriété `LoadOptions.WarningCallback`, qui accepte toute classe implémentant `IWarningCallback`. Ci-dessous, nous créons un petit collecteur qui stocke chaque avertissement pour une inspection ultérieure. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Pourquoi c’est important :** Sans rappel d’avertissement, Aspose.Words substitue silencieusement les polices manquantes par une police par défaut, et vous ne savez jamais qu’un problème existe. En capturant `WarningType.FontSubstitution`, vous obtenez une visibilité complète — exactement les données dont vous avez besoin pour **détecter les polices** qui ne sont pas disponibles sur la machine hôte. + +Nous branchons maintenant le collecteur dans `LoadOptions` et chargeons un document : + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Astuce :** Si vous traitez de nombreux documents en lot, réutilisez la même instance de `FontSubstitutionWarningCollector` mais n’oubliez pas d’appeler `Clear()` entre les chargements pour éviter de mélanger les avertissements provenant de fichiers différents. + +## Capturer les avertissements lors du chargement du document + +Après le chargement du document, le collecteur possède déjà chaque avertissement lié aux polices. La question logique suivante est : *Comment capturer les avertissements* de manière à les consigner ou les afficher facilement ? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +La sortie typique ressemble à : + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Ce que cela indique :** Chaque ligne révèle le nom de la police d’origine et la police de secours que Aspose.Words a choisie. Fort de cette information, vous pouvez décider si la substitution est acceptable ou si vous devez incorporer manuellement la police manquante. + +## Gérer les polices manquantes avec élégance + +Détecter et capturer les avertissements n’est que la moitié du combat. La vraie valeur réside dans la façon dont vous **gérez les polices manquantes** de manière prête pour la production. Voici trois stratégies courantes : + +1. **Consigner et continuer** – Convient au traitement par lots où vous avez simplement besoin d’une trace d’audit. +2. **Interrompre sur les polices critiques** – Lancer une exception si une police particulière (par ex., une police propre à la marque) est manquante. +3. **Incorporer la police à la volée** – Charger la police manquante depuis un dossier connu et l’enregistrer auprès d’Aspose.Words avant de recharger le document. + +### Exemple : Interrompre sur une police critique + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Exemple : Incorporation automatique des polices manquantes + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Pourquoi ces modèles sont utiles :** En décidant explicitement quoi faire lorsqu’une police est manquante, vous éliminez les substitutions silencieuses qui pourraient compromettre l’image de marque ou la lisibilité. C’est l’essence de **la gestion des polices manquantes** de manière contrôlée. + +## Exemple complet fonctionnel + +En réunissant tous les éléments, voici un programme unique, prêt à l’exécution, qui démontre **comment détecter les polices**, **comment capturer les avertissements**, et une politique simple pour **gérer les polices manquantes** en les consignant. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Résultat attendu :** Lorsque vous exécutez le programme sur un document qui référence une police non présente sur la machine, la console affichera chaque avertissement de substitution. Si un avertissement concerne une police appartenant à l’ensemble `critical`, le programme se termine prématurément, empêchant la génération d’un PDF défectueux. + +## Questions fréquemment posées (FAQ) + +| Question | Réponse | +|----------|--------| +| *Ai-je besoin d’une licence pour Aspose.Words afin d’utiliser ce code ?* | Oui, une licence valide d’Aspose.Words supprime les filigranes d’évaluation et débloque toutes les fonctionnalités. | +| *Cette approche peut‑elle détecter les polices incorporées ?* | Les polices incorporées font déjà partie du fichier, donc Aspose.Words ne déclenchera pas d’avertissement de substitution. Vous pouvez vérifier `Document.FontInfos` pour énumérer les polices incorporées si nécessaire. | +| *Que faire si la police manquante est une police système sous Windows mais pas sous Linux ?* | Le même avertissement sera déclenché sous Linux parce que la police n’est pas installée. Utilisez la stratégie « gérer les polices manquantes » pour fournir les fichiers `.ttf` requis avec votre application. | +| *Le collecteur d’avertissements est‑il thread* | | + +{{< /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 de0998541a..7adc5596bb 100644 --- a/words/german/net/basic-conversions/_index.md +++ b/words/german/net/basic-conversions/_index.md @@ -25,16 +25,17 @@ | [Konvertieren Sie Docx in RTF](./docx-to-rtf/) | Erfahren Sie in unserer Schritt-für-Schritt-Anleitung, wie Sie DOCX mit Aspose.Words für .NET in RTF konvertieren. Einfache Konvertierung für nahtlose Dokumentenverarbeitung. | | [Word-Datei in PDF konvertieren](./docx-to-pdf/) Erfahren Sie in unserem Leitfaden, wie Sie Word-Dateien mit Aspose.Words für .NET einfach in PDF konvertieren. Perfekt für Entwickler, die eine schnelle und zuverlässige Dokumentkonvertierung wünschen. | | [Word in PDF konvertieren in C# mit Aspose.Words – Anleitung](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Erfahren Sie, wie Sie Word-Dokumente mit Aspose.Words in C# einfach in PDF konvertieren. | -| [Konvertieren Sie Docx in Byte](./docx-to-byte/) | Erfahren Sie, wie Sie Docx mit Aspose.Words in .NET in ein Byte-Array konvertieren, um eine effiziente Dokumentverarbeitung zu gewährleisten. Schritt-für-Schritt-Anleitung enthalten. | +| [Konvertieren Sie Docx in Byte](./docx-to-byte/) | Erfahren Sie, wie Sie Docx mit Aspose.Words in .NET in ein Byte-Array konvertieren, um eine effiziente Dokumentverarbeitung zu gewährleisten. Schritt‑für‑Schritt‑Anleitung enthalten. | | [Docx in Epub konvertieren](./docx-to-epub/) | Konvertieren Sie DOCX einfach in EPUB mit Aspose.Words für .NET. Folgen Sie unserem Tutorial für die nahtlose Integration in Ihre .NET-Anwendungen. | -| [Konvertieren Sie Docx in Mhtml und senden Sie E-Mails](./docx-to-mhtml-and-sending-email/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie DOCX in MHTML konvertieren und E-Mails mit Aspose.Words für .NET versenden. Steigern Sie Ihre Produktivität durch einfache Automatisierung. | +| [Konvertieren Sie Docx in Mhtml und senden Sie E-Mails](./docx-to-mhtml-and-sending-email/) | Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie DOCX in MHTML konvertieren und E-Mails mit Aspose.Words für .NET versenden. Steigern Sie Ihre Produktivität durch einfache Automatisierung. | | [Docx-Datei in Markdown konvertieren](./docx-to-markdown/) | Erfahren Sie, wie Sie DOCX-Dateien mit Aspose.Words für .NET in Markdown konvertieren. Folgen Sie unserer ausführlichen Anleitung für die nahtlose Integration in Ihre .NET-Anwendungen. | -| [Konvertieren Sie Docx in Txt](./docx-to-txt/) Konvertieren Sie DOCX mit Aspose.Words für .NET in TXT mit unserer Schritt-für-Schritt-Anleitung. Lernen Sie, Dokumente effizient und mühelos zu transformieren. | +| [Konvertieren Sie Docx in Txt](./docx-to-txt/) Konvertieren Sie DOCX mit Aspose.Words für .NET in TXT mit unserer Schritt‑für‑Schritt‑Anleitung. Lernen Sie, Dokumente effizient und mühelos zu transformieren. | | [Textdatei in Word-Dokument konvertieren](./txt-to-docx/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET Textdateien in Word-Dokumente konvertieren. Verwalten Sie Dokumentkonvertierungen effizient mit unserem umfassenden Leitfaden. | | [PDF als JPEG speichern](./pdf-to-jpeg/) | Konvertieren Sie PDFs mühelos in JPEGs mit Aspose.Words für .NET. Folgen Sie unserer ausführlichen Anleitung mit Beispielen und FAQs. Ideal für Entwickler und Enthusiasten. | -| [PDF im Word-Format (Docx) speichern](./pdf-to-docx/) | Erfahren Sie in dieser detaillierten Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.Words für .NET ein PDF in ein Word-Dokument (Docx) konvertieren. Perfekt für Entwickler. | +| [PDF im Word-Format (Docx) speichern](./pdf-to-docx/) | Erfahren Sie in dieser detaillierten Schritt‑für‑Schritt‑Anleitung, wie Sie mit Aspose.Words für .NET ein PDF in ein Word-Dokument (Docx) konvertieren. Perfekt für Entwickler. | | [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 in PDF in C# konvertieren – Vollständiger Programmierleitfaden](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Erfahren Sie, wie Sie DOCX mit Aspose.Words für .NET in C# vollständig in PDF konvertieren – Schritt‑für‑Schritt‑Anleitung. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/german/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..bd27a0b089 --- /dev/null +++ b/words/german/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: DOCX schnell in PDF mit C# konvertieren. Erfahren Sie, wie Sie Word als + PDF speichern, ein DOCX‑Dokument in C# laden und die PDF/UA‑2‑Konformität in wenigen + Minuten sicherstellen. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: de +og_description: DOCX in PDF in C# sofort konvertieren. Dieser Leitfaden zeigt, wie + man Word als PDF speichert, ein DOCX‑Dokument in C# lädt und die PDF/UA‑2‑Standards + erfüllt. +og_title: DOCX in PDF konvertieren in C# – Schritt‑für‑Schritt‑Anleitung +tags: +- Aspose.Words +- C# +- PDF Generation +title: DOCX nach PDF in C# konvertieren – Vollständiger Programmierleitfaden +url: /de/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# DOCX in PDF in C# – Vollständiger Programmierleitfaden + +Haben Sie jemals **DOCX in PDF konvertieren** müssen in einer C#‑Anwendung, wussten aber nicht, wo Sie anfangen sollen? Sie sind nicht allein. Viele Entwickler stoßen auf ein Problem, wenn sie feststellen, dass ein einfacher „Als PDF speichern“-Button in Word nicht in Code übersetzt werden kann. Die gute Nachricht? Mit ein paar Zeilen Aspose.Words (oder einer vergleichbaren Bibliothek) können Sie den gesamten Prozess automatisieren, schwebende Formen inline halten und sogar die PDF/UA‑2‑Konformität erreichen, ohne ins Schwitzen zu geraten. + +In diesem Tutorial lernen Sie, wie man **Word als PDF speichert**, **docx document C# lädt** und die Exportoptionen anpasst, sodass die resultierende Datei bereit für Barrierefreiheits‑Audits ist. Am Ende haben Sie ein eigenständiges, ausführbares Programm, das jede `.docx`‑Datei in ein sauberes, standardkonformes PDF verwandelt. + +> **Warum das wichtig ist?** +> Die Konvertierung von DOCX zu PDF ist eine häufige Anforderung für Rechnungssysteme, Berichtsgeneratoren und Dokumentenarchivierungs‑Pipelines. Die Automatisierung eliminiert manuelle Schritte, reduziert menschliche Fehler und stellt sicher, dass jede Ausgabe auf allen Plattformen exakt gleich aussieht. + +--- + +## Was Sie benötigen + +- **.NET 6.0** oder neuer (der Code funktioniert auch mit .NET Framework 4.6+) +- **Aspose.Words for .NET** (Kostenlose Testversion oder lizenzierte Version) – Sie können es über NuGet installieren: `dotnet add package Aspose.Words` +- Eine Beispiel‑`input.docx` in einem von Ihnen kontrollierten Ordner (wir nennen ihn `YOUR_DIRECTORY`) +- Visual Studio, VS Code oder irgendeinen C#‑Editor Ihrer Wahl + +Das war’s – keine zusätzlichen Dienste, keine REST‑Aufrufe. Einfach reines C#. + +--- + +## Schritt 1: Laden des DOCX‑Dokuments in C# + +Bevor Sie **docx in pdf konvertieren** können, müssen Sie die Word‑Datei in den Speicher laden. Die Klasse `Document` erledigt das für Sie. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Warum das wichtig ist:** +Das Laden der Datei liefert Ihnen ein vollständig geparstes Objektmodell – Absätze, Tabellen, schwebende Formen, alles. Es ist der erste Schritt in jedem **load docx document c#**‑Workflow und prüft zudem, dass die Datei nicht beschädigt ist, bevor Sie Zeit mit der Konvertierung verschwenden. + +> **Pro‑Tipp:** Wenn Sie mit von Benutzern hochgeladenen Dateien arbeiten, umschließen Sie den Aufruf `new Document()` mit einem try/catch‑Block, um fehlerhafte DOCX‑Dateien elegant zu behandeln. + +--- + +## Schritt 2: PDF‑Speicheroptionen konfigurieren (Konformität & Formathandhabung) + +Sie fragen sich vielleicht: „Muss ich etwas anpassen, oder kann ich einfach `Save` aufrufen?“ Die kurze Antwort: Sie können, aber das Setzen der richtigen Optionen macht das PDF barrierefrei und visuell treu. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Warum das wichtig ist:** +- `ExportFloatingShapesAsInlineTag = true` verhindert, dass schwebende Objekte verloren gehen oder bei der Anzeige des PDFs auf verschiedenen Geräten falsch ausgerichtet werden. +- `Compliance = PdfCompliance.PdfUa2` stellt sicher, dass die Ausgabe den PDF/UA‑2‑Standard erfüllt, was für Screen‑Reader‑Kompatibilität und rechtliche Archivierung entscheidend ist. + +Wenn Sie keine Barrierefreiheit benötigen, können Sie die Zeile `Compliance` weglassen, aber das Beibehalten verursacht fast keinen Mehraufwand und macht Ihre Lösung zukunftssicher. + +--- + +## Schritt 3: Dokument als PDF speichern – Die Kernaktion **Convert DOCX to PDF** + +Jetzt, wo das Dokument geladen und die Optionen gesetzt sind, erfolgt die eigentliche Konvertierung mit einem einzigen Methodenaufruf. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Was Sie sehen werden:** +Beim Ausführen des Programms wird `output.pdf` im selben Ordner erzeugt. Öffnen Sie es mit einem beliebigen PDF‑Betrachter und Sie werden feststellen, dass: + +- Alle Texte, Tabellen und Bilder exakt wie im ursprünglichen DOCX erscheinen. +- Schwebende Formen inline erhalten bleiben und das Layout bewahren. +- Die Datei grundlegende PDF/UA‑2‑Validierungstools (z. B. Adobe Acrobat Preflight) besteht. + +--- + +## Vollständiges funktionierendes Beispiel – Von oben nach unten + +Unten finden Sie eine vollständige, sofort ausführbare Konsolen‑App, die den gesamten Ablauf demonstriert. Kopieren Sie sie in ein neues C#‑Projekt und drücken Sie **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Erwartete Ausgabe in der Konsole:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Und ein ordentliches `output.pdf` liegt neben Ihrer Quelldatei. + +--- + +## Häufig gestellte Fragen & Sonderfälle + +| Frage | Antwort | +|----------|--------| +| **Kann ich ein DOCX, das in einem `MemoryStream` gespeichert ist, konvertieren?** | Absolut. Verwenden Sie `new Document(stream)` anstelle eines Dateipfads. | +| **Was, wenn das DOCX Makros enthält?** | Aspose.Words ignoriert VBA‑Makros standardmäßig; sie erscheinen nicht im PDF. | +| **Benötige ich für die Produktion eine Lizenz?** | Die kostenlose Testversion fügt nach einer bestimmten Seitenzahl ein Wasserzeichen hinzu. Für den kommerziellen Einsatz erwerben Sie eine Lizenz, um es zu entfernen. | +| **Wie ändere ich die PDF‑Seitengröße?** | Setzen Sie `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` vor dem Speichern. | +| **Gibt es eine Möglichkeit, eine benutzerdefinierte Schriftart einzubetten?** | Ja – fügen Sie `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` hinzu. | + +--- + +## Pro‑Tipps für ein reibungsloses **Save Word as PDF**‑Erlebnis + +- **Batch‑Verarbeitung:** Packen Sie die Konvertierungslogik in eine Schleife und übergeben Sie ihr eine Liste von DOCX‑Pfaden. +- **Performance:** Verwenden Sie eine einzelne `PdfSaveOptions`‑Instanz beim Konvertieren vieler Dateien; das reduziert den GC‑Druck. +- **Logging:** Geben Sie die Größe des erzeugten PDFs aus (`new FileInfo(outputPath).Length`), um die Komprimierungsergebnisse zu überwachen. +- **Fehlerbehandlung:** Unterscheiden Sie zwischen `FileNotFoundException` (fehlendes DOCX) und `UnauthorizedAccessException` (Probleme mit Schreibrechten). + +--- + +## Fazit + +Sie haben nun ein solides, produktionsreifes Muster, um **DOCX in PDF** in C# zu **konvertieren**. Durch das Laden des DOCX, das Konfigurieren der PDF‑Speicheroptionen und den Aufruf von `Save` können Sie **Word als PDF speichern**, Layout‑Nuancen berücksichtigen und Barrierefreiheits‑Standards erfüllen – alles in weniger als einem Dutzend Zeilen Code. + +Bereit für die nächste Herausforderung? Versuchen Sie, `PdfSaveOptions` durch `ImageSaveOptions` zu ersetzen, um **Word als PNG zu speichern**, oder erkunden Sie die Klasse `HtmlSaveOptions`, um web‑fertige Ausgaben zu erzeugen. In jedem Fall gelten dieselben **load docx document c#**‑Grundlagen, wodurch Ihr Code zukunftssicher wird. + +Viel Spaß beim Coden, und möge Ihr PDF stets konform sein! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/german/net/programming-with-loadoptions/_index.md index 97ac483e11..3a7c60d1a3 100644 --- a/words/german/net/programming-with-loadoptions/_index.md +++ b/words/german/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ In diesen Tutorials lernen Sie, wie Sie mit LoadOptions Word-Dokumente mit benut | [Chm-Dateien in Word-Dokument laden](./load-chm/) | Laden Sie CHM-Dateien mit Aspose.Words für .NET ganz einfach in Word-Dokumente. Mit dieser Schritt-für-Schritt-Anleitung können Sie CHM-Dateien ganz einfach in Word-Dokumente laden. Perfekt für die Konsolidierung Ihrer technischen Dokumentation. | | [Wie man DOCX mit Aspose.Words wiederherstellt – Schritt für Schritt](./how-to-recover-docx-with-aspose-words-step-by-step/) | Erfahren Sie, wie Sie beschädigte DOCX-Dateien mit Aspose.Words für .NET wiederherstellen – detaillierte Schritt-für-Schritt-Anleitung. | | [Aspose Load Options – DOCX mit benutzerdefinierten Schriftarteinstellungen laden](./aspose-load-options-load-docx-with-custom-font-settings/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET DOCX-Dateien mit benutzerdefinierten Schriftarteinstellungen laden. | +| [Beschädigtes DOCX wiederherstellen – Vollständige C#-Anleitung zum Reparieren und Speichern von Dateien](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Erfahren Sie, wie Sie beschädigte DOCX-Dateien mit C# reparieren und speichern können – Schritt-für-Schritt-Anleitung. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/german/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..a9295be63f --- /dev/null +++ b/words/german/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-04-07 +description: Erfahren Sie, wie Sie beschädigte DOCX‑Dateien in C# wiederherstellen + und das wiederhergestellte Dokument sicher speichern. Schritt‑für‑Schritt‑Anleitung + mit Aspose.Words‑Beispiel. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: de +og_description: Beschädigte DOCX‑Dateien in C# wiederherstellen und das wiederhergestellte + Dokument mit Aspose.Words speichern. Vollständiger Code, Erklärungen und Tipps zu + bewährten Methoden. +og_title: Beschädigte DOCX wiederherstellen – Schritt‑für‑Schritt C#‑Leitfaden +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Beschädigte DOCX wiederherstellen – Vollständiger C#‑Leitfaden zum Reparieren + und Speichern von Dateien +url: /de/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Beschädigte DOCX wiederherstellen – Vollständiger C# Leitfaden zum Reparieren und Speichern von Dateien + +Haben Sie schon versucht, ein DOCX zu öffnen, das im Explorer gut aussieht, aber in Ihrer Anwendung eine Ausnahme wirft? Das ist das klassische „beschädigte Word‑Datei“-Albtraum, und er endet meist mit einem Stack‑Trace, den Sie nicht sehen wollen. Die gute Nachricht? Aspose.Words bietet Ihnen eine **recover corrupted docx**‑Funktion, mit der Sie weiterarbeiten können, selbst wenn die Datei beschädigt ist. + +In diesem Tutorial führen wir Sie Schritt für Schritt durch das Laden eines fehlerhaften Dokuments, das Anweisen der Bibliothek, weiterzumachen, und anschließend das **save recovered document** in eine neue, saubere Datei zu speichern. Am Ende wissen Sie, warum der Wiederherstellungsmodus wichtig ist, wie man ihn konfiguriert und welche Fallstricke zu vermeiden sind – ohne vage „siehe Dokumentation“-Abkürzungen. + +## Was Sie benötigen + +- **Aspose.Words for .NET** (jede aktuelle Version; 24.11 wurde beim Schreiben dieses Leitfadens verwendet) +- Eine .NET‑Entwicklungsumgebung (Visual Studio, Rider oder VS Code mit der C#‑Erweiterung) +- Ein Beispiel‑DOCX, von dem Sie vermuten, dass es beschädigt ist (Sie können eine Datei in einem ZIP‑Editor öffnen und einen Teil löschen, nur zum Testen) +- Grundlegende C#‑Kenntnisse – nichts Besonderes, nur die Fähigkeit, eine Konsolen‑App zu erstellen + +Wenn Sie das bereits haben, großartig – springen wir direkt zur Lösung. + +## Schritt 1: LoadOptions mit der richtigen Wiederherstellungsstrategie einrichten + +Das Herzstück der Lösung ist das `LoadOptions`‑Objekt. Es teilt Aspose.Words mit, wie es sich verhalten soll, wenn es fehlerhaftes XML oder fehlende Teile im DOCX‑Paket findet. Das Flag `RecoveryMode.RecoverAndContinue` ist das toleranteste – es versucht, alles zu retten, was möglich ist, und überspringt den Rest. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Warum das wichtig ist:** Wenn Sie `LoadOptions` weglassen oder den Standardmodus (`RecoveryMode.NoRecovery`) verwenden, wirft der `Document`‑Konstruktor sofort eine Ausnahme, sobald ein Problem entdeckt wird. Mit `RecoverAndContinue` ignoriert die API nicht‑kritische Fehler und erstellt ein partielles Dokumentobjekt, mit dem Sie weiterhin arbeiten können. + +> **Pro‑Tipp:** Für sehr große Dateibatches sollten Sie den Ladevorgang trotzdem in einen `try/catch`‑Block einbetten – einige Fehler sind tatsächlich fatal (z. B. das Fehlen der Datei `[Content_Types].xml`) und können nicht wiederhergestellt werden. + +## Schritt 2: Das potenziell beschädigte DOCX laden + +Jetzt, wo die Optionen bereit sind, laden Sie Ihre Datei. Der Konstruktor nimmt den Dateipfad und die gerade vorbereiteten `LoadOptions` entgegen. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Was im Hintergrund passiert:** +Aspose.Words analysiert den ZIP‑Container, liest jeden XML‑Teil und versucht, das Open‑XML‑DOM wiederherzustellen. Trifft es auf einen beschädigten Teil, protokolliert die Wiederherstellungs‑Engine eine Warnung (sichtbar in der Konsole, wenn Sie Diagnosen aktivieren) und fährt fort. Das resultierende `Document`‑Objekt kann ein paar Absätze oder Bilder fehlen, aber der Rest des Inhalts bleibt erhalten. + +## Schritt 3: Den wiederhergestellten Inhalt überprüfen (optional, aber empfohlen) + +Bevor Sie die Datei auf die Festplatte schreiben, ist es ratsam, einige Knoten zu prüfen, um sicherzustellen, dass die wichtigen Abschnitte erhalten geblieben sind. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Wenn die Ausgabe sinnvoll erscheint, haben Sie den **recover corrupted docx**‑Inhalt erfolgreich wiederhergestellt. Wenn Sie fehlende Abschnitte bemerken, können Sie dennoch entscheiden, ob Sie fortfahren – manchmal sind die verlorenen Teile nur dekorativ. + +## Schritt 4: Das wiederhergestellte Dokument speichern + +Hier kommt der Teil, den die meisten Entwickler fragen: „Wie kann ich **save recovered document** speichern, ohne die ursprüngliche Beschädigung wieder einzuführen?“ Die Antwort ist einfach: Rufen Sie `Document.Save` mit einem neuen Pfad auf. Aspose.Words schreibt ein brandneues ZIP‑Paket, sodass alle verbleibenden beschädigten Teile zurückgelassen werden. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Warum das funktioniert:** Die `Save`‑Methode serialisiert das im Speicher befindliche DOM zurück in ein sauberes Open‑XML‑Paket. Da die beschädigten Teile nie in das DOM geladen wurden (sie wurden während der Wiederherstellung verworfen), gelangen sie nie in die neue Datei. Das Ergebnis ist ein gesundes DOCX, das in Word, Google Docs oder jedem anderen Viewer geöffnet werden kann. + +## Schritt 5: Den Vorgang für mehrere Dateien automatisieren (Bonus) + +In realen Szenarien haben Sie oft einen Ordner voller problematischer Dateien. Packen Sie die vorherigen Schritte in eine Schleife, und Sie erhalten ein kleines Wiederherstellungs‑Tool. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Jetzt können Sie ein ganzes Verzeichnis mit beschädigten DOCX‑Dateien in `C:\Docs\Batch` ablegen und das Skript lässt sie automatisch bereinigen. + +## Häufige Fragen & Sonderfälle + +| Frage | Antwort | +|----------|--------| +| **Funktioniert das mit .doc‑Dateien?** | Die gleiche `LoadOptions`‑Klasse gilt, aber Sie müssen das ältere Word‑Format (`doc`) referenzieren. Aspose.Words kann trotzdem wiederherstellen, obwohl die Fehlermuster unterschiedlich sind. | +| **Was ist, wenn die Datei passwortgeschützt ist?** | Die Wiederherstellung umgeht die Verschlüsselung nicht. Sie müssen das Passwort über `LoadOptions.Password` bereitstellen. | +| **Werden Bilder verloren gehen?** | Nur Bilder, die Teil eines beschädigten XML‑Teils sind, können weggelassen werden. Der Rest bleibt erhalten, da sie als separate Binär‑Streams gespeichert werden. | +| **Kann ich die von Aspose erzeugten Warnungen protokollieren?** | Ja – setzen Sie `LoadOptions.LoadFormat` auf `LoadFormat.Docx` und abonnieren Sie `Document.WarningCallback`, um detaillierte Meldungen zu erfassen. | +| **Ist `RecoverAndContinue` für die Produktion sicher?** | Im Allgemeinen ja, aber testen Sie mit Ihren Daten. In mission‑kritischen Pipelines möchten Sie möglicherweise Dokumente, die eine Wiederherstellung erforderten, zur späteren Überprüfung kennzeichnen. | + +## Vollständiges funktionierendes Beispiel (Copy‑Paste‑bereit) + +Unten finden Sie das komplette Programm, das Sie als Konsolen‑App kompilieren können. Es enthält alle Schritte, Fehlerbehandlung und optionale Batch‑Verarbeitungslogik. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Erwartetes Ergebnis:** Nach dem Ausführen des Programms öffnet sich `Recovered.docx` in Microsoft Word ohne den ursprünglichen Fehlermeldungsdialog. Alle zu stark beschädigten Teile werden einfach weggelassen, aber der Haupttext, Überschriften und die meisten Bilder bleiben erhalten. + +![Beispiel für das Wiederherstellen beschädigter docx](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visueller Vorher/Nachher-Vergleich") + +## Fazit + +Wir haben alles behandelt, was Sie benötigen, um **recover corrupted docx**‑Dateien mit Aspose.Words wiederherzustellen, von der Konfiguration von `LoadOptions` bis zum sicheren **save recovered document**. Die wichtigsten Erkenntnisse sind: + +- Verwenden Sie `RecoveryMode.RecoverAndContinue`, damit die Bibliothek nicht‑kritische Fehler ignoriert. +- Überprüfen Sie den geladenen Inhalt, bevor Sie ihn speichern, insbesondere bei kritischen Geschäftsdokumenten. +- Das Speichern des Dokuments erzeugt ein sauberes ZIP‑Paket, das die ursprüngliche Beschädigung effektiv entfernt. +- Das gleiche Muster skaliert auf Batch‑Operationen und ermöglicht die automatisierte Bereinigung großer Dokumentenarchive. + +Bereit für den nächsten Schritt? Versuchen Sie, diese Logik in einen Hintergrunddienst zu integrieren, der einen Upload‑Ordner überwacht, oder experimentieren Sie mit dem `WarningCallback`, um einen Bericht zu erstellen, welche Dateien eine Wiederherstellung benötigten. Je mehr Sie mit der API arbeiten, desto mehr werden Sie die Robustheit von Aspose.Words für die Verarbeitung von Dokumenten in der Praxis zu schätzen wissen. + +Haben Sie eine Variante, die Sie teilen möchten – vielleicht das Verarbeiten passwortgeschützter Dateien oder das Zusammenführen wiederhergestellter Dokumente? Hinterlassen Sie unten einen Kommentar, und wir führen die Diskussion weiter. Viel Spaß beim Coden! + +{{< /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 13224e8603..6df3aa972e 100644 --- a/words/german/net/programming-with-markdownsaveoptions/_index.md +++ b/words/german/net/programming-with-markdownsaveoptions/_index.md @@ -49,6 +49,9 @@ Erfahren Sie, wie Sie DOCX‑Dateien in Markdown speichern – vollständige Sch ### [Wie man Markdown aus DOCX exportiert – Vollständige Anleitung](./how-to-export-markdown-from-docx-complete-guide/) Erfahren Sie, wie Sie DOCX‑Dateien vollständig in Markdown exportieren – Schritt‑für‑Schritt‑Anleitung in C#. +### [Word als Markdown speichern mit benutzerdefiniertem Bildordner – Vollständige Anleitung](./save-word-as-markdown-with-custom-image-folder-full-guide/) +Erfahren Sie, wie Sie Word-Dokumente mit einem benutzerdefinierten Bildordner in Markdown speichern – vollständige Schritt‑für‑Schritt‑Anleitung. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/german/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..70b12d320e --- /dev/null +++ b/words/german/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,295 @@ +--- +category: general +date: 2026-04-07 +description: Speichere Word als Markdown und extrahiere Bilder aus docx mithilfe eines + Callbacks. Erfahre, wie du einen Callback nutzt, um den Markdown‑Bilderordner effizient + zu speichern. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: de +og_description: Speichere Word als Markdown und extrahiere Bilder aus docx mit einem + Callback. Diese Anleitung zeigt, wie man einen Callback verwendet, um einen Markdown‑Bilderordner + zu erstellen. +og_title: Word als Markdown speichern – Vollständige Schritt‑für‑Schritt‑Anleitung +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Word als Markdown mit benutzerdefiniertem Bildordner speichern – Vollständige + Anleitung +url: /de/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word als Markdown speichern – vollständige Schritt‑für‑Schritt‑Anleitung + +Haben Sie jemals **Word als Markdown speichern** müssen, waren sich aber nicht sicher, was Sie mit den eingebetteten Bildern machen sollen? Sie sind nicht allein. In vielen Projekten sieht die Markdown‑Ausgabe großartig aus – *bis* man erkennt, dass die Bild‑Links kaputt sind, weil die Dateien das Word‑Paket nie verlassen haben. + +Die gute Nachricht: Aspose.Words bietet Ihnen eine saubere Möglichkeit, **Bilder aus docx zu extrahieren** und genau dort abzulegen, wo Sie sie benötigen, mithilfe eines **Callbacks**, das Ihnen die Kontrolle über den Markdown‑Bilder‑Ordner gibt. In diesem Tutorial führen wir Sie durch den gesamten Prozess, vom Laden einer `.docx`‑Datei bis hin zu einem aufgeräumten Ordner mit PNGs (oder welchem Format Sie auch haben) und einer Markdown‑Datei, die auf diese verweist. + +Am Ende dieses Leitfadens können Sie: + +* Jedes Word‑Dokument mit einer einzigen Code‑Zeile in Markdown konvertieren. +* Automatisch jedes Bild in einen eigenen Unterordner `images` auslagern. +* Dateinamen anpassen, sodass sie nie kollidieren, selbst wenn die Quelle Dutzende von Bildern enthält. + +Keine externen Skripte, kein manuelles Kopieren – nur reines C# und Aspose.Words. + +## Voraussetzungen + +Bevor wir starten, stellen Sie sicher, dass Sie folgendes haben: + +* **Aspose.Words for .NET** (die neueste stabile Version; zum Zeitpunkt dieses Schreibens ist es 24.9). +* Eine .NET‑Entwicklungsumgebung (Visual Studio, Rider oder die `dotnet`‑CLI). +* Ein Word‑Dokument (`.docx`), das mindestens ein Bild enthält – nennen wir es `DocWithImages.docx`. + +Falls Sie Aspose.Words noch nie verwendet haben, keine Sorge. Die Bibliothek ist vollständig verwaltet, erfordert kein COM‑Interop und funktioniert sowohl auf .NET 6+ als auch auf .NET Framework 4.8. + +## Schritt 1 – Projekt einrichten und Paket installieren + +Erstellen Sie zunächst eine neue Konsolen‑App (oder fügen Sie den Code zu einem bestehenden Projekt hinzu). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro‑Tipp:** Wenn Sie .NET 6 anvisieren, verwendet die Standard‑`Program.cs` bereits Top‑Level‑Statements, was das Beispiel kompakt hält. + +## Schritt 2 – Callback erstellen, um das Bild‑Speichern zu steuern + +Aspose.Words ruft `IResourceSavingCallback.ResourceSaving` für jede externe Ressource auf, die es schreiben muss (Bilder, CSS usw.). Durch die Implementierung dieses Interfaces erhalten Sie die volle Kontrolle darüber, **wie der Markdown‑Bilder‑Ordner** aufgebaut wird. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Warum einen Callback verwenden? + +* **Feinkörnige Kontrolle** – Sie bestimmen die Ordnerstruktur und das Benennungsschema. +* **Performance** – Sie schreiben den Stream einmal, vermeiden das doppelte Schreiben der Bibliothek. +* **Flexibilität** – Sie können Logging, Bild‑Optimierung oder sogar das Hochladen in Cloud‑Speicher an dieser Stelle hinzufügen. + +## Schritt 3 – Word‑Dokument laden + +Jetzt, wo der Callback bereit ist, müssen wir Aspose.Words nur noch auf die Quelldatei zeigen lassen. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Was, wenn die Datei nicht gefunden wird?** +> `Document` wirft eine `FileNotFoundException`. Packen Sie das Laden in ein `try/catch`, falls Sie dynamische Pfade erwarten. + +## Schritt 4 – MarkdownSaveOptions konfigurieren + +Die Klasse `MarkdownSaveOptions` ermöglicht es uns, den gerade erstellten Callback einzubinden. Außerdem legen wir den Ordner fest, in dem die Bilder relativ zur Markdown‑Datei abgelegt werden sollen. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Die Eigenschaft `ImagesFolder` weist Aspose an, Markdown‑Links wie `![Alt text](images/img_123.png)` zu erzeugen. Da wir außerdem `ResourceFileName` im Callback setzen, landet die eigentliche Datei exakt dort. + +## Schritt 5 – Als Markdown speichern und Ergebnis prüfen + +Zum Schluss schreiben wir die Markdown‑Datei. Der Callback hat bereits den Unterordner `images` befüllt. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Erwartete Ausgabe + +Beim Ausführen des Programms sollte etwa Folgendes ausgegeben werden: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Öffnen Sie `Doc.md` in einem beliebigen Markdown‑Viewer; Sie sehen Bild‑Links, die korrekt auf den `images`‑Ordner verweisen. + +--- + +## Häufig gestellte Fragen (FAQ) + +### Wie **Bilder aus docx extrahieren**, ohne nach Markdown zu konvertieren? + +Sie können denselben `MyMarkdownResourceCallback` wiederverwenden, ihn aber an `doc.Save("images.zip", SaveFormat.Zip)` übergeben. Der Callback wird weiterhin für jedes Bild ausgelöst und lässt Sie die Dateien nach Belieben ablegen. + +### Was, wenn ich **verschiedene Bildformate** benötige? + +`args.FileName` enthält bereits die ursprüngliche Erweiterung (`.png`, `.jpg` usw.). Wenn Sie alle Bilder in ein einheitliches Format konvertieren müssen, fügen Sie einen Konvertierungsschritt innerhalb von `ResourceSaving` vor dem Schreiben des Streams ein. + +### Kann ich den **Markdown‑Bilder‑Ordner** pro Dokument anpassen? + +Absolut. Der Callback erhält den Ordnerpfad über seinen Konstruktor, sodass Sie für jedes Dokument in einem Batch‑Prozess einen neuen Callback mit einem anderen Ordner instanziieren können. + +### Funktioniert das bei **großen Dokumenten** (Hunderte von Bildern)? + +Ja. Der Callback streamt das Bild direkt auf die Festplatte, wodurch der Speicherverbrauch gering bleibt. Stellen Sie nur sicher, dass das Ziel‑Laufwerk ausreichend Platz bietet und Sie nicht an OS‑Grenzen für Dateihandles stoßen. + +--- + +## Komplettes Beispiel + +Unten finden Sie das vollständige, copy‑and‑paste‑bereite Programm. Ersetzen Sie `YOUR_DIRECTORY` durch einen absoluten oder relativen Pfad, der zu Ihrer Umgebung passt. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Führen Sie das Programm (`dotnet run`) aus und Sie erhalten ein frisch erstelltes `Doc.md` neben einem `images`‑Unterordner, der enthält + +{{< /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-officemath/_index.md b/words/german/net/programming-with-officemath/_index.md index ec92897781..4d79a3df36 100644 --- a/words/german/net/programming-with-officemath/_index.md +++ b/words/german/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Die Aspose.Words für .NET-Tutorials zur Textverarbeitung mit OfficeMath führen | Titel | Beschreibung | | --- | --- | | [Mathematische Gleichungen](./math-equations/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET mathematische Gleichungen in Word-Dokumenten konfigurieren. Schritt-für-Schritt-Anleitung mit Beispielen, FAQs und mehr. | +| [DOCX als TXT speichern – Word-Math in LaTeX exportieren in C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Erfahren Sie, wie Sie ein DOCX-Dokument als TXT speichern und mathematische Formeln nach LaTeX exportieren können, mit C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/german/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..5eb7fa4f6c --- /dev/null +++ b/words/german/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: Speichern Sie docx schnell als txt und lernen Sie, wie man Mathematik + nach LaTeX exportiert. Konvertieren Sie Word zu txt, verarbeiten Sie Office Math + und behalten Sie Gleichungen unverändert bei. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: de +og_description: Speichere docx als txt mit LaTeX‑Mathe‑Export. Ein Schritt‑für‑Schritt‑C#‑Tutorial, + das zeigt, wie man Word in txt konvertiert und Gleichungen beibehält. +og_title: DOCX als TXT speichern – C#‑Leitfaden zum Exportieren von Word‑Mathematik +tags: +- C# +- Aspose.Words +- DocumentConversion +title: DOCX als TXT speichern – Word‑Mathematik nach LaTeX in C# exportieren +url: /de/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# docx als txt speichern – Word‑Mathematik nach LaTeX exportieren in C# + +Haben Sie jemals **docx als txt speichern** müssen, waren sich aber Sorgen, dass Ihre Gleichungen zu einem Wirrwarr von Symbolen werden? Sie sind nicht allein. Viele Entwickler stoßen auf dieses Problem, wenn sie versuchen, **word in txt zu konvertieren** für die nachgelagerte Verarbeitung, insbesondere wenn die Quelle Office‑Math‑Objekte enthält. + +Die gute Nachricht? Mit ein paar Zeilen C# und den richtigen Speicheroptionen können Sie jede Gleichung als sauberes LaTeX erhalten, wodurch die Klartextdatei sowohl menschenlesbar als auch für wissenschaftliche Pipelines bereit ist. In diesem Tutorial führen wir Sie durch den gesamten Prozess, beantworten *wie man Mathematik exportiert* aus einer Word‑Datei und zeigen Ihnen *wie man docx konvertiert*, ohne mathematische Genauigkeit zu verlieren. + +## Was Sie lernen werden + +- Laden Sie eine `.docx`‑Datei mit Aspose.Words (oder einer kompatiblen Bibliothek). +- Konfigurieren Sie `TxtSaveOptions`, sodass Office Math als LaTeX exportiert wird. +- Speichern Sie das Dokument als `.txt`‑Datei, die Gleichungen unverändert beibehält. +- Tipps zum Umgang mit Sonderfällen wie versteckten Gleichungen oder großen Dokumenten. +- Ein vollständiges, ausführbares Code‑Beispiel, das Sie sofort kopieren‑und‑einfügen können. + +Keine ausgefallenen Build‑Tools, nur ein .NET‑Projekt und das Aspose.Words‑NuGet‑Paket. Lassen Sie uns beginnen. + +--- + +## Voraussetzungen + +| Anforderung | Warum es wichtig ist | +|-------------|----------------------| +| .NET 6.0 oder höher | Moderne Sprachfeatures und bessere Performance. | +| Aspose.Words für .NET (NuGet) | Stellt `Document`, `TxtSaveOptions` und `OfficeMathExportMode` bereit. | +| Eine Word‑Datei (`.docx`) mit Gleichungen | Um den LaTeX‑Export in Aktion zu sehen. | +| Grundkenntnisse in C# | Sie werden den Code Zeile für Zeile verfolgen. | + +Falls Sie Aspose.Words noch nicht hinzugefügt haben, führen Sie aus: + +```bash +dotnet add package Aspose.Words +``` + +Das war's – keine zusätzliche Konfiguration nötig. + +--- + +## Schritt 1: Laden der DOCX‑Datei + +Zuerst müssen wir das Quelldokument in den Speicher laden. Stellen Sie sich das vor wie das Öffnen eines Buches, bevor Sie zu lesen beginnen. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Profi‑Tipp:** Verwenden Sie während des Testens einen absoluten Pfad, um „Datei nicht gefunden“-Überraschungen zu vermeiden. In der Produktion erhalten Sie den Pfad wahrscheinlich aus einer Konfigurationsdatei oder einem Benutzer‑Upload. + +--- + +## Schritt 2: TXT‑Speicheroptionen für den Mathe‑Export konfigurieren + +Standardmäßig gibt `TxtSaveOptions` Nur‑Text aus und entfernt Office Math. Das wollen wir nicht. Wenn Sie `OfficeMathExportMode` auf `LaTeX` setzen, weist das die Bibliothek an, jede Gleichung in ihre LaTeX‑Darstellung zu übersetzen. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Warum LaTeX? + +LaTeX ist die Lingua Franca des wissenschaftlichen Publizierens. Wenn Sie später die `.txt`‑Datei in einen Markdown‑Prozessor, ein Jupyter‑Notebook oder ein beliebiges LaTeX‑fähiges Werkzeug einspeisen, werden die Gleichungen perfekt dargestellt. Wenn Sie stattdessen einfache Unicode‑Symbole bevorzugen, könnten Sie zu `OfficeMathExportMode.Unicode` wechseln, aber LaTeX bietet Ihnen die größte Kontrolle. + +--- + +## Schritt 3: Dokument als Klartextdatei speichern + +Jetzt geschieht die Magie. Die Methode `Save` schreibt das Dokument mit den gerade definierten Optionen auf die Festplatte. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Nachdem diese Zeile ausgeführt wurde, enthält `Math.txt`: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Beachten Sie, dass die Gleichung innerhalb von `\[` und `\]` erscheint – genau das, was LaTeX erwartet. + +--- + +## Wie man Mathematik aus komplexen Dokumenten exportiert + +### Umgang mit versteckten oder Inline‑Gleichungen + +Einige Word‑Dateien speichern Gleichungen in versteckten Text‑Frames. Aspose.Words behandelt sie genauso wie sichtbare Gleichungen, sodass der LaTeX‑Export automatisch funktioniert. Wenn Sie jedoch fehlende Gleichungen bemerken, prüfen Sie, ob das `Document`‑Objekt nicht so eingestellt ist, dass versteckter Inhalt ignoriert wird: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Große Dokumente und Speicherverbrauch + +Das Speichern einer 500‑seitigen Arbeit kann viel RAM verbrauchen. Um den Speicherverbrauch gering zu halten, können Sie die Ausgabe streamen: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming schreibt Datenblöcke auf die Festplatte, sobald sie erzeugt werden, und verhindert, dass die gesamte Datei gleichzeitig im Speicher liegt. + +--- + +## Häufige Fallstricke & wie man sie vermeidet + +| Fallstrick | Symptom | Lösung | +|------------|---------|--------| +| Fehlende LaTeX‑Klammern | Gleichungen erscheinen als Rohcode (`E = mc^{2}`) | Stellen Sie sicher, dass `OfficeMathExportMode = LaTeX`. | +| Leere Ausgabedatei | Falscher Pfad oder unzureichende Berechtigungen | Stellen Sie sicher, dass das Ausgabeverzeichnis existiert und beschreibbar ist. | +| Verzerrte Zeichen | Datei in UTF‑8 ohne BOM codiert auf einem System, das ANSI erwartet | Fügen Sie `txtSaveOptions.Encoding = Encoding.UTF8;` hinzu. | +| Gleichungen verschwinden nach der Konvertierung | Dokument wurde mit `LoadOptions` geladen, die Mathematik ausschließen | Verwenden Sie die Standard‑`LoadOptions` oder setzen Sie `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Vollständiges funktionierendes Beispiel + +Unten finden Sie das vollständige Programm, das Sie kompilieren und ausführen können. Es enthält Fehlerbehandlung, Pfadvalidierung und ein kleines Konsolen‑Log, damit Sie wissen, dass alles erfolgreich war. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Erwartete Ausgabe** (Auszug aus `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Sie können diese Datei jetzt in jeden LaTeX‑fähigen Prozessor einspeisen, und die Gleichungen werden wunderschön dargestellt. + +--- + +## Wie man DOCX nach TXT konvertiert, ohne das Format zu verlieren + +Wenn Sie nur Klartext benötigen und sich nicht um Mathematik kümmern, lassen Sie einfach die Zeile `OfficeMathExportMode` weg: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Denken Sie jedoch daran, dass **wie man Mathematik exportiert** der Unterschied für wissenschaftliche Workflows ist. LaTeX unverändert zu behalten, macht die Konvertierung wirklich nützlich. + +--- + +## Nächste Schritte & verwandte Themen + +- **Batch‑Konvertierung:** Packen Sie den Code in eine `foreach`‑Schleife, um einen gesamten Ordner mit `.docx`‑Dateien zu verarbeiten. +- **Markdown‑Erzeugung:** Fügen Sie `#`‑Überschriften oder `*`‑Aufzählungen zum Text hinzu, um sofort veröffentlichbares Markdown zu erzeugen. +- **PDF‑Export:** Verwenden Sie `PdfSaveOptions`, um neben der txt‑Datei eine PDF‑Version zu erstellen. +- **Erweiterte LaTeX‑Anpassungen:** Verarbeiten Sie die Ausgabe nachträglich mit Regex, um `\[`/`\]` durch `$...$` für Inline‑Gleichungen zu ersetzen. + +Jeder dieser Punkte baut auf derselben Grundlage auf – dem Laden eines `Document` und der Auswahl der richtigen `SaveOptions`. Fühlen Sie sich frei zu experimentieren; die API ist flexibel genug für die meisten Dokument‑Automatisierungsszenarien. + +--- + +## Fazit + +Wir haben alles behandelt, was Sie benötigen, um **docx als txt zu speichern**, während jede Gleichung als LaTeX erhalten bleibt. Vom Laden der Quelldatei, über die Konfiguration von `TxtSaveOptions` für **wie man Mathematik exportiert**, bis hin zum Schreiben der finalen Klartextdatei – der gesamte Workflow passt in ein paar prägnante C#‑Anweisungen. + +Jetzt können Sie die Konvertierung von Word‑Berichten, wissenschaftlichen Arbeiten oder jedem Dokument, das Text und Mathematik kombiniert, automatisieren und die resultierende `.txt`‑Datei in nachgelagerte Werkzeuge einspeisen, ohne wissenschaftliche Details zu verlieren. + +Probieren Sie es aus, passen Sie die Optionen an Ihren Anwendungsfall an und lassen Sie uns in den Kommentaren wissen, wie es bei Ihnen funktioniert hat. Viel Spaß beim Programmieren! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/german/net/programming-with-pdfsaveoptions/_index.md index 0dd6def95f..a83fcebcfb 100644 --- a/words/german/net/programming-with-pdfsaveoptions/_index.md +++ b/words/german/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Egal, ob Sie Word-Dokumente für die Online-Verteilung, Archivierung oder den Dr | [Zuletzt gedruckte Eigenschaft im PDF-Dokument aktualisieren](./update-last-printed-property/) | Erfahren Sie in unserer Schritt-für-Schritt-Anleitung, wie Sie die zuletzt gedruckte Eigenschaft in einem PDF-Dokument mit Aspose.Words für .NET aktualisieren. | | [Rendern Sie 3D-DML-3DEffects in einem PDF-Dokument](./dml-3deffects-rendering/) | Erfahren Sie in dieser umfassenden Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.Words für .NET beeindruckende 3D-DML-Effekte in PDF-Dokumenten rendern. | | [Interpolieren von Bildern in einem PDF-Dokument](./interpolate-images/) | Erfahren Sie in unserer Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.Words für .NET Bilder in einem PDF-Dokument interpolieren. Verbessern Sie ganz einfach die Bildqualität Ihres PDFs. | - +| [Erstellen eines barrierefreien PDFs aus Word – Schritt‑für‑Schritt‑Anleitung](./create-accessible-pdf-from-word-step-by-step-guide/) | Erfahren Sie in dieser Schritt-für-Schritt-Anleitung, wie Sie mit Aspose.Words für .NET ein barrierefreies PDF aus einem Word-Dokument erstellen. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/german/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..cba5ba83b0 --- /dev/null +++ b/words/german/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,239 @@ +--- +category: general +date: 2026-04-07 +description: Erstelle ein barrierefreies PDF aus einer DOCX-Datei in C#. Erfahre, + wie man Word in PDF konvertiert, DOCX als PDF speichert und die PDF/UA‑Konformität + sicherstellt. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: de +og_description: Erstellen Sie ein barrierefreies PDF aus Word in C#. Dieser Leitfaden + zeigt, wie man Word in PDF konvertiert, docx als PDF speichert und die PDF/UA-Standards + erfüllt. +og_title: Barrierefreies PDF erstellen – Vollständiges C#‑Tutorial +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Barrierefreies PDF aus Word erstellen – Schritt‑für‑Schritt‑Anleitung +url: /de/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Erstellen eines barrierefreien PDFs aus Word – Komplettes Programmier‑Tutorial + +Haben Sie jemals **ein barrierefreies PDF** aus einem Word‑Dokument erstellen müssen, waren sich aber nicht sicher, welche Einstellungen Sie anpassen müssen? Sie sind nicht allein. In vielen Unternehmen ist die Einhaltung von PDF/UA (Universal Accessibility) eine zwingende Anforderung, und die übliche Schaltfläche „In PDF konvertieren“ reicht nicht aus. + +In diesem Leitfaden gehen wir Schritt für Schritt durch eine kompakte End‑zu‑End‑Lösung, die **Word nach PDF konvertiert**, **docx als PDF speichert** und garantiert, dass die Ausgabe den Barrierefreiheits‑Standards entspricht. Keine vagen Verweise – nur der Code, den Sie copy‑pasten können, plus das „Warum“ hinter jeder Zeile. + +> **TL;DR:** Laden Sie eine `.docx`, setzen Sie `PdfSaveOptions.Compliance` auf `PdfUa1` (oder `PdfUa2`) und rufen Sie `Document.Save` auf. Das ist alles, was Sie benötigen, um **ein barrierefreies PDF** mit Aspose.Words für .NET zu **erstellen**. + +--- + +## Was Sie lernen werden + +- Wie Sie **Word nach PDF konvertieren** und dabei Überschriften, Alt‑Text und Lesereihenfolge erhalten. +- Der Unterschied zwischen `PdfUa1` und `PdfUa2` und wann Sie welches wählen sollten. +- Wie Sie **docx als PDF speichern** mit nur wenigen Zeilen C#. +- Häufige Stolperfallen (fehlende Schriften, nicht unterstützte Tags) und schnelle Lösungen. +- Ein sofort einsatzbereites Code‑Beispiel, das Sie in jedes .NET‑Projekt einbinden können. + +### Voraussetzungen + +- .NET 6 oder höher (der Code funktioniert ebenfalls mit .NET Framework 4.7+). +- Aspose.Words für .NET, installiert via NuGet (`Install-Package Aspose.Words`). +- Eine Word‑Datei (`input.docx`), die bereits eine korrekte Struktur (Formate, Alt‑Text für Bilder) enthält. + +Falls Sie Aspose.Words noch nicht hinzugefügt haben, führen Sie den folgenden Befehl in der Package Manager Console aus: + +```powershell +Install-Package Aspose.Words +``` + +Das ist die einzige externe Abhängigkeit, die Sie benötigen. + +--- + +## Barrierefreies PDF erstellen – Warum Barrierefreiheit wichtig ist + +Wenn ein PDF als **PDF/UA** (Universal Accessibility) gekennzeichnet ist, können Screenreader Überschriften, Tabellen und Formularfelder genauso navigieren wie im ursprünglichen Word‑Dokument. Das ist nicht nur ein nettes Feature; viele Regierungen und Unternehmen behandeln die PDF/UA‑Konformität als gesetzliche Vorgabe. + +Das Setzen der Eigenschaft `Compliance` auf `PdfSaveOptions` weist die Bibliothek an, die notwendigen Tags einzubetten, die korrekte Dokumentensprache zu setzen und eine logische Lesereihenfolge hinzuzufügen. Wird dieser Schritt übersprungen, entsteht ein „nur‑visuelles“ PDF, das bei Barrierefreiheits‑Audits durchfällt. + +--- + +## Word mit Aspose.Words nach PDF konvertieren + +Im Folgenden finden Sie den einfachsten Weg, **Word nach PDF zu konvertieren** und dabei das Dokument barrierefrei zu halten. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Was passiert hier?** + +- `Document` liest die Word‑Datei und bewahrt alle Formate und Strukturen. +- `PdfSaveOptions.Compliance` weist Aspose.Words an, die Ausgabe als PDF/UA zu taggen. +- `doc.Save` schreibt das PDF auf die Festplatte und bettet die Tags automatisch ein. + +> **Pro‑Tipp:** Wenn Ihre Quell‑Word‑Datei benutzerdefinierte Überschrifts‑Formate verwendet, stellen Sie sicher, dass diese den integrierten Überschrifts‑Ebenen (`Heading1`, `Heading2`, …) zugeordnet sind. Das sorgt dafür, dass das erzeugte PDF die richtigen Überschrifts‑Tags erhält. + +--- + +## Docx als PDF speichern – PDF/UA‑Konformität konfigurieren + +Falls Sie bereits mit der Klasse `PdfSaveOptions` vertraut sind, fragen Sie sich vielleicht, ob es weitere Schalter gibt, die die Barrierefreiheit beeinflussen. Ein paar nützliche Eigenschaften: + +| Eigenschaft | Auswirkung auf Barrierefreiheit | Typischer Wert | +|-------------|--------------------------------|----------------| +| `Compliance` | Schaltet das PDF/UA‑Tagging ein/aus | `PdfCompliance.PdfUa1` oder `PdfUa2` | +| `EmbedFullFonts` | Stellt sicher, dass Leser die vorgesehene Typografie sehen | `true` (Standard) | +| `OptimizeOutput` | Reduziert die Dateigröße, ohne Tags zu entfernen | `true` | + +Sie können das vorherige Snippet wie folgt erweitern: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Der Wechsel zu `PdfUa2` fügt Unterstützung für neuere PDF/UA‑Funktionen wie das *Artifact*-Tagging für dekorative Bilder hinzu. Wenn Sie das nicht benötigen, bleiben Sie bei `PdfUa1` für maximale Kompatibilität mit älteren Hilfstechnologien. + +--- + +## Docx nach PDF exportieren – Vollständiges funktionierendes Beispiel + +Im Folgenden ein eigenständiges Konsolen‑App‑Beispiel, das den gesamten Ablauf demonstriert – vom Laden der Datei bis zur Überprüfung der Ausgabe. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Erwartetes Ergebnis + +- Eine Datei namens **Compliant.pdf** erscheint im selben Ordner wie die ausführbare Datei. +- Öffnet man das PDF in Adobe Acrobat Pro → *Tools → Accessibility → Full Check*, sollte **Keine Barrierefreiheits‑Probleme** gemeldet werden (vorausgesetzt, die Quell‑Word‑Datei war gut strukturiert). +- Im Tab *Properties → Advanced* des PDFs wird **PDF/UA** unter dem Abschnitt „PDF/A and PDF/UA compliance“ angezeigt. + +--- + +## Häufige Randfälle & wie man sie löst + +| Situation | Warum es wichtig ist | Schnelllösung | +|-----------|----------------------|---------------| +| **Fehlende Schriften** | Das PDF kann auf eine Standardschrift zurückgreifen und das Layout zerstören. | Setzen Sie `EmbedFullFonts = true` (bereits Standard) und stellen Sie sicher, dass die Schriftdateien auf dem Build‑Rechner verfügbar sind. | +| **Bilder ohne Alt‑Text** | Screenreader lesen „Bild“ ohne Beschreibung. | Fügen Sie in Word `Alt Text` hinzu (`Rechts‑klick → Bild formatieren → Alt Text`), bevor Sie konvertieren. | +| **Benutzerdefinierte Stile werden nicht als Überschriften erkannt** | PDF/UA benötigt korrekte Überschrifts‑Tags. | Ordnen Sie benutzerdefinierte Stile über `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` den integrierten Überschriften zu. | +| **Große Dokumente verursachen Speicherprobleme** | Das Konvertieren einer 500‑Seiten‑Datei kann den RAM stark belasten. | Verwenden Sie `doc.Save(outputPath, options)` mit `options.SaveFormat = SaveFormat.Pdf` und verarbeiten Sie das Dokument ggf. in Teilen, um `OutOfMemoryException` zu vermeiden. | +| **Export ohne Barrierefreiheit gewünscht** | Manchmal benötigt man nur ein schnelles visuelles PDF. | Lassen Sie die Einstellung `Compliance` weg oder setzen Sie sie auf `PdfCompliance.Pdf15`. | + +--- + +## Bildbeispiel (Alt‑Text enthalten) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Der obige Alt‑Text verstärkt das Haupt‑Keyword und hilft sowohl Benutzern als auch KI‑Modellen, den Bildkontext zu verstehen.* + +--- + +## Häufig gestellte Fragen + +**F: Funktioniert das mit .NET Core?** +A: Absolut. Aspose.Words ist plattformübergreifend; binden Sie einfach das NuGet‑Paket in Ihr .NET 6+‑Projekt ein. + +**F: Kann ich mehrere DOCX‑Dateien stapelweise verarbeiten?** +A: Ja. Packen Sie die Lade‑ und Speicher‑Logik in eine `foreach (var file in Directory.GetFiles(folder, "*.docx"))`‑Schleife. Denken Sie daran, eine einzelne `PdfSaveOptions`‑Instanz für bessere Performance wiederzuverwenden. + +**F: Was, wenn ich ein benutzerdefiniertes PDF/UA‑Tag hinzufügen muss, das Aspose nicht automatisch erzeugt?** +A: Nutzen Sie die Low‑Level‑PDF‑API (`PdfSaveOptions.CustomProperties`) oder bearbeiten Sie das PDF nachträglich mit einer Bibliothek wie iText 7, die manuelles Tag‑Einfügen erlaubt. + +--- + +## Fazit + +You + +{{< /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 f87fa7a1b5..d4f4c2ce89 100644 --- a/words/german/net/working-with-fonts/_index.md +++ b/words/german/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ Egal, ob Sie Text mit unterschiedlichen Schriftarten formatieren, Regeln für di | [Warnbenachrichtigung erhalten](./receive-warning-notification/) Erfahren Sie, wie Sie bei der Verwendung von Aspose.Words für .NET eine Warnbenachrichtigung erhalten und etwaige Probleme oder Warnungen in Ihren Dokumenten verwalten. | | [Beispiel für eine Steam-Schriftartquelle für Ressourcen](./resource-steam-font-source-example/) | Erfahren Sie, wie Sie mit der Resource Stream Font Source benutzerdefinierte Schriftarten in Aspose.Words für .NET laden. | | [Substitution ohne Suffixe erhalten](./get-substitution-without-suffixes/) | In diesem Lernprogramm erfahren Sie, wie Sie mit Aspose.Words für .NET suffixlose Überschreibungen in einem Word-Dokument erhalten. | - +| [Wie man Schriftarten in Aspose.Words erkennt – Komplettanleitung](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Erfahren Sie, wie Sie mit Aspose.Words für .NET Schriftarten in Word-Dokumenten erkennen und verwalten. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/german/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/german/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..2d8c303ae3 --- /dev/null +++ b/words/german/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-04-07 +description: Erfahren Sie, wie Sie Schriftarten erkennen und Warnungen erfassen können, + während Sie fehlende Schriftarten in C# mit Aspose.Words behandeln. Schritt‑für‑Schritt‑Code + ist enthalten. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: de +og_description: Wie erkennt man Schriftarten in Aspose.Words? Folgen Sie diesem Tutorial, + um Warnungen zu erfassen und fehlende Schriftarten mühelos zu handhaben. +og_title: Wie man Schriftarten in Aspose.Words erkennt – Vollständiger Leitfaden +tags: +- Aspose.Words +- C# +- Font handling +title: Wie man Schriftarten in Aspose.Words erkennt – Komplettanleitung +url: /de/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man Schriftarten in Aspose.Words erkennt – Vollständige Anleitung + +Haben Sie sich schon einmal gefragt, **wie man Schriftarten** erkennt, die in einem Word‑Dokument fehlen, bevor Sie es in die Produktion geben? Sie sind nicht allein. In vielen Unternehmensszenarien kann eine fehlende Schriftart eine PDF‑Konvertierungspipeline zum Absturz bringen oder Layout‑Fehler verursachen, die unprofessionell wirken. Die gute Nachricht: Aspose.Words bietet Ihnen eine integrierte Möglichkeit, diese fehlenden Schriftarten aufzuspüren und klare Warnungen auszugeben. + +In diesem Tutorial zeigen wir Ihnen Schritt für Schritt, **wie man Schriftarten erkennt**, **wie man Warnungen abfängt** und die besten Praktiken, **fehlende Schriftarten zu behandeln**, damit Ihre Anwendung robust bleibt. Keine externen Tools, kein Rätselraten – nur reiner C#‑Code, den Sie sofort in Ihr Projekt einbinden können. + +> **Kurzer Überblick:** Am Ende haben Sie einen wiederverwendbaren `FontSubstitutionWarningCollector`, der jede Schriftart‑Ersetzungsnachricht beim Laden eines Dokuments sammelt, und Sie wissen, wie Sie reagieren, wenn eine Schriftart nicht gefunden werden kann. + +--- + +## Was Sie lernen werden + +- Wie Sie `LoadOptions` konfigurieren, um auf Schriftart‑Ersetzungs‑Warnungen zu hören. +- Wie Sie diese Warnungen in einer eigenen Collector‑Klasse abfangen. +- Wie Sie die gesammelten Warnungen verarbeiten und entscheiden, ob Sie abbrechen, protokollieren oder Schriftarten ersetzen. +- Sonderfall‑Behandlung für Dokumente, die entfernte oder eingebettete Schriftarten referenzieren. + +**Voraussetzungen:** .NET 6+ (oder .NET Framework 4.6+), Aspose.Words für .NET (neueste Version) und Grundkenntnisse in C#. Wenn Sie Aspose.Words noch nie verwendet haben, keine Sorge – dieser Leitfaden setzt nur wenige Minuten Setup‑Zeit voraus. + +--- + +## Wie man Schriftarten mit Aspose.Words LoadOptions erkennt + +Der erste Schritt, um fehlende Schriftarten zu erkennen, besteht darin, Aspose.Words mitzuteilen, dass es diese melden soll. Das geschieht über die Eigenschaft `LoadOptions.WarningCallback`, die jede Klasse akzeptiert, die `IWarningCallback` implementiert. Unten erstellen wir einen kleinen Collector, der jede Warnung für eine spätere Inspektion speichert. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Warum das wichtig ist:** Ohne einen Warn‑Callback ersetzt Aspose.Words fehlende Schriftarten stillschweigend durch eine Standardschrift, und Sie erfahren nie, dass ein Problem besteht. Indem wir `WarningType.FontSubstitution` abfangen, erhalten wir volle Transparenz – genau die Daten, die Sie benötigen, um **Schriftarten zu erkennen**, die auf dem Host‑Computer nicht verfügbar sind. + +Jetzt binden wir den Collector in `LoadOptions` ein und laden ein Dokument: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Pro‑Tipp:** Wenn Sie viele Dokumente stapelweise verarbeiten, verwenden Sie dieselbe Instanz von `FontSubstitutionWarningCollector`, vergessen Sie jedoch nicht, zwischen den Ladevorgängen `Clear()` aufzurufen, um Warnungen verschiedener Dateien nicht zu vermischen. + +--- + +## Warnungen beim Laden des Dokuments abfangen + +Nachdem das Dokument geladen ist, enthält der Collector bereits jede schriftbezogene Warnung. Die nächste logische Frage lautet: *Wie fange ich Warnungen* ab, sodass sie leicht zu protokollieren oder anzuzeigen sind? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typische Ausgabe sieht so aus: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Was das Ihnen sagt:** Jede Zeile enthüllt den ursprünglichen Schriftartnamen und die Ausweichschrift, die Aspose.Words gewählt hat. Mit diesen Informationen können Sie entscheiden, ob die Ausweichschrift akzeptabel ist oder ob Sie die fehlende Schriftart manuell einbetten müssen. + +--- + +## Fehlende Schriftarten elegant behandeln + +Das Erkennen und Abfangen von Warnungen ist nur die halbe Miete. Der eigentliche Nutzen entsteht, wenn Sie **fehlende Schriftarten** in einer produktionsreifen Weise **behandeln**. Im Folgenden drei gängige Strategien: + +1. **Protokollieren und Fortfahren** – Geeignet für Batch‑Verarbeitung, bei der Sie nur ein Prüfprotokoll benötigen. +2. **Bei kritischen Schriftarten abbrechen** – Werfen Sie eine Ausnahme, wenn eine bestimmte Schriftart (z. B. eine markenspezifische Schrift) fehlt. +3. **Schriftart on‑the‑fly einbetten** – Laden Sie die fehlende Schrift aus einem bekannten Ordner und registrieren Sie sie bei Aspose.Words, bevor Sie das Dokument erneut laden. + +### Beispiel: Bei einer kritischen Schriftart abbrechen + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Beispiel: Fehlende Schriftarten automatisch einbetten + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Warum diese Muster helfen:** Indem Sie explizit festlegen, was bei einer fehlenden Schriftart geschehen soll, vermeiden Sie stille Ersetzungen, die das Branding oder die Lesbarkeit beeinträchtigen könnten. Das ist das Wesentliche von **fehlenden Schriftarten behandeln** in kontrollierter Weise. + +--- + +## Komplettes funktionierendes Beispiel + +Alles zusammengeführt, hier ein einzelnes, sofort ausführbares Programm, das **zeigt, wie man Schriftarten erkennt**, **wie man Warnungen abfängt** und eine einfache Richtlinie implementiert, **fehlende Schriftarten zu behandeln**, indem sie protokolliert werden. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Erwartetes Ergebnis:** Wenn Sie das Programm gegen ein Dokument ausführen, das eine nicht vorhandene Schriftart referenziert, listet die Konsole jede Ersetzungs‑Warnung auf. Enthält eine Warnung eine Schrift aus dem `critical`‑Set, beendet das Programm frühzeitig, sodass kein fehlerhaftes PDF erzeugt wird. + +--- + +## Häufig gestellte Fragen (FAQs) + +| Frage | Antwort | +|----------|--------| +| *Benötige ich eine Lizenz für Aspose.Words, um diesen Code zu verwenden?* | Ja, eine gültige Aspose.Words‑Lizenz entfernt Evaluations‑Wasserzeichen und schaltet die volle Funktionalität frei. | +| *Kann dieser Ansatz eingebettete Schriftarten erkennen?* | Eingebettete Schriftarten sind bereits Teil der Datei, daher erzeugt Aspose.Words keine Ersetzungs‑Warnung. Sie können `Document.FontInfos` prüfen, um eingebettete Schriftarten bei Bedarf aufzulisten. | +| *Was passiert, wenn die fehlende Schriftart unter Windows ein System‑Font ist, aber unter Linux nicht?* | Unter Linux wird dieselbe Warnung ausgelöst, weil die Schrift dort nicht installiert ist. Verwenden Sie die Strategie „fehlende Schriftarten behandeln“, um die erforderlichen `.ttf`‑Dateien mit Ihrer Anwendung zu liefern. | +| *Ist der Warn‑Collector thread...* | + +{{< /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 b8bb182fcb..ed7ce6bbdd 100644 --- a/words/greek/net/basic-conversions/_index.md +++ b/words/greek/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ | [Πώς να εξάγετε LaTeX από το Word – Οδηγός βήμα‑βήμα](./how-to-export-latex-from-word-step-by-step-guide/) | Μάθετε πώς να εξάγετε έγγραφα Word σε μορφή LaTeX χρησιμοποιώντας το Aspose.Words για .NET με βήμα‑βήμα οδηγίες. | | [Μετατροπή 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 σε C# – Πλήρης Οδηγός Προγραμματισμού](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Μάθετε πώς να μετατρέπετε DOCX σε PDF με C# και Aspose.Words, ακολουθώντας πλήρη βήμα‑βήμα οδηγίες. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/greek/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..70b3736904 --- /dev/null +++ b/words/greek/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: Μετατρέψτε DOCX σε PDF σε C# γρήγορα. Μάθετε πώς να αποθηκεύετε το Word + ως PDF, να φορτώνετε έγγραφο docx σε C# και να εξασφαλίζετε τη συμμόρφωση με PDF/UA‑2 + σε λίγα λεπτά. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: el +og_description: Μετατρέψτε DOCX σε PDF με C# άμεσα. Αυτός ο οδηγός σας δείχνει πώς + να αποθηκεύσετε το Word ως PDF, να φορτώσετε έγγραφο docx με C# και να τηρήσετε + τα πρότυπα PDF/UA‑2. +og_title: Μετατροπή DOCX σε PDF με C# – Οδηγός βήμα‑προς‑βήμα +tags: +- Aspose.Words +- C# +- PDF Generation +title: Μετατροπή DOCX σε PDF με C# – Πλήρης Οδηγός Προγραμματισμού +url: /el/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Μετατροπή DOCX σε PDF σε C# – Πλήρης Οδηγός Προγραμματισμού + +Ποτέ χρειάστηκε να **convert DOCX to PDF** σε μια εφαρμογή C# αλλά δεν ήξερες από πού να ξεκινήσεις; Δεν είσαι μόνος. Πολλοί προγραμματιστές συναντούν εμπόδιο όταν διαπιστώνουν ότι ένα απλό κουμπί “save as PDF” στο Word δεν μεταφράζεται σε κώδικα. Τα καλά νέα; Με λίγες γραμμές κώδικα Aspose.Words (ή οποιασδήποτε παρόμοιας βιβλιοθήκης) μπορείς να αυτοματοποιήσεις όλη τη διαδικασία, να διατηρήσεις τα αιωρούμενα σχήματα ενσωματωμένα και ακόμη να πετύχεις συμμόρφωση PDF/UA‑2 χωρίς κόπο. + +Σε αυτό το tutorial θα μάθεις πώς να **save Word as PDF**, **load docx document C#**, και να ρυθμίσεις τις επιλογές εξαγωγής ώστε το παραγόμενο αρχείο να είναι έτοιμο για ελέγχους προσβασιμότητας. Στο τέλος θα έχεις ένα αυτόνομο, εκτελέσιμο πρόγραμμα που μετατρέπει οποιοδήποτε αρχείο `.docx` σε ένα καθαρό, σύμφωνο με τα πρότυπα PDF. + +> **Why care?** +> Η μετατροπή DOCX σε PDF είναι κοινή απαίτηση για συστήματα τιμολόγησης, δημιουργούς αναφορών και αγωγούς αρχειοθέτησης εγγράφων. Η αυτοματοποίηση της διαδικασίας εξαλείφει τα χειροκίνητα βήματα, μειώνει τα ανθρώπινα λάθη και εξασφαλίζει ότι κάθε έξοδος φαίνεται ακριβώς το ίδιο σε όλες τις πλατφόρμες. + +--- + +## What You’ll Need + +- **.NET 6.0** ή νεότερο (ο κώδικας λειτουργεί επίσης σε .NET Framework 4.6+) +- **Aspose.Words for .NET** (δωρεάν δοκιμή ή έκδοση με άδεια) – μπορείς να το εγκαταστήσεις μέσω NuGet: `dotnet add package Aspose.Words` +- Ένα δείγμα `input.docx` τοποθετημένο σε φάκελο που ελέγχεις (θα το αναφέρουμε ως `YOUR_DIRECTORY`) +- Visual Studio, VS Code ή οποιονδήποτε επεξεργαστή C# προτιμάς + +Αυτό είναι όλο—χωρίς επιπλέον υπηρεσίες, χωρίς κλήσεις REST. Απλώς καθαρό C#. + +--- + +## Step 1: Load the DOCX Document in C# + +Πριν μπορέσεις να **convert docx to pdf**, πρέπει να φορτώσεις το αρχείο Word στη μνήμη. Η κλάση `Document` το κάνει για σένα. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Why this matters:** +Η φόρτωση του αρχείου σου παρέχει ένα πλήρως αναλυμένο μοντέλο αντικειμένων—παράγραφοι, πίνακες, αιωρούμενα σχήματα, όλα. Είναι το πρώτο βήμα σε οποιοδήποτε workflow **load docx document c#**, και ταυτόχρονα επικυρώνει ότι το αρχείο δεν είναι κατεστραμμένο πριν σπαταλήσεις χρόνο στη μετατροπή. + +> **Pro tip:** Αν διαχειρίζεσαι αρχεία που ανεβάζουν χρήστες, τυλίξτε την κλήση `new Document()` σε μπλοκ try/catch για να χειριστείτε κατεστραμμένα αρχεία DOCX με χάρη. + +--- + +## Step 2: Configure PDF Save Options (Compliance & Shape Handling) + +Μπορεί να αναρωτιέσαι, “Πρέπει να ρυθμίσω κάτι, ή μπορώ απλώς να καλέσω το `Save`?” Η σύντομη απάντηση: μπορείς, αλλά η σωστή ρύθμιση των επιλογών κάνει το PDF προσβάσιμο και οπτικά πιστό. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Why this matters:** +- `ExportFloatingShapesAsInlineTag = true` αποτρέπει την απώλεια ή την κακή ευθυγράμμιση των αιωρούμενων αντικειμένων όταν το PDF προβάλλεται σε διαφορετικές συσκευές. +- `Compliance = PdfCompliance.PdfUa2` εξασφαλίζει ότι η έξοδος πληροί το πρότυπο PDF/UA‑2, το οποίο είναι κρίσιμο για τη συμβατότητα με προγράμματα ανάγνωσης οθόνης και τη νομική αρχειοθέτηση. + +Αν δεν χρειάζεσαι προσβασιμότητα, μπορείς να παραλείψεις τη γραμμή `Compliance`, αλλά η διατήρησή της δεν προσθέτει σχεδόν κανένα κόστος και κάνει τη λύση σου πιο ανθεκτική στο μέλλον. + +--- + +## Step 3: Save the Document as PDF – The Core **Convert DOCX to PDF** Action + +Τώρα που το έγγραφο είναι φορτωμένο και οι επιλογές έχουν οριστεί, η πραγματική μετατροπή είναι μια μόνο κλήση μεθόδου. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**What you’ll see:** +Η εκτέλεση του προγράμματος παράγει το `output.pdf` στον ίδιο φάκελο. Άνοιξέ το με οποιονδήποτε προβολέα PDF και θα παρατηρήσεις ότι: + +- Όλο το κείμενο, οι πίνακες και οι εικόνες εμφανίζονται ακριβώς όπως στο αρχικό DOCX. +- Τα αιωρούμενα σχήματα διατηρούνται ενσωματωμένα, διατηρώντας τη διάταξη. +- Το αρχείο περνάει βασικά εργαλεία επικύρωσης PDF/UA‑2 (π.χ., Adobe Acrobat Preflight). + +--- + +## Full Working Example – From Top to Bottom + +Παρακάτω βρίσκεται ένα πλήρες, έτοιμο‑για‑εκτέλεση console app που δείχνει όλη τη ροή. Αντέγραψε‑και‑επικόλλησε το σε ένα νέο έργο C# και πάτα **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Expected output in the console:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Και ένα τακτοποιημένο `output.pdf` βρίσκεται δίπλα στο αρχείο πηγής σου. + +--- + +## Frequently Asked Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Can I convert a DOCX stored in a `MemoryStream`?** | Absolutely. Use `new Document(stream)` instead of a file path. | +| **What if the DOCX contains macros?** | Aspose.Words ignores VBA macros by default; they won’t appear in the PDF. | +| **Do I need a license for production?** | The free trial adds a watermark after a certain page count. For commercial use, obtain a license to remove it. | +| **How do I change the PDF page size?** | Set `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` before saving. | +| **Is there a way to embed a custom font?** | Yes—add `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Pro Tips for a Smooth **Save Word as PDF** Experience + +- **Batch processing:** Τυλίξτε τη λογική μετατροπής σε βρόχο και δώστε του μια λίστα διαδρομών DOCX. +- **Performance:** Επαναχρησιμοποίησε ένα μόνο αντικείμενο `PdfSaveOptions` όταν μετατρέπεις πολλά αρχεία· μειώνει την πίεση στο GC. +- **Logging:** Καταγράψτε το μέγεθος του παραγόμενου PDF (`new FileInfo(outputPath).Length`) για να παρακολουθείτε τα αποτελέσματα συμπίεσης. +- **Error handling:** Διακρίνετε μεταξύ `FileNotFoundException` (απουσία DOCX) και `UnauthorizedAccessException` (προβλήματα δικαιωμάτων εγγραφής). + +--- + +## Conclusion + +Τώρα διαθέτεις ένα στιβαρό, έτοιμο για παραγωγή πρότυπο για **convert DOCX to PDF** σε C#. Φορτώνοντας το DOCX, ρυθμίζοντας τις επιλογές αποθήκευσης PDF και καλώντας το `Save`, μπορείς να **save Word as PDF**, να σεβαστείς τις λεπτομέρειές της διάταξης και να τηρήσεις πρότυπα προσβασιμότητας—όλα σε λιγότερο από μια δέκαδα γραμμών κώδικα. + +Έτοιμος για την επόμενη πρόκληση; Δοκίμασε να αντικαταστήσεις το `PdfSaveOptions` με `ImageSaveOptions` για **save Word as PNG**, ή εξερεύνησε την κλάση `HtmlSaveOptions` για παραγωγή εξόδου έτοιμης για web. Σε κάθε περίπτωση, τα ίδια θεμέλια **load docx document c#** ισχύουν, κάνοντας τη βάση κώδικά σου ανθεκτική στο μέλλον. + +Καλή προγραμματιστική, και να είναι πάντα τα PDFs σου συμβατά! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/greek/net/programming-with-loadoptions/_index.md index 4e65b76d5f..7080ff061d 100644 --- a/words/greek/net/programming-with-loadoptions/_index.md +++ b/words/greek/net/programming-with-loadoptions/_index.md @@ -33,6 +33,7 @@ | [Μετατροπή μετααρχείων σε png](./convert-metafiles-to-png/) | Μετατρέψτε εύκολα μετααρχεία σε PNG σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με αυτό το βήμα προς βήμα σεμινάριο. Απλοποιήστε τη διαχείριση εγγράφων σας. | | [Φόρτωση αρχείων Chm σε έγγραφο του Word](./load-chm/) | Φορτώστε εύκολα αρχεία CHM σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET με αυτό το βήμα προς βήμα σεμινάριο. Ιδανικό για την ενοποίηση της τεχνικής σας τεκμηρίωσης. | | [Πώς να ανακτήσετε docx με το Aspose.Words – βήμα προς βήμα](./how-to-recover-docx-with-aspose-words-step-by-step/) | Μάθετε πώς να ανακτήσετε αρχεία docx που έχουν καταστραφεί ή χαλασμένα χρησιμοποιώντας το Aspose.Words για .NET, βήμα προς βήμα οδηγός. | +| [Ανάκτηση Κατεστραμμένου DOCX – Πλήρης Οδηγός C# για Διόρθωση και Αποθήκευση Αρχείων](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Μάθετε πώς να επαναφέρετε και να αποθηκεύσετε κατεστραμμένα αρχεία DOCX χρησιμοποιώντας C# και Aspose.Words. | | [Aspose Load Options – Φόρτωση DOCX με προσαρμοσμένες ρυθμίσεις γραμματοσειράς](./aspose-load-options-load-docx-with-custom-font-settings/) | Μάθετε πώς να φορτώνετε αρχεία DOCX χρησιμοποιώντας το Aspose Load Options με προσαρμοσμένες ρυθμίσεις γραμματοσειράς για ακριβή απόδοση κειμένου. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/greek/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..248235c5fc --- /dev/null +++ b/words/greek/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-07 +description: Μάθετε πώς να ανακτήσετε κατεστραμμένα αρχεία DOCX σε C# και να αποθηκεύσετε + το ανακτημένο έγγραφο με ασφάλεια. Οδηγός βήμα‑προς‑βήμα με παράδειγμα Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: el +og_description: Ανακτήστε κατεστραμμένα αρχεία DOCX σε C# και αποθηκεύστε το ανακτημένο + έγγραφο με το Aspose.Words. Πλήρης κώδικας, εξηγήσεις και συμβουλές βέλτιστων πρακτικών. +og_title: Ανάκτηση Κατεστραμμένου DOCX – Οδηγός C# Βήμα‑βήμα +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Ανάκτηση Κατεστραμμένων DOCX – Πλήρης Οδηγός C# για Διόρθωση και Αποθήκευση + Αρχείων +url: /el/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ανάκτηση Κατεστραμμένου DOCX – Πλήρης Οδηγός C# για Διόρθωση και Αποθήκευση Αρχείων + +Προσπαθήσατε ποτέ να ανοίξετε ένα DOCX που φαίνεται εντάξει στον Explorer αλλά πετάει εξαίρεση στην εφαρμογή σας; Αυτό είναι το κλασικό εφιάλτης του “κατεστραμμένου αρχείου Word”, και συνήθως καταλήγει με ένα stack‑trace που δεν θέλετε να δείτε. Τα καλά νέα; Η Aspose.Words σας παρέχει τη λειτουργία **recover corrupted docx** που σας επιτρέπει να συνεχίσετε να εργάζεστε ακόμη και όταν το αρχείο είναι κατεστραμμένο. + +Σε αυτό το tutorial θα περάσουμε βήμα-βήμα τις ακριβείς ενέργειες για να φορτώσουμε ένα κατεστραμμένο έγγραφο, να πούμε στη βιβλιοθήκη να συνεχίσει, και στη συνέχεια **save recovered document** σε ένα νέο, καθαρό αρχείο. Στο τέλος θα γνωρίζετε γιατί είναι σημαντική η λειτουργία ανάκτησης, πώς να τη ρυθμίσετε, και ποια παγίδες να αποφύγετε—χωρίς ασαφείς συντομεύσεις “δείτε τα docs”. + +## Τι Θα Χρειαστεί + +- **Aspose.Words for .NET** (οποιαδήποτε πρόσφατη έκδοση· η 24.11 χρησιμοποιήθηκε κατά τη συγγραφή αυτού του οδηγού) +- Ένα .NET περιβάλλον ανάπτυξης (Visual Studio, Rider ή VS Code με την επέκταση C#) +- Ένα δείγμα DOCX που υποπτεύεστε ότι είναι κατεστραμμένο (μπορείτε να καταστρέψετε ένα αρχείο ανοίγοντάς το σε έναν zip editor και διαγράφοντας ένα τμήμα, μόνο για δοκιμή) +- Βασικές γνώσεις C#—τίποτα περίπλοκο, μόνο η ικανότητα δημιουργίας μιας console εφαρμογής + +Αν τα έχετε ήδη, τέλεια—ας περάσουμε κατευθείαν στη λύση. + +## Βήμα 1: Ρύθμιση LoadOptions με τη Σωστή Στρατηγική Ανάκτησης + +Η καρδιά της διόρθωσης είναι το αντικείμενο `LoadOptions`. Λέει στη Aspose.Words πώς να συμπεριφέρεται όταν συναντά κακοδιατυπωμένο XML ή ελλιπή τμήματα μέσα στο πακέτο DOCX. Η σημαία `RecoveryMode.RecoverAndContinue` είναι η πιο ανεκτική—προσπαθεί να διασώσει ό,τι μπορεί και παραλείπει το υπόλοιπο. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Γιατί είναι σημαντικό:** Αν παραλείψετε το `LoadOptions` ή χρησιμοποιήσετε την προεπιλεγμένη λειτουργία (`RecoveryMode.NoRecovery`), ο κατασκευαστής `Document` θα πετάξει εξαίρεση τη στιγμή που εντοπίσει πρόβλημα. Με το `RecoverAndContinue`, το API αγνοεί μη‑κριτικές σφάλματα και δημιουργεί ένα μερικό αντικείμενο εγγράφου με το οποίο μπορείτε ακόμα να εργαστείτε. + +> **Pro tip:** Για τεράστιες παρτίδες αρχείων, σκεφτείτε να τυλίξετε την κλήση φόρτωσης σε ένα `try/catch` block οπωσδήποτε—ορισμένα σφάλματα είναι πραγματικά μοιραία (π.χ., λείπει το αρχείο `[Content_Types].xml`) και δεν μπορούν να ανακτηθούν. + +## Βήμα 2: Φόρτωση του Πιθανώς Κατεστραμμένου DOCX + +Τώρα που οι επιλογές είναι έτοιμες, φορτώστε το αρχείο σας. Ο κατασκευαστής παίρνει τη διαδρομή του αρχείου και το `LoadOptions` που μόλις προετοιμάσαμε. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Τι συμβαίνει στο παρασκήνιο;** +Η Aspose.Words αναλύει το ZIP container, διαβάζει κάθε XML τμήμα και προσπαθεί να ανασυνθέσει το Open XML DOM. Όταν συναντήσει ένα κατεστραμμένο τμήμα, η μηχανή ανάκτησης καταγράφει μια προειδοποίηση (ορατή στην κονσόλα αν ενεργοποιήσετε τη διάγνωση) και συνεχίζει. Το προκύπτον αντικείμενο `Document` μπορεί να λείπουν μερικές παραγράφοι ή εικόνες, αλλά το υπόλοιπο περιεχόμενο παραμένει αμετάβλητο. + +## Βήμα 3: Επαλήθευση του Ανακτηθέντος Περιεχομένου (Προαιρετικό αλλά Συνιστώμενο) + +Πριν αποθηκεύσετε το αρχείο στο δίσκο, είναι σοφό να ελέγξετε μερικούς κόμβους για να βεβαιωθείτε ότι τα σημαντικά τμήματα επέζησαν. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Αν η έξοδος φαίνεται λογική, έχετε ανακτήσει με επιτυχία το περιεχόμενο **recover corrupted docx**. Αν παρατηρήσετε ελλιπή τμήματα, μπορείτε ακόμη να αποφασίσετε αν θα προχωρήσετε—μερικές φορές τα χαμένα κομμάτια είναι μόνο διακοσμητικά. + +## Βήμα 4: Αποθήκευση του Ανακτηθέντος Εγγράφου + +Αυτή είναι η ενότητα που οι περισσότεροι προγραμματιστές ρωτούν: “Πώς μπορώ να **save recovered document** χωρίς να επαναεισάγω την αρχική κατεργασία?” Η απάντηση είναι απλώς να καλέσετε το `Document.Save` με μια νέα διαδρομή. Η Aspose.Words γράφει ένα ολοκαίνουργιο πακέτο ZIP, έτσι οποιαδήποτε εναπομείνασα κατεστραμμένα τμήματα αφήνονται πίσω. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Γιατί λειτουργεί:** Η μέθοδος `Save` σειριοποιεί το DOM στη μνήμη πίσω σε ένα καθαρό πακέτο Open XML. Επειδή τα κατεστραμμένα κομμάτια δεν φορτώθηκαν ποτέ στο DOM (απορρίφθηκαν κατά την ανάκτηση), δεν εμφανίζονται στο νέο αρχείο. Το αποτέλεσμα είναι ένα υγιές DOCX που ανοίγει στο Word, Google Docs ή οποιονδήποτε άλλο προβολέα. + +## Βήμα 5: Αυτοματοποίηση της Διαδικασίας για Πολλαπλά Αρχεία (Bonus) + +Σε πραγματικά σενάρια συχνά έχετε έναν φάκελο γεμάτο προβληματικά αρχεία. Τυλίξτε τα προηγούμενα βήματα σε έναν βρόχο, και θα έχετε ένα μικρό εργαλείο ανάκτησης. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Τώρα μπορείτε να ρίξετε ολόκληρο κατάλογο κατεστραμμένων αρχείων DOCX στο `C:\Docs\Batch` και να αφήσετε το script να τα καθαρίσει αυτόματα. + +## Συχνές Ερωτήσεις & Ακραίες Περιπτώσεις + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Λειτουργεί αυτό με αρχεία .doc;** | Η ίδια κλάση `LoadOptions` ισχύει, αλλά πρέπει να αναφέρετε την παλαιότερη μορφή Word (`doc`). Η Aspose.Words μπορεί ακόμη να ανακτήσει, αν και τα πρότυπα σφαλμάτων διαφέρουν. | +| **Τι γίνεται αν το αρχείο είναι προστατευμένο με κωδικό;** | Η ανάκτηση δεν παρακάμπτει την κρυπτογράφηση. Πρέπει να παρέχετε τον κωδικό μέσω `LoadOptions.Password`. | +| **Θα χαθούν οι εικόνες;** | Μόνο οι εικόνες που αποτελούν μέρος ενός κατεστραμμένου XML τμήματος μπορεί να παραλειφθούν. Οι υπόλοιπες διατηρούνται επειδή αποθηκεύονται ως ξεχωριστά δυαδικά ρεύματα. | +| **Μπορώ να καταγράψω τις προειδοποιήσεις που δημιουργεί η Aspose;** | Ναι—ορίστε το `LoadOptions.LoadFormat` σε `LoadFormat.Docx` και εγγραφείτε στο `Document.WarningCallback` για να καταγράψετε λεπτομερή μηνύματα. | +| **Είναι το `RecoverAndContinue` ασφαλές για παραγωγή;** | Γενικά ναι, αλλά δοκιμάστε με τα δεδομένα σας. Σε κρίσιμες παραγωγικές αλυσίδες μπορεί να θέλετε να σημειώσετε τα έγγραφα που χρειάστηκαν ανάκτηση για μελλοντική ανασκόπηση. | + +## Πλήρες Παράδειγμα Εργασίας (Έτοιμο για Αντιγραφή‑Επικόλληση) + +Παρακάτω είναι το πλήρες πρόγραμμα που μπορείτε να μεταγλωττίσετε ως console εφαρμογή. Περιλαμβάνει όλα τα βήματα, τη διαχείριση σφαλμάτων και την προαιρετική λογική επεξεργασίας παρτίδας. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Αναμενόμενο αποτέλεσμα:** Μετά την εκτέλεση του προγράμματος, το `Recovered.docx` ανοίγει στο Microsoft Word χωρίς το αρχικό παράθυρο σφάλματος. Οποιαδήποτε τμήματα ήταν πολύ κατεστραμμένα παραλείπονται, αλλά το κύριο σώμα, οι επικεφαλίδες και οι περισσότερες εικόνες παραμένουν αμετάβλητες. + +![παράδειγμα ανάκτησης κατεστραμμένου docx](https://example.com/images/recover-corrupted-docx.png "ανάκτηση κατεστραμμένου docx – οπτική σύγκριση πριν/μετά") + +## Συμπέρασμα + +Καλύψαμε όλα όσα χρειάζεστε για να **recover corrupted docx** αρχεία χρησιμοποιώντας την Aspose.Words, από τη ρύθμιση του `LoadOptions` μέχρι την ασφαλή **save recovered document**. Τα κύρια συμπεράσματα είναι: + +- Χρησιμοποιήστε το `RecoveryMode.RecoverAndContinue` για να επιτρέψετε στη βιβλιοθήκη να αγνοεί μη‑κριτικά σφάλματα. +- Επαληθεύστε το φορτωμένο περιεχόμενο πριν το αποθηκεύσετε, ειδικά όταν χειρίζεστε κρίσιμα επιχειρηματικά έγγραφα. +- Η αποθήκευση του εγγράφου δημιουργεί ένα καθαρό πακέτο ZIP, αφαιρώντας ουσιαστικά την αρχική κατεργασία. +- Το ίδιο μοτίβο κλιμακώνεται σε λειτουργίες παρτίδας, επιτρέποντας αυτοματοποιημένη εκκαθάριση μεγάλων αποθετηρίων εγγράφων. + +Έτοιμοι για το επόμενο βήμα; Δοκιμάστε να ενσωματώσετε αυτή τη λογική σε μια υπηρεσία παρασκηνίου που παρακολουθεί έναν φάκελο ανεβάσματος, ή πειραματιστείτε με το `WarningCallback` για να δημιουργήσετε μια αναφορά των αρχείων που χρειάστηκαν ανάκτηση. Όσο περισσότερο παίζετε με το API, τόσο περισσότερο θα εκτιμήσετε πόσο ισχυρή είναι η Aspose.Words για επεξεργασία εγγράφων στον πραγματικό κόσμο. + +Έχετε κάποιο κόλπο που θέλετε να μοιραστείτε—ίσως η διαχείριση αρχείων με κωδικό ή η συγχώνευση ανακτηθέντων εγγράφων; Αφήστε ένα σχόλιο παρακάτω, και ας συνεχίσουμε τη συζήτηση. Καλό κώδικα! + +{{< /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 4d29db5c00..616a3f8597 100644 --- a/words/greek/net/programming-with-markdownsaveoptions/_index.md +++ b/words/greek/net/programming-with-markdownsaveoptions/_index.md @@ -34,6 +34,7 @@ | [Πώς να αποθηκεύσετε Markdown από DOCX – Οδηγός βήμα‑βήμα](./how-to-save-markdown-from-docx-step-by-step-guide/) | Μάθετε πώς να αποθηκεύσετε αρχεία DOCX ως Markdown με οδηγίες βήμα‑βήμα χρησιμοποιώντας Aspose.Words για .NET. | | [Πώς να εξάγετε Markdown από το Word – Πλήρης οδηγός C#](./how-to-export-markdown-from-word-complete-c-guide/) | Μάθετε πώς να εξάγετε έγγραφα Word σε μορφή Markdown με πλήρη οδηγό C# χρησιμοποιώντας Aspose.Words. | | [Πώς να αποθηκεύσετε Markdown από DOCX – Οδηγός βήμα‑βήμα](./how-to-save-markdown-from-docx-step-by-step-guide/) | Μάθετε πώς να αποθηκεύσετε αρχεία DOCX ως Markdown με οδηγίες βήμα‑βήμα χρησιμοποιώντας Aspose.Words για .NET. | +| [Αποθήκευση Word ως Markdown με προσαρμοσμένο φάκελο εικόνων – Πλήρης Οδηγός](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Μάθετε πώς να αποθηκεύσετε έγγραφα Word ως Markdown με προσαρμοσμένο φάκελο εικόνων σε πλήρη οδηγό. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/greek/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..f0669cf191 --- /dev/null +++ b/words/greek/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-04-07 +description: Αποθηκεύστε το Word ως Markdown και εξάγετε εικόνες από το docx χρησιμοποιώντας + μια κλήση επιστροφής. Μάθετε πώς να χρησιμοποιείτε την κλήση επιστροφής για να αποθηκεύετε + αποδοτικά το φάκελο εικόνων του Markdown. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: el +og_description: Αποθηκεύστε το Word ως Markdown και εξάγετε εικόνες από docx χρησιμοποιώντας + callback. Αυτός ο οδηγός δείχνει πώς να χρησιμοποιήσετε το callback για να δημιουργήσετε + έναν φάκελο εικόνων markdown. +og_title: Αποθήκευση Word ως Markdown – Πλήρης Οδηγός Βήμα‑βήμα +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Αποθήκευση του Word ως Markdown με Προσαρμοσμένο Φάκελο Εικόνων – Πλήρης Οδηγός +url: /el/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Αποθήκευση Word ως Markdown – Πλήρης Οδηγός Βήμα‑βήμα + +Έχετε χρειαστεί ποτέ να **αποθηκεύσετε Word ως Markdown** αλλά δεν ήξερες τι να κάνετε με τις ενσωματωμένες εικόνες; Δεν είστε μόνοι. Σε πολλά έργα το αποτέλεσμα σε markdown φαίνεται τέλειο—*μέχρι* να συνειδητοποιήσετε ότι οι σύνδεσμοι εικόνων είναι σπασμένοι επειδή τα αρχεία δεν έφυγαν ποτέ από το πακέτο Word. + +Το καλό νέο είναι ότι το Aspose.Words σας παρέχει έναν καθαρό τρόπο να **εξάγετε εικόνες από docx** και να τις τοποθετήσετε ακριβώς εκεί που θέλετε, χρησιμοποιώντας ένα **callback** που σας επιτρέπει να ελέγχετε το φάκελο εικόνων του markdown. Σε αυτό το tutorial θα περάσουμε από όλη τη διαδικασία, από τη φόρτωση ενός αρχείου `.docx` μέχρι το τελικό αποτέλεσμα: ένας τακτοποιημένος φάκελος PNG (ή όποια μορφή έχετε) και ένα αρχείο markdown που δείχνει σε αυτές. + +Στο τέλος αυτού του οδηγού θα μπορείτε να: + +* Μετατρέψετε οποιοδήποτε έγγραφο Word σε Markdown με μία μόνο γραμμή κώδικα. +* Αυτόματα αποθηκεύσετε κάθε εικόνα σε έναν αφιερωμένο υπο‑φάκελο `images`. +* Προσαρμόσετε τα ονόματα αρχείων ώστε να μην συγκρούονται, ακόμη και όταν η πηγή περιέχει δεκάδες εικόνες. + +Χωρίς εξωτερικά scripts, χωρίς χειροκίνητη αντιγραφή‑επικόλληση—μόνο καθαρό C# και Aspose.Words. + +## Προαπαιτούμενα + +Πριν ξεκινήσουμε, βεβαιωθείτε ότι έχετε: + +* **Aspose.Words for .NET** (η πιο πρόσφατη σταθερή έκδοση· τη στιγμή της συγγραφής είναι η 24.9). +* Ένα περιβάλλον ανάπτυξης .NET (Visual Studio, Rider ή το `dotnet` CLI). +* Ένα έγγραφο Word (`.docx`) που περιέχει τουλάχιστον μία εικόνα—π.χ. `DocWithImages.docx`. + +Αν δεν έχετε χρησιμοποιήσει ποτέ το Aspose.Words, μην ανησυχείτε. Η βιβλιοθήκη είναι πλήρως διαχειριζόμενη, δεν απαιτεί COM interop και λειτουργεί σε .NET 6+ καθώς και σε .NET Framework 4.8. + +## Βήμα 1 – Δημιουργία του Project και Εγκατάσταση του Πακέτου + +Αρχικά, δημιουργήστε μια νέα εφαρμογή console (ή προσθέστε τον κώδικα σε υπάρχον project). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Συμβουλή:** Αν στοχεύετε .NET 6, το προεπιλεγμένο `Program.cs` χρησιμοποιεί ήδη top‑level statements, κάτι που κρατά το παράδειγμα σύντομο. + +## Βήμα 2 – Δημιουργία Callback για Έλεγχο της Αποθήκευσης Εικόνων + +Το Aspose.Words καλεί το `IResourceSavingCallback.ResourceSaving` για κάθε εξωτερικό πόρο που χρειάζεται να γράψει (εικόνες, CSS κ.λπ.). Υλοποιώντας αυτή τη διεπαφή αποκτούμε πλήρη εξουσία πάνω στο **πώς θα δημιουργηθεί ο φάκελος εικόνων του markdown**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Γιατί να χρησιμοποιήσετε ένα callback; + +* **Ακριβής έλεγχος** – εσείς αποφασίζετε τη δομή φακέλων και το σχήμα ονοματοδοσίας. +* **Απόδοση** – γράφετε το stream μία φορά, αποφεύγοντας το fallback διπλής εγγραφής της βιβλιοθήκης. +* **Ευελιξία** – μπορείτε να προσθέσετε logging, βελτιστοποίηση εικόνων ή ακόμη και ανέβασμα σε cloud storage σε αυτό το σημείο. + +## Βήμα 3 – Φόρτωση του Εγγράφου Word + +Τώρα που το callback είναι έτοιμο, αρκεί να κατευθύνουμε το Aspose.Words στο αρχείο προέλευσης. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Τι γίνεται αν το αρχείο δεν βρεθεί;** +> Το `Document` θα ρίξει `FileNotFoundException`. Τυλίξτε τη φόρτωση σε `try/catch` αν χρησιμοποιείτε δυναμικές διαδρομές. + +## Βήμα 4 – Ρύθμιση του MarkdownSaveOptions + +Η κλάση `MarkdownSaveOptions` μας επιτρέπει να συνδέσουμε το callback που μόλις δημιουργήσαμε. Επίσης ορίζουμε το φάκελο όπου θα ζήσουν οι εικόνες, σχετικό με το αρχείο markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Η ιδιότητα `ImagesFolder` λέει στο Aspose να δημιουργήσει συνδέσμους markdown όπως `![Alt text](images/img_123.png)`. Επειδή επίσης ορίσαμε `ResourceFileName` μέσα στο callback, το πραγματικό αρχείο αποθηκεύεται ακριβώς εκεί. + +## Βήμα 5 – Αποθήκευση ως Markdown και Έλεγχος του Αποτελέσματος + +Τέλος, γράφουμε το αρχείο markdown. Το callback θα έχει ήδη γεμίσει τον υπο‑φάκελο `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Αναμενόμενο αποτέλεσμα + +Η εκτέλεση του προγράμματος θα εμφανίσει κάτι σαν: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Ανοίξτε το `Doc.md` σε οποιονδήποτε προβολέα markdown· θα δείτε συνδέσμους εικόνων που δείχνουν σωστά στον φάκελο `images`. + +--- + +## Συχνές Ερωτήσεις (FAQ) + +### Πώς να **εξάγετε εικόνες από docx** χωρίς μετατροπή σε markdown; + +Μπορείτε να επαναχρησιμοποιήσετε το ίδιο `MyMarkdownResourceCallback`, αλλά να το περάσετε στο `doc.Save("images.zip", SaveFormat.Zip)`. Το callback θα ενεργοποιείται για κάθε εικόνα, επιτρέποντάς σας να τις τοποθετήσετε όπου θέλετε. + +### Τι γίνεται αν χρειάζομαι **διαφορετικές μορφές εικόνων**; + +Το `args.FileName` περιέχει ήδη την αρχική επέκταση (`.png`, `.jpg`, κ.λπ.). Αν πρέπει να μετατρέψετε όλες τις εικόνες σε μία μορφή, προσθέστε βήμα μετατροπής μέσα στο `ResourceSaving` πριν γράψετε το stream. + +### Μπορώ να **προσαρμόσω το φάκελο εικόνων markdown** ανά έγγραφο; + +Απόλυτα. Το callback λαμβάνει τη διαδρομή φακέλου μέσω του constructor, οπότε μπορείτε να δημιουργήσετε ένα νέο callback με διαφορετικό φάκελο για κάθε έγγραφο σε batch διαδικασία. + +### Λειτουργεί αυτό με **μεγάλα έγγραφα** (εκατοντάδες εικόνες); + +Ναι. Το callback μεταφέρει την εικόνα απευθείας στο δίσκο, κρατώντας τη χρήση μνήμης χαμηλή. Απλώς βεβαιωθείτε ότι ο προορισμός έχει αρκετό χώρο και ότι δεν υπερβαίνετε τα όρια ανοιγμάτων αρχείων του λειτουργικού συστήματος. + +--- + +## Πλήρες Παράδειγμα Εργασίας + +Παρακάτω βρίσκεται το ολοκληρωμένο πρόγραμμα, έτοιμο για αντιγραφή‑και‑επικόλληση. Αντικαταστήστε το `YOUR_DIRECTORY` με μια απόλυτη ή σχετική διαδρομή που ταιριάζει στο περιβάλλον σας. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Εκτελέστε το πρόγραμμα (`dotnet run`) και θα δείτε ένα φρέσκο `Doc.md` δίπλα σε έναν υπο‑φάκελο `images` που περιέχει + +{{< /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-officemath/_index.md b/words/greek/net/programming-with-officemath/_index.md index 50f4e69369..b5599090b2 100644 --- a/words/greek/net/programming-with-officemath/_index.md +++ b/words/greek/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ | Τίτλος | Περιγραφή | | --- | --- | | [Μαθηματικές Εξισώσεις](./math-equations/) | Μάθετε πώς να ρυθμίζετε μαθηματικές εξισώσεις σε έγγραφα Word χρησιμοποιώντας το Aspose.Words για .NET. Οδηγός βήμα προς βήμα με παραδείγματα, συχνές ερωτήσεις και πολλά άλλα. | +| [Αποθήκευση docx ως txt – Εξαγωγή μαθηματικών Word σε LaTeX σε C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Μάθετε πώς να αποθηκεύετε αρχεία docx ως txt και να εξάγετε μαθηματικά Word σε LaTeX χρησιμοποιώντας C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/greek/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..c00c07e42b --- /dev/null +++ b/words/greek/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-04-07 +description: Αποθηκεύστε το docx ως txt γρήγορα και μάθετε πώς να εξάγετε μαθηματικά + σε LaTeX. Μετατρέψτε το Word σε txt, διαχειριστείτε το Office Math και διατηρήστε + τις εξισώσεις ανέπαφες. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: el +og_description: Αποθήκευση docx ως txt με εξαγωγή μαθηματικών LaTeX. Ένας βήμα‑βήμα + οδηγός C# που δείχνει πώς να μετατρέψετε το Word σε txt και να διατηρήσετε τις εξισώσεις. +og_title: Αποθήκευση docx ως txt – Οδηγός C# για εξαγωγή μαθηματικών του Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Αποθήκευση docx ως txt – Εξαγωγή μαθηματικών Word σε LaTeX σε C# +url: /el/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Αποθήκευση docx ως txt – Εξαγωγή μαθηματικών Word σε LaTeX με C# + +Έχετε ποτέ χρειαστεί να **αποθηκεύσετε docx ως txt** αλλά ανησυχείτε ότι οι εξισώσεις σας θα μετατραπούν σε μια χαοτική σειρά συμβόλων; Δεν είστε μόνοι. Πολλοί προγραμματιστές αντιμετωπίζουν αυτό το πρόβλημα όταν προσπαθούν να **μετατρέψουν word σε txt** για επεξεργασία σε επόμενα στάδια, ειδικά όταν η πηγή περιέχει αντικείμενα Office Math. + +Τα καλά νέα; Με λίγες γραμμές C# και τις σωστές επιλογές αποθήκευσης, μπορείτε να διατηρήσετε κάθε εξίσωση ως καθαρό LaTeX, κάνοντας το αρχείο απλού κειμένου τόσο αναγνώσιμο από άνθρωπο όσο και έτοιμο για επιστημονικές ροές εργασίας. Σε αυτό το tutorial θα περάσουμε από όλη τη διαδικασία, θα απαντήσουμε στο *πώς να εξάγετε μαθηματικά* από ένα αρχείο Word, και θα σας δείξουμε *πώς να μετατρέψετε docx* χωρίς να χάσετε την ακρίβεια των μαθηματικών. + +## Τι Θα Μάθετε + +- Φορτώστε ένα αρχείο `.docx` χρησιμοποιώντας το Aspose.Words (ή οποιαδήποτε συμβατή βιβλιοθήκη). +- Διαμορφώστε το `TxtSaveOptions` ώστε το Office Math να εξάγεται ως LaTeX. +- Αποθηκεύστε το έγγραφο ως αρχείο `.txt` που διατηρεί τις εξισώσεις ανέπαφες. +- Συμβουλές για τη διαχείριση ειδικών περιπτώσεων όπως κρυφές εξισώσεις ή μεγάλα έγγραφα. +- Ένα πλήρες, εκτελέσιμο δείγμα κώδικα που μπορείτε να αντιγράψετε‑και‑επικολλήσετε αμέσως. + +Χωρίς περίπλοκα εργαλεία κατασκευής, μόνο ένα .NET project και το πακέτο NuGet Aspose.Words. Ας ξεκινήσουμε. + +--- + +## Προαπαιτούμενα + +| Απαίτηση | Γιατί είναι σημαντικό | +|-------------|----------------| +| .NET 6.0 ή νεότερο | Σύγχρονα χαρακτηριστικά της γλώσσας και καλύτερη απόδοση. | +| Aspose.Words for .NET (NuGet) | Παρέχει `Document`, `TxtSaveOptions` και `OfficeMathExportMode`. | +| Ένα αρχείο Word (`.docx`) που περιέχει εξισώσεις | Για να δείτε την εξαγωγή LaTeX σε δράση. | +| Βασικές γνώσεις C# | Θα ακολουθήσετε τον κώδικα γραμμή‑με‑γραμμή. | + +Αν δεν έχετε προσθέσει ακόμη το Aspose.Words, εκτελέστε: + +```bash +dotnet add package Aspose.Words +``` + +Αυτό είναι—δεν χρειάζεται επιπλέον διαμόρφωση. + +## Βήμα 1: Φόρτωση του Αρχείου DOCX + +Πρώτα, πρέπει να φέρουμε το πηγαίο έγγραφο στη μνήμη. Σκεφτείτε το ως το άνοιγμα ενός βιβλίου πριν αρχίσετε να διαβάζετε. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Συμβουλή:** Χρησιμοποιήστε απόλυτη διαδρομή κατά τη δοκιμή για να αποφύγετε εκπλήξεις «αρχείο δεν βρέθηκε». Σε παραγωγή πιθανότατα θα λαμβάνετε τη διαδρομή από αρχείο ρυθμίσεων ή από μεταφόρτωση χρήστη. + +## Βήμα 2: Διαμόρφωση των Επιλογών Αποθήκευσης TXT για Εξαγωγή Μαθηματικών + +Από προεπιλογή, το `TxtSaveOptions` αποθηκεύει απλό κείμενο και αφαιρεί το Office Math. Δεν το θέλουμε αυτό. Ορίζοντας το `OfficeMathExportMode` σε `LaTeX` λέει στη βιβλιοθήκη να μεταφράσει κάθε εξίσωση στην αναπαράστασή της σε LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Γιατί LaTeX; + +Το LaTeX είναι η κοινή γλώσσα της επιστημονικής δημοσίευσης. Όταν αργότερα τροφοδοτήσετε το `.txt` σε έναν επεξεργαστή markdown, Jupyter notebook ή οποιοδήποτε εργαλείο που υποστηρίζει LaTeX, οι εξισώσεις αποδίδονται τέλεια. Αν προτιμάτε απλά σύμβολα Unicode, μπορείτε να αλλάξετε σε `OfficeMathExportMode.Unicode`, αλλά το LaTeX σας δίνει τον μεγαλύτερο έλεγχο. + +## Βήμα 3: Αποθήκευση του Εγγράφου ως Αρχείο Απλού Κειμένου + +Τώρα συμβαίνει η μαγεία. Η μέθοδος `Save` γράφει το έγγραφο στο δίσκο χρησιμοποιώντας τις επιλογές που ορίσαμε. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Μετά την εκτέλεση αυτής της γραμμής, το `Math.txt` θα περιέχει: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Παρατηρήστε πώς η εξίσωση εμφανίζεται μέσα σε `\[` και `\]` — ακριβώς αυτό που περιμένει το LaTeX. + +## Πώς να Εξάγετε Μαθηματικά από Πολύπλοκα Έγγραφα + +### Διαχείριση Κρυφών ή Ενσωματωμένων Εξισώσεων + +Κάποια αρχεία Word αποθηκεύουν εξισώσεις μέσα σε κρυφά πλαίσια κειμένου. Το Aspose.Words τις αντιμετωπίζει όπως τις ορατές εξισώσεις, έτσι η εξαγωγή LaTeX λειτουργεί αυτόματα. Ωστόσο, αν παρατηρήσετε ότι λείπουν εξισώσεις, ελέγξτε ξανά ότι το αντικείμενο `Document` δεν είναι ρυθμισμένο να αγνοεί το κρυφό περιεχόμενο: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Μεγάλα Έγγραφα και Χρήση Μνήμης + +Η αποθήκευση μιας διατριβής 500 σελίδων μπορεί να καταναλώσει πολύ RAM. Για να κρατήσετε το αποτύπωμα μνήμης χαμηλό, μπορείτε να κάνετε ροή της εξόδου: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Η ροή γράφει τμήματα στο δίσκο καθώς παράγονται, αποτρέποντας το ολόκληρο αρχείο να παραμείνει στη μνήμη ταυτόχρονα. + +## Συνηθισμένα Πιθανά Σφάλματα & Πώς να τα Αποφύγετε + +| Πρόβλημα | Συμπτωμα | Διόρθωση | +|---------|---------|-----| +| Έλλειψη αγκυλών LaTeX | Οι εξισώσεις εμφανίζονται ως ακατέργαστος κώδικας (`E = mc^{2}`) | Βεβαιωθείτε ότι `OfficeMathExportMode = LaTeX`. | +| Κενό αρχείο εξόδου | Λάθος διαδρομή ή ανεπαρκή δικαιώματα | Επαληθεύστε ότι ο φάκελος εξόδου υπάρχει και είναι εγγράψιμος. | +| Παραμορφωμένοι χαρακτήρες | Το αρχείο κωδικοποιείται σε UTF‑8 χωρίς BOM σε σύστημα που αναμένει ANSI | Προσθέστε `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Εξισώσεις εξαφανίζονται μετά τη μετατροπή | Το έγγραφο φορτώθηκε με `LoadOptions` που εξαιρούν τα μαθηματικά | Χρησιμοποιήστε προεπιλεγμένα `LoadOptions` ή ορίστε `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## Πλήρες Παράδειγμα Λειτουργίας + +Παρακάτω είναι το πλήρες πρόγραμμα που μπορείτε να μεταγλωττίσετε και να εκτελέσετε. Περιλαμβάνει διαχείριση σφαλμάτων, επικύρωση διαδρομής και ένα μικρό μήνυμα κονσόλας ώστε να γνωρίζετε ότι όλα ολοκληρώθηκαν επιτυχώς. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Αναμενόμενη έξοδος** (απόσπασμα από το `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Τώρα μπορείτε να τροφοδοτήσετε αυτό το αρχείο σε οποιοδήποτε εργαλείο που υποστηρίζει LaTeX, και οι εξισώσεις θα αποδοθούν όμορφα. + +## Πώς να Μετατρέψετε DOCX σε TXT Χωρίς Να Χάσετε Μορφοποίηση + +Αν χρειάζεστε μόνο απλό κείμενο και δεν σας ενδιαφέρουν τα μαθηματικά, απλώς παραλείψτε τη γραμμή `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Αλλά θυμηθείτε, **πώς να εξάγετε μαθηματικά** είναι το διακριτικό στοιχείο για τις επιστημονικές ροές εργασίας. Η διατήρηση του LaTeX ανέπαφου είναι αυτό που κάνει τη μετατροπή πραγματικά χρήσιμη. + +## Επόμενα Βήματα & Σχετικά Θέματα + +- **Μετατροπή κατά παρτίδες:** Τυλίξτε τον κώδικα σε βρόχο `foreach` για να επεξεργαστείτε ολόκληρο φάκελο αρχείων `.docx`. +- **Δημιουργία Markdown:** Προσθέστε κεφαλίδες `#` ή κουκκίδες `*` στο κείμενο για να παραγάγετε έτοιμο προς δημοσίευση markdown. +- **Εξαγωγή PDF:** Χρησιμοποιήστε `PdfSaveOptions` για να δημιουργήσετε μια έκδοση PDF παράλληλα με το txt. +- **Προχωρημένη ρύθμιση LaTeX:** Μετά-επεξεργασία της εξόδου με regex για να αντικαταστήσετε `\[`/`\]` με `$...$` για ενσωματωμένες εξισώσεις. + +Κάθε ένα από αυτά βασίζεται στην ίδια θεμελίωση — τη φόρτωση ενός `Document` και την επιλογή των κατάλληλων `SaveOptions`. Μη διστάσετε να πειραματιστείτε· το API είναι αρκετά ευέλικτο για τις περισσότερες περιπτώσεις αυτοματοποίησης εγγράφων. + +## Συμπέρασμα + +Καλύψαμε όλα όσα χρειάζεστε για να **αποθηκεύσετε docx ως txt** διατηρώντας κάθε εξίσωση ως LaTeX. Από τη φόρτωση του πηγαίου αρχείου, τη διαμόρφωση του `TxtSaveOptions` για **πώς να εξάγετε μαθηματικά**, μέχρι τη δημιουργία του τελικού αρχείου απλού κειμένου, όλη η ροή εργασίας χωράει σε λίγες σύντομες δηλώσεις C#. + +Τώρα μπορείτε να αυτοματοποιήσετε τη μετατροπή αναφορών Word, ακαδημαϊκών εργασιών ή οποιουδήποτε εγγράφου που συνδυάζει κείμενο και μαθηματικά, και να τροφοδοτήσετε το προκύπτον `.txt` σε επόμενα εργαλεία χωρίς να χάσετε καμία επιστημονική λεπτομέρεια. + +Δοκιμάστε το, προσαρμόστε τις επιλογές για τη δική σας περίπτωση χρήσης, και ενημερώστε μας στα σχόλια πώς σας φάνηκε. Καλή προγραμματιστική! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/greek/net/programming-with-pdfsaveoptions/_index.md index fe1830fb80..d746d91675 100644 --- a/words/greek/net/programming-with-pdfsaveoptions/_index.md +++ b/words/greek/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ | [Ενημέρωση τελευταίας εκτυπωμένης ιδιότητας σε έγγραφο PDF](./update-last-printed-property/) | Μάθετε πώς να ενημερώσετε την τελευταία εκτυπωμένη ιδιότητα σε ένα έγγραφο PDF χρησιμοποιώντας το Aspose.Words για .NET με τον αναλυτικό μας οδηγό. | | [Απόδοση 3D DML 3DEfects σε έγγραφο PDF](./dml-3deffects-rendering/) | Μάθετε πώς να αποδίδετε εκπληκτικά εφέ 3D DML σε έγγραφα PDF χρησιμοποιώντας το Aspose.Words για .NET με αυτόν τον ολοκληρωμένο οδηγό βήμα προς βήμα. | | [Παρεμβολή εικόνων σε ένα έγγραφο PDF](./interpolate-images/) | Μάθετε πώς να παρεμβάλλετε εικόνες σε ένα έγγραφο PDF χρησιμοποιώντας το Aspose.Words για .NET με τον αναλυτικό μας οδηγό. Βελτιώστε εύκολα την ποιότητα εικόνας του PDF σας. | - +| [Δημιουργία προσβάσιμου PDF από Word – Οδηγός βήμα‑βήμα](./create-accessible-pdf-from-word-step-by-step-guide/) | Μάθετε πώς να δημιουργήσετε προσβάσιμα αρχεία PDF από έγγραφα Word με οδηγίες βήμα‑βήμα χρησιμοποιώντας Aspose.Words για .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/greek/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/greek/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..aec5bcd38c --- /dev/null +++ b/words/greek/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,221 @@ +--- +category: general +date: 2026-04-07 +description: Δημιουργήστε προσβάσιμο PDF από αρχείο DOCX σε C#. Μάθετε πώς να μετατρέψετε + το Word σε PDF, να αποθηκεύσετε το docx ως PDF και να εξασφαλίσετε τη συμμόρφωση + με το PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: el +og_description: Δημιουργήστε προσβάσιμο PDF από το Word σε C#. Αυτός ο οδηγός δείχνει + πώς να μετατρέψετε το Word σε PDF, να αποθηκεύσετε το docx ως PDF και να πληροί + τα πρότυπα PDF/UA. +og_title: Δημιουργία Προσβάσιμου PDF – Πλήρης Οδηγός C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Δημιουργία Προσβάσιμου PDF από το Word – Οδηγός Βήμα‑Βήμα +url: /el/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Δημιουργία Προσβάσιμου PDF από Word – Πλήρης Προγραμματιστική Εκπαίδευση + +Έχετε ποτέ χρειαστεί να **δημιουργήσετε προσβάσιμο PDF** από ένα έγγραφο Word αλλά δεν ήσασταν σίγουροι ποιες ρυθμίσεις να προσαρμόσετε; Δεν είστε μόνοι. Σε πολλές επιχειρήσεις, η συμμόρφωση με το PDF/UA (Universal Accessibility) είναι αυστηρή απαίτηση, και το συνηθισμένο κουμπί “μετατροπή‑σε‑PDF” δεν αρκεί. + +Σε αυτόν τον οδηγό θα περάσουμε βήμα‑βήμα μια σύντομη, ολοκληρωμένη λύση που **μετατρέπει το Word σε PDF**, **αποθηκεύει docx ως PDF**, και εγγυάται ότι το αποτέλεσμα πληροί τα πρότυπα προσβασιμότητας. Χωρίς ασαφείς αναφορές — μόνο ο κώδικας που μπορείτε να αντιγράψετε‑και‑επικολλήσετε, μαζί με το “γιατί” πίσω από κάθε γραμμή. + +> **TL;DR:** Φορτώστε ένα `.docx`, ορίστε το `PdfSaveOptions.Compliance` σε `PdfUa1` (ή `PdfUa2`), και καλέστε `Document.Save`. Αυτό είναι ό,τι χρειάζεστε για **να δημιουργήσετε προσβάσιμο PDF** με το Aspose.Words για .NET. + +## Τι Θα Μάθετε + +- Πώς να **μετατρέψετε το Word σε PDF** διατηρώντας τις επικεφαλίδες, το alt‑text και τη σειρά ανάγνωσης. +- Η διαφορά μεταξύ `PdfUa1` και `PdfUa2` και πότε να επιλέξετε το καθένα. +- Πώς να **αποθηκεύσετε docx ως PDF** χρησιμοποιώντας μόνο λίγες γραμμές C#. +- Συνηθισμένα προβλήματα (έλλειψη γραμματοσειρών, μη υποστηριζόμενες ετικέτες) και γρήγορες λύσεις. +- Ένα έτοιμο‑για‑εκτέλεση δείγμα κώδικα που μπορείτε να ενσωματώσετε σε οποιοδήποτε .NET project. + +### Προαπαιτούμενα + +- .NET 6 ή νεότερο (ο κώδικας λειτουργεί επίσης σε .NET Framework 4.7+). +- Aspose.Words για .NET εγκατεστημένο μέσω NuGet (`Install-Package Aspose.Words`). +- Ένα αρχείο Word (`input.docx`) που ήδη περιέχει σωστή δομή (στυλ, alt‑text για εικόνες). + +Αν δεν έχετε προσθέσει ακόμη το Aspose.Words, εκτελέστε την παρακάτω εντολή στην κονσόλα του Package Manager: + +```powershell +Install-Package Aspose.Words +``` + +Αυτή είναι η μόνη εξωτερική εξάρτηση που χρειάζεστε. + +## Δημιουργία Προσβάσιμου PDF – Γιατί είναι Σημαντική η Προσβασιμότητα + +Όταν ένα PDF είναι επισημασμένο ως **PDF/UA** (Universal Accessibility), οι αναγνώστες οθόνης μπορούν να περιηγηθούν στις επικεφαλίδες, τους πίνακες και τα πεδία φόρμας όπως θα έκαναν στο αρχικό αρχείο Word. Αυτό δεν είναι απλώς ένα «nice‑to‑have»· πολλές κυβερνήσεις και εταιρείες θεωρούν τη συμμόρφωση με το PDF/UA ως νομική απαίτηση. + +Ο καθορισμός της ιδιότητας `Compliance` στο `PdfSaveOptions` λέει στη βιβλιοθήκη να ενσωματώσει τις απαραίτητες ετικέτες, να ορίσει τη σωστή γλώσσα του εγγράφου και να προσθέσει λογική σειρά ανάγνωσης. Η παράλειψη αυτού του βήματος παράγει ένα “μόνο‑οπτικό” PDF που αποτυγχάνει σε ελέγχους προσβασιμότητας. + +## Μετατροπή Word σε PDF με το Aspose.Words + +Ακολουθεί ο πιο απλός τρόπος για **να μετατρέψετε το Word σε PDF** διατηρώντας το έγγραφο προσβάσιμο. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Τι συμβαίνει εδώ;** + +- Το `Document` διαβάζει το αρχείο Word, διατηρώντας όλα τα στυλ και τη δομή. +- Το `PdfSaveOptions.Compliance` λέει στο Aspose.Words να ετικετοποιήσει το αποτέλεσμα ως PDF/UA. +- Το `doc.Save` γράφει το PDF στο δίσκο, ενσωματώνοντας αυτόματα τις ετικέτες. + +> **Συμβουλή επαγγελματία:** Αν το πηγαίο αρχείο Word χρησιμοποιεί προσαρμοσμένα στυλ επικεφαλίδων, βεβαιωθείτε ότι έχουν αντιστοιχιστεί σε ενσωματωμένα επίπεδα επικεφαλίδων (`Heading1`, `Heading2`, …). Αυτό εξασφαλίζει ότι το παραγόμενο PDF θα έχει σωστές ετικέτες επικεφαλίδων. + +## Αποθήκευση Docx ως PDF – Ρύθμιση Συμμόρφωσης PDF/UA + +Αν είστε ήδη εξοικειωμένοι με την κλάση `PdfSaveOptions`, μπορεί να αναρωτιέστε αν υπάρχουν άλλοι διακόπτες που επηρεάζουν την προσβασιμότητα. Μερικές χρήσιμες ιδιότητες: + +| Ιδιότητα | Επίδραση στην Προσβασιμότητα | Τυπική Τιμή | +|----------|------------------------------|-------------| +| `Compliance` | Ενεργοποιεί/απενεργοποιεί την ετικετοποίηση PDF/UA | `PdfCompliance.PdfUa1` ή `PdfUa2` | +| `EmbedFullFonts` | Εγγυάται ότι οι αναγνώστες βλέπουν την προγραμματισμένη τυπογραφία | `true` (προεπιλογή) | +| `OptimizeOutput` | Μειώνει το μέγεθος του αρχείου χωρίς να αφαιρεί ετικέτες | `true` | + +Μπορείτε να επεκτείνετε το προηγούμενο απόσπασμα ως εξής: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Η αλλαγή σε `PdfUa2` προσθέτει υποστήριξη για νεότερα χαρακτηριστικά PDF/UA όπως η ετικετοποίηση *artifact* για διακοσμητικές εικόνες. Αν δεν τα χρειάζεστε, παραμείνετε στο `PdfUa1` για μέγιστη συμβατότητα με παλαιότερες βοηθητικές τεχνολογίες. + +## Εξαγωγή Docx σε PDF – Πλήρες Παράδειγμα Εργασίας + +Ακολουθεί μια αυτόνομη εφαρμογή console που δείχνει ολόκληρη τη ροή, από τη φόρτωση ενός αρχείου μέχρι την επαλήθευση του αποτελέσματος. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Αναμενόμενο Αποτέλεσμα + +- Ένα αρχείο με όνομα **Compliant.pdf** εμφανίζεται στον ίδιο φάκελο με το εκτελέσιμο. +- Το άνοιγμα του PDF στο Adobe Acrobat Pro → *Tools → Accessibility → Full Check* θα πρέπει να αναφέρει **No accessibility issues** (υπόθεση ότι το πηγαίο αρχείο Word ήταν καλά δομημένο). +- Η καρτέλα *Properties → Advanced* του PDF θα εμφανίζει **PDF/UA** στην ενότητα “PDF/A and PDF/UA compliance”. + +## Συνηθισμένες Ακραίες Περιπτώσεις & Πώς να τις Διαχειριστείτε + +| Κατάσταση | Γιατί είναι σημαντικό | Γρήγορη λύση | +|-----------|-----------------------|--------------| +| **Missing fonts** | Το PDF μπορεί να επιστρέψει σε προεπιλεγμένη γραμματοσειρά, διαταράσσοντας τη οπτική διάταξη. | Ορίστε `EmbedFullFonts = true` (ήδη η προεπιλογή) και βεβαιωθείτε ότι τα αρχεία γραμματοσειρών είναι προσβάσιμα στη μηχανή κατασκευής. | +| **Images without alt‑text** | Οι αναγνώστες οθόνης θα διαβάζουν “image” χωρίς περιγραφή. | Προσθέστε `Alt Text` στο Word (`Δεξί‑κλικ → Format Picture → Alt Text`) πριν από τη μετατροπή. | +| **Custom styles not recognized as headings** | Το PDF/UA χρειάζεται σωστές ετικέτες επικεφαλίδων. | Αντιστοιχίστε τα προσαρμοσμένα στυλ σε ενσωματωμένες επικεφαλίδες μέσω `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Η μετατροπή ενός αρχείου 500 σελίδων μπορεί να αυξήσει τη χρήση RAM. | Χρησιμοποιήστε `doc.Save(outputPath, options)` με `options.SaveFormat = SaveFormat.Pdf` και σκεφτείτε επεξεργασία σε τμήματα αν αντιμετωπίσετε `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | Μερικές φορές θέλετε μόνο ένα γρήγορο οπτικό PDF. | Παραλείψτε τη ρύθμιση `Compliance` ή ορίστε την σε `PdfCompliance.Pdf15`. | + +## Παράδειγμα Εικόνας (Συμπεριλαμβανομένου Alt Text) + +![Στιγμιότυπο που δείχνει το δέντρο ετικετών PDF/UA στο Adobe Acrobat – αποδεικνύει ότι δημιουργήσαμε επιτυχώς προσβάσιμο PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Το παραπάνω alt‑text ενισχύει τη βασική λέξη-κλειδί και βοηθά τόσο τους χρήστες όσο και τα μοντέλα AI να κατανοήσουν το περιεχόμενο της εικόνας.* + +## Συχνές Ερωτήσεις + +**Q: Λειτουργεί αυτό με .NET Core;** +A: Απόλυτα. Το Aspose.Words είναι cross‑platform· απλώς αναφέρετε το πακέτο NuGet στο .NET 6+ project σας. + +**Q: Μπορώ να επεξεργαστώ μαζικά πολλά αρχεία DOCX;** +A: Ναι. Τυλίξτε τη λογική φόρτωσης και αποθήκευσης μέσα σε έναν βρόχο `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Θυμηθείτε να επαναχρησιμοποιήσετε ένα μόνο αντικείμενο `PdfSaveOptions` για απόδοση. + +**Q: Τι γίνεται αν χρειαστεί να προσθέσω προσαρμοσμένη ετικέτα PDF/UA που το Aspose δεν εκδίδει αυτόματα;** +A: Χρησιμοποιήστε το χαμηλού επιπέδου PDF API (`PdfSaveOptions.CustomProperties`) ή επεξεργαστείτε το PDF μετά με μια βιβλιοθήκη όπως το iText 7 που επιτρέπει χειροκίνητη εισαγωγή ετικετών. + +## Συμπέρασμα + +You + +{{< /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 ede9a6e5a7..757b475820 100644 --- a/words/greek/net/working-with-fonts/_index.md +++ b/words/greek/net/working-with-fonts/_index.md @@ -46,6 +46,7 @@ | [Λήψη λίστας με τις διαθέσιμες γραμματοσειρές](./get-list-of-available-fonts/) | Ανακαλύψτε πώς να λάβετε μια λίστα με τις διαθέσιμες γραμματοσειρές χρησιμοποιώντας το Aspose.Words για .NET σε αυτό το λεπτομερές βήμα προς βήμα σεμινάριο. Βελτιώστε τις δεξιότητές σας στη διαχείριση γραμματοσειρών. | | [Λήψη ειδοποιήσεων για γραμματοσειρές](./receive-notifications-of-fonts/) | Μάθετε πώς να λαμβάνετε ειδοποιήσεις για γραμματοσειρές που λείπουν ή αντικαθίστανται όταν χρησιμοποιείτε το Aspose.Words για .NET. | | [Λήψη ειδοποίησης προειδοποίησης](./receive-warning-notification/) Μάθετε πώς να λαμβάνετε μια ειδοποίηση προειδοποίησης όταν χρησιμοποιείτε το Aspose.Words για .NET και να διαχειρίζεστε τυχόν προβλήματα ή προειδοποιήσεις στα έγγραφά σας. | +| [Πώς να εντοπίσετε γραμματοσειρές στο Aspose.Words – Πλήρης οδηγός](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Μάθετε πώς να εντοπίζετε γραμματοσειρές σε έγγραφα Word με το Aspose.Words για .NET. | | [Παράδειγμα Πηγής Γραμματοσειράς Πόρων Steam](./resource-steam-font-source-example/) | Μάθετε πώς να χρησιμοποιείτε το Resource Stream Font Source για να φορτώνετε προσαρμοσμένες γραμματοσειρές στο Aspose.Words για .NET. | | [Λήψη αντικατάστασης χωρίς επιθήματα](./get-substitution-without-suffixes/) | Σε αυτό το σεμινάριο, μάθετε πώς να λαμβάνετε παρακάμψεις χωρίς επιθήματα σε ένα έγγραφο του Word με το Aspose.Words για .NET. | diff --git a/words/greek/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/greek/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..9ad6079676 --- /dev/null +++ b/words/greek/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,273 @@ +--- +category: general +date: 2026-04-07 +description: Μάθετε πώς να εντοπίζετε γραμματοσειρές και πώς να καταγράφετε προειδοποιήσεις + κατά τη διαχείριση ελλιπών γραμματοσειρών σε C# χρησιμοποιώντας το Aspose.Words. + Συμπεριλαμβάνεται κώδικας βήμα‑βήμα. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: el +og_description: Πώς να εντοπίσετε τις γραμματοσειρές στο Aspose.Words; Ακολουθήστε + αυτό το σεμινάριο για να καταγράψετε προειδοποιήσεις και να διαχειριστείτε τις ελλιπείς + γραμματοσειρές με ευκολία. +og_title: Πώς να ανιχνεύσετε γραμματοσειρές στο Aspose.Words – Πλήρης οδηγός +tags: +- Aspose.Words +- C# +- Font handling +title: Πώς να ανιχνεύσετε γραμματοσειρές στο Aspose.Words – Πλήρης οδηγός +url: /el/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να ανιχνεύσετε γραμματοσειρές στο Aspose.Words – Πλήρης Οδηγός + +Έχετε αναρωτηθεί ποτέ **πώς να ανιχνεύσετε γραμματοσειρές** που λείπουν από ένα έγγραφο Word πριν το στείλετε στην παραγωγή; Δεν είστε μόνοι. Σε πολλές επιχειρησιακές περιπτώσεις, μια αχρείαστη γραμματοσειρά μπορεί να διακόψει τη διαδικασία μετατροπής PDF ή να προκαλέσει σφάλματα διάταξης που φαίνονται μη επαγγελματικά. Τα καλά νέα είναι ότι το Aspose.Words σας παρέχει έναν ενσωματωμένο τρόπο να εντοπίζετε αυτές τις απουσιάζουσες γραμματοσειρές και να εμφανίζει σαφείς προειδοποιήσεις. + +Σε αυτό το tutorial θα περάσουμε βήμα-βήμα από το **πώς να ανιχνεύσετε γραμματοσειρές**, **πώς να καταγράψετε προειδοποιήσεις**, και τις βέλτιστες πρακτικές για **τη διαχείριση ελλιπών γραμματοσειρών** ώστε η εφαρμογή σας να παραμένει ανθεκτική. Χωρίς εξωτερικά εργαλεία, χωρίς εικασίες—απλός κώδικας C# που μπορείτε να ενσωματώσετε στο έργο σας αμέσως. + +> **Γρήγορη προεπισκόπηση:** Στο τέλος θα έχετε έναν επαναχρησιμοποιήσιμο `FontSubstitutionWarningCollector` που συλλέγει κάθε μήνυμα αντικατάστασης γραμματοσειράς κατά τη φόρτωση του εγγράφου, και θα ξέρετε πώς να αντιδράτε όταν μια γραμματοσειρά δεν μπορεί να βρεθεί. + +--- + +## Τι θα μάθετε + +- Πώς να διαμορφώσετε το `LoadOptions` ώστε να ακούει προειδοποιήσεις αντικατάστασης γραμματοσειρών. +- Πώς να καταγράψετε αυτές τις προειδοποιήσεις σε μια προσαρμοσμένη κλάση συλλογής. +- Πώς να επεξεργαστείτε τις συλλεγμένες προειδοποιήσεις και να αποφασίσετε αν θα ακυρώσετε, καταγράψετε ή αντικαταστήσετε τις γραμματοσειρές. +- Διαχείριση edge‑case για έγγραφα που αναφέρονται σε απομακρυσμένες ή ενσωματωμένες γραμματοσειρές. + +**Προαπαιτούμενα:** .NET 6+ (ή .NET Framework 4.6+), Aspose.Words for .NET (τελευταία έκδοση), και βασική εξοικείωση με C#. Αν δεν έχετε χρησιμοποιήσει ποτέ το Aspose.Words, μην ανησυχείτε—αυτός ο οδηγός υποθέτει μόνο λίγα λεπτά εγκατάστασης. + +## Πώς να ανιχνεύσετε γραμματοσειρές χρησιμοποιώντας Aspose.Words LoadOptions + +Το πρώτο βήμα για την ανίχνευση ελλιπών γραμματοσειρών είναι να πείτε στο Aspose.Words να τις αναφέρει. Αυτό γίνεται μέσω της ιδιότητας `LoadOptions.WarningCallback`, η οποία δέχεται οποιαδήποτε κλάση που υλοποιεί το `IWarningCallback`. Παρακάτω δημιουργούμε έναν μικρό συλλέκτη που αποθηκεύει κάθε προειδοποίηση για μετέπειτα έλεγχο. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Γιατί είναι σημαντικό:** Χωρίς callback προειδοποίησης, το Aspose.Words αντικαθιστά σιωπηλά τις ελλιπείς γραμματοσειρές με μια προεπιλεγμένη, και δεν γνωρίζετε ποτέ ότι υπάρχει πρόβλημα. Καταγράφοντας το `WarningType.FontSubstitution` αποκτάτε πλήρη διαφάνεια—ακριβώς τα δεδομένα που χρειάζεστε για να **ανιχνεύσετε γραμματοσειρές** που δεν είναι διαθέσιμες στο σύστημα. + +Τώρα ενσωματώνουμε τον συλλέκτη στο `LoadOptions` και φορτώνουμε ένα έγγραφο: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Συμβουλή:** Αν εργάζεστε με πολλά έγγραφα σε παρτίδα, επαναχρησιμοποιήστε την ίδια παρουσία `FontSubstitutionWarningCollector`, αλλά θυμηθείτε να καλέσετε `Clear()` μεταξύ των φορτώσεων για να αποφύγετε το μίξιμο προειδοποιήσεων από διαφορετικά αρχεία. + +## Καταγραφή προειδοποιήσεων κατά τη φόρτωση του εγγράφου + +Μετά τη φόρτωση του εγγράφου, ο συλλέκτης ήδη κρατά κάθε προειδοποίηση σχετική με γραμματοσειρές. Η επόμενη λογική ερώτηση είναι: *Πώς να καταγράψω τις προειδοποιήσεις* με τρόπο που να είναι εύκολο να τις καταγράψετε ή να τις εμφανίσετε; + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Η τυπική έξοδος μοιάζει με: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Τι σας λέει αυτό:** Κάθε γραμμή αποκαλύπτει το αρχικό όνομα γραμματοσειράς και την εναλλακτική που επέλεξε το Aspose.Words. Εξοπλισμένοι με αυτές τις πληροφορίες, μπορείτε να αποφασίσετε αν η εναλλακτική είναι αποδεκτή ή αν χρειάζεται να ενσωματώσετε τη λείπουσα γραμματοσειρά χειροκίνητα. + +## Διαχείριση ελλιπών γραμματοσειρών με χάρη + +Η ανίχνευση και η καταγραφή προειδοποιήσεων είναι μόνο το ήμισυ του αγώνα. Η πραγματική αξία έρχεται όταν **διαχειρίζεστε ελλιπείς γραμματοσειρές** με τρόπο έτοιμο για παραγωγή. Παρακάτω τρεις κοινές στρατηγικές: + +1. **Καταγραφή και συνέχιση** – Κατάλληλο για επεξεργασία παρτίδας όπου χρειάζεστε μόνο ένα αποτύπωμα ελέγχου. +2. **Ακύρωση σε κρίσιμες γραμματοσειρές** – Ρίξτε εξαίρεση εάν λείπει μια συγκεκριμένη γραμματοσειρά (π.χ., μια γραμματοσειρά ειδική για το brand). +3. **Ενσωμάτωση της γραμματοσειράς εν κινήσει** – Φορτώστε τη λείπουσα γραμματοσειρά από έναν γνωστό φάκελο και καταχωρίστε την στο Aspose.Words πριν ξαναφορτώσετε το έγγραφο. + +### Παράδειγμα: Ακύρωση σε κρίσιμη γραμματοσειρά + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Παράδειγμα: Αυτόματη ενσωμάτωση ελλιπών γραμματοσειρών + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Γιατί αυτά τα μοτίβα βοηθούν:** Αποφασίζοντας ρητά τι να κάνετε όταν λείπει μια γραμματοσειρά, εξαλείφετε τις σιωπηλές εναλλακτικές που θα μπορούσαν να επηρεάσουν το branding ή την αναγνωσιμότητα. Αυτό είναι η ουσία της **διαχείρισης ελλιπών γραμματοσειρών** με ελεγχόμενο τρόπο. + +## Πλήρες λειτουργικό παράδειγμα + +Συνδυάζοντας όλα, εδώ είναι ένα ενιαίο, έτοιμο‑για‑εκτέλεση πρόγραμμα που δείχνει **πώς να ανιχνεύσετε γραμματοσειρές**, **πώς να καταγράψετε προειδοποιήσεις**, και μια απλή πολιτική για **τη διαχείριση ελλιπών γραμματοσειρών** μέσω καταγραφής. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Αναμενόμενο αποτέλεσμα:** Όταν εκτελείτε το πρόγραμμα εναντίον ενός εγγράφου που αναφέρει μια γραμματοσειρά που δεν υπάρχει στο σύστημα, η κονσόλα θα εμφανίσει κάθε προειδοποίηση αντικατάστασης. Εάν κάποια προειδοποίηση αφορά μια γραμματοσειρά από το σύνολο `critical`, το πρόγραμμα τερματίζει νωρίς, αποτρέποντας τη δημιουργία ελαττωματικού PDF. + +## Συχνές Ερωτήσεις (FAQs) + +| Ερώτηση | Απάντηση | +|----------|--------| +| *Χρειάζομαι άδεια για το Aspose.Words για να χρησιμοποιήσω αυτόν τον κώδικα;* | Ναι, μια έγκυρη άδεια Aspose.Words αφαιρεί τα υδατογράμματα αξιολόγησης και ξεκλειδώνει τη πλήρη λειτουργικότητα. | +| *Μπορεί αυτή η προσέγγιση να εντοπίσει ενσωματωμένες γραμματοσειρές;* | Οι ενσωματωμένες γραμματοσειρές είναι ήδη μέρος του αρχείου, έτσι το Aspose.Words δεν θα εμφανίσει προειδοποίηση αντικατάστασης. Μπορείτε να ελέγξετε το `Document.FontInfos` για να απαριθμήσετε τις ενσωματωμένες γραμματοσειρές εάν χρειάζεται. | +| *Τι γίνεται αν η λείπουσα γραμματοσειρά είναι συστημική στο Windows αλλά όχι στο Linux;* | Η ίδια προειδοποίηση θα ενεργοποιηθεί στο Linux επειδή η γραμματοσειρά δεν είναι εγκατεστημένη εκεί. Χρησιμοποιήστε τη στρατηγική “διαχείριση ελλιπών γραμματοσειρών” για να στείλετε τα απαιτούμενα αρχεία `.ttf` με την εφαρμογή σας. | +| *Is the warning collector thread + +{{< /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 70ed6aec19..5ef08f3d29 100644 --- a/words/hindi/net/basic-conversions/_index.md +++ b/words/hindi/net/basic-conversions/_index.md @@ -22,19 +22,20 @@ | शीर्षक | विवरण | | --- | --- | | [Docx को Docx में बदलें](./doc-to-docx/) | .NET के लिए Aspose.Words का उपयोग करके DOC को DOCX में बदलने का तरीका जानें। कोड उदाहरणों के साथ चरण-दर-चरण मार्गदर्शिका। डेवलपर्स के लिए बिल्कुल सही। | -| [Docx को Rtf में बदलें](./docx-to-rtf/) | हमारे चरण-दर-चरण गाइड के साथ .NET के लिए Aspose.Words का उपयोग करके DOCX को RTF में परिवर्तित करना सीखें। सहज दस्तावेज़ प्रसंस्करण के लिए आसान रूपांतरण। | +| [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 में बदलें। दस्तावेज़ों को कुशलतापूर्वक और आसानी से बदलना सीखें। | +| [Docx को Txt में बदलें](./docx-to-txt/) हमारे चरण-दर-स्टेप गाइड के साथ .NET के लिए Aspose.Words का उपयोग करके DOCX को TXT में बदलें। दस्तावेज़ों को कुशलतापूर्वक और आसानी से बदलना सीखें। | | [टेक्स्ट फ़ाइल को वर्ड डॉक्यूमेंट में बदलें](./txt-to-docx/) | .NET के लिए Aspose.Words का उपयोग करके टेक्स्ट फ़ाइलों को Word दस्तावेज़ों में परिवर्तित करना सीखें। हमारे व्यापक गाइड के साथ दस्तावेज़ रूपांतरणों को कुशलतापूर्वक प्रबंधित करें। | | [पीडीएफ को जेपीईजी के रूप में सहेजें](./pdf-to-jpeg/) | .NET के लिए Aspose.Words का उपयोग करके PDF को JPEG में आसानी से बदलें। उदाहरणों और FAQ के साथ हमारी विस्तृत मार्गदर्शिका का पालन करें। डेवलपर्स और उत्साही लोगों के लिए बिल्कुल सही। | -| [पीडीएफ को वर्ड फॉर्मेट में सहेजें (Docx)](./pdf-to-docx/) | इस विस्तृत, चरण-दर-चरण मार्गदर्शिका में जानें कि .NET के लिए Aspose.Words का उपयोग करके PDF को Word दस्तावेज़ (Docx) में कैसे परिवर्तित किया जाए। डेवलपर्स के लिए बिल्कुल सही। | -| [Word से LaTeX निर्यात कैसे करें – चरण‑दर‑चरण मार्गदर्शिका](./how-to-export-latex-from-word-step-by-step-guide/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ से LaTeX फ़ॉर्मेट में निर्यात करने का चरण‑दर‑चरण मार्गदर्शन। | +| [पीडीएफ को वर्ड फॉर्मेट में सहेजें (Docx)](./pdf-to-docx/) | इस विस्तृत, चरण-दर-स्टेप मार्गदर्शन में जानें कि .NET के लिए Aspose.Words का उपयोग करके PDF को Word दस्तावेज़ (Docx) में कैसे परिवर्तित किया जाए। डेवलपर्स के लिए बिल्कुल सही। | +| [Word से LaTeX निर्यात कैसे करें – चरण‑दर‑चरण मार्गदर्शिका](./how-to-export-latex-from-word-step-by-step-guide/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ से LaTeX फ़ॉर्मेट में निर्यात करने का चरण‑दर‑स्टेप मार्गदर्शन। | | [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 में सहेजने की पूरी गाइड। | +| [C# में DOCX को PDF में बदलें – पूर्ण प्रोग्रामिंग गाइड](./convert-docx-to-pdf-in-c-complete-programming-guide/) | .NET के लिए Aspose.Words का उपयोग करके C# में DOCX को PDF में बदलने की पूरी मार्गदर्शिका। चरण‑दर‑स्टेप उदाहरण और सर्वोत्तम प्रथाएँ। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/hindi/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..d01125ec8e --- /dev/null +++ b/words/hindi/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: C# में DOCX को जल्दी PDF में बदलें। जानिए कैसे Word को PDF के रूप में + सहेजें, C# में docx दस्तावेज़ लोड करें, और कुछ ही मिनटों में PDF/UA‑2 अनुपालन सुनिश्चित + करें। +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: hi +og_description: C# में DOCX को तुरंत PDF में बदलें। यह गाइड आपको दिखाता है कि Word + को PDF के रूप में कैसे सहेजें, C# में docx दस्तावेज़ लोड करें और PDF/UA‑2 मानकों + को पूरा करें। +og_title: C# में DOCX को PDF में बदलें – चरण‑दर‑चरण गाइड +tags: +- Aspose.Words +- C# +- PDF Generation +title: C# में DOCX को PDF में बदलें – पूर्ण प्रोग्रामिंग गाइड +url: /hi/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# DOCX को PDF में C# – पूर्ण प्रोग्रामिंग गाइड + +क्या आपको कभी C# एप्लिकेशन में **DOCX को PDF में बदलने** की जरूरत पड़ी है लेकिन आप नहीं जानते थे कि कहाँ से शुरू करें? आप अकेले नहीं हैं। कई डेवलपर्स को यह पता चलने पर रुकावट आती है कि Word में एक साधारण “save as PDF” बटन कोड में नहीं बदलता। अच्छी खबर? Aspose.Words (या कोई समान लाइब्रेरी) की कुछ लाइनों से आप पूरे प्रोसेस को ऑटोमेट कर सकते हैं, फ्लोटिंग शैप्स को इनलाइन रख सकते हैं, और PDF/UA‑2 अनुपालन भी आसानी से हासिल कर सकते हैं। + +इस ट्यूटोरियल में आप सीखेंगे कि कैसे **Word को PDF के रूप में सहेजें**, **load docx document C#**, और एक्सपोर्ट विकल्पों को समायोजित करें ताकि परिणामी फ़ाइल एक्सेसिबिलिटी ऑडिट के लिए तैयार हो। अंत तक आपके पास एक स्व-निहित, चलाने योग्य प्रोग्राम होगा जो किसी भी `.docx` फ़ाइल को एक साफ़, मानकों‑अनुपालन PDF में बदल देगा। + +> **क्यों महत्वपूर्ण?** +> DOCX को PDF में बदलना इनवॉइसिंग सिस्टम, रिपोर्ट जेनरेटर, और दस्तावेज़ अभिलेखीय पाइपलाइन के लिए एक सामान्य आवश्यकता है। इसे ऑटोमेट करने से मैन्युअल कदम हटते हैं, मानव त्रुटि कम होती है, और सुनिश्चित होता है कि हर आउटपुट सभी प्लेटफ़ॉर्म पर बिल्कुल समान दिखे। + +--- + +## आपको क्या चाहिए + +- **.NET 6.0** या बाद वाला (कोड .NET Framework 4.6+ पर भी काम करता है) +- **Aspose.Words for .NET** (फ्री ट्रायल या लाइसेंस्ड संस्करण) – आप इसे NuGet के माध्यम से इंस्टॉल कर सकते हैं: `dotnet add package Aspose.Words` +- एक सैंपल `input.docx` जिसे आप नियंत्रित फ़ोल्डर में रखें (हम इसे `YOUR_DIRECTORY` कहेंगे) +- Visual Studio, VS Code, या कोई भी पसंदीदा C# एडिटर + +बस इतना ही—कोई अतिरिक्त सर्विसेज़ नहीं, कोई REST कॉल नहीं। सिर्फ शुद्ध C#। + +## चरण 1: C# में DOCX दस्तावेज़ लोड करें + +DOCX को PDF में बदलने से पहले, आपको Word फ़ाइल को मेमोरी में लाना होगा। `Document` क्लास यह आपके लिए करता है। + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**यह क्यों महत्वपूर्ण है:** +फ़ाइल को लोड करने से आपको एक पूर्ण रूप से पार्स किया गया ऑब्जेक्ट मॉडल मिलता है—पैराग्राफ, टेबल, फ्लोटिंग शैप्स, सब कुछ। यह किसी भी **load docx document c#** वर्कफ़्लो का पहला कदम है, और यह यह भी सत्यापित करता है कि फ़ाइल खराब नहीं है, इससे पहले कि आप परिवर्तन में समय बर्बाद करें। + +> **प्रो टिप:** यदि आप उपयोगकर्ता‑अपलोडेड फ़ाइलों से निपट रहे हैं, तो `new Document()` कॉल को try/catch ब्लॉक में लपेटें ताकि खराब फ़ॉर्मेट की DOCX फ़ाइलों को सुगमता से संभाला जा सके। + +--- + +## चरण 2: PDF सहेजने के विकल्प कॉन्फ़िगर करें (अनुपालन और शैप हैंडलिंग) + +आप सोच सकते हैं, “क्या मुझे कुछ बदलना चाहिए, या बस `Save` कॉल कर सकता हूँ?” छोटा जवाब: आप कर सकते हैं, लेकिन सही विकल्प सेट करने से PDF एक्सेसिबल और दृश्य रूप से सटीक बनता है। + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**यह क्यों महत्वपूर्ण है:** +- `ExportFloatingShapesAsInlineTag = true` फ़्लोटिंग ऑब्जेक्ट्स को खोने या विभिन्न डिवाइसों पर PDF देखने पर गलत संरेखित होने से रोकता है। +- `Compliance = PdfCompliance.PdfUa2` सुनिश्चित करता है कि आउटपुट PDF/UA‑2 मानक को पूरा करता है, जो स्क्रीन‑रीडर संगतता और कानूनी अभिलेख के लिए महत्वपूर्ण है। + +यदि आपको एक्सेसिबिलिटी की ज़रूरत नहीं है, तो आप `Compliance` लाइन हटा सकते हैं, लेकिन इसे रखना लगभग कोई ओवरहेड नहीं जोड़ता और आपके समाधान को भविष्य‑सुरक्षित बनाता है। + +--- + +## चरण 3: दस्तावेज़ को PDF के रूप में सहेजें – मुख्य **DOCX को PDF में बदलें** कार्रवाई + +अब जब दस्तावेज़ लोड हो गया है और विकल्प सेट हो गए हैं, वास्तविक रूपांतरण एक ही मेथड कॉल है। + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**आपको क्या दिखेगा:** +प्रोग्राम चलाने से उसी फ़ोल्डर में `output.pdf` बनता है। इसे किसी भी PDF व्यूअर से खोलें और आप देखेंगे कि: + +- सभी टेक्स्ट, टेबल और इमेज़ मूल DOCX की तरह ही दिखते हैं। +- फ्लोटिंग शैप्स इनलाइन रखे जाते हैं, लेआउट संरक्षित रहता है। +- फ़ाइल बुनियादी PDF/UA‑2 वैलिडेशन टूल्स (जैसे Adobe Acrobat Preflight) को पास करती है। + +--- + +## पूर्ण कार्यशील उदाहरण – शीर्ष से नीचे तक + +नीचे एक पूर्ण, तैयार‑चलाने योग्य कंसोल ऐप है जो पूरी प्रक्रिया दिखाता है। इसे नई C# प्रोजेक्ट में कॉपी‑पेस्ट करें और **F5** दबाएँ। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**कंसोल में अपेक्षित आउटपुट:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +और एक साफ़ `output.pdf` आपके स्रोत फ़ाइल के बगल में स्थित है। + +--- + +## अक्सर पूछे जाने वाले प्रश्न और किनारे के मामले + +| प्रश्न | उत्तर | +|----------|--------| +| **क्या मैं `MemoryStream` में संग्रहीत DOCX को बदल सकता हूँ?** | बिल्कुल। फ़ाइल पाथ के बजाय `new Document(stream)` उपयोग करें। | +| **यदि DOCX में मैक्रो हों तो क्या होगा?** | Aspose.Words डिफ़ॉल्ट रूप से VBA मैक्रो को अनदेखा करता है; वे PDF में नहीं दिखेंगे। | +| **क्या उत्पादन के लिए लाइसेंस चाहिए?** | फ्री ट्रायल कुछ पृष्ठों के बाद वॉटरमार्क जोड़ता है। व्यावसायिक उपयोग के लिए, इसे हटाने हेतु लाइसेंस प्राप्त करें। | +| **PDF पेज साइज कैसे बदलूँ?** | सेव करने से पहले `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` सेट करें। | +| **क्या कस्टम फ़ॉन्ट एम्बेड करने का तरीका है?** | हां—`pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` जोड़ें। | + +--- + +## सुगम **Word को PDF के रूप में सहेजें** अनुभव के लिए प्रो टिप्स + +- **बैच प्रोसेसिंग:** रूपांतरण लॉजिक को लूप में लपेटें और इसे DOCX पाथ की सूची दें। +- **परफ़ॉर्मेंस:** कई फ़ाइलों को बदलते समय एक ही `PdfSaveOptions` इंस्टेंस पुन: उपयोग करें; यह GC दबाव को कम करता है। +- **लॉगिंग:** उत्पन्न PDF का आकार (`new FileInfo(outputPath).Length`) आउटपुट करें ताकि संपीड़न परिणामों की निगरानी हो सके। +- **एरर हैंडलिंग:** `FileNotFoundException` (गुम DOCX) और `UnauthorizedAccessException` (लिखने की अनुमति समस्या) के बीच अंतर करें। + +--- + +## निष्कर्ष + +अब आपके पास C# में **DOCX को PDF में बदलने** के लिए एक ठोस, उत्पादन‑तैयार पैटर्न है। DOCX को लोड करके, PDF सहेजने के विकल्प कॉन्फ़िगर करके, और `Save` को कॉल करके आप **Word को PDF के रूप में सहेज सकते** हैं, लेआउट की बारीकियों का सम्मान कर सकते हैं, और एक्सेसिबिलिटी मानकों को पूरा कर सकते हैं—सभी कोड की एक दर्जन से कम लाइनों में। + +अगली चुनौती के लिए तैयार हैं? `PdfSaveOptions` को `ImageSaveOptions` से बदलें ताकि **Word को PNG के रूप में सहेजें**, या `HtmlSaveOptions` क्लास को एक्सप्लोर करें ताकि वेब‑तैयार आउटपुट जनरेट हो सके। किसी भी तरह, वही **load docx document c#** मूलभूत सिद्धांत लागू होते हैं, जिससे आपका कोडबेस भविष्य‑सुरक्षित बनता है। + +हैप्पी कोडिंग, और आपके PDF हमेशा अनुपालन में रहें! + +--- + +![DOCX को PDF में बदलने का उदाहरण आउटपुट](convert-docx-to-pdf-output.png "DOCX को 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/hindi/net/programming-with-loadoptions/_index.md b/words/hindi/net/programming-with-loadoptions/_index.md index 1e87987496..167a413a6e 100644 --- a/words/hindi/net/programming-with-loadoptions/_index.md +++ b/words/hindi/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Aspose.Words for .NET ट्यूटोरियल उन डेवलपर | [Word दस्तावेज़ में Chm फ़ाइलें लोड करें](./load-chm/) | इस चरण-दर-चरण ट्यूटोरियल के साथ .NET के लिए Aspose.Words का उपयोग करके आसानी से CHM फ़ाइलों को Word दस्तावेज़ों में लोड करें। अपने तकनीकी दस्तावेज़ों को समेकित करने के लिए बिल्कुल सही। | | [Aspose.Words के साथ docx पुनर्प्राप्ति – चरण दर चरण](./how-to-recover-docx-with-aspose-words-step-by-step/) | Aspose.Words का उपयोग करके क्षतिग्रस्त या खोए हुए docx फ़ाइल को पुनर्प्राप्त करने की चरण-दर-स्टेप प्रक्रिया सीखें। | | [Aspose Load Options – कस्टम फ़ॉन्ट सेटिंग्स के साथ DOCX लोड करें](./aspose-load-options-load-docx-with-custom-font-settings/) | Aspose.Words में कस्टम फ़ॉन्ट सेटिंग्स के साथ DOCX फ़ाइल लोड करने का तरीका सीखें। | +| [क्षतिग्रस्त DOCX पुनर्प्राप्ति – फ़ाइलों को ठीक करने और सहेजने के लिए पूर्ण C# गाइड](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Aspose.Words का उपयोग करके क्षतिग्रस्त DOCX फ़ाइलों को पुनर्स्थापित करने और सुरक्षित रूप से सहेजने की विस्तृत चरण-दर-चरण गाइड। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/hindi/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..0d39baac21 --- /dev/null +++ b/words/hindi/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: C# में भ्रष्ट DOCX फ़ाइलों को पुनर्प्राप्त करना और पुनर्प्राप्त दस्तावेज़ + को सुरक्षित रूप से सहेजना सीखें। Aspose.Words उदाहरण के साथ चरण‑दर‑चरण मार्गदर्शिका। +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: hi +og_description: C# में भ्रष्ट DOCX फ़ाइलों को पुनर्प्राप्त करें और Aspose.Words के + साथ पुनर्प्राप्त दस्तावेज़ को सहेजें। पूर्ण कोड, व्याख्याएँ, और सर्वोत्तम‑प्रैक्टिस + टिप्स। +og_title: दोषपूर्ण DOCX को पुनर्प्राप्त करें – चरण-दर-चरण C# गाइड +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: भ्रष्ट DOCX को पुनर्प्राप्त करें – फाइलों को ठीक करने और सहेजने के लिए पूर्ण + C# गाइड +url: /hi/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# भ्रष्ट DOCX को पुनर्प्राप्त करें – फ़ाइलों को ठीक करने और सहेजने के लिए पूर्ण C# गाइड + +क्या आपने कभी ऐसा DOCX खोलने की कोशिश की है जो Explorer में ठीक दिखता है लेकिन आपके ऐप में अपवाद फेंकता है? यही क्लासिक “corrupt Word file” दुःस्वप्न है, और आमतौर पर यह एक ऐसी stack‑trace के साथ समाप्त होता है जिसे आप नहीं देखना चाहते। अच्छी खबर? Aspose.Words आपको **recover corrupted docx** फीचर देता है जो फ़ाइल क्षतिग्रस्त होने पर भी काम जारी रखने देता है। + +इस ट्यूटोरियल में हम ठीक‑ठीक चरणों के माध्यम से चलेंगे कि कैसे टूटे हुए दस्तावेज़ को लोड करें, लाइब्रेरी को जारी रखने को कहें, और फिर **save recovered document** को एक नई, साफ़ फ़ाइल में सहेजें। अंत तक आप समझ जाएंगे कि रिकवरी मोड क्यों महत्वपूर्ण है, इसे कैसे कॉन्फ़िगर करें, और किन जालों से बचें—कोई अस्पष्ट “see the docs” शॉर्टकट नहीं। + +## आपको क्या चाहिए + +- **Aspose.Words for .NET** (कोई भी नवीनतम संस्करण; इस गाइड को लिखते समय 24.11 उपयोग किया गया था) +- .NET विकास वातावरण (Visual Studio, Rider, या C# एक्सटेंशन के साथ VS Code) +- एक नमूना DOCX जिसे आप क्षतिग्रस्त मानते हैं (आप फ़ाइल को zip एडिटर में खोलकर और किसी भाग को हटाकर परीक्षण के लिए फ़ाइल को क्षतिग्रस्त कर सकते हैं) +- बुनियादी C# ज्ञान—कुछ भी जटिल नहीं, सिर्फ़ एक कंसोल ऐप बनाने की क्षमता + +यदि आपके पास ये सब हैं, तो बढ़िया—आइए सीधे समाधान की ओर बढ़ते हैं। + +## चरण 1: सही रिकवरी स्ट्रैटेजी के साथ LoadOptions सेट करें + +सुधार का मूल `LoadOptions` ऑब्जेक्ट है। यह Aspose.Words को बताता है कि जब वह DOCX पैकेज के भीतर खराब XML या गायब भागों का सामना करता है तो कैसे व्यवहार करे। `RecoveryMode.RecoverAndContinue` फ़्लैग सबसे सहनशील है—यह जितना संभव हो बचाने की कोशिश करता है और बाकी को छोड़ देता है। + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Why this matters:** यदि आप `LoadOptions` को छोड़ देते हैं या डिफ़ॉल्ट मोड (`RecoveryMode.NoRecovery`) का उपयोग करते हैं, तो `Document` कंस्ट्रक्टर समस्या मिलने ही एक अपवाद फेंकेगा। `RecoverAndContinue` के साथ, API गैर‑महत्वपूर्ण त्रुटियों को निगल लेती है और एक आंशिक दस्तावेज़ ऑब्जेक्ट बनाती है जिसके साथ आप अभी भी काम कर सकते हैं। + +> **Pro tip:** बड़े फ़ाइल बैचों के लिए, लोड कॉल को `try/catch` ब्लॉक में लपेटने पर विचार करें—कुछ त्रुटियाँ वास्तव में घातक होती हैं (जैसे, `[Content_Types].xml` फ़ाइल का अभाव) और उन्हें पुनर्प्राप्त नहीं किया जा सकता। + +## चरण 2: संभावित रूप से क्षतिग्रस्त DOCX लोड करें + +अब विकल्प तैयार हैं, अपनी फ़ाइल लोड करें। कंस्ट्रक्टर फ़ाइल पाथ और हमने अभी तैयार किए `LoadOptions` को लेता है। + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**What’s happening under the hood?** +Aspose.Words ZIP कंटेनर को पार्स करता है, प्रत्येक XML भाग को पढ़ता है, और Open XML DOM को पुनर्निर्मित करने की कोशिश करता है। जब यह किसी टूटे हुए भाग पर पहुँचता है, तो रिकवरी इंजन एक चेतावनी लॉग करता है (यदि आप डायग्नोस्टिक्स सक्षम करते हैं तो कंसोल में दिखती है) और जारी रहता है। परिणामी `Document` ऑब्जेक्ट में कुछ पैराग्राफ या इमेजेज़ गायब हो सकते हैं, लेकिन बाकी सामग्री अपरिवर्तित रहती है। + +## चरण 3: पुनर्प्राप्त सामग्री की जाँच करें (वैकल्पिक लेकिन अनुशंसित) + +फ़ाइल को डिस्क पर लिखने से पहले, कुछ नोड्स की जाँच करना समझदारी है ताकि यह सुनिश्चित हो सके कि महत्वपूर्ण सेक्शन बच गए हैं। + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +यदि आउटपुट समझदारीपूर्ण दिखता है, तो आपने सफलतापूर्वक **recover corrupted docx** सामग्री प्राप्त कर ली है। यदि आपको कुछ सेक्शन गायब दिखें, तो आप अभी भी तय कर सकते हैं कि आगे बढ़ना है या नहीं—कभी‑कभी खोए हुए हिस्से केवल सजावटी होते हैं। + +## चरण 4: पुनर्प्राप्त दस्तावेज़ को सहेजें + +यह वह भाग है जिसके बारे में अधिकांश डेवलपर्स पूछते हैं: “मैं **save recovered document** को मूल भ्रष्टाचार को दोबारा लाए बिना कैसे करूँ?” उत्तर सरल है—`Document.Save` को एक नई पाथ के साथ कॉल करें। Aspose.Words एक नई ZIP पैकेज लिखता है, इसलिए कोई भी बचे हुए टूटे हिस्से पीछे रह जाते हैं। + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Why this works:** `Save` मेथड इन‑मेमोरी DOM को एक साफ़ Open XML पैकेज में फिर से सीरियलाइज़ करता है। क्योंकि टूटे हुए हिस्से कभी DOM में लोड नहीं हुए (वे रिकवरी के दौरान हटाए गए), इसलिए वे नई फ़ाइल में नहीं आते। परिणामस्वरूप एक स्वस्थ DOCX मिलता है जो Word, Google Docs, या किसी भी अन्य व्यूअर में खुलता है। + +## चरण 5: कई फ़ाइलों के लिए प्रक्रिया को स्वचालित करें (बोनस) + +वास्तविक दुनिया के परिदृश्यों में आपके पास अक्सर समस्याग्रस्त फ़ाइलों से भरा एक फ़ोल्डर होता है। पिछले चरणों को एक लूप में लपेटें, और आपके पास एक छोटा रिकवरी यूटिलिटी होगा। + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +अब आप टूटे हुए DOCX फ़ाइलों की पूरी डायरेक्टरी `C:\Docs\Batch` में डाल सकते हैं और स्क्रिप्ट उन्हें स्वचालित रूप से साफ़ कर देगी। + +## सामान्य प्रश्न और किनारे के मामलों + +| Question | Answer | +|----------|--------| +| **क्या यह .doc फ़ाइलों के साथ काम करता है?** | एक ही `LoadOptions` क्लास लागू होती है, लेकिन आपको पुराने Word फ़ॉर्मेट (`doc`) को रेफ़रेंस करना होगा। Aspose.Words अभी भी रिकवर कर सकता है, हालांकि त्रुटि पैटर्न अलग होते हैं। | +| **यदि फ़ाइल पासवर्ड‑सुरक्षित है तो क्या होगा?** | रिकवरी एन्क्रिप्शन को बायपास नहीं करेगी। आपको पासवर्ड `LoadOptions.Password` के माध्यम से प्रदान करना होगा। | +| **क्या इमेजेज़ खो जाएँगी?** | केवल वे इमेजेज़ जो भ्रष्ट XML भाग का हिस्सा हैं, छोड़ी जा सकती हैं। बाकी इमेजेज़ संरक्षित रहती हैं क्योंकि वे अलग-अलग बाइनरी स्ट्रीम के रूप में संग्रहीत होती हैं। | +| **क्या मैं Aspose द्वारा उत्पन्न चेतावनियों को लॉग कर सकता हूँ?** | हां—`LoadOptions.LoadFormat` को `LoadFormat.Docx` सेट करें और विस्तृत संदेशों को कैप्चर करने के लिए `Document.WarningCallback` को सब्सक्राइब करें। | +| **क्या `RecoverAndContinue` प्रोडक्शन के लिए सुरक्षित है?** | आमतौर पर हां, लेकिन अपने डेटा के साथ परीक्षण करें। मिशन‑क्रिटिकल पाइपलाइन में आप उन दस्तावेज़ों को फ़्लैग करना चाह सकते हैं जिन्हें रिकवरी की आवश्यकता थी, ताकि बाद में समीक्षा की जा सके। | + +## पूर्ण कार्यशील उदाहरण (कॉपी‑पेस्ट तैयार) + +नीचे पूर्ण प्रोग्राम दिया गया है जिसे आप कंसोल ऐप के रूप में कंपाइल कर सकते हैं। इसमें सभी चरण, त्रुटि संभालना, और वैकल्पिक बैच प्रोसेसिंग लॉजिक शामिल है। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Expected result:** प्रोग्राम चलाने के बाद, `Recovered.docx` Microsoft Word में मूल त्रुटि डायलॉग के बिना खुलता है। जो भाग बहुत अधिक क्षतिग्रस्त थे, वे बस छोड़ दिए जाते हैं, लेकिन मुख्य बॉडी, हेडिंग्स, और अधिकांश इमेजेज़ अपरिवर्तित रहती हैं। + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## निष्कर्ष + +हमने Aspose.Words का उपयोग करके **recover corrupted docx** फ़ाइलों को पुनर्प्राप्त करने के लिए आवश्यक सभी चीज़ें कवर कर ली हैं, `LoadOptions` को कॉन्फ़िगर करने से लेकर सुरक्षित रूप से **save recovered document** करने तक। मुख्य बिंदु हैं: + +- `RecoveryMode.RecoverAndContinue` का उपयोग करें ताकि लाइब्रेरी गैर‑महत्वपूर्ण त्रुटियों को अनदेखा कर सके। +- कमिट करने से पहले लोड की गई सामग्री की जाँच करें, विशेषकर जब महत्वपूर्ण व्यावसायिक दस्तावेज़ों से निपट रहे हों। +- दस्तावेज़ को सहेजने से एक साफ़ ZIP पैकेज बनता है, जो मूल भ्रष्टाचार को प्रभावी रूप से हटा देता है। +- एक ही पैटर्न बैच ऑपरेशन्स में स्केल करता है, जिससे बड़े दस्तावेज़ रिपॉज़िटरी की स्वचालित सफ़ाई संभव होती है। + +अगले कदम के लिए तैयार हैं? इस लॉजिक को एक बैकग्राउंड सर्विस में इंटीग्रेट करने की कोशिश करें जो अपलोड फ़ोल्डर की निगरानी करे, या `WarningCallback` के साथ प्रयोग करके यह रिपोर्ट बनाएँ कि किन फ़ाइलों को रिकवरी की आवश्यकता थी। जितना अधिक आप API के साथ काम करेंगे, उतना ही आप देखेंगे कि वास्तविक दुनिया के दस्तावेज़ प्रोसेसिंग के लिए Aspose.Words कितना मजबूत है। + +क्या आपके पास कोई नया तरीका है जिसे आप साझा करना चाहते हैं—शायद पासवर्ड‑सुरक्षित फ़ाइलों को संभालना या पुनर्प्राप्त दस्तावेज़ों को मर्ज करना? नीचे टिप्पणी छोड़ें, और बातचीत जारी रखें। कोडिंग का आनंद लें! + +{{< /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 a4246ab390..a7f11f50aa 100644 --- a/words/hindi/net/programming-with-markdownsaveoptions/_index.md +++ b/words/hindi/net/programming-with-markdownsaveoptions/_index.md @@ -23,6 +23,7 @@ MarkdownSaveOptions के साथ वर्ड प्रोसेसिंग | --- | --- | | [तालिका सामग्री संरेखण के साथ मार्कडाउन में निर्यात करें](./export-into-markdown-with-table-content-alignment/) | .NET के लिए Aspose.Words का उपयोग करके संरेखित तालिकाओं के साथ Word दस्तावेज़ों को Markdown में निर्यात करना सीखें। सही Markdown तालिकाओं के लिए हमारे चरण-दर-चरण मार्गदर्शिका का पालन करें। | | [छवियाँ फ़ोल्डर सेट करें](./set-images-folder/) .NET के लिए Aspose.Words का उपयोग करके उचित तालिका संरेखण के साथ Word दस्तावेज़ों को Markdown में बदलें। उत्तम परिणामों के लिए हमारी विस्तृत मार्गदर्शिका का पालन करें। | +| [कस्टम इमेज फ़ोल्डर के साथ Word को Markdown में सहेजें – पूर्ण गाइड](./save-word-as-markdown-with-custom-image-folder-full-guide/) | .NET के लिए Aspose.Words का उपयोग करके कस्टम इमेज फ़ोल्डर के साथ Word को Markdown में बदलने की पूरी गाइड। | | [Word को PDF के रूप में सहेजें और भ्रष्ट Word को पुनर्प्राप्त करें – C# में Word को Markdown में परिवर्तित करें](./save-word-as-pdf-and-recover-corrupted-word-convert-word-to/) | | | [सुलभ PDF बनाएं और Word को Markdown में बदलें – पूर्ण C# गाइड](./create-accessible-pdf-and-convert-word-to-markdown-full-c-gu/) | C# में सुलभ PDF बनाना और Word को Markdown में परिवर्तित करने की पूरी गाइड | | [मार्कडाउन का उपयोग कैसे करें: LaTeX समीकरणों के साथ DOCX को मार्कडाउन में परिवर्तित करें](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | DOCX फ़ाइलों को LaTeX समीकरणों के साथ मार्कडाउन में बदलने की चरण-दर-स्टेप मार्गदर्शिका। | diff --git a/words/hindi/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/hindi/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..1415569ccc --- /dev/null +++ b/words/hindi/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-04-07 +description: एक कॉलबैक का उपयोग करके Word को Markdown के रूप में सहेजें और docx से + छवियों को निकालें। जानें कि कॉलबैक का उपयोग करके मार्कडाउन इमेज फ़ोल्डर को प्रभावी + ढंग से कैसे संग्रहीत किया जाए। +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: hi +og_description: Word को Markdown के रूप में सहेजें और callback का उपयोग करके docx + से छवियों को निकालें। यह गाइड दिखाता है कि callback का उपयोग करके markdown इमेज + फ़ोल्डर कैसे बनाएं। +og_title: वर्ड को मार्कडाउन के रूप में सहेजें – पूर्ण चरण‑दर‑चरण गाइड +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: कस्टम इमेज फ़ोल्डर के साथ वर्ड को मार्कडाउन में सहेजें – पूर्ण गाइड +url: /hi/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word को Markdown के रूप में सहेजें – पूर्ण चरण‑दर‑चरण गाइड + +क्या आपको कभी **Word को Markdown के रूप में सहेजना** पड़ा, लेकिन एम्बेडेड तस्वीरों के साथ क्या करना है, समझ नहीं आया? आप अकेले नहीं हैं। कई प्रोजेक्ट्स में markdown आउटपुट शानदार दिखता है—*जब तक* आप यह नहीं देखते कि इमेज लिंक टूटे हुए हैं क्योंकि फ़ाइलें Word पैकेज से बाहर नहीं निकलीं। + +अच्छी खबर यह है कि Aspose.Words आपको **docx से इमेज निकालने** और उन्हें बिल्कुल वहीँ रखने का साफ़ तरीका देता है, एक **callback** के माध्यम से जो आपको markdown इमेज फ़ोल्डर को नियंत्रित करने की अनुमति देता है। इस ट्यूटोरियल में हम पूरी प्रक्रिया को समझेंगे, `.docx` फ़ाइल लोड करने से लेकर PNG (या आपके पास जो भी फ़ॉर्मेट हो) की एक व्यवस्थित फ़ोल्डर और उन पर पॉइंट करने वाली markdown फ़ाइल बनाने तक। + +इस गाइड के अंत तक आप सक्षम होंगे: + +* एक ही लाइन कोड से किसी भी Word डॉक्यूमेंट को Markdown में बदलना। +* हर तस्वीर को एक समर्पित `images` सब‑फ़ोल्डर में स्वचालित रूप से डंप करना। +* फ़ाइलनाम कस्टमाइज़ करना ताकि स्रोत में दर्जनों तस्वीरें हों तो भी नाम टकराएँ नहीं। + +कोई बाहरी स्क्रिप्ट नहीं, कोई मैन्युअल कॉपी‑पेस्ट नहीं—सिर्फ शुद्ध C# और Aspose.Words। + +## Prerequisites + +शुरू करने से पहले सुनिश्चित करें कि आपके पास है: + +* **Aspose.Words for .NET** (सबसे नवीन स्थिर संस्करण; लेख लिखते समय यह 24.9 है)। +* एक .NET डेवलपमेंट एनवायरनमेंट (Visual Studio, Rider, या `dotnet` CLI)। +* एक Word डॉक्यूमेंट (`.docx`) जिसमें कम से कम एक इमेज हो—इसे `DocWithImages.docx` कहें। + +यदि आपने पहले कभी Aspose.Words नहीं इस्तेमाल किया है, तो चिंता न करें। यह लाइब्रेरी पूरी तरह मैनेज्ड है, कोई COM इंटरऑप की जरूरत नहीं, और .NET 6+ के साथ-साथ .NET Framework 4.8 पर भी काम करती है। + +## Step 1 – Set Up the Project and Install the Package + +पहले, एक नया console app बनाएं (या कोड को मौजूदा प्रोजेक्ट में जोड़ें)। + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tip:** यदि आप .NET 6 को टारगेट कर रहे हैं, तो डिफ़ॉल्ट `Program.cs` पहले से ही टॉप‑लेवल स्टेटमेंट्स का उपयोग करता है, जिससे सैंपल छोटा रहता है। + +## Step 2 – Create a Callback to Control Image Saving + +Aspose.Words हर बाहरी रिसोर्स (इमेज, CSS, आदि) को लिखने के लिए `IResourceSavingCallback.ResourceSaving` को कॉल करता है। इस इंटरफ़ेस को इम्प्लीमेंट करके हम **markdown इमेज फ़ोल्डर** को बनाने पर पूर्ण नियंत्रण प्राप्त करते हैं। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Why use a callback? + +* **Granular control** – आप फ़ोल्डर स्ट्रक्चर और नेमिंग स्कीम तय करते हैं। +* **Performance** – आप स्ट्रीम को एक बार लिखते हैं, लाइब्रेरी की डबल‑राइट फ़ॉलबैक से बचते हैं। +* **Flexibility** – आप इस बिंदु पर लॉगिंग, इमेज‑ऑप्टिमाइज़ेशन, या क्लाउड स्टोरेज पर अपलोड जैसी चीज़ें जोड़ सकते हैं। + +## Step 3 – Load the Word Document + +अब जब callback तैयार है, हमें बस Aspose.Words को स्रोत फ़ाइल की ओर इंगित करना है। + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **What if the file isn’t found?** +> `Document` एक `FileNotFoundException` फेंकेगा। यदि पाथ डायनामिक है तो `try/catch` में लोड करें। + +## Step 4 – Wire Up the MarkdownSaveOptions + +`MarkdownSaveOptions` क्लास हमें अभी बनाए हुए callback को प्लग‑इन करने की सुविधा देती है। हम वह फ़ोल्डर भी सेट करते हैं जहाँ इमेजेज़ markdown फ़ाइल के सापेक्ष रहेंगे। + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder` प्रॉपर्टी Aspose को `![Alt text](images/img_123.png)` जैसे markdown लिंक जनरेट करने के लिए बताती है। क्योंकि हमने callback के अंदर `ResourceFileName` भी सेट किया है, वास्तविक फ़ाइल ठीक उसी जगह पर रखी जाती है। + +## Step 5 – Save as Markdown and Verify the Result + +आखिरकार, हम markdown फ़ाइल लिखते हैं। callback ने पहले ही `images` सब‑फ़ोल्डर को भर दिया होगा। + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Expected output + +प्रोग्राम चलाने पर कुछ इस तरह का आउटपुट दिखना चाहिए: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +`Doc.md` को किसी भी markdown व्यूअर में खोलें; आपको इमेज लिंक सही तरीके से `images` फ़ोल्डर की ओर इशारा करते दिखेंगे। + +--- + +## Frequently Asked Questions (FAQ) + +### How to **extract images from docx** without converting to markdown? + +आप वही `MyMarkdownResourceCallback` पुनः उपयोग कर सकते हैं, बस इसे `doc.Save("images.zip", SaveFormat.Zip)` में पास करें। callback अभी भी प्रत्येक इमेज के लिए फायर होगा, जिससे आप उन्हें अपनी इच्छानुसार रख सकेंगे। + +### What if I need **different image formats**? + +`args.FileName` में पहले से ही मूल एक्सटेंशन (`.png`, `.jpg`, आदि) मौजूद है। यदि सभी इमेज को एक ही फ़ॉर्मेट में बदलना है, तो `ResourceSaving` के अंदर एक कन्वर्ज़न स्टेप जोड़ें, फिर स्ट्रीम लिखें। + +### Can I **customize the markdown images folder** per document? + +बिल्कुल। callback अपने कंस्ट्रक्टर के माध्यम से फ़ोल्डर पाथ प्राप्त करता है, इसलिए आप बैच प्रोसेस में प्रत्येक डॉक्यूमेंट के लिए अलग फ़ोल्डर के साथ नया callback इंस्टैंस बना सकते हैं। + +### Does this work with **large documents** (hundreds of images)? + +हां। callback इमेज को सीधे डिस्क पर स्ट्रीम करता है, जिससे मेमोरी उपयोग कम रहता है। बस यह सुनिश्चित करें कि टार्गेट ड्राइव में पर्याप्त स्पेस हो और आप OS फ़ाइल‑हैंडल लिमिट को पार न करें। + +--- + +## Full Working Example + +नीचे पूरा, कॉपी‑एंड‑पेस्ट‑रेडी प्रोग्राम दिया गया है। `YOUR_DIRECTORY` को अपने वातावरण के अनुसार एक एब्सोल्यूट या रिलेटिव पाथ से बदलें। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +प्रोग्राम चलाएँ (`dotnet run`) और आपको एक नया `Doc.md` फ़ाइल के साथ एक `images` सब‑फ़ोल्डर मिलेगा जिसमें + +{{< /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-officemath/_index.md b/words/hindi/net/programming-with-officemath/_index.md index dfba9872c9..97e1818054 100644 --- a/words/hindi/net/programming-with-officemath/_index.md +++ b/words/hindi/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ OfficeMath के साथ वर्ड प्रोसेसिंग पर A | शीर्षक | विवरण | | --- | --- | | [गणित समीकरण](./math-equations/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों में गणितीय समीकरणों को कॉन्फ़िगर करना सीखें। उदाहरणों, अक्सर पूछे जाने वाले प्रश्नों और अधिक के साथ चरण-दर-चरण मार्गदर्शिका। | +| [docx को txt के रूप में सहेजें – C# में Word Math को LaTeX में निर्यात करें](./save-docx-as-txt-export-word-math-to-latex-in-c/) | C# में Aspose.Words का उपयोग करके docx फ़ाइल को txt में बदलें और गणितीय समीकरणों को LaTeX में निर्यात करना सीखें। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/hindi/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..cf8ffbb99a --- /dev/null +++ b/words/hindi/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: docx को जल्दी से txt में सहेजें और गणित को LaTeX में निर्यात करना सीखें। + Word को txt में बदलें, Office Math को संभालें, और समीकरणों को अपरिवर्तित रखें। +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: hi +og_description: LaTeX गणित निर्यात के साथ docx को txt में सहेजें। एक चरण‑दर‑चरण C# + ट्यूटोरियल जो दिखाता है कि कैसे Word को txt में बदलें और समीकरणों को बनाए रखें। +og_title: docx को txt के रूप में सहेजें – Word गणित को निर्यात करने के लिए C# गाइड +tags: +- C# +- Aspose.Words +- DocumentConversion +title: docx को txt के रूप में सहेजें – C# में Word गणित को LaTeX में निर्यात करें +url: /hi/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# docx को txt के रूप में सहेजें – Word Math को LaTeX में निर्यात C# में + +क्या आपको कभी **save docx as txt** करने की ज़रूरत पड़ी है लेकिन इस बात की चिंता रही है कि आपके समीकरण प्रतीकों के झंझट में बदल जाएंगे? आप अकेले नहीं हैं। कई डेवलपर्स को यह समस्या आती है जब वे **convert word to txt** करने की कोशिश करते हैं डाउनस्ट्रीम प्रोसेसिंग के लिए, विशेष रूप से जब स्रोत में Office Math ऑब्जेक्ट्स होते हैं। + +अच्छी खबर? कुछ ही पंक्तियों के C# कोड और सही save options के साथ, आप प्रत्येक समीकरण को साफ़ LaTeX के रूप में संरक्षित कर सकते हैं, जिससे plain‑text फ़ाइल मानव‑पठनीय और वैज्ञानिक पाइपलाइन के लिए तैयार हो जाती है। इस ट्यूटोरियल में हम पूरी प्रक्रिया को चरण‑दर‑चरण देखेंगे, एक Word फ़ाइल से *how to export math* का उत्तर देंगे, और आपको *how to convert docx* दिखाएंगे बिना किसी गणितीय सटीकता को खोए। + +## आप क्या सीखेंगे + +- Aspose.Words (या किसी भी संगत लाइब्रेरी) का उपयोग करके `.docx` फ़ाइल लोड करें। +- `TxtSaveOptions` को इस प्रकार कॉन्फ़िगर करें कि Office Math LaTeX के रूप में निर्यात हो। +- दस्तावेज़ को `.txt` फ़ाइल के रूप में सहेजें जो समीकरणों को अपरिवर्तित रखे। +- छिपे हुए समीकरणों या बड़े दस्तावेज़ों जैसी किनारी स्थितियों को संभालने के लिए टिप्स। +- एक पूर्ण, चलाने योग्य कोड नमूना जिसे आप अभी कॉपी‑पेस्ट कर सकते हैं। + +कोई जटिल बिल्ड टूल नहीं, सिर्फ एक .NET प्रोजेक्ट और Aspose.Words NuGet पैकेज। चलिए शुरू करते हैं। + +--- + +## आवश्यकताएँ + +| Requirement | क्यों महत्वपूर्ण है | +|-------------|-------------------| +| .NET 6.0 या बाद का संस्करण | आधुनिक भाषा सुविधाएँ और बेहतर प्रदर्शन। | +| Aspose.Words for .NET (NuGet) | `Document`, `TxtSaveOptions`, और `OfficeMathExportMode` प्रदान करता है। | +| एक Word फ़ाइल (`.docx`) जिसमें समीकरण हों | LaTeX निर्यात को कार्रवाई में देखने के लिए। | +| बेसिक C# ज्ञान | आप कोड को लाइन‑बाय‑लाइन फ़ॉलो करेंगे। | + +यदि आपने अभी तक Aspose.Words नहीं जोड़ा है, तो चलाएँ: + +```bash +dotnet add package Aspose.Words +``` + +बस इतना ही—कोई अतिरिक्त कॉन्फ़िगरेशन आवश्यक नहीं। + +## चरण 1: DOCX फ़ाइल लोड करें + +सबसे पहले, हमें स्रोत दस्तावेज़ को मेमोरी में लाना होगा। इसे एक किताब खोलने के समान समझें, पढ़ना शुरू करने से पहले। + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** परीक्षण के दौरान “file not found” जैसी आश्चर्यजनक स्थितियों से बचने के लिए एक absolute path उपयोग करें। प्रोडक्शन में आप संभवतः पथ को एक कॉन्फ़िगरेशन फ़ाइल या उपयोगकर्ता अपलोड से प्राप्त करेंगे। + +## चरण 2: गणित निर्यात के लिए TXT Save Options कॉन्फ़िगर करें + +डिफ़ॉल्ट रूप से, `TxtSaveOptions` plain text को डंप करता है और Office Math को हटा देता है। हम यह नहीं चाहते। `OfficeMathExportMode` को `LaTeX` सेट करने से लाइब्रेरी को प्रत्येक समीकरण को उसके LaTeX प्रतिनिधित्व में बदलने के लिए कहा जाता है। + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### LaTeX क्यों? + +LaTeX वैज्ञानिक प्रकाशन की lingua franca है। जब आप बाद में `.txt` को एक markdown प्रोसेसर, Jupyter notebook, या किसी भी LaTeX‑aware टूल में फीड करेंगे, तो समीकरण पूरी तरह से रेंडर होते हैं। यदि आप plain Unicode प्रतीकों को पसंद करते हैं, तो आप `OfficeMathExportMode.Unicode` पर स्विच कर सकते हैं, लेकिन LaTeX आपको सबसे अधिक नियंत्रण देता है। + +## चरण 3: दस्तावेज़ को Plain‑Text फ़ाइल के रूप में सहेजें + +अब जादू होता है। `Save` मेथड उन विकल्पों का उपयोग करके दस्तावेज़ को डिस्क पर लिखता है जो हमने अभी परिभाषित किए हैं। + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +इस लाइन के चलने के बाद, `Math.txt` में यह होगा: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +ध्यान दें कि समीकरण `\[` और `\]` के भीतर दिखाई देता है—बिल्कुल वही जो LaTeX अपेक्षा करता है। + +## जटिल दस्तावेज़ों से गणित निर्यात कैसे करें + +### छिपे या इनलाइन समीकरणों को संभालना + +कुछ Word फ़ाइलें समीकरणों को छिपे टेक्स्ट फ्रेम में संग्रहीत करती हैं। Aspose.Words उन्हें दृश्यमान समीकरणों के समान मानता है, इसलिए LaTeX निर्यात स्वचालित रूप से काम करता है। हालांकि, यदि आपको समीकरण गायब दिखें, तो दोबारा जांचें कि `Document` ऑब्जेक्ट छिपी सामग्री को अनदेखा करने के लिए सेट नहीं है: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### बड़े दस्तावेज़ और मेमोरी उपयोग + +500‑पृष्ठीय थीसिस को सहेजना बहुत सारी RAM ले सकता है। मेमोरी फुटप्रिंट को कम रखने के लिए, आप आउटपुट को स्ट्रीम कर सकते हैं: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +स्ट्रीमिंग उत्पन्न होते ही चंक्स को डिस्क पर लिखता है, जिससे पूरी फ़ाइल एक साथ मेमोरी में रहने से बचती है। + +## सामान्य समस्याएँ और उन्हें कैसे टालें + +| Pitfall | लक्षण | समाधान | +|---------|--------|--------| +| Missing LaTeX brackets | समीकरण कच्चे कोड (`E = mc^{2}`) के रूप में दिखते हैं | सुनिश्चित करें `OfficeMathExportMode = LaTeX`। | +| Blank output file | गलत पथ या अपर्याप्त अनुमतियाँ | आउटपुट डायरेक्टरी मौजूद है और लिखने योग्य है, यह सत्यापित करें। | +| Garbled characters | फ़ाइल UTF‑8 बिना BOM के एन्कोडेड है जबकि सिस्टम ANSI की अपेक्षा करता है | `txtSaveOptions.Encoding = Encoding.UTF8;` जोड़ें | +| Equations disappear after conversion | `LoadOptions` के साथ दस्तावेज़ लोड किया गया है जो गणित को बाहर रखता है | डिफ़ॉल्ट `LoadOptions` उपयोग करें या `LoadOptions.LoadFormat = LoadFormat.Docx` सेट करें। | + +## पूर्ण कार्यशील उदाहरण + +नीचे पूरा प्रोग्राम है जिसे आप कंपाइल और रन कर सकते हैं। इसमें एरर हैंडलिंग, पाथ वैलिडेशन, और एक छोटा कंसोल लॉग शामिल है जिससे आपको पता चलेगा कि सब कुछ सफल रहा। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**अपेक्षित आउटपुट** (`Math.txt` का अंश): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +अब आप इस फ़ाइल को किसी भी LaTeX‑aware प्रोसेसर में फीड कर सकते हैं, और समीकरण सुंदरता से रेंडर होंगे। + +## फ़ॉर्मेटिंग खोए बिना DOCX को TXT में कैसे बदलें + +यदि आपको केवल plain text चाहिए और गणित की परवाह नहीं है, तो बस `OfficeMathExportMode` लाइन को हटा दें: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +लेकिन याद रखें, **how to export math** वैज्ञानिक कार्यप्रवाहों के लिए अंतर बनाता है। LaTeX को अपरिवर्तित रखना ही इस रूपांतरण को वास्तव में उपयोगी बनाता है। + +## अगले कदम और संबंधित विषय + +- **Batch conversion:** कोड को `foreach` लूप में रैप करें ताकि पूरे फ़ोल्डर की `.docx` फ़ाइलें प्रोसेस हो सकें। +- **Markdown generation:** टेक्स्ट में `#` हेडर या `*` बुलेट जोड़ें ताकि तैयार‑to‑publish markdown बन सके। +- **PDF export:** `PdfSaveOptions` का उपयोग करके txt के साथ एक PDF संस्करण बनाएँ। +- **Advanced LaTeX tweaking:** आउटपुट को regex से पोस्ट‑प्रोसेस करें ताकि `\[`/`\]` को `$...$` से बदल सकें इनलाइन समीकरणों के लिए। + +इनमें से प्रत्येक एक ही आधार पर निर्मित है—`Document` लोड करना और सही `SaveOptions` चुनना। स्वतंत्र रूप से प्रयोग करें; API अधिकांश दस्तावेज़‑ऑटोमेशन परिदृश्यों के लिए पर्याप्त लचीला है। + +## निष्कर्ष + +हमने वह सब कवर किया है जो आपको **save docx as txt** करने के लिए चाहिए, जबकि प्रत्येक समीकरण को LaTeX के रूप में संरक्षित रखा गया है। स्रोत फ़ाइल लोड करने से लेकर **how to export math** के लिए `TxtSaveOptions` कॉन्फ़िगर करने तक, और अंतिम plain‑text फ़ाइल लिखने तक, पूरा वर्कफ़्लो कुछ ही संक्षिप्त C# स्टेटमेंट्स में फिट हो जाता है। + +अब आप Word रिपोर्ट, शैक्षणिक पेपर, या कोई भी दस्तावेज़ जो टेक्स्ट और गणित को मिलाता है, का रूपांतरण स्वचालित कर सकते हैं, और परिणामी `.txt` को डाउनस्ट्रीम टूल्स में बिना किसी वैज्ञानिक विवरण को खोए फीड कर सकते हैं। + +इसे आज़माएँ, अपने उपयोग केस के लिए विकल्पों को समायोजित करें, और टिप्पणी में बताएं कि यह आपके लिए कैसे काम किया। Happy coding! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/hindi/net/programming-with-pdfsaveoptions/_index.md index 2862fc64f1..4167239342 100644 --- a/words/hindi/net/programming-with-pdfsaveoptions/_index.md +++ b/words/hindi/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ PdfSaveOptions के साथ Words Processing पर Aspose.Words for .NET | [पीडीएफ दस्तावेज़ में अंतिम मुद्रित संपत्ति अपडेट करें](./update-last-printed-property/) | हमारे चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.Words का उपयोग करके PDF दस्तावेज़ में अंतिम मुद्रित संपत्ति को अपडेट करना सीखें। | | [3D DML 3DEffects को PDF दस्तावेज़ में प्रस्तुत करें](./dml-3deffects-rendering/) | इस व्यापक चरण-दर-चरण मार्गदर्शिका के साथ .NET के लिए Aspose.Words का उपयोग करके PDF दस्तावेज़ों में आश्चर्यजनक 3D DML प्रभाव प्रस्तुत करना सीखें। | | [पीडीएफ दस्तावेज़ में छवियों को प्रक्षेपित करें](./interpolate-images/) | हमारे चरण-दर-चरण गाइड के साथ .NET के लिए Aspose.Words का उपयोग करके PDF दस्तावेज़ में छवियों को इंटरपोल करना सीखें। आसानी से अपने PDF की छवि गुणवत्ता में सुधार करें। | - +| [सुलभ PDF बनाएं Word से – चरण‑दर‑चरण गाइड](./create-accessible-pdf-from-word-step-by-step-guide/) | Word दस्तावेज़ से सुलभ PDF बनाने की चरण‑दर‑चरण गाइड। | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hindi/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/hindi/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..924af2477f --- /dev/null +++ b/words/hindi/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: C# में DOCX फ़ाइल से सुलभ PDF बनाएं। जानें कैसे Word को PDF में बदलें, + DOCX को PDF के रूप में सहेजें, और PDF/UA अनुपालन सुनिश्चित करें। +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: hi +og_description: C# में Word से सुलभ PDF बनाएं। यह गाइड दिखाता है कि Word को PDF में + कैसे बदलें, docx को PDF के रूप में कैसे सहेजें, और PDF/UA मानकों को कैसे पूरा करें। +og_title: सुलभ PDF बनाएं – पूर्ण C# ट्यूटोरियल +tags: +- Aspose.Words +- PDF accessibility +- C# +title: वर्ड से एक्सेसिबल पीडीएफ बनाएं – चरण-दर-चरण गाइड +url: /hi/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word से एक्सेसिबल PDF बनाएं – पूर्ण प्रोग्रामिंग ट्यूटोरियल + +क्या आपको कभी Word दस्तावेज़ से **एक्सेसिबल PDF** बनाने की ज़रूरत पड़ी है लेकिन आप नहीं जानते थे कि कौन सी सेटिंग्स बदलनी हैं? आप अकेले नहीं हैं। कई कंपनियों में, PDF/UA (यूनिवर्सल एक्सेसिबिलिटी) के साथ अनुपालन एक कठोर आवश्यकता है, और सामान्य “convert‑to‑PDF” बटन पर्याप्त नहीं है। + +इस गाइड में हम एक संक्षिप्त, अंत‑से‑अंत समाधान के माध्यम से चलेंगे जो **Word को PDF में बदलता है**, **docx को PDF के रूप में सहेजता है**, और सुनिश्चित करता है कि आउटपुट एक्सेसिबिलिटी मानकों को पूरा करता है। कोई अस्पष्ट संदर्भ नहीं—सिर्फ वह कोड जिसे आप कॉपी‑पेस्ट कर सकते हैं, साथ ही प्रत्येक पंक्ति के पीछे का “क्यों”। + +> **TL;DR:** एक `.docx` लोड करें, `PdfSaveOptions.Compliance` को `PdfUa1` (या `PdfUa2`) पर सेट करें, और `Document.Save` को कॉल करें। यही सब है जो आपको Aspose.Words for .NET के साथ **एक्सेसिबल PDF बनाने** के लिए चाहिए। + +--- + +## आप क्या सीखेंगे + +- कैसे **Word को PDF में बदलें** जबकि हेडिंग्स, alt‑text, और रीडिंग ऑर्डर को बनाए रखें। +- `PdfUa1` और `PdfUa2` के बीच अंतर और कब प्रत्येक को चुनें। +- कैसे **docx को PDF के रूप में सहेजें** केवल कुछ पंक्तियों के C# कोड से। +- सामान्य समस्याएँ (गुम फ़ॉन्ट, असमर्थित टैग) और त्वरित समाधान। +- एक तैयार‑से‑चलाने योग्य कोड नमूना जिसे आप किसी भी .NET प्रोजेक्ट में डाल सकते हैं। + +### पूर्वापेक्षाएँ + +- .NET 6 या बाद का (कोड .NET Framework 4.7+ पर भी काम करता है)। +- NuGet के माध्यम से Aspose.Words for .NET स्थापित (`Install-Package Aspose.Words`)। +- एक Word फ़ाइल (`input.docx`) जिसमें पहले से ही उचित संरचना (स्टाइल्स, इमेजेज़ के लिए alt‑text) हो। + +यदि आपने अभी तक Aspose.Words नहीं जोड़ा है, तो नीचे दिए गए कमांड को पैकेज मैनेजर कंसोल में चलाएँ: + +```powershell +Install-Package Aspose.Words +``` + +यह वह एकमात्र बाहरी निर्भरता है जिसकी आपको आवश्यकता है। + +--- + +## एक्सेसिबल PDF बनाएं – क्यों एक्सेसिबिलिटी महत्वपूर्ण है + +जब किसी PDF को **PDF/UA** (यूनिवर्सल एक्सेसिबिलिटी) के रूप में चिह्नित किया जाता है, तो स्क्रीन रीडर्स हेडिंग्स, टेबल्स, और फ़ॉर्म फ़ील्ड्स को उसी तरह नेविगेट कर सकते हैं जैसे वे मूल Word फ़ाइल में होते हैं। यह सिर्फ एक “nice‑to‑have” नहीं है; कई सरकारें और कंपनियां PDF/UA अनुपालन को कानूनी आवश्यकता मानती हैं। + +`PdfSaveOptions` पर `Compliance` प्रॉपर्टी सेट करने से लाइब्रेरी को आवश्यक टैग एम्बेड करने, सही दस्तावेज़ भाषा सेट करने, और एक तार्किक रीडिंग ऑर्डर जोड़ने का निर्देश मिलता है। इस चरण को छोड़ने से “विज़ुअल‑ओनली” PDF बनता है जो एक्सेसिबिलिटी ऑडिट में फेल हो जाता है। + +--- + +## Aspose.Words के साथ Word को PDF में बदलें + +नीचे सबसे सरल तरीका है **Word को PDF में बदलने** का, जबकि दस्तावेज़ एक्सेसिबल बना रहे। + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**यहाँ क्या हो रहा है?** + +- `Document` Word फ़ाइल को पढ़ता है, सभी स्टाइल्स और संरचना को बनाए रखते हुए। +- `PdfSaveOptions.Compliance` Aspose.Words को आउटपुट को PDF/UA के रूप में टैग करने के लिए बताता है। +- `doc.Save` PDF को डिस्क पर लिखता है, टैग्स को स्वचालित रूप से एम्बेड करता है। + +> **Pro tip:** यदि आपके स्रोत Word फ़ाइल में कस्टम हेडिंग स्टाइल्स हैं, तो सुनिश्चित करें कि वे बिल्ट‑इन हेडिंग लेवल्स (`Heading1`, `Heading2`, …) से मैप किए गए हों। इससे उत्पन्न PDF को सही हेडिंग टैग्स मिलते हैं। + +--- + +## Docx को PDF के रूप में सहेजें – PDF/UA अनुपालन कॉन्फ़िगर करना + +यदि आप पहले से ही `PdfSaveOptions` क्लास से परिचित हैं, तो आप सोच सकते हैं कि क्या अन्य स्विच हैं जो एक्सेसिबिलिटी को प्रभावित करते हैं। कुछ उपयोगी प्रॉपर्टीज़: + +| प्रॉपर्टी | एक्सेसिबिलिटी पर प्रभाव | सामान्य मान | +|----------|------------------------|-------------| +| `Compliance` | PDF/UA टैगिंग को ऑन/ऑफ़ करता है | `PdfCompliance.PdfUa1` या `PdfUa2` | +| `EmbedFullFonts` | सुनिश्चित करता है कि रीडर्स इच्छित टाइपोग्राफी देखें | `true` (डिफ़ॉल्ट) | +| `OptimizeOutput` | टैग्स हटाए बिना फ़ाइल आकार घटाता है | `true` | + +आप पिछले स्निपेट को इस तरह विस्तारित कर सकते हैं: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +`PdfUa2` पर स्विच करने से नई PDF/UA सुविधाएँ जैसे *artifact* टैगिंग डेकोरेटिव इमेजेज़ के लिए समर्थित होती हैं। यदि आपको ये नहीं चाहिए, तो अधिकतम संगतता के लिए `PdfUa1` ही रखें। + +--- + +## Docx को PDF में एक्सपोर्ट करें – पूर्ण कार्यशील उदाहरण + +नीचे एक स्व-निहित कंसोल ऐप है जो पूरी प्रक्रिया दर्शाता है, फ़ाइल लोड करने से लेकर आउटपुट सत्यापित करने तक। + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### अपेक्षित परिणाम + +- **Compliant.pdf** नाम की फ़ाइल निष्पादन योग्य के समान फ़ोल्डर में दिखाई देती है। +- Adobe Acrobat Pro में PDF खोलें → *Tools → Accessibility → Full Check* पर कोई **एक्सेसिबिलिटी समस्या नहीं** दिखनी चाहिए (मान लेते हैं कि स्रोत Word फ़ाइल अच्छी तरह संरचित थी)। +- PDF की *Properties → Advanced* टैब में “PDF/A and PDF/UA compliance” सेक्शन के तहत **PDF/UA** दिखेगा। + +--- + +## सामान्य किनारे के मामलों और उनका समाधान + +| स्थिति | क्यों महत्वपूर्ण है | त्वरित समाधान | +|-----------|----------------|-----------| +| **Missing fonts** | PDF डिफ़ॉल्ट फ़ॉन्ट पर फ़ॉल बैक हो सकता है, जिससे दृश्य लेआउट टूट जाता है। | `EmbedFullFonts = true` सेट करें (पहले से डिफ़ॉल्ट) और सुनिश्चित करें कि फ़ॉन्ट फ़ाइलें बिल्ड मशीन पर उपलब्ध हों। | +| **Images without alt‑text** | स्क्रीन रीडर्स “image” पढ़ेंगे बिना किसी विवरण के। | Word में `Alt Text` जोड़ें (`Right‑click → Format Picture → Alt Text`) फिर कन्वर्ज़न करें। | +| **Custom styles not recognized as headings** | PDF/UA को सही हेडिंग टैग्स चाहिए। | कस्टम स्टाइल्स को बिल्ट‑इन हेडिंग्स से मैप करें: `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | 500‑पेज फ़ाइल को कन्वर्ट करने से RAM उपयोग में स्पाइक हो सकता है। | `doc.Save(outputPath, options)` के साथ `options.SaveFormat = SaveFormat.Pdf` उपयोग करें और यदि `OutOfMemoryException` आए तो चंक्स में प्रोसेस करने पर विचार करें। | +| **Need to export docx to pdf without accessibility** | कभी‑कभी आप सिर्फ एक तेज़ विज़ुअल PDF चाहते हैं। | `Compliance` सेटिंग को हटाएँ या `PdfCompliance.Pdf15` पर सेट करें। | + +--- + +## इमेज उदाहरण (Alt Text सहित) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*ऊपर दिया गया alt‑text मुख्य कीवर्ड को सुदृढ़ करता है और उपयोगकर्ताओं तथा AI मॉडलों दोनों को इमेज के संदर्भ को समझने में मदद करता है।* + +--- + +## अक्सर पूछे जाने वाले प्रश्न + +**Q: क्या यह .NET Core के साथ काम करता है?** +A: बिल्कुल। Aspose.Words क्रॉस‑प्लेटफ़ॉर्म है; बस अपने .NET 6+ प्रोजेक्ट में NuGet पैकेज को रेफ़रेंस करें। + +**Q: क्या मैं कई DOCX फ़ाइलों को बैच‑प्रोसेस कर सकता हूँ?** +A: हाँ। लोडिंग और सहेजने की लॉजिक को `foreach (var file in Directory.GetFiles(folder, "*.docx"))` लूप में रखें। प्रदर्शन के लिए एक ही `PdfSaveOptions` इंस्टेंस को पुन: उपयोग करना याद रखें। + +**Q: यदि मुझे एक कस्टम PDF/UA टैग जोड़ना हो जो Aspose स्वचालित रूप से नहीं बनाता, तो क्या करें?** +A: लो‑लेवल PDF API (`PdfSaveOptions.CustomProperties`) का उपयोग करें या iText 7 जैसी लाइब्रेरी से 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/hindi/net/working-with-fonts/_index.md b/words/hindi/net/working-with-fonts/_index.md index 7b5c73e90a..7f4293deaf 100644 --- a/words/hindi/net/working-with-fonts/_index.md +++ b/words/hindi/net/working-with-fonts/_index.md @@ -34,8 +34,8 @@ | [फ़ॉन्ट प्रतिस्थापन सक्षम करें अक्षम करें](./enable-disable-font-substitution/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों में फ़ॉन्ट प्रतिस्थापन को सक्षम या अक्षम करना सीखें। सुनिश्चित करें कि आपके दस्तावेज़ सभी प्लेटफ़ॉर्म पर एक जैसे दिखें। | | [फ़ॉन्ट फ़ॉलबैक सेटिंग सेट करें](./set-font-fallback-settings/) | जानें कि .NET के लिए Aspose.Words में फ़ॉन्ट प्रतिस्थापन सेटिंग्स कैसे सेट करें और अपने Word दस्तावेज़ों में फ़ॉन्ट प्रतिस्थापन को अनुकूलित करें। | | [नोटो फ़ॉलबैक सेटिंग्स लोड करें](./load-noto-fallback-settings/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ में Noto फ़ॉलबैक सेटिंग लोड करना सीखें। सभी वर्णों को सही ढंग से प्रदर्शित करने के लिए हमारे चरण-दर-चरण मार्गदर्शिका का पालन करें। | -| [फ़ॉन्ट फ़ोल्डर डिफ़ॉल्ट इंस्टेंस सेट करें](./set-fonts-folders-default-instance/) | इस चरण-दर-चरण ट्यूटोरियल के साथ .NET के लिए Aspose.Words में डिफ़ॉल्ट इंस्टेंस के लिए फ़ॉन्ट फ़ोल्डर सेट करना सीखें। अपने Word दस्तावेज़ों को आसानी से कस्टमाइज़ करें। | -| [फ़ॉन्ट फ़ोल्डर्स एकाधिक फ़ोल्डर्स सेट करें](./set-fonts-folders-multiple-folders/) | .NET के लिए Aspose.Words का उपयोग करके अपने Word दस्तावेज़ों में एकाधिक फ़ॉन्ट फ़ोल्डर सेट करना सीखें। यह चरण-दर-चरण मार्गदर्शिका सुनिश्चित करती है कि आपके दस्तावेज़ों में वही फ़ॉन्ट उपयोग किए जाएँ जिनकी आपको आवश्यकता है। | +| [फ़ॉन्ट फ़ोल्डर डिफ़ॉल्ट इंस्टेंस सेट करें](./set-fonts-folders-default-instance/) | इस चरण-दर-स्टेप ट्यूटोरियल के साथ .NET के लिए Aspose.Words में डिफ़ॉल्ट इंस्टेंस के लिए फ़ॉन्ट फ़ोल्डर सेट करना सीखें। अपने Word दस्तावेज़ों को आसानी से कस्टमाइज़ करें। | +| [फ़ॉन्ट फ़ोल्डर्स एकाधिक फ़ोल्डर्स सेट करें](./set-fonts-folders-multiple-folders/) | .NET के लिए Aspose.Words का उपयोग करके अपने Word दस्तावेज़ में एकाधिक फ़ॉन्ट फ़ोल्डर सेट करना सीखें। यह चरण-दर-चरण मार्गदर्शिका सुनिश्चित करती है कि आपके दस्तावेज़ों में वही फ़ॉन्ट उपयोग किए जाएँ जिनकी आपको आवश्यकता है। | | [फ़ॉन्ट फ़ोल्डर सिस्टम और कस्टम फ़ोल्डर सेट करें](./set-fonts-folders-system-and-custom-folder/) जानें कि .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों में सिस्टम और कस्टम फ़ॉन्ट फ़ोल्डर कैसे सेट करें, जिससे यह सुनिश्चित हो सके कि आपके दस्तावेज़ विभिन्न वातावरणों में सही ढंग से प्रदर्शित हों। | | [प्राथमिकता के साथ फ़ॉन्ट फ़ोल्डर सेट करें](./set-fonts-folders-with-priority/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों में प्राथमिकता के साथ फ़ॉन्ट फ़ोल्डर सेट करना सीखें। हमारा गाइड सुनिश्चित करता है कि आपके दस्तावेज़ हर बार पूरी तरह से रेंडर हों। | | [ट्रू टाइप फ़ॉन्ट्स फ़ोल्डर सेट करें](./set-true-type-fonts-folder/) | .NET के लिए Aspose.Words का उपयोग करके Word दस्तावेज़ों में ट्रू टाइप फ़ॉन्ट फ़ोल्डर सेट करना सीखें। सुसंगत फ़ॉन्ट प्रबंधन सुनिश्चित करने के लिए हमारे विस्तृत, चरण-दर-चरण मार्गदर्शिका का पालन करें। | @@ -45,7 +45,8 @@ | [फ़ॉन्ट सेटिंग डिफ़ॉल्ट इंस्टेंस](./font-settings-default-instance/) | इस ट्यूटोरियल में, .NET के लिए Aspose.Words के साथ Word दस्तावेज़ में डिफ़ॉल्ट फ़ॉन्ट सेटिंग्स कॉन्फ़िगर करना सीखें। | | [उपलब्ध फ़ॉन्ट्स की सूची प्राप्त करें](./get-list-of-available-fonts/) | इस विस्तृत चरण-दर-चरण ट्यूटोरियल में जानें कि .NET के लिए Aspose.Words का उपयोग करके उपलब्ध फ़ॉन्ट की सूची कैसे प्राप्त करें। अपने फ़ॉन्ट प्रबंधन कौशल को बढ़ाएँ। | | [फ़ॉन्ट्स की सूचनाएं प्राप्त करें](./receive-notifications-of-fonts/) | .NET के लिए Aspose.Words का उपयोग करते समय गायब या प्रतिस्थापित फ़ॉन्ट की सूचनाएँ प्राप्त करना सीखें। | -| [चेतावनी अधिसूचना प्राप्त करें](./receive-warning-notification/) जानें कि .NET के लिए Aspose.Words का उपयोग करते समय चेतावनी अधिसूचना कैसे प्राप्त करें और अपने दस्तावेज़ों में किसी भी समस्या या चेतावनी का प्रबंधन कैसे करें। | +| [Aspose.Words में फ़ॉन्ट्स का पता कैसे लगाएँ – पूर्ण गाइड](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Aspose.Words के साथ .NET में फ़ॉन्ट्स का पता लगाने की पूरी प्रक्रिया सीखें। | +| [चेतावनी अधिसूचना प्राप्त करें](./receive-warning-notification/) | जानें कि .NET के लिए Aspose.Words का उपयोग करते समय चेतावनी अधिसूचना कैसे प्राप्त करें और अपने दस्तावेज़ों में किसी भी समस्या या चेतावनी का प्रबंधन कैसे करें। | | [संसाधन स्टीम फ़ॉन्ट स्रोत उदाहरण](./resource-steam-font-source-example/) | .NET के लिए Aspose.Words में कस्टम फ़ॉन्ट लोड करने के लिए संसाधन स्ट्रीम फ़ॉन्ट स्रोत का उपयोग करना सीखें। | | [प्रत्यय के बिना प्रतिस्थापन प्राप्त करें](./get-substitution-without-suffixes/) | इस ट्यूटोरियल में, Aspose.Words for .NET के साथ Word दस्तावेज़ में प्रत्यय रहित ओवरराइड प्राप्त करना सीखें। | diff --git a/words/hindi/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/hindi/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..685a699154 --- /dev/null +++ b/words/hindi/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: Aspose.Words का उपयोग करके C# में फ़ॉन्ट्स का पता लगाना और लापता फ़ॉन्ट्स + को संभालते समय चेतावनियों को कैप्चर करना सीखें। चरण‑दर‑चरण कोड शामिल है। +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: hi +og_description: Aspose.Words में फ़ॉन्ट कैसे पता करें? चेतावनियों को पकड़ने और लापता + फ़ॉन्ट्स को आसानी से संभालने के लिए इस ट्यूटोरियल का पालन करें। +og_title: Aspose.Words में फ़ॉन्ट कैसे पहचानें – पूर्ण मार्गदर्शिका +tags: +- Aspose.Words +- C# +- Font handling +title: Aspose.Words में फ़ॉन्ट कैसे पहचानें – पूर्ण गाइड +url: /hi/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words में फ़ॉन्ट्स का पता कैसे लगाएँ – पूर्ण गाइड + +क्या आपने कभी सोचा है **how to detect fonts** जो Word दस्तावेज़ में अनुपलब्ध हैं, उसे प्रोडक्शन में भेजने से पहले? आप अकेले नहीं हैं। कई एंटरप्राइज़ परिदृश्यों में एक अनजाना फ़ॉन्ट PDF रूपांतरण पाइपलाइन को तोड़ सकता है या लेआउट गड़बड़ियां पैदा कर सकता है जो पेशेवर नहीं लगतीं। अच्छी बात यह है कि Aspose.Words आपको इन अनुपस्थित टाइपफ़ेस को पहचानने और स्पष्ट चेतावनियाँ दिखाने का अंतर्निहित तरीका प्रदान करता है। + +इस ट्यूटोरियल में हम बिल्कुल **how to detect fonts**, **how to capture warnings**, और **handle missing fonts** के सर्वोत्तम अभ्यासों को देखेंगे ताकि आपका एप्लिकेशन मजबूत बना रहे। कोई बाहरी टूल नहीं, कोई अनुमान नहीं—सिर्फ शुद्ध C# कोड जिसे आप अभी अपने प्रोजेक्ट में जोड़ सकते हैं। + +> **Quick preview:** अंत तक आपके पास एक पुन: उपयोग योग्य `FontSubstitutionWarningCollector` होगा जो दस्तावेज़ लोडिंग के दौरान प्रत्येक फ़ॉन्ट‑सब्स्टिट्यूशन संदेश एकत्र करता है, और आप जानेंगे कि जब कोई फ़ॉन्ट नहीं मिला तो कैसे प्रतिक्रिया दें। + +--- + +## आप क्या सीखेंगे + +- `LoadOptions` को इस तरह कॉन्फ़िगर करें कि वह फ़ॉन्ट‑सब्स्टिट्यूशन चेतावनियों को सुन सके। +- इन चेतावनियों को एक कस्टम कलेक्टर क्लास में कैप्चर करें। +- एकत्रित चेतावनियों को प्रोसेस करें और तय करें कि एबॉर्ट करना है, लॉग करना है, या फ़ॉन्ट्स को बदलना है। +- रिमोट या एम्बेडेड फ़ॉन्ट्स का संदर्भ देने वाले दस्तावेज़ों के लिए एज‑केस हैंडलिंग। + +**Prerequisites:** .NET 6+ (या .NET Framework 4.6+), Aspose.Words for .NET (नवीनतम संस्करण), और C# की बुनियादी परिचितता। यदि आपने पहले कभी Aspose.Words का उपयोग नहीं किया है, तो चिंता न करें—यह गाइड केवल कुछ मिनटों की सेटअप समय मानता है। + +## Aspose.Words LoadOptions का उपयोग करके फ़ॉन्ट्स का पता कैसे लगाएँ + +गायब फ़ॉन्ट्स का पता लगाने की पहली कदम है Aspose.Words को उन्हें रिपोर्ट करने के लिए कहना। यह `LoadOptions.WarningCallback` प्रॉपर्टी के माध्यम से किया जाता है, जो किसी भी क्लास को स्वीकार करती है जो `IWarningCallback` को इम्प्लीमेंट करती है। नीचे हम एक छोटा कलेक्टर बनाते हैं जो प्रत्येक चेतावनी को बाद में निरीक्षण के लिए संग्रहीत करता है। + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Why this matters:** बिना वार्निंग कॉलबैक के, Aspose.Words चुपचाप गायब फ़ॉन्ट्स को डिफ़ॉल्ट फ़ॉन्ट से बदल देता है, और आपको कभी पता नहीं चलता कि समस्या मौजूद है। `WarningType.FontSubstitution` को कैप्चर करके हमें पूरी दृश्यता मिलती है—बिल्कुल वही डेटा जो आपको **detect fonts** करने के लिए चाहिए जो होस्ट मशीन पर उपलब्ध नहीं हैं। + +अब हम कलेक्टर को `LoadOptions` में जोड़ते हैं और एक दस्तावेज़ लोड करते हैं: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Pro tip:** यदि आप बैच में कई दस्तावेज़ों के साथ काम करते हैं, तो वही `FontSubstitutionWarningCollector` इंस्टेंस पुन: उपयोग करें लेकिन लोड्स के बीच `Clear()` को कॉल करना याद रखें ताकि विभिन्न फ़ाइलों की चेतावनियों का मिश्रण न हो। + +## दस्तावेज़ लोड के दौरान चेतावनियों को कैप्चर करें + +दस्तावेज़ लोड होने के बाद, कलेक्टर में पहले से ही प्रत्येक फ़ॉन्ट‑संबंधित चेतावनी मौजूद होती है। अगला तर्कसंगत प्रश्न है: *मैं चेतावनियों को कैसे कैप्चर करूँ* ताकि उन्हें लॉग या प्रदर्शित करना आसान हो? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +सामान्य आउटपुट इस प्रकार दिखता है: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**What this tells you:** प्रत्येक पंक्ति मूल फ़ॉन्ट नाम और वह फॉलबैक दिखाती है जो Aspose.Words ने चुना। इस जानकारी के साथ आप तय कर सकते हैं कि फॉलबैक स्वीकार्य है या आपको गायब फ़ॉन्ट को मैन्युअल रूप से एम्बेड करना चाहिए। + +## गायब फ़ॉन्ट्स को सहजता से संभालें + +चेतावनियों का पता लगाना और उन्हें कैप्चर करना केवल आधा काम है। वास्तविक मूल्य तब आता है जब आप **handle missing fonts** को प्रोडक्शन‑रेडी तरीके से संभालते हैं। नीचे तीन सामान्य रणनीतियाँ दी गई हैं: + +1. **Log and Continue** – बैच प्रोसेसिंग के लिए उपयुक्त जहाँ आपको केवल ऑडिट ट्रेल चाहिए। +2. **Abort on Critical Fonts** – यदि कोई विशेष फ़ॉन्ट (जैसे, ब्रांड‑विशिष्ट टाइपफ़ेस) गायब है तो एक्सेप्शन फेंके। +3. **Embed the Font On‑The‑Fly** – ज्ञात फ़ोल्डर से गायब फ़ॉन्ट को लोड करें और दस्तावेज़ को पुनः‑लोड करने से पहले Aspose.Words के साथ रजिस्टर करें। + +### उदाहरण: एक महत्वपूर्ण फ़ॉन्ट पर एबॉर्ट करें + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### उदाहरण: गायब फ़ॉन्ट्स को ऑटो‑एम्बेड करें + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Why these patterns help:** स्पष्ट रूप से तय करके कि फ़ॉन्ट गायब होने पर क्या करना है, आप चुपचाप होने वाले फॉलबैक्स को समाप्त कर देते हैं जो ब्रांडिंग या पठनीयता को नुकसान पहुँचा सकते हैं। यही **handling missing fonts** का सार है, एक नियंत्रित तरीके से। + +## पूर्ण कार्यशील उदाहरण + +सब कुछ मिलाकर, यहाँ एक एकल, तैयार‑चलाने योग्य प्रोग्राम है जो **how to detect fonts**, **how to capture warnings**, और लॉगिंग द्वारा **handle missing fonts** करने की एक सरल नीति को दर्शाता है। + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Expected result:** जब आप प्रोग्राम को ऐसे दस्तावेज़ के खिलाफ चलाते हैं जो मशीन पर मौजूद नहीं होने वाले फ़ॉन्ट का संदर्भ देता है, तो कंसोल प्रत्येक सब्स्टिट्यूशन चेतावनी सूचीबद्ध करेगा। यदि कोई चेतावनी `critical` सेट के फ़ॉन्ट से संबंधित है, तो प्रोग्राम जल्दी समाप्त हो जाएगा, जिससे एक दोषपूर्ण PDF उत्पन्न होने से बचा जा सके। + +## अक्सर पूछे जाने वाले प्रश्न (FAQs) + +| Question | Answer | +|----------|--------| +| *क्या इस कोड को उपयोग करने के लिए मुझे Aspose.Words का लाइसेंस चाहिए?* | हाँ, एक वैध Aspose.Words लाइसेंस मूल्यांकन वॉटरमार्क को हटाता है और पूरी कार्यक्षमता अनलॉक करता है। | +| *क्या यह तरीका एम्बेडेड फ़ॉन्ट्स का पता लगा सकता है?* | एम्बेडेड फ़ॉन्ट्स पहले से ही फ़ाइल का हिस्सा होते हैं, इसलिए Aspose.Words कोई सब्स्टिट्यूशन चेतावनी नहीं देगा। यदि आवश्यक हो तो आप `Document.FontInfos` की जाँच करके एम्बेडेड फ़ॉन्ट्स की सूची बना सकते हैं। | +| *यदि गायब फ़ॉन्ट Windows पर सिस्टम फ़ॉन्ट है लेकिन Linux पर नहीं है तो क्या होगा?* | Linux पर भी वही चेतावनी आएगी क्योंकि फ़ॉन्ट वहाँ स्थापित नहीं है। आवश्यक `.ttf` फ़ाइलों को अपने ऐप के साथ शिप करने के लिए “handle missing fonts” रणनीति का उपयोग करें। | +| *क्या वार्निंग कलेक्टर थ्रेड* | | + +{{< /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 4b06abe748..2dfc57ffbd 100644 --- a/words/hongkong/net/basic-conversions/_index.md +++ b/words/hongkong/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ | [將 PDF 儲存為 Jpeg](./pdf-to-jpeg/) |使用 Aspose.Words for .NET 輕鬆將 PDF 轉換為 JPEG。請遵循我們的詳細指南,其中包含範例和常見問題。非常適合開發人員和愛好者。 | | [將 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,提供程式碼範例與最佳實踐。 | +| [在 C# 中將 DOCX 轉換為 PDF – 完整程式設計指南](./convert-docx-to-pdf-in-c-complete-programming-guide/) | 提供完整的 C# 程式碼範例,說明如何使用 Aspose.Words for .NET 將 DOCX 檔案轉換為 PDF。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/hongkong/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..8672a5fc16 --- /dev/null +++ b/words/hongkong/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: 快速在 C# 中將 DOCX 轉換為 PDF。學習如何將 Word 儲存為 PDF、在 C# 載入 docx 文件,並在數分鐘內確保 PDF/UA‑2 + 合規。 +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: zh-hant +og_description: 即時在 C# 中將 DOCX 轉換為 PDF。本指南將教您如何將 Word 儲存為 PDF、在 C# 中載入 docx 文件,並符合 + PDF/UA‑2 標準。 +og_title: 使用 C# 將 DOCX 轉換為 PDF – 步驟教學 +tags: +- Aspose.Words +- C# +- PDF Generation +title: 在 C# 中將 DOCX 轉換為 PDF — 完整程式設計指南 +url: /zh-hant/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 C# 中將 DOCX 轉換為 PDF – 完整程式指南 + +是否曾在 C# 應用程式中**將 DOCX 轉換為 PDF**,卻不知從何下手?你並非唯一遇到這個問題的人。許多開發者在發現 Word 裡的「另存為 PDF」按鈕無法直接對應到程式碼時,往往卡住。好消息是,只要幾行 Aspose.Words(或任何相似函式庫)的程式碼,就能自動化整個流程、保持浮動圖形內嵌,甚至在不費吹灰之力的情況下達到 PDF/UA‑2 相容性。 + +在本教學中,你將學會**將 Word 儲存為 PDF**、**在 C# 中載入 docx 文件**,以及微調匯出選項,使產生的檔案符合無障礙審核的需求。完成後,你會得到一個自包含、可直接執行的程式,能將任意 `.docx` 檔案轉換為乾淨、符合標準的 PDF。 + +> **為什麼要在意?** +> 將 DOCX 轉換為 PDF 是發票系統、報表產生器與文件歸檔流程的常見需求。自動化此步驟可省去手動操作、降低人為錯誤,並確保每一次輸出在各平台上都保持完全一致。 + +--- + +## 你需要的環境 + +- **.NET 6.0** 或更新版本(程式碼同樣支援 .NET Framework 4.6 以上) +- **Aspose.Words for .NET**(免費試用版或正式授權版)— 可透過 NuGet 安裝:`dotnet add package Aspose.Words` +- 一個放置範例 `input.docx` 的資料夾(以下簡稱 `YOUR_DIRECTORY`) +- Visual Studio、VS Code,或任何你慣用的 C# 編輯器 + +就這樣——不需要額外服務、也不需要呼叫 REST API。純粹的 C#。 + +--- + +## 步驟 1:在 C# 中載入 DOCX 文件 + +在**將 docx 轉換為 pdf**之前,必須先把 Word 檔案載入記憶體。`Document` 類別會為你完成這件事。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**為什麼這很重要:** +載入檔案後,你會得到完整解析的物件模型——段落、表格、浮動圖形等全部內容。這是任何**load docx document c#**工作流程的第一步,同時也會在轉換前驗證檔案是否損毀。 + +> **專業小技巧:** 若處理使用者上傳的檔案,請將 `new Document()` 包在 try/catch 區塊中,以優雅地處理格式不正確的 DOCX。 + +--- + +## 步驟 2:設定 PDF 儲存選項(相容性與圖形處理) + +你可能會想,「我只要直接呼叫 `Save` 就好嗎?」簡短的答案是:可以,但正確的選項設定能讓 PDF 更具可存取性且外觀更忠實。 + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**為什麼這很重要:** +- `ExportFloatingShapesAsInlineTag = true` 可防止浮動物件在不同裝置上顯示遺失或錯位。 +- `Compliance = PdfCompliance.PdfUa2` 確保輸出符合 PDF/UA‑2 標準,這對螢幕閱讀器相容性與法律歸檔至關重要。 + +如果不需要無障礙功能,也可以移除 `Compliance` 那一行,但保留它幾乎不會增加額外負擔,且能讓解決方案更具未來延展性。 + +--- + +## 步驟 3:將文件儲存為 PDF – 核心 **Convert DOCX to PDF** 動作 + +文件已載入且選項已設定完畢,實際的轉換只需要一次方法呼叫。 + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**執行結果會是:** +程式執行後會在同一資料夾產生 `output.pdf`。使用任何 PDF 閱讀器開啟,你會發現: + +- 所有文字、表格與圖片與原始 DOCX 完全相同。 +- 浮動圖形以內嵌方式保留,版面不會變形。 +- 檔案通過基本的 PDF/UA‑2 驗證工具(例如 Adobe Acrobat Preflight)。 + +--- + +## 完整範例 – 從頭到尾 + +以下是一個完整、可直接執行的 Console 應用程式,示範整個流程。將程式碼複製貼上到新的 C# 專案,然後按 **F5** 執行。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**預期在主控台的輸出:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +執行完後,整潔的 `output.pdf` 會與原始檔案同目錄。 + +--- + +## 常見問題與特殊情況 + +| Question | Answer | +|----------|--------| +| **Can I convert a DOCX stored in a `MemoryStream`?** | Absolutely. Use `new Document(stream)` instead of a file path. | +| **What if the DOCX contains macros?** | Aspose.Words ignores VBA macros by default; they won’t appear in the PDF. | +| **Do I need a license for production?** | The free trial adds a watermark after a certain page count. For commercial use, obtain a license to remove it. | +| **How do I change the PDF page size?** | Set `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` before saving. | +| **Is there a way to embed a custom font?** | Yes—add `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## 提升 **Save Word as PDF** 體驗的專業技巧 + +- **批次處理:** 將轉換邏輯包在迴圈中,一次處理多個 DOCX 路徑。 +- **效能優化:** 多檔案轉換時重複使用同一個 `PdfSaveOptions` 實例,可減少 GC 壓力。 +- **記錄日誌:** 輸出產生 PDF 的檔案大小(`new FileInfo(outputPath).Length`),以監控壓縮效果。 +- **錯誤處理:** 明確區分 `FileNotFoundException`(找不到 DOCX)與 `UnauthorizedAccessException`(寫入權限不足)。 + +--- + +## 結論 + +現在你已掌握一套穩固、可投入生產環境的 **convert DOCX to PDF** 範式。只要載入 DOCX、設定 PDF 儲存選項,然後呼叫 `Save`,即可**save Word as PDF**,同時保留版面細節並符合無障礙標準,整個流程不超過十幾行程式碼。 + +想挑戰下一步嗎?試著將 `PdfSaveOptions` 換成 `ImageSaveOptions`,將 **save Word as PNG**;或探索 `HtmlSaveOptions` 產生網頁版輸出。無論哪種情況,**load docx document c#** 的基礎概念皆相同,讓你的程式碼未來更具彈性。 + +祝開發順利,願你的 PDF 永遠符合規範! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/hongkong/net/programming-with-loadoptions/_index.md index 5f6284e896..9f67e4eb86 100644 --- a/words/hongkong/net/programming-with-loadoptions/_index.md +++ b/words/hongkong/net/programming-with-loadoptions/_index.md @@ -34,7 +34,7 @@ Aspose.Words for .NET 教學課程為希望掌握使用 LoadOptions 進行文字 | [在 Word 文件中載入 Chm 文件](./load-chm/) |依照本逐步教學,使用 Aspose.Words for .NET 輕鬆地將 CHM 檔案載入到 Word 文件中。非常適合整合您的技術文件。 | | [如何使用 Aspose.Words 復原 docx – 步驟說明](./how-to-recover-docx-with-aspose-words-step-by-step/) |了解如何使用 Aspose.Words 逐步復原受損的 docx 文件,確保資料完整性。 | | [Aspose 載入選項 – 使用自訂字體設定載入 DOCX](./aspose-load-options-load-docx-with-custom-font-settings/) |了解如何使用 Aspose.Words for .NET 的 LoadOptions 以自訂字體設定載入 DOCX 文件,提升文件顯示效果。 | - +| [復原受損 DOCX – 完整 C# 指南:修復與儲存檔案](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) |了解如何使用 Aspose.Words for .NET 逐步修復受損的 DOCX 檔案並安全儲存,確保文件完整性。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/hongkong/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..25a8616b75 --- /dev/null +++ b/words/hongkong/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-04-07 +description: 學習如何在 C# 中復原損毀的 DOCX 檔案並安全儲存復原的文件。逐步指南,附帶 Aspose.Words 範例。 +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: zh-hant +og_description: 在 C# 中恢復損毀的 DOCX 檔案,並使用 Aspose.Words 儲存恢復後的文件。完整程式碼、說明與最佳實踐技巧。 +og_title: 修復損壞的 DOCX – 步驟式 C# 教學 +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: 恢復損毀的 DOCX – 完整 C# 指南:修復與儲存檔案 +url: /zh-hant/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 復原損壞的 DOCX – 完整 C# 指南:修復與儲存檔案 + +有沒有試過打開一個在檔案總管裡看起來正常,但在程式中卻拋出例外的 DOCX?這就是經典的「損壞 Word 檔案」惡夢,通常會伴隨一長串你不想看到的堆疊追蹤。好消息是?Aspose.Words 提供 **recover corrupted docx** 功能,讓你即使檔案受損也能繼續工作。 + +在本教學中,我們會一步步示範如何載入損壞的文件、告訴函式庫繼續執行,然後 **save recovered document** 到全新、乾淨的檔案。完成後,你會了解為什麼恢復模式很重要、如何設定,以及哪些陷阱要避免——不會只說「請參考文件」的含糊做法。 + +## 你需要的條件 + +- **Aspose.Words for .NET**(任意近期版本;本指南撰寫時使用 24.11) +- .NET 開發環境(Visual Studio、Rider,或安裝 C# 擴充功能的 VS Code) +- 一個你懷疑已損壞的 DOCX(可自行在 zip 編輯器中刪除某個部份來測試) +- 基本的 C# 知識——不需要高階技巧,只要會建立 console 應用程式即可 + +如果你已備妥以上條件,太好了——直接進入解決方案吧。 + +## 第一步:使用正確的恢復策略建立 LoadOptions + +修復的核心是 `LoadOptions` 物件。它告訴 Aspose.Words 在遇到格式錯誤的 XML 或缺失的部件時該怎麼處理。`RecoveryMode.RecoverAndContinue` 旗標是最寬容的——會盡可能挽救可用資料,並跳過其餘部分。 + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**為什麼這很重要:** 若省略 `LoadOptions` 或使用預設模式 (`RecoveryMode.NoRecovery`),`Document` 建構子會在發現問題的瞬間拋出例外。使用 `RecoverAndContinue` 後,API 會吞掉非關鍵錯誤,仍然產生一個可供後續操作的部份文件物件。 + +> **小技巧:** 若要處理大量檔案,仍建議將載入呼叫包在 `try/catch` 中——有些錯誤真的致命(例如缺少 `[Content_Types].xml` 檔案),無法恢復。 + +## 第二步:載入可能損壞的 DOCX + +選項設定好之後,載入檔案。建構子接受檔案路徑以及剛才準備好的 `LoadOptions`。 + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**背後發生了什麼?** +Aspose.Words 會解析 ZIP 容器,讀取每個 XML 部件,並嘗試重建 Open XML DOM。當遇到損壞的部件時,恢復引擎會記錄警告(若開啟診斷,會在主控台顯示),然後繼續。最終得到的 `Document` 物件可能缺少少數段落或圖片,但其餘內容仍保持完整。 + +## 第三步:驗證恢復後的內容(可選但建議) + +在將檔案寫回磁碟前,最好檢查幾個節點,確保重要段落仍在。 + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +如果輸出看起來合理,代表你已成功 **recover corrupted docx** 內容。若發現缺少某些區段,仍可自行決定是否繼續——有時遺失的部分僅是裝飾性內容。 + +## 第四步:儲存恢復後的文件 + +這是大多數開發者會問的問題:「如何 **save recovered document** 而不把原始的損壞帶回去?」答案很簡單:以全新路徑呼叫 `Document.Save`。Aspose.Words 會寫出全新的 ZIP 包,任何殘留的損壞部件都不會被寫入。 + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**為什麼可行:** `Save` 方法會把記憶體中的 DOM 序列化回乾淨的 Open XML 包。因為損壞的部件在恢復過程中已被丟棄,根本不會出現在新檔案裡。最終得到的 DOCX 可以在 Word、Google Docs 或其他檢視器中正常開啟。 + +## 第五步:為多檔案自動化流程(加分) + +在實務上,你常會面對一整個資料夾的問題檔案。把前面的步驟包在迴圈裡,就能變成一個小型的恢復工具。 + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +現在只要把一整個破損的 DOCX 資料夾放到 `C:\Docs\Batch`,腳本就會自動幫你清理。 + +## 常見問題與邊緣案例 + +| 問題 | 解答 | +|----------|--------| +| **這能處理 .doc 檔案嗎?** | 同樣使用 `LoadOptions` 類別,但必須參照舊版 Word 格式 (`doc`)。Aspose.Words 仍能恢復,只是錯誤類型會不同。 | +| **如果檔案有密碼保護呢?** | 恢復不會繞過加密。必須透過 `LoadOptions.Password` 提供密碼。 | +| **圖片會不會遺失?** | 只有屬於損壞 XML 部件的圖片可能被省略。其餘圖片因為是獨立的二進位串流,會被保留。 | +| **我可以記錄 Aspose 產生的警告嗎?** | 可以——將 `LoadOptions.LoadFormat` 設為 `LoadFormat.Docx`,並訂閱 `Document.WarningCallback` 以取得詳細訊息。 | +| **`RecoverAndContinue` 在正式環境安全嗎?** | 大多數情況下可以,但仍建議先用自己的資料測試。若是關鍵流程,或許要把需要恢復的文件標記起來,以便日後審查。 | + +## 完整範例(直接複製貼上即可) + +以下是可編譯為 console 應用程式的完整程式碼,包含所有步驟、錯誤處理與可選的批次處理邏輯。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**預期結果:** 執行程式後,`Recovered.docx` 能在 Microsoft Word 中正常開啟,且不會出現原始的錯誤對話框。過於損壞的部份會被省略,但正文、標題與大多數圖片仍完整保留。 + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## 結論 + +我們已完整說明如何使用 Aspose.Words **recover corrupted docx** 檔案,從設定 `LoadOptions` 到安全 **save recovered document**。重點如下: + +- 使用 `RecoveryMode.RecoverAndContinue` 讓函式庫忽略非關鍵錯誤。 +- 在寫入前驗證載入的內容,特別是處理關鍵商業文件時。 +- 儲存文件時會產生乾淨的 ZIP 包,等同於剝除原始的損壞。 +- 同樣的模式可擴展至批次作業,實現大規模文件庫的自動清理。 + +準備好下一步了嗎?試著把這段邏輯整合到監控上傳資料夾的背景服務,或利用 `WarningCallback` 產生需要恢復的文件報表。玩得越多,你會越欣賞 Aspose.Words 在真實文件處理情境下的強韌性。 + +有其他想法想分享——例如處理密碼保護檔案或合併恢復後的文件?歡迎在下方留言,我們一起討論。祝程式開發愉快! + +{{< /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 683c822db1..c8e8d836ed 100644 --- a/words/hongkong/net/programming-with-markdownsaveoptions/_index.md +++ b/words/hongkong/net/programming-with-markdownsaveoptions/_index.md @@ -32,6 +32,7 @@ | [將 docx 儲存為 markdown – 完整 C# 指南(含圖像提取)](./save-docx-as-markdown-full-c-guide-with-image-extraction/) |示範如何使用 Aspose.Words for .NET 在 C# 中將 DOCX 轉換為 Markdown,並提取圖像。 | | [如何將 Word 匯出為 Markdown – 完整 C# 指南](./how-to-export-markdown-from-word-complete-c-guide/) |示範如何使用 Aspose.Words for .NET 在 C# 中將 Word 文件匯出為 Markdown,提供完整步驟與範例程式碼。 | | [如何將 DOCX 匯出為 Markdown – 完整 C# 指南](./how-to-export-markdown-from-docx-complete-guide/) |示範如何使用 Aspose.Words for .NET 在 C# 中將 DOCX 匯出為 Markdown,提供完整步驟與範例程式碼。 | +| [將 Word 儲存為 Markdown 並自訂圖像資料夾 – 完整指南](./save-word-as-markdown-with-custom-image-folder-full-guide/) |示範如何使用 Aspose.Words for .NET 將 Word 文件匯出為 Markdown,並將圖像儲存至自訂資料夾的完整步驟與範例程式碼。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/hongkong/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..e95f01797b --- /dev/null +++ b/words/hongkong/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,290 @@ +--- +category: general +date: 2026-04-07 +description: 將 Word 另存為 Markdown,並使用回調從 docx 中提取圖片。了解如何使用回調高效儲存 Markdown 圖片資料夾。 +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: zh-hant +og_description: 將 Word 另存為 Markdown,並使用回調函數從 docx 中提取圖片。本指南說明如何使用回調函數建立 Markdown 圖片資料夾。 +og_title: 將 Word 另存為 Markdown – 完整逐步指南 +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: 將 Word 另存為 Markdown 並自訂圖片資料夾 – 完整指南 +url: /zh-hant/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 將 Word 儲存為 Markdown – 完整步驟指南 + +是否曾經需要 **將 Word 儲存為 Markdown**,卻不確定要如何處理內嵌的圖片?你並不孤單。在許多專案中,Markdown 輸出看起來很不錯——*直到* 你發現圖片連結失效,因為檔案從未離開 Word 套件。 + +好消息是,Aspose.Words 為你提供了一個乾淨的方式來 **從 docx 中擷取圖片**,並將它們放在你想要的位置,透過 **callback** 讓你自行控制 Markdown 圖片資料夾。在本教學中,我們將一步步說明整個流程,從載入 `.docx` 檔案,到最終得到整齊的 PNG(或其他格式)資料夾,以及指向這些圖片的 Markdown 檔案。 + +完成本指南後,你將能夠: + +* 只用一行程式碼將任何 Word 文件轉換為 Markdown。 +* 自動將每張圖片匯出至專屬的 `images` 子資料夾。 +* 自訂檔名以避免衝突,即使來源文件包含數十張圖片。 + +無需外部腳本,無需手動複製貼上——只需純粹的 C# 與 Aspose.Words。 + +## 前置條件 + +在開始之前,請確保你已具備: + +* **Aspose.Words for .NET**(最新穩定版;撰寫本文時為 24.9)。 +* .NET 開發環境(Visual Studio、Rider,或 `dotnet` CLI)。 +* 一個包含至少一張圖片的 Word 文件(`.docx`),例如 `DocWithImages.docx`。 + +如果你從未使用過 Aspose.Words,也別擔心。此函式庫完全受管理,不需要 COM interop,且可在 .NET 6+ 以及 .NET Framework 4.8 上執行。 + +## Step 1 – 設定專案並安裝套件 + +首先,建立一個新的 console 應用程式(或將程式碼加入現有專案)。 + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **專業提示:** 若目標是 .NET 6,預設的 `Program.cs` 已使用頂層語句(top‑level statements),可讓範例更簡潔。 + +## Step 2 – 建立 Callback 以控制圖片儲存 + +Aspose.Words 會對每個需要寫入的外部資源(圖片、CSS 等)呼叫 `IResourceSavingCallback.ResourceSaving`。實作此介面即可完整掌控 **Markdown 圖片資料夾** 的建立方式。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### 為什麼要使用 Callback? + +* **細部控制** – 你決定資料夾結構與命名規則。 +* **效能** – 只寫入一次串流,避免函式庫的二次寫入備援。 +* **彈性** – 可在此加入日誌、圖片最佳化,甚至上傳至雲端儲存。 + +## Step 3 – 載入 Word 文件 + +Callback 準備好後,只需要把 Aspose.Words 指向來源檔案即可。 + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **如果找不到檔案會怎樣?** +> `Document` 會拋出 `FileNotFoundException`。若路徑是動態的,請使用 `try/catch` 包住載入程式碼。 + +## Step 4 – 設定 MarkdownSaveOptions + +`MarkdownSaveOptions` 類別讓我們插入剛才建立的 Callback,同時設定圖片相對於 Markdown 檔案的資料夾位置。 + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder` 屬性告訴 Aspose 產生類似 `![Alt text](images/img_123.png)` 的 Markdown 連結。因為我們在 Callback 中也設定了 `ResourceFileName`,實際檔案會正確寫入該位置。 + +## Step 5 – 儲存為 Markdown 並驗證結果 + +最後,我們寫入 Markdown 檔案。Callback 已經把 `images` 子資料夾填滿。 + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### 預期輸出 + +執行程式時應會印出類似以下內容: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +在任何 Markdown 檢視器中開啟 `Doc.md`,即可看到正確指向 `images` 資料夾的圖片連結。 + +--- + +## 常見問題 (FAQ) + +### 如何在不轉換為 Markdown 的情況下 **從 docx 中擷取圖片**? + +你可以重複使用相同的 `MyMarkdownResourceCallback`,但改為呼叫 `doc.Save("images.zip", SaveFormat.Zip)`。Callback 仍會對每張圖片觸發,讓你自行決定儲存位置。 + +### 如果需要 **不同的圖片格式** 該怎麼辦? + +`args.FileName` 已包含原始副檔名(`.png`、`.jpg` 等)。若必須將所有圖片轉為單一格式,可在 `ResourceSaving` 內部加入轉換步驟,再寫入串流。 + +### 能否為每個文件 **自訂 Markdown 圖片資料夾**? + +當然可以。Callback 透過建構子接收資料夾路徑,因此在批次處理時,你可以為每個文件實例化不同的 Callback,指定不同的資料夾。 + +### 這在 **大型文件**(數百張圖片)下可行嗎? + +可以。Callback 直接將圖片串流寫入磁碟,保持低記憶體使用量。只要確保目標磁碟有足夠空間,且不會觸及作業系統的檔案句柄上限即可。 + +--- + +## 完整範例程式 + +以下是可直接複製貼上的完整程式碼。將 `YOUR_DIRECTORY` 替換為適合你環境的絕對或相對路徑。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +執行程式(`dotnet run`)後,你會看到新產生的 `Doc.md`,以及包含圖片的 `images` 子資料夾。 + +{{< /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-officemath/_index.md b/words/hongkong/net/programming-with-officemath/_index.md index 1ac18e65c9..c4b6243aa9 100644 --- a/words/hongkong/net/programming-with-officemath/_index.md +++ b/words/hongkong/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Aspose.Words for .NET 使用 OfficeMath 進行文字處理的教學課程將指 |標題 |描述 | | --- | --- | | [數學方程式](./math-equations/) |了解如何使用 Aspose.Words for .NET 在 Word 文件中配置數學方程式。包含範例、常見問題等內容的逐步指南。 | +| [將 docx 儲存為 txt – 在 C# 中匯出 Word 數學為 LaTeX](./save-docx-as-txt-export-word-math-to-latex-in-c/) |示範如何使用 C# 將 docx 轉存為 txt,並將 Word 中的數學公式匯出為 LaTeX 格式。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/hongkong/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..dc46c70bb5 --- /dev/null +++ b/words/hongkong/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,268 @@ +--- +category: general +date: 2026-04-07 +description: 快速將 docx 另存為 txt,並學習如何將數學公式匯出為 LaTeX。將 Word 轉換為 txt,處理 Office 數學公式,保持方程式完整。 +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: zh-hant +og_description: 將 docx 另存為 txt 並匯出 LaTeX 數學。一步一步的 C# 教學,示範如何將 Word 轉換為 txt 並保留公式。 +og_title: 將 docx 另存為 txt – C# 匯出 Word 數學公式指南 +tags: +- C# +- Aspose.Words +- DocumentConversion +title: 將 docx 另存為 txt – 在 C# 中匯出 Word 數學至 LaTeX +url: /zh-hant/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 將 docx 儲存為 txt – 在 C# 中將 Word 數學匯出為 LaTeX + +有沒有曾經需要 **save docx as txt**,卻擔心方程式會變成一堆亂碼?你並不孤單。許多開發者在嘗試 **convert word to txt** 以供後續處理時,尤其是來源檔案包含 Office Math 物件時,都會卡在這裡。 + +好消息是?只要寫幾行 C# 程式並設定正確的儲存選項,就能把每個方程式保留為乾淨的 LaTeX,讓純文字檔既可讀又能直接投入科學工作流程。本教學將完整說明整個流程,解答 *如何從 Word 檔匯出數學*,並示範 *如何在不失真數學內容的情況下 convert docx*。 + +## 你將學會 + +- 使用 Aspose.Words(或任何相容的函式庫)載入 `.docx` 檔案。 +- 設定 `TxtSaveOptions`,讓 Office Math 以 LaTeX 匯出。 +- 將文件儲存為保留方程式的 `.txt` 檔。 +- 處理隱藏方程式或大型文件等邊緣情況的技巧。 +- 完整、可直接執行的程式碼範例,隨時可複製貼上。 + +不需要花俏的建置工具,只要一個 .NET 專案與 Aspose.Words NuGet 套件。讓我們馬上開始。 + +--- + +## 前置條件 + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6.0 或更新版本 | 提供現代語言功能與更佳效能。 | +| Aspose.Words for .NET (NuGet) | 提供 `Document`、`TxtSaveOptions` 與 `OfficeMathExportMode`。 | +| 含有方程式的 Word 檔 (`.docx`) | 觀察 LaTeX 匯出效果。 | +| 基本 C# 知識 | 需要逐行閱讀程式碼。 | + +如果尚未加入 Aspose.Words,請執行: + +```bash +dotnet add package Aspose.Words +``` + +就這樣——不需要額外設定。 + +--- + +## 步驟 1:載入 DOCX 檔案 + +首先,我們要把來源文件載入記憶體。把它想成在閱讀前先打開一本書。 + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **小技巧:** 測試時使用絕對路徑,以免遇到「找不到檔案」的驚喜。正式環境通常會從設定檔或使用者上傳取得路徑。 + +--- + +## 步驟 2:設定 TXT 儲存選項以匯出數學 + +預設的 `TxtSaveOptions` 只會輸出純文字,並會剝除 Office Math。我們不想要這樣。將 `OfficeMathExportMode` 設為 `LaTeX`,即可指示函式庫把每個方程式翻譯成 LaTeX 表示式。 + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### 為什麼選 LaTeX? + +LaTeX 是科學出版的通用語言。之後把 `.txt` 交給 markdown 處理器、Jupyter Notebook,或任何支援 LaTeX 的工具時,方程式都會完美呈現。若你較偏好直接使用 Unicode 符號,也可以改成 `OfficeMathExportMode.Unicode`,但 LaTeX 能提供最完整的控制。 + +--- + +## 步驟 3:將文件儲存為純文字檔 + +現在魔法發生了。`Save` 方法會依照剛才設定的選項,把文件寫入磁碟。 + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +執行完這行程式後,`Math.txt` 會包含: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +可以看到方程式被包在 `\[` 與 `\]` 之間——正是 LaTeX 所期待的格式。 + +--- + +## 如何從複雜文件匯出數學 + +### 處理隱藏或內嵌方程式 + +某些 Word 檔會把方程式放在隱藏的文字框內。Aspose.Words 會把它們視為一般方程式,LaTeX 匯出會自動處理。但如果發現方程式遺失,請確認 `Document` 物件沒有設定為忽略隱藏內容: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### 大型文件與記憶體使用量 + +儲存 500 頁的論文可能會佔用大量 RAM。為了降低記憶體佔用,可以使用串流方式輸出: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +串流會在產生內容時即寫入磁碟,避免整個檔案一次性佔滿記憶體。 + +--- + +## 常見陷阱與避免方法 + +| Pitfall | Symptom | Fix | +|---------|---------|-----| +| 缺少 LaTeX 括號 | 方程式顯示為原始程式碼 (`E = mc^{2}`) | 確認 `OfficeMathExportMode = LaTeX`。 | +| 輸出檔為空白 | 路徑錯誤或權限不足 | 檢查輸出目錄是否存在且可寫入。 | +| 文字亂碼 | 系統預期 ANSI,但檔案以 UTF‑8 無 BOM 編碼 | 加入 `txtSaveOptions.Encoding = Encoding.UTF8;` | +| 方程式在轉換後消失 | 使用了排除數學的 `LoadOptions` 讀取文件 | 使用預設 `LoadOptions`,或設定 `LoadOptions.LoadFormat = LoadFormat.Docx`。 | + +--- + +## 完整範例程式 + +以下是可直接編譯執行的完整程式。內含錯誤處理、路徑驗證,以及簡易的 Console 訊息,讓你知道一切順利完成。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**預期輸出**(`Math.txt` 的片段): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +現在你可以把這個檔案交給任何支援 LaTeX 的處理器,方程式會呈現得非常漂亮。 + +--- + +## 如何在不失去格式的情況下 Convert DOCX to TXT + +如果只需要純文字且不在乎數學,直接省略 `OfficeMathExportMode` 那一行即可: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +但請記住,**how to export math** 才是科學工作流程的關鍵。保留 LaTeX 才是真正有價值的轉換。 + +--- + +## 後續步驟與相關主題 + +- **批次轉換:** 把程式包在 `foreach` 迴圈中,處理整個資料夾的 `.docx` 檔。 +- **Markdown 產生:** 在文字中加入 `#` 標題或 `*` 清單,直接產出可上傳的 markdown。 +- **PDF 匯出:** 使用 `PdfSaveOptions` 同時產生 PDF 版。 +- **進階 LaTeX 調整:** 用正規表達式把 `\[`/`\]` 替換成 `$...$`,以取得行內方程式的效果。 + +這些都建立在相同的基礎上——載入 `Document` 並選擇適當的 `SaveOptions`。盡情實驗吧,API 足夠彈性,能應付大多數文件自動化情境。 + +--- + +## 結論 + +我們已完整說明如何 **save docx as txt**,同時將每個方程式保留為 LaTeX。從載入來源檔、設定 `TxtSaveOptions`(即 **how to export math**),到寫出最終的純文字檔,整個工作流程只需幾行簡潔的 C# 程式碼。 + +現在,你可以自動化轉換 Word 報告、學術論文,或任何混合文字與數學的文件,並將產出的 `.txt` 交給下游工具而不遺失任何科學細節。 + +快試試看,依需求微調選項,並在留言告訴我們你的使用心得。祝開發順利! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/hongkong/net/programming-with-pdfsaveoptions/_index.md index 4296691ae3..ea80041ff4 100644 --- a/words/hongkong/net/programming-with-pdfsaveoptions/_index.md +++ b/words/hongkong/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Aspose.Words for .NET 教學中有關使用 PdfSaveOptions 進行文字處理的 | [更新 PDF 文件中的最後列印屬性](./update-last-printed-property/) |透過我們的逐步指南了解如何使用 Aspose.Words for .NET 更新 PDF 文件中的最後列印屬性。 | | [在 PDF 文件中渲染 3D DML 3DEffects](./dml-3deffects-rendering/) |透過本全面的逐步指南了解如何使用 Aspose.Words for .NET 在 PDF 文件中呈現令人驚嘆的 3D DML 效果。 | | [在 PDF 文件中插入影像](./interpolate-images/) |透過我們的逐步指南了解如何使用 Aspose.Words for .NET 在 PDF 文件中插入影像。輕鬆提升 PDF 的影像品質。 | - +| [從 Word 建立可存取的 PDF – 步驟指南](./create-accessible-pdf-from-word-step-by-step-guide/) |本逐步指南說明如何使用 Aspose.Words for .NET 從 Word 文件產生符合可存取性標準的 PDF。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/hongkong/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..4f4b6f482b --- /dev/null +++ b/words/hongkong/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: 在 C# 中從 DOCX 檔案建立可存取的 PDF。學習如何將 Word 轉換為 PDF、將 docx 儲存為 PDF,並確保符合 PDF/UA + 標準。 +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: zh-hant +og_description: 在 C# 中從 Word 建立可存取的 PDF。本指南說明如何將 Word 轉換為 PDF、將 docx 另存為 PDF,並符合 PDF/UA + 標準。 +og_title: 製作無障礙 PDF – 完整 C# 教學 +tags: +- Aspose.Words +- PDF accessibility +- C# +title: 從 Word 建立可存取的 PDF – 步驟指引 +url: /zh-hant/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 從 Word 建立可存取的 PDF – 完整程式教學 + +是否曾需要從 Word 文件 **建立可存取的 PDF**,卻不確定要調整哪些設定?你並不孤單。在許多企業中,符合 PDF/UA(通用可存取性)是硬性要求,而一般的「轉換為 PDF」按鈕根本無法滿足需求。 + +在本指南中,我們將一步步示範一個簡潔、端到端的解決方案,**將 Word 轉換為 PDF**、**將 docx 儲存為 PDF**,並確保輸出符合可存取性標準。沒有模糊的參考——只有可直接複製貼上的程式碼,以及每行程式碼背後的「為什麼」。 + +> **TL;DR:** 載入 `.docx`,將 `PdfSaveOptions.Compliance` 設為 `PdfUa1`(或 `PdfUa2`),然後呼叫 `Document.Save`。這就是使用 Aspose.Words for .NET **建立可存取的 PDF** 所需的全部步驟。 + +--- + +## 您將學會 + +- 如何在保留標題、替代文字 (alt‑text) 與閱讀順序的同時 **將 Word 轉換為 PDF**。 +- `PdfUa1` 與 `PdfUa2` 的差異,以及何時選擇使用。 +- 如何只用幾行 C# 程式碼 **將 docx 儲存為 PDF**。 +- 常見陷阱(缺少字型、不支援的標籤)與快速解決方案。 +- 一個可直接執行的程式碼範例,可直接放入任何 .NET 專案中。 + +### 前置條件 + +- .NET 6 或更新版本(程式碼亦可在 .NET Framework 4.7+ 上執行)。 +- 透過 NuGet 安裝 Aspose.Words for .NET(`Install-Package Aspose.Words`)。 +- 一個已具備正確結構(樣式、圖片的 alt‑text)的 Word 檔案(`input.docx`)。 + +如果尚未加入 Aspose.Words,請在套件管理員主控台執行以下指令: + +```powershell +Install-Package Aspose.Words +``` + +這是唯一需要的外部相依性。 + +--- + +## 建立可存取的 PDF – 為何可存取性重要 + +當 PDF 被標記為 **PDF/UA**(通用可存取性)時,螢幕閱讀器能夠像在原始 Word 檔案中一樣導航標題、表格與表單欄位。這不只是加分項;許多政府與企業將 PDF/UA 相容性視為法律要求。 + +在 `PdfSaveOptions` 上設定 `Compliance` 屬性,會告訴函式庫嵌入必要的標記、設定正確的文件語言,並加入邏輯閱讀順序。跳過此步驟會產生「僅視覺」的 PDF,無法通過可存取性稽核。 + +--- + +## 使用 Aspose.Words 轉換 Word 為 PDF + +以下是最簡單的方式,**在保持文件可存取性的同時將 Word 轉換為 PDF**。 + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**這段程式碼在做什麼?** + +- `Document` 讀取 Word 檔案,保留所有樣式與結構。 +- `PdfSaveOptions.Compliance` 告訴 Aspose.Words 將輸出標記為 PDF/UA。 +- `doc.Save` 將 PDF 寫入磁碟,並自動嵌入標記。 + +> **Pro tip:** 如果來源 Word 檔使用自訂標題樣式,請確保它們已對映到內建的標題層級(`Heading1`、`Heading2`…)。這樣可確保產生的 PDF 取得正確的標題標記。 + +--- + +## 儲存 Docx 為 PDF – 設定 PDF/UA 相容性 + +如果你已熟悉 `PdfSaveOptions` 類別,可能會想知道還有沒有其他開關會影響可存取性。以下是幾個實用屬性: + +| 屬性 | 對可存取性的影響 | 典型值 | +|----------|------------------------|---------------| +| `Compliance` | 開啟或關閉 PDF/UA 標記 | `PdfCompliance.PdfUa1` 或 `PdfUa2` | +| `EmbedFullFonts` | 確保讀者看到預期的字型排版 | `true`(預設) | +| `OptimizeOutput` | 在不移除標記的前提下減少檔案大小 | `true` | + +你可以這樣擴充前面的程式碼片段: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +切換到 `PdfUa2` 會支援較新的 PDF/UA 功能,例如對裝飾性圖片的 *artifact* 標記。如果不需要這些功能,建議保留 `PdfUa1`,以獲得對舊版輔助技術的最大相容性。 + +--- + +## 匯出 Docx 為 PDF – 完整可執行範例 + +以下是一個自包含的 Console 應用程式,示範從載入檔案到驗證輸出的完整流程。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### 預期結果 + +- 在可執行檔相同資料夾中會產生名為 **Compliant.pdf** 的檔案。 +- 在 Adobe Acrobat Pro 中開啟 PDF → *工具 → 可存取性 → 完整檢查*,應顯示 **沒有可存取性問題**(假設來源 Word 檔案結構良好)。 +- PDF 的 *屬性 → 進階* 分頁會在「PDF/A 與 PDF/UA 相容性」區段顯示 **PDF/UA**。 + +--- + +## 常見邊緣案例與處理方式 + +| 情況 | 為何重要 | 快速解決方案 | +|-----------|----------------|-----------| +| **Missing fonts** | PDF 可能會退回使用預設字型,破壞視覺版面。 | 設定 `EmbedFullFonts = true`(已是預設),並確保建置機器上可取得字型檔案。 | +| **Images without alt‑text** | 螢幕閱讀器只會讀出「image」而無說明。 | 在 Word 中為圖片加入 `Alt Text`(右鍵 → 格式圖片 → 替代文字)後再轉換。 | +| **Custom styles not recognized as headings** | PDF/UA 需要正確的標題標記。 | 透過 `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` 將自訂樣式對映到內建標題。 | +| **Large documents cause memory pressure** | 轉換 500 頁文件可能導致記憶體激增。 | 使用 `doc.Save(outputPath, options)` 並將 `options.SaveFormat = SaveFormat.Pdf`,如遇 `OutOfMemoryException` 可考慮分段處理。 | +| **Need to export docx to pdf without accessibility** | 有時只需要快速的視覺 PDF。 | 省略 `Compliance` 設定或改為 `PdfCompliance.Pdf15`。 | + +--- + +## 圖片範例(包含替代文字) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*上述的替代文字強化了主要關鍵字,並協助使用者與 AI 模型了解圖片內容。* + +--- + +## 常見問答 + +**Q: 這能在 .NET Core 上運作嗎?** +A: 絕對可以。Aspose.Words 為跨平台套件,只要在 .NET 6+ 專案中引用 NuGet 套件即可。 + +**Q: 可以批次處理多個 DOCX 檔案嗎?** +A: 可以。將載入與儲存的邏輯包在 `foreach (var file in Directory.GetFiles(folder, "*.docx"))` 迴圈中。為了效能,請重複使用同一個 `PdfSaveOptions` 實例。 + +**Q: 若需要加入 Aspose 未自動產生的自訂 PDF/UA 標記,該怎麼做?** +A: 可使用低階 PDF API(`PdfSaveOptions.CustomProperties`)或在轉換後使用如 iText 7 等函式庫手動插入標記。 + +--- + +## 結論 + +You + +{{< /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 8984baa9aa..acc5608293 100644 --- a/words/hongkong/net/working-with-fonts/_index.md +++ b/words/hongkong/net/working-with-fonts/_index.md @@ -1,5 +1,5 @@ --- -"description": "使用字體進行文字處理教學教您如何使用 Aspose.Words for .NET 在 Word 中處理字體。格式化、替換、通知等等。" +"description": "使用字體進行文字處理教您如何使用 Aspose.Words for .NET 在 Word 中處理字體。格式化、替換、通知等等。" "linktitle": "使用字型進行文字處理" "second_title": "Aspose.Words文件處理API" "title": "使用字型進行文字處理" @@ -48,6 +48,7 @@ | [接收警告通知](./receive-warning-notification/) |了解如何在使用 Aspose.Words for .NET 時接收警告通知並管理文件中的任何問題或警告。 | | [資源 Steam 字體來源範例](./resource-steam-font-source-example/) |了解如何使用資源流字體來源將自訂字體載入到 Aspose.Words for .NET 中。 | | [取得不含後綴的替換](./get-substitution-without-suffixes/) |在本教學中,學習如何使用 Aspose.Words for .NET 在 Word 文件中取得無後綴覆蓋。 | +| [如何在 Aspose.Words 中偵測字體 – 完整指南](./how-to-detect-fonts-in-aspose-words-complete-guide/) |本完整指南說明如何使用 Aspose.Words for .NET 偵測文件中使用的字體,並取得相關資訊。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hongkong/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/hongkong/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..57a18c016c --- /dev/null +++ b/words/hongkong/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-04-07 +description: 學習如何偵測字型,以及在使用 Aspose.Words 於 C# 處理缺失字型時如何捕捉警告。內含逐步程式碼示例。 +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: zh-hant +og_description: 如何在 Aspose.Words 中偵測字型?跟隨本教學,即可輕鬆捕捉警示並處理缺少的字型。 +og_title: 如何在 Aspose.Words 中偵測字體 – 完整指南 +tags: +- Aspose.Words +- C# +- Font handling +title: 如何在 Aspose.Words 中偵測字型 – 完整指南 +url: /zh-hant/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Aspose.Words 中偵測字型 – 完整指南 + +有沒有想過 **如何偵測** 在將 Word 文件上線前缺少的字型?你並不孤單。在許多企業情境下,偶爾遺失的字型會導致 PDF 轉換流程失敗,或產生不專業的版面錯位。好消息是 Aspose.Words 提供內建機制,讓你找出那些缺失的字型並顯示明確警告。 + +在本教學中,我們將逐步說明 **如何偵測字型**、**如何捕捉警告**,以及 **處理缺失字型** 的最佳實踐,讓你的應用程式保持穩定。無需外部工具、無需猜測——只要純 C# 程式碼,現在即可直接放入專案使用。 + +> **快速預覽:** 完成後,你將擁有可重複使用的 `FontSubstitutionWarningCollector`,在文件載入期間收集所有字型替換訊息,並了解當找不到字型時該如何回應。 + +--- + +## 你將學會 + +- 如何設定 `LoadOptions` 以監聽字型替換警告。 +- 如何在自訂收集器類別中捕捉這些警告。 +- 如何處理收集到的警告,決定是中止、記錄或替換字型。 +- 針對引用遠端或內嵌字型的文件的特殊情況處理。 + +**先備條件:** .NET 6+(或 .NET Framework 4.6+)、Aspose.Words for .NET(最新版本),以及對 C# 的基本了解。若你從未使用過 Aspose.Words,也不必擔心——本指南只需要幾分鐘的設定時間。 + +--- + +## 使用 Aspose.Words LoadOptions 偵測字型 + +偵測缺失字型的第一步是告訴 Aspose.Words 要回報它們。這透過 `LoadOptions.WarningCallback` 屬性完成,該屬性接受任何實作 `IWarningCallback` 的類別。以下我們建立一個小型收集器,將每個警告儲存起來以供稍後檢查。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**為什麼這很重要:** 若未設定警告回呼,Aspose.Words 會悄悄以預設字型替代缺失的字型,你根本不會知道問題的存在。透過捕捉 `WarningType.FontSubstitution`,即可完整掌握 **偵測字型** 所需的所有資訊。 + +接下來,我們把收集器掛到 `LoadOptions`,並載入文件: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **專業提示:** 若一次處理大量文件,請重複使用同一個 `FontSubstitutionWarningCollector` 實例,但務必在每次載入後呼叫 `Clear()`,避免不同檔案的警告混在一起。 + +--- + +## 在文件載入期間捕捉警告 + +文件載入完成後,收集器已經保存了所有與字型相關的警告。接下來的問題是:*如何以易於記錄或顯示的方式捕捉這些警告?* + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +典型輸出範例如下: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**這告訴了你什麼:** 每一行都會顯示原始字型名稱以及 Aspose.Words 所選擇的備援字型。掌握這些資訊後,你可以判斷備援字型是否可接受,或是需要手動嵌入缺失的字型。 + +--- + +## 優雅地處理缺失字型 + +偵測與捕捉警告只是解決問題的一半。真正的價值在於 **以可投入生產的方式處理缺失字型**。以下列出三種常見策略: + +1. **記錄並繼續** – 適用於批次處理,只需要留下稽核紀錄。 +2. **關鍵字型即中止** – 若缺少特定字型(例如品牌專屬字型),拋出例外終止流程。 +3. **即時嵌入缺失字型** – 從已知資料夾載入缺失字型,並在重新載入文件前向 Aspose.Words 註冊。 + +### 範例:關鍵字型即中止 + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### 範例:自動嵌入缺失字型 + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**為什麼這些模式有幫助:** 明確決定缺失字型時的處理方式,可避免靜默的替代行為,從而保護品牌形象與可讀性。這正是 **以受控方式處理缺失字型** 的核心。 + +--- + +## 完整可執行範例 + +將上述所有步驟整合,以下是一個可直接執行的程式,示範 **如何偵測字型**、**如何捕捉警告**,以及以記錄方式 **處理缺失字型** 的簡易政策。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**預期結果:** 當程式對一個引用了本機未安裝字型的文件執行時,主控台會列出每個替換警告。若任一警告涉及 `critical` 集合中的字型,程式會提前結束,防止產生有缺陷的 PDF。 + +--- + +## 常見問題 (FAQs) + +| 問題 | 解答 | +|----------|--------| +| *我需要 Aspose.Words 的授權才能使用這段程式碼嗎?* | 需要。有效的 Aspose.Words 授權會移除評估水印,並解鎖全部功能。 | +| *此方法能偵測內嵌字型嗎?* | 內嵌字型已隨檔案一起存在,Aspose.Words 不會拋出替換警告。若需要列舉內嵌字型,可檢查 `Document.FontInfos`。 | +| *如果缺失的字型在 Windows 上是系統字型,但在 Linux 上不存在,會怎樣?* | 在 Linux 上會觸發相同的警告,因為該字型未安裝。請使用「處理缺失字型」策略,將必要的 `.ttf` 檔案隨應用程式一起部署。 | +| *Is the warning collector thread | + +{{< /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 e6951319a2..a84959ebcb 100644 --- a/words/hungarian/net/basic-conversions/_index.md +++ b/words/hungarian/net/basic-conversions/_index.md @@ -26,7 +26,7 @@ Az Alapvető konverziók című útmutató végigvezeti Önt az Aspose.Words for | [Word fájl konvertálása PDF-be](./docx-to-pdf/) Tanulja meg, hogyan konvertálhat egyszerűen Word-fájlokat PDF-be az Aspose.Words for .NET segítségével útmutatónkkal. Tökéletes azoknak a fejlesztőknek, akik gyors és megbízható dokumentumkonverziót keresnek. | | [Docx konvertálása bájtba](./docx-to-byte/) | Tanulja meg, hogyan konvertálhat Docx fájlokat bájttömbökké .NET-ben az Aspose.Words segítségével a hatékony dokumentumfeldolgozás érdekében. Lépésről lépésre útmutató mellékelve. | | [Docx konvertálása Epub-ba](./docx-to-epub/) | Konvertálj DOCX fájlokat egyszerűen EPUB-ba az Aspose.Words for .NET segítségével. Kövesd az oktatóanyagunkat a .NET alkalmazásaidba való zökkenőmentes integrációhoz. | -| [Docx konvertálása Mhtml-be és e-mail küldése](./docx-to-mhtml-and-sending-email/) | Tanulja meg, hogyan konvertálhat DOCX fájlokat MHTML formátumba, és hogyan küldhet e-maileket az Aspose.Words for .NET segítségével ebben a lépésről lépésre szóló útmutatóban. Növelje termelékenységét egyszerű automatizálással. | +| [Docx konvertálása Mhtml-be és e-mail küldése](./docx-to-mhtml-and-sending-email/) | Tanulja meg, hogyan konvertálhat DOCX fájlokat MHTML formátumba, és hogyan küldhet e-maileket az Aspose.Words for .NET segítségével ebben a lépésről‑lépésre szóló útmutatóban. Növelje termelékenységét egyszerű automatizálással. | | [Docx fájl konvertálása Markdown-ra](./docx-to-markdown/) | Ismerje meg, hogyan konvertálhat DOCX fájlokat Markdown formátumba az Aspose.Words for .NET segítségével. Kövesse részletes útmutatónkat a .NET-alkalmazásokba való zökkenőmentes integrációhoz. | | [Docx konvertálása Txt-be](./docx-to-txt/) Konvertáljon DOCX fájlokat TXT fájlokká az Aspose.Words for .NET segítségével lépésről lépésre bemutató útmutatónkkal. Tanulja meg, hogyan alakíthatja át dokumentumait hatékonyan és könnyedén. | | [Szövegfájl konvertálása Word-dokumentummá](./txt-to-docx/) | Tanulja meg, hogyan konvertálhat szövegfájlokat Word-dokumentumokká az Aspose.Words for .NET segítségével. Átfogó útmutatónkkal hatékonyan kezelheti a dokumentumkonverziókat. | @@ -35,6 +35,7 @@ Az Alapvető konverziók című útmutató végigvezeti Önt az Aspose.Words for | [LaTeX exportálása Wordből – Lépésről‑lépésre útmutató](./how-to-export-latex-from-word-step-by-step-guide/) | Tanulja meg, hogyan exportálhat LaTeX-et Word dokumentumokból az Aspose.Words for .NET segítségével, részletes lépésekkel. | | [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 konvertálása PDF-be C#-ban – Teljes programozási útmutató](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Tanulja meg, hogyan konvertálhat DOCX fájlokat PDF-be C#-ban az Aspose.Words segítségével részletes, lépésről‑lépésre útmutatóval. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/hungarian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..a5cd6fbd16 --- /dev/null +++ b/words/hungarian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-04-07 +description: Konvertálja a DOCX-et PDF-re C#‑ban gyorsan. Tanulja meg, hogyan mentse + a Word dokumentumot PDF‑ként, hogyan töltse be a docx dokumentumot C#‑ban, és hogyan + biztosítsa a PDF/UA‑2 megfelelőséget percek alatt. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: hu +og_description: Konvertálja a DOCX-et PDF-re C#-ban azonnal. Ez az útmutató megmutatja, + hogyan mentse a Word dokumentumot PDF-ként, hogyan töltsön be docx fájlt C#-ban, + és hogyan feleljen meg a PDF/UA‑2 szabványoknak. +og_title: DOCX konvertálása PDF-be C#‑ban – Lépésről‑lépésre útmutató +tags: +- Aspose.Words +- C# +- PDF Generation +title: DOCX konvertálása PDF-re C#‑ban – Teljes programozási útmutató +url: /hu/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# DOCX konvertálása PDF-be C#-ban – Teljes programozási útmutató + +Valaha szükséged volt **DOCX PDF‑be konvertálásra** egy C# alkalmazásban, de nem tudtad, hol kezdj? Nem vagy egyedül. Sok fejlesztő akad el, amikor rájön, hogy a Word egyszerű „Mentés PDF‑ként” gombja nem fordítható le kóddá. A jó hír? Néhány sor Aspose.Words (vagy bármely hasonló könyvtár) használatával automatizálhatod az egész folyamatot, megtarthatod a lebegő alakzatokat beágyazottként, és még PDF/UA‑2 megfelelőséget is elérhetsz izzadás nélkül. + +> **Miért fontos?** +> A DOCX PDF‑be konvertálása gyakori követelmény számlázási rendszerek, jelentésgenerátorok és dokumentumarchiválási folyamatok számára. Az automatizálás kiküszöböli a kézi lépéseket, csökkenti az emberi hibákat, és biztosítja, hogy minden kimenet pontosan ugyanúgy nézzen ki a különböző platformokon. + +--- + +## Amire szükséged lesz + +- **.NET 6.0** vagy újabb (a kód .NET Framework 4.6+‑on is működik) +- **Aspose.Words for .NET** (ingyenes próba vagy licencelt verzió) – telepítheted a NuGet‑en keresztül: `dotnet add package Aspose.Words` +- Egy minta `input.docx` egy általad irányított mappában (a továbbiakban `YOUR_DIRECTORY`‑ként hivatkozunk rá) +- Visual Studio, VS Code vagy bármely kedvenc C# szerkesztő + +Ennyi—nincs extra szolgáltatás, nincs REST hívás. Csak tiszta C#. + +--- + +## 1. lépés: A DOCX dokumentum betöltése C#‑ban + +Mielőtt **docx PDF‑be konvertálhatnád**, be kell töltened a Word fájlt a memóriába. A `Document` osztály ezt megteszi helyetted. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Miért fontos ez:** +A fájl betöltése egy teljesen feldolgozott objektummodellt biztosít—bekezdések, táblázatok, lebegő alakzatok, minden. Ez az első lépés minden **load docx document c#** munkafolyamatban, és ellenőrzi, hogy a fájl nem sérült, mielőtt időt vesztegnél a konvertálással. + +> **Pro tipp:** Ha felhasználók által feltöltött fájlokkal dolgozol, tedd a `new Document()` hívást try/catch blokkba, hogy a hibás DOCX fájlokat elegánsan kezeld. + +--- + +## 2. lépés: PDF mentési beállítások konfigurálása (Megfelelőség és alakzatkezelés) + +Lehet, hogy azon gondolkodsz, “Szükséges-e valamit módosítanom, vagy csak meghívhatom a `Save`‑t?” A rövid válasz: igen, de a megfelelő beállítások megadása teszi a PDF‑et hozzáférhetővé és vizuálisan hűvé. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Miért fontos ez:** +- `ExportFloatingShapesAsInlineTag = true` megakadályozza, hogy a lebegő objektumok elvesznek vagy rosszul igazodnak, amikor a PDF‑et különböző eszközökön tekintik meg. +- `Compliance = PdfCompliance.PdfUa2` biztosítja, hogy a kimenet megfeleljen a PDF/UA‑2 szabványnak, ami kulcsfontosságú a képernyőolvasókkal való kompatibilitás és a jogi archiválás szempontjából. + +Ha nincs szükséged hozzáférhetőségre, elhagyhatod a `Compliance` sort, de megtartása szinte semmilyen többletterhet nem jelent, és jövőbiztossá teszi a megoldásodat. + +--- + +## 3. lépés: Dokumentum mentése PDF‑ként – A fő **Convert DOCX to PDF** művelet + +Miután a dokumentum betöltődött és a beállítások megvannak, a tényleges konvertálás egyetlen metódushívás. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Ami látható lesz:** +A program futtatása `output.pdf`‑t hoz létre ugyanabban a mappában. Nyisd meg bármely PDF‑olvasóval, és észre fogod venni, hogy: +- Minden szöveg, táblázat és kép pontosan úgy jelenik meg, mint az eredeti DOCX‑ben. +- A lebegő alakzatok beágyazottként maradnak, megőrizve a elrendezést. +- A fájl átmegy az alap PDF/UA‑2 validációs eszközökön (pl. Adobe Acrobat Preflight). + +--- + +## Teljes működő példa – Felülről lefele + +Az alábbiakban egy teljes, azonnal futtatható konzolalkalmazás látható, amely bemutatja a teljes folyamatot. Másold be egy új C# projektbe, és nyomd meg az **F5**‑öt. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Várható kimenet a konzolon:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +És egy rendezett `output.pdf` a forrásfájlod mellett helyezkedik el. + +--- + +## Gyakran ismételt kérdések és edge case‑ek + +| Question | Answer | +|----------|--------| +| **Átalakíthatok egy `MemoryStream`‑ben tárolt DOCX‑et?** | Természetesen. Használd a `new Document(stream)`‑t a fájlútvonal helyett. | +| **Mi van, ha a DOCX makrókat tartalmaz?** | Az Aspose.Words alapértelmezés szerint figyelmen kívül hagyja a VBA makrókat; nem fognak megjelenni a PDF‑ben. | +| **Szükségem van licencre a termeléshez?** | Az ingyenes próba egy bizonyos oldalszám után vízjelet ad hozzá. Kereskedelmi használathoz szerezz licencet a vízjel eltávolításához. | +| **Hogyan változtathatom meg a PDF oldal méretét?** | Állítsd be a `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` értéket a mentés előtt. | +| **Van mód egy egyedi betűtípus beágyazására?** | Igen—add hozzá a `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` sort. | + +--- + +## Pro tippek a zökkenőmentes **Save Word as PDF** élményhez + +- **Kötegelt feldolgozás:** Tedd a konvertálási logikát egy ciklusba, és add meg neki a DOCX útvonalak listáját. +- **Teljesítmény:** Használj egyetlen `PdfSaveOptions` példányt sok fájl konvertálásakor; csökkenti a GC terhelését. +- **Naplózás:** Írd ki a generált PDF méretét (`new FileInfo(outputPath).Length`) a tömörítési eredmények nyomon követéséhez. +- **Hibakezelés:** Különböztesd meg a `FileNotFoundException`‑t (hiányzó DOCX) és az `UnauthorizedAccessException`‑t (írási jogosultsági problémák). + +--- + +## Összegzés + +Most már van egy stabil, termelésre kész minta a **DOCX PDF‑be konvertálásához** C#‑ban. A DOCX betöltésével, a PDF mentési beállítások konfigurálásával és a `Save` meghívásával **Word mentése PDF‑ként**, megőrizheted a layout finomságait, és megfelelhetsz a hozzáférhetőségi szabványoknak—mindössze néhány sor kóddal. + +Készen állsz a következő kihívásra? Próbáld ki a `PdfSaveOptions` helyett az `ImageSaveOptions` használatát, hogy **Word mentése PNG‑ként** történjen, vagy fedezd fel a `HtmlSaveOptions` osztályt a web‑kész kimenethez. Bármelyik esetben a **load docx document c#** alapelvek érvényesek, így a kódbázisod jövőbiztos lesz. + +Boldog kódolást, és legyenek a PDF‑eid mindig megfelelők! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/hungarian/net/programming-with-loadoptions/_index.md index 7ad01be122..6156449981 100644 --- a/words/hungarian/net/programming-with-loadoptions/_index.md +++ b/words/hungarian/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Ezekben az oktatóanyagokban megtanulod, hogyan használhatod a LoadOptions eszk | [CHM fájlok betöltése Word dokumentumba](./load-chm/) | Ezzel a lépésről lépésre haladó útmutatóval könnyedén betölthet CHM fájlokat Word dokumentumokba az Aspose.Words for .NET segítségével. Tökéletes a műszaki dokumentáció összevonásához. | | [Hogyan állítsuk helyre a DOCX-et az Aspose.Words segítségével – lépésről lépésre](./how-to-recover-docx-with-aspose-words-step-by-step/) | Ismerje meg, hogyan lehet helyreállítani sérült DOCX fájlokat az Aspose.Words for .NET használatával, részletes lépésekkel. | | [Aspose Load Options – DOCX betöltése egyedi betűtípus-beállításokkal](./aspose-load-options-load-docx-with-custom-font-settings/) | Tanulja meg, hogyan használhatja a LoadOptions-t DOCX fájlok egyedi betűtípus-beállításokkal történő betöltéséhez az Aspose.Words for .NET-ben. | +| [Sérült DOCX helyreállítása – Teljes C# útmutató a javításhoz és mentéshez](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Ismerje meg, hogyan javíthatja és mentheti a sérült DOCX fájlokat C#-ban, részletes lépésekkel. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/hungarian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..3156aa4f60 --- /dev/null +++ b/words/hungarian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-07 +description: Tanulja meg, hogyan állíthatja helyre a sérült DOCX fájlokat C#‑ban, + és mentse biztonságosan a helyreállított dokumentumot. Lépésről‑lépésre útmutató + Aspose.Words példával. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: hu +og_description: Sérült DOCX fájlok helyreállítása C#-ban, és a helyreállított dokumentum + mentése az Aspose.Words segítségével. Teljes kód, magyarázatok és legjobb gyakorlatok. +og_title: Hibás DOCX helyreállítása – Lépésről lépésre C# útmutató +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Sérült DOCX helyreállítása – Teljes C# útmutató a fájlok javításához és mentéséhez +url: /hu/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hibás DOCX helyreállítása – Teljes C# útmutató a fájlok javításához és mentéséhez + +Próbált már megnyitni egy DOCX-et, ami a Próbaterületen rendben néz ki, de az alkalmazásában kivételt dob? Ez a klasszikus „sérült Word fájl” rémálom, és általában egy olyan stack‑trace‑szal végződik, amit nem szeretne látni. A jó hír? Az Aspose.Words egy **recover corrupted docx** funkciót biztosít, amely lehetővé teszi, hogy a fájl sérült állapota ellenére is folytassa a munkát. + +Ebben az útmutatóban lépésről lépésre végigvezetjük a folyamatot, hogyan töltsünk be egy sérült dokumentumot, hogyan mondjuk meg a könyvtárnak, hogy folytassa, majd **save recovered document**-et egy új, tiszta fájlba. A végére megérti, miért fontos a helyreállítási mód, hogyan konfigurálja, és milyen buktatókat kerüljön el – nincs homályos „lásd a dokumentációt” rövidítés. + +## Amire szüksége lesz + +- **Aspose.Words for .NET** (bármely friss verzió; a 24.11 lett használva a leírás írásakor) +- .NET fejlesztői környezet (Visual Studio, Rider vagy VS Code a C# kiegészítővel) +- Egy minta DOCX, amelyet gyanít, hogy sérült (teszteléshez egy fájlt megsérthet zip‑szerkesztővel, egy rész törlésével) +- Alap C# ismeretek – semmi különös, csak a konzolos alkalmazás létrehozásának képessége + +Ha már rendelkezik ezekkel, nagyszerű – ugorjunk egyenesen a megoldásra. + +## 1. lépés: LoadOptions beállítása a megfelelő helyreállítási stratégiával + +A javítás központja a `LoadOptions` objektum. Ez mondja meg az Aspose.Words‑nek, hogyan viselkedjen, amikor hibás XML‑t vagy hiányzó részeket talál a DOCX csomagban. A `RecoveryMode.RecoverAndContinue` jelző a legengedékenyebb – megpróbálja megmenteni, amit csak tud, és a többit átugorja. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Miért fontos ez:** Ha kihagyja a `LoadOptions`‑t, vagy az alapértelmezett módot (`RecoveryMode.NoRecovery`) használja, a `Document` konstruktor kivételt dob, amint problémát észlel. A `RecoverAndContinue` esetén az API elnyeli a nem kritikus hibákat, és egy részleges dokumentumobjektumot hoz létre, amivel továbbra is dolgozhat. + +> **Pro tipp:** Nagy mennyiségű fájl esetén érdemes a betöltési hívást `try/catch` blokkba helyezni – egyes hibák valóban végzetesek (pl. a `[Content_Types].xml` fájl hiánya), és nem helyreállíthatók. + +## 2. lépés: A potenciálisan sérült DOCX betöltése + +Miután a beállítások készen állnak, töltse be a fájlt. A konstruktor a fájl útvonalát és a most előkészített `LoadOptions`‑t veszi át. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Mi történik a háttérben?** +Az Aspose.Words beolvassa a ZIP konténert, minden XML részt elolvas, és megpróbálja újraépíteni az Open XML DOM-ot. Ha egy sérült részt talál, a helyreállító motor figyelmeztetést naplóz (a konzolon látható, ha a diagnosztikát engedélyezi) és folytatja. Az eredményül kapott `Document` objektumból hiányozhat néhány bekezdés vagy kép, de a többi tartalom érintetlen marad. + +## 3. lépés: A helyreállított tartalom ellenőrzése (opcionális, de ajánlott) + +Mielőtt a fájlt leírná a lemezre, érdemes néhány csomópontot ellenőrizni, hogy a fontos szakaszok megmaradtak-e. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Ha a kimenet értelemszerűnek tűnik, sikeresen **recover corrupted docx** tartalmat állított elő. Ha hiányzó szakaszokat észlel, még mindig dönthet a folytatásról – néha az elveszett részek csak díszítő jellegűek. + +## 4. lépés: A helyreállított dokumentum mentése + +Itt jön a legtöbb fejlesztő által feltett kérdés: „Hogyan **save recovered document**‑et anélkül, hogy újra bevezetném az eredeti sérülést?” A válasz egyszerű: hívja meg a `Document.Save`‑et egy új útvonallal. Az Aspose.Words egy vadon új ZIP csomagot ír, így minden maradék sérült rész kimarad. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Miért működik ez:** A `Save` metódus a memóriában lévő DOM‑ot visszaalakítja egy tiszta Open XML csomaggá. Mivel a sérült részek soha nem kerültek be a DOM‑ba (a helyreállítás során el lettek dobva), nem kerülnek be az új fájlba sem. Az eredmény egy egészséges DOCX, amely megnyílik Wordben, Google Docs‑ban vagy bármely más megjelenítőben. + +## 5. lépés: A folyamat automatizálása több fájlhoz (bónusz) + +A valós környezetben gyakran van egy mappa tele problémás fájlokkal. A korábbi lépéseket egy ciklusba ágyazva egy kis helyreállító segédprogramot kap. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Most egy egész könyvtár sérült DOCX fájlt helyezhet a `C:\Docs\Batch` mappába, és a szkript automatikusan megtisztítja őket. + +## Gyakori kérdések és speciális esetek + +| Kérdés | Válasz | +|----------|--------| +| **Működik ez .doc fájlokkal?** | A `LoadOptions` osztály ugyanúgy alkalmazható, de hivatkoznia kell a régebbi Word formátumra (`doc`). Az Aspose.Words még mindig képes helyreállítani, bár a hiba minták eltérnek. | +| **Mi van, ha a fájl jelszóval védett?** | A helyreállítás nem kerül körül az titkosítást. A jelszót a `LoadOptions.Password` segítségével kell megadni. | +| **El fognak veszni a képek?** | Csak azok a képek, amelyek egy sérült XML részhez tartoznak, maradhatnak ki. A többi megmarad, mivel külön bináris adatfolyamként tárolódik. | +| **Naplózhatom az Aspose által generált figyelmeztetéseket?** | Igen – állítsa a `LoadOptions.LoadFormat`‑ot `LoadFormat.Docx`‑re, és iratkozzon fel a `Document.WarningCallback`‑re a részletes üzenetek rögzítéséhez. | +| **Biztonságos a `RecoverAndContinue` éles környezetben?** | Általában igen, de tesztelje a saját adataival. Kritikus folyamatokban érdemes megjelölni azokat a dokumentumokat, amelyek helyreállítást igényeltek, későbbi felülvizsgálatra. | + +## Teljes működő példa (másolás-beillesztés készen) + +Az alább látható a teljes program, amelyet konzolos alkalmazásként lefordíthat. Tartalmazza az összes lépést, a hibakezelést és az opcionális kötegelt feldolgozási logikát. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Várt eredmény:** A program futtatása után a `Recovered.docx` megnyílik a Microsoft Wordben az eredeti hibaüzenet nélkül. A túlzottan sérült részek egyszerűen kimaradnak, de a fő szöveg, a címsorok és a legtöbb kép érintetlen marad. + +![sérült docx helyreállítási példa](https://example.com/images/recover-corrupted-docx.png "sérült docx – vizuális előtte/utána összehasonlítás") + +## Összegzés + +Áttekintettük mindazt, amire szüksége van a **recover corrupted docx** fájlok helyreállításához az Aspose.Words segítségével, a `LoadOptions` konfigurálásától a biztonságos **save recovered document**‑ig. A fő tanulságok a következők: + +- Használja a `RecoveryMode.RecoverAndContinue`‑t, hogy a könyvtár figyelmen kívül hagyja a nem kritikus hibákat. +- Ellenőrizze a betöltött tartalmat, mielőtt elkötelezné, különösen kritikus üzleti dokumentumok esetén. +- A dokumentum mentése tiszta ZIP csomagot hoz létre, hatékonyan eltávolítva az eredeti sérülést. +- Ugyanez a minta skálázható kötegelt műveletekre, lehetővé téve nagy dokumentumtárak automatikus tisztítását. + +Készen áll a következő lépésre? Próbálja meg beépíteni ezt a logikát egy háttérszolgáltatásba, amely figyeli a feltöltési mappát, vagy kísérletezzen a `WarningCallback`‑kal, hogy jelentést készítsen arról, mely fájlok igényelték a helyreállítást. Minél többet játszik az API-val, annál jobban értékeli majd, mennyire robusztus az Aspose.Words a valós dokumentumfeldolgozásban. + +Van egy saját megoldása, amit meg szeretne osztani – például jelszóval védett fájlok kezelése vagy a helyreállított dokumentumok egyesítése? Hagyjon megjegyzést alább, és folytassuk a beszélgetést. Boldog 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/programming-with-markdownsaveoptions/_index.md b/words/hungarian/net/programming-with-markdownsaveoptions/_index.md index a6a760349e..43c452203f 100644 --- a/words/hungarian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/hungarian/net/programming-with-markdownsaveoptions/_index.md @@ -25,6 +25,7 @@ Szövegszerkesztés MarkdownSaveOptions segítségével egy részletes útmutat | [Képek mappa beállítása](./set-images-folder/) Konvertálja a Word dokumentumokat Markdown formátumba megfelelő táblázatigazítással az Aspose.Words for .NET segítségével. Kövesse részletes útmutatónkat a tökéletes eredmény érdekében. | | [Word mentése PDF-be és sérült Word helyreállítása – Word konvertálása Markdownba C#-ban](./save-word-as-pdf-and-recover-corrupted-word-convert-word-to/) | Ismerje meg, hogyan menthet Word dokumentumokat PDF-be, helyreállíthatja a sérült fájlokat, és konvertálhatja őket Markdown formátumba C#-ban az Aspose.Words for .NET segítségével. | | [Hogyan használjuk a Markdown-et: DOCX konvertálása Markdownba LaTeX egyenletekkel](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | Ismerje meg, hogyan konvertálhat DOCX fájlokat Markdownba LaTeX egyenletekkel az Aspose.Words for .NET segítségével. | +| [Word mentése Markdownba egyéni képmappával – Teljes útmutató](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Ismerje meg, hogyan menthet Word dokumentumokat Markdownba egyéni képmappával a teljes útmutatóban. | ### [Hozzon létre akadálymentes PDF-et és konvertálja a Word-et Markdownba – Teljes C# útmutató](./create-accessible-pdf-and-convert-word-to-markdown-full-c-gu/) Ismerje meg, hogyan hozhat létre akadálymentes PDF-et, és konvertálhat Word dokumentumokat Markdown formátumba C#-ban az Aspose.Words for .NET segítségével. ### [DOCX konvertálása Markdownba – Lépésről‑lépésre C# útmutató](./convert-docx-to-markdown-step-by-step-c-guide/) diff --git a/words/hungarian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/hungarian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..4713dc3a6e --- /dev/null +++ b/words/hungarian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,290 @@ +--- +category: general +date: 2026-04-07 +description: Mentse a Word dokumentumot Markdown formátumba, és vonja ki a képeket + a docx‑ből egy visszahívás (callback) segítségével. Tanulja meg, hogyan használja + a visszahívást a markdown képek mappájának hatékony tárolásához. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: hu +og_description: Mentse a Word dokumentumot Markdown formátumba, és vonja ki a képeket + a docx‑ből callback segítségével. Ez az útmutató bemutatja, hogyan használjon callback‑et + egy markdown képmappa létrehozásához. +og_title: Word mentése Markdown formátumba – Teljes lépésről lépésre útmutató +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Word mentése Markdown formátumba egyedi képmappával – Teljes útmutató +url: /hu/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word mentése Markdown formátumba – Teljes lépésről‑lépésre útmutató + +Valaha is szükséged volt **Word mentése Markdown formátumba**, de nem tudtad, mit tegyél a beágyazott képekkel? Nem vagy egyedül. Sok projektben a markdown kimenet nagyszerűnek tűnik—*amíg* rá nem jössz, hogy a kép hivatkozások töröttek, mert a fájlok sosem hagyták el a Word csomagot. + +A jó hír, hogy az Aspose.Words tiszta módot biztosít a **képek kinyerésére a docx‑ből**, és pontosan oda helyezésére, ahová szeretnéd, egy **callback** használatával, amely lehetővé teszi a markdown képek mappájának vezérlését. Ebben az útmutatóban végigvezetünk a teljes folyamaton, a `.docx` fájl betöltésétől egy rendezett PNG‑mappáig (vagy bármilyen formátum, amit használsz), valamint egy markdown fájlhoz, amely ezekre mutat. + +A guide végére képes leszel: + +* Bármely Word dokumentumot egyetlen kódsorral Markdown formátumba konvertálni. +* Minden képet automatikusan egy dedikált `images` almappába menteni. +* Testreszabni a fájlneveket, hogy soha ne ütközzenek, még akkor sem, ha a forrás több tucat képet tartalmaz. + +Nincs külső szkript, nincs manuális másolás‑beillesztés—csak tiszta C# és Aspose.Words. + +## Előkövetelmények + +Mielőtt belemerülnénk, győződj meg róla, hogy rendelkezel: + +* **Aspose.Words for .NET** (a legújabb stabil verzió; a cikk írásakor ez a 24.9). +* .NET fejlesztői környezet (Visual Studio, Rider vagy a `dotnet` CLI). +* Egy Word dokumentum (`.docx`), amely legalább egy képet tartalmaz—nevezzük `DocWithImages.docx`‑nek. + +Ha még sosem használtad az Aspose.Words‑t, ne aggódj. A könyvtár teljesen menedzselt, nem igényel COM interop‑ot, és működik .NET 6+ és a .NET Framework 4.8 alatt is. + +## 1. lépés – A projekt beállítása és a csomag telepítése + +Először hozz létre egy új konzolalkalmazást (vagy add hozzá a kódot egy meglévő projekthez). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tipp:** Ha .NET 6‑ot célozod, az alapértelmezett `Program.cs` már top‑level állításokat használ, ami a példát tömörnek tartja. + +## 2. lépés – Callback létrehozása a képek mentésének vezérléséhez + +Az Aspose.Words minden külső erőforrás (képek, CSS stb.) írásához meghívja az `IResourceSavingCallback.ResourceSaving` metódust. Ennek az interfésznek a megvalósításával teljes irányítást kapunk **arról, hogyan épül fel a markdown képek mappája**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Miért használjunk callback‑et? + +* **Finomhangolt vezérlés** – te döntöd el a mappaszerkezetet és a névadási sémát. +* **Teljesítmény** – egyszer írod a streamet, elkerülve a könyvtár dupla‑írási visszaesését. +* **Rugalmasság** – ekkor hozzáadhatsz naplózást, képek optimalizálását, vagy akár fel is töltheted a felhőbe. + +## 3. lépés – A Word dokumentum betöltése + +Most, hogy a callback készen áll, csak annyit kell tennünk, hogy az Aspose.Words‑t a forrásfájlra mutassuk. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Mi van, ha a fájl nem található?** +> A `Document` `FileNotFoundException`‑t dob. Tedd a betöltést `try/catch`‑be, ha dinamikus útvonalakat vársz. + +## 4. lépés – A MarkdownSaveOptions beállítása + +A `MarkdownSaveOptions` osztály lehetővé teszi, hogy csatlakoztassuk a most létrehozott callback‑et. Emellett beállítjuk azt a mappát, ahol a képek a markdown fájlhoz képest élnek. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Az `ImagesFolder` tulajdonság azt mondja az Aspose‑nek, hogy olyan markdown hivatkozásokat generáljon, mint `![Alt text](images/img_123.png)`. Mivel a callback‑ben a `ResourceFileName`‑t is beállítottuk, a tényleges fájl pontosan oda kerül. + +## 5. lépés – Mentés Markdown formátumba és az eredmény ellenőrzése + +Végül megírjuk a markdown fájlt. A callback már feltöltötte az `images` almappát. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Várható kimenet + +A program futtatása valami ilyesmit kell, hogy kiírjon: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Nyisd meg a `Doc.md`‑t bármely markdown nézőben; láthatod a kép hivatkozásokat, amelyek helyesen a `images` mappára mutatnak. + +--- + +## Gyakran Ismételt Kérdések (GYIK) + +### Hogyan **nyerhetők ki a képek a docx‑ből** markdown konvertálás nélkül? + +Újra felhasználhatod ugyanazt a `MyMarkdownResourceCallback`‑et, de a `doc.Save("images.zip", SaveFormat.Zip)`‑nek adod át. A callback továbbra is aktiválódik minden képnél, lehetővé téve, hogy bárhová elhelyezd őket. + +### Mi van, ha **különböző képformátumokra** van szükségem? + +Az `args.FileName` már tartalmazza az eredeti kiterjesztést (`.png`, `.jpg`, stb.). Ha minden képet egyetlen formátumba kell konvertálni, adj egy konverziós lépést a `ResourceSaving`‑ben a stream írása előtt. + +### Testreszabhatom a **markdown képek mappáját** dokumentumonként? + +Természetesen. A callback a mappát az konstruktorán keresztül kapja meg, így minden dokumentumhoz egy új callback‑et hozhatsz létre különböző mappával egy kötegelt feldolgozás során. + +### Működik ez **nagy dokumentumokkal** (százak képekkel)? + +Igen. A callback közvetlenül a lemezre streameli a képet, így alacsony a memóriahasználat. Csak győződj meg róla, hogy a célmeghajtón elegendő hely van, és nem érsz el operációs rendszer fájl‑kezelő korlátot. + +## Teljes működő példa + +Alább a teljes, másolás‑beillesztésre kész program. Cseréld le a `YOUR_DIRECTORY`‑t egy abszolút vagy relatív útvonalra, amely megfelel a környezetednek. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +{{< /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-officemath/_index.md b/words/hungarian/net/programming-with-officemath/_index.md index 70015da0f4..c7714ef278 100644 --- a/words/hungarian/net/programming-with-officemath/_index.md +++ b/words/hungarian/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ Az Aspose.Words for .NET oktatóanyagok az OfficeMath szövegszerkesztésről v | Cím | Leírás | | --- | --- | | [Matematikai egyenletek](./math-equations/) | Ismerje meg, hogyan konfigurálhat matematikai egyenleteket Word dokumentumokban az Aspose.Words for .NET használatával. Lépésről lépésre útmutató példákkal, GYIK-kel és egyebekkel. | - +| [DOCX mentése txt formátumba – Word Math exportálása LaTeX-be C#-ban](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Ismerje meg, hogyan menthet DOCX fájlt txt formátumba, és exportálhatja a Word Math egyenleteket LaTeX-be C#-ban. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/hungarian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..374b5fe3c3 --- /dev/null +++ b/words/hungarian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-04-07 +description: Gyorsan mentse a docx-et txt formátumba, és tanulja meg, hogyan exportálja + a matematikát LaTeX-be. Konvertálja a Wordet txt-be, kezelje az Office Math-ot, + és tartsa meg az egyenleteket változatlanul. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: hu +og_description: Mentse a docx fájlt txt formátumba LaTeX matematikai exporttal. Lépésről‑lépésre + C# oktatóanyag, amely bemutatja, hogyan konvertálja a Word dokumentumot txt‑be, + miközben megőrzi a képleteket. +og_title: DOCX mentése TXT‑ként – C# útmutató a Word matematikai képletek exportálásához +tags: +- C# +- Aspose.Words +- DocumentConversion +title: DOCX mentése TXT‑ként – Word‑matematikai képletek exportálása LaTeX‑be C#‑ban +url: /hu/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# docx mentése txt‑ként – Word-matematika exportálása LaTeX‑be C#‑ban + +Valaha is szükséged volt **docx mentésére txt‑ként**, de aggódtál, hogy az egyenletek szimbólumok kuszaságává válnak? Nem vagy egyedül. Sok fejlesztő szembesül ezzel, amikor **Word‑ot txt‑re konvertál** a további feldolgozáshoz, különösen ha a forrás Office Math objektumokat tartalmaz. + +A jó hír? Néhány C#‑sorral és a megfelelő mentési beállításokkal megőrizheted minden egyenletet tiszta LaTeX‑ként, így a egyszerű szövegfájl emberi olvasásra is alkalmas, és készen áll a tudományos folyamatokra. Ebben az útmutatóban végigvezetünk a teljes folyamaton, megválaszoljuk, hogyan *exportáljunk matematikát* egy Word‑fájlból, és megmutatjuk, hogyan *konvertáljunk docx‑et* anélkül, hogy a matematikai pontosságot elveszítenénk. + +## Mit fogsz megtanulni + +- Tölts be egy `.docx` fájlt az Aspose.Words (vagy bármely kompatibilis könyvtár) segítségével. +- Állítsd be a `TxtSaveOptions`‑t, hogy az Office Math LaTeX‑ként legyen exportálva. +- Mentsd a dokumentumot `.txt` fájlként, amely megőrzi az egyenleteket. +- Tippek a szélhelyzetek kezeléséhez, például rejtett egyenletek vagy nagy dokumentumok. +- Egy teljes, futtatható kódminta, amelyet azonnal másolhatsz‑beilleszthetsz. + +Nincs szükség bonyolult build eszközökre, csak egy .NET projekt és az Aspose.Words NuGet csomag. Kezdjünk bele. + +--- + +## Előkövetelmények + +| Követelmény | Miért fontos | +|-------------|----------------| +| .NET 6.0 vagy újabb | Modern nyelvi funkciók és jobb teljesítmény. | +| Aspose.Words for .NET (NuGet) | Biztosítja a `Document`, `TxtSaveOptions` és `OfficeMathExportMode` elemeket. | +| Egy Word fájl (`.docx`), amely egyenleteket tartalmaz | A LaTeX export élőben történő megtekintéséhez. | +| Alap C# ismeretek | A kódot sor‑soron követheted. | + +Ha még nem adtad hozzá az Aspose.Words‑t, futtasd: + +```bash +dotnet add package Aspose.Words +``` + +Ennyi—nincs szükség extra konfigurációra. + +## 1. lépés: A DOCX fájl betöltése + +Először be kell töltenünk a forrásdokumentumot a memóriába. Gondolj rá úgy, mint egy könyv kinyitására, mielőtt elkezdenéd olvasni. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tipp:** Tesztelés közben használj abszolút elérési utat, hogy elkerüld a „file not found” meglepetéseket. Éles környezetben valószínűleg egy konfigurációs fájlból vagy felhasználói feltöltésből kapod majd az útvonalat. + +## 2. lépés: TXT mentési beállítások konfigurálása a matematikai exporthoz + +Alapértelmezés szerint a `TxtSaveOptions` egyszerű szöveget ír ki, és eltávolítja az Office Math elemeket. Ezt nem akarjuk. Az `OfficeMathExportMode` `LaTeX`‑re állítása azt mondja a könyvtárnak, hogy minden egyenletet a LaTeX reprezentációjára fordítson. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Miért LaTeX? + +A LaTeX a tudományos kiadványszerkesztés közös nyelve. Amikor később a `.txt`‑t egy markdown processzorba, Jupyter notebookba vagy bármely LaTeX‑t támogató eszközbe betáplálod, az egyenletek tökéletesen megjelennek. Ha inkább egyszerű Unicode szimbólumokat szeretnél, válthatsz `OfficeMathExportMode.Unicode`‑ra, de a LaTeX a legnagyobb kontrollt biztosítja. + +## 3. lépés: A dokumentum mentése egyszerű szövegfájlként + +Most jön a varázslat. A `Save` metódus a megadott beállításokkal írja a dokumentumot a lemezre. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +A sor futtatása után a `Math.txt` a következőt tartalmazza: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Vedd észre, hogy az egyenlet a `\[` és `\]` közé kerül – pontosan úgy, ahogy a LaTeX elvárja. + +## Hogyan exportáljunk matematikát összetett dokumentumokból + +### Rejtett vagy beágyazott egyenletek kezelése + +Néhány Word fájl rejtett szövegkeretekben tárolja az egyenleteket. Az Aspose.Words ugyanúgy kezeli őket, mint a látható egyenleteket, így a LaTeX export automatikusan működik. Ha azonban hiányzó egyenleteket észlelsz, ellenőrizd, hogy a `Document` objektum nincs‑e beállítva a rejtett tartalom figyelmen kívül hagyására: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Nagy dokumentumok és memóriahasználat + +Egy 500 oldalas dolgozat mentése sok RAM-ot fogyaszthat. A memóriahasználat alacsonyan tartásához streamelheted a kimenetet: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +A streaming a generálás közben darabokban írja a lemezre, megakadályozva, hogy a teljes fájl egyszerre a memóriában legyen. + +## Gyakori buktatók és elkerülésük módja + +| Buktató | Tünet | Megoldás | +|---------|-------|----------| +| Hiányzó LaTeX zárójelek | Az egyenletek nyers kódként jelennek meg (`E = mc^{2}`) | Győződj meg róla, hogy `OfficeMathExportMode = LaTeX`. | +| Üres kimeneti fájl | Helytelen útvonal vagy nem elegendő jogosultság | Ellenőrizd, hogy a kimeneti könyvtár létezik és írható. | +| Torzuló karakterek | A fájl UTF‑8‑ként van kódolva BOM nélkül egy ANSI‑t elváró rendszerben | Add hozzá `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Az egyenletek eltűnnek a konverzió után | A dokumentum `LoadOptions`‑sal lett betöltve, amely kizárja a matematikát | Használd az alapértelmezett `LoadOptions`‑t vagy állítsd be `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## Teljes működő példa + +Az alábbiakban a teljes program látható, amelyet lefordíthatsz és futtathatsz. Tartalmaz hibakezelést, útvonal ellenőrzést, valamint egy kis konzol‑logot, hogy tudd, minden sikerült. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Várható kimenet** (`Math.txt` részlet): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Most már betáplálhatod ezt a fájlt bármely LaTeX‑t támogató processzorba, és az egyenletek gyönyörűen fognak megjelenni. + +## Hogyan konvertáljunk DOCX‑et TXT‑re formázás elvesztése nélkül + +Ha csak egyszerű szövegre van szükséged, és a matematikát nem érdekel, egyszerűen hagyd ki az `OfficeMathExportMode` sort: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +De ne feledd, a **matematikák exportálásának módja** a különbséget jelenti a tudományos munkafolyamatokban. A LaTeX megőrzése teszi a konverziót valóban hasznossá. + +## Következő lépések és kapcsolódó témák + +- **Kötegelt konverzió:** Csomagold a kódot egy `foreach` ciklusba, hogy egy egész `.docx` mappát dolgozz fel. +- **Markdown generálás:** Adj a szöveghez `#` fejléceket vagy `*` listajeleket, hogy publikálásra kész markdownot kapj. +- **PDF export:** Használd a `PdfSaveOptions`‑t, hogy a txt mellett PDF verziót is készíts. +- **Haladó LaTeX finomhangolás:** Utófeldolgozd a kimenetet regex‑szel, hogy a `\[`/`\]`-t `$...$`‑ra cseréld a beágyazott egyenletekhez. + +Mindegyik ugyanazon az alapon nyugszik – egy `Document` betöltése és a megfelelő `SaveOptions` kiválasztása. Nyugodtan kísérletezz; az API elég rugalmas a legtöbb dokumentum‑automatizálási szcenárióhoz. + +## Következtetés + +Mindezt lefedtük, ami szükséges a **docx txt‑ként mentéséhez**, miközben minden egyenletet LaTeX‑ként megőrzünk. A forrásfájl betöltésétől, a `TxtSaveOptions` konfigurálásig a **matematikák exportálásának módjához**, egészen a végső egyszerű szövegfájl írásáig, a teljes munkafolyamat néhány tömör C# utasításban elfér. + +Most már automatizálhatod a Word‑jelentések, tudományos dolgozatok vagy bármely szöveget és matematikát keverő dokumentum konvertálását, és a keletkezett `.txt`‑t továbbíthatod a downstream eszközöknek anélkül, hogy bármilyen tudományos részlet elveszne. + +Próbáld ki, finomítsd a beállításokat a saját esetedhez, és írd meg a hozzászólásokban, hogyan működött neked. Boldog kódolást! + +![Diagram a konverziós csővezeték bemutatásáról: DOCX → C# feldolgozás → TXT LaTeX matematikával](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/hungarian/net/programming-with-pdfsaveoptions/_index.md index 887a593657..cb6990f90f 100644 --- a/words/hungarian/net/programming-with-pdfsaveoptions/_index.md +++ b/words/hungarian/net/programming-with-pdfsaveoptions/_index.md @@ -31,21 +31,21 @@ Akár Word dokumentumokat szeretne PDF formátumba konvertálni online terjeszt | [Alhalmaz betűtípusok beágyazása PDF dokumentumba](./embedded-subset-fonts/) Csökkentse a PDF-fájl méretét a szükséges betűtípus-részhalmazok beágyazásával az Aspose.Words for .NET használatával. Kövesse lépésről lépésre szóló útmutatónkat a PDF-fájlok hatékony optimalizálásához. | | [PDF méretének csökkentése a beágyazott betűtípusok letiltásával](./disable-embed-windows-fonts/) | Csökkentse a PDF méretét a beágyazott betűtípusok letiltásával az Aspose.Words for .NET segítségével. Kövesse lépésről lépésre szóló útmutatónkat a dokumentumok optimalizálásához a hatékony tárolás és megosztás érdekében. | | [Optimalizálja a PDF méretét a beágyazott Arial és Times Roman betűtípusok kihagyásával](./skip-embedded-arial-and-times-roman-fonts/) | Optimalizálja a PDF méretét a beágyazott Arial és Times Roman betűtípusok kihagyásával az Aspose.Words for .NET segítségével. Kövesse ezt a lépésről lépésre szóló útmutatót a PDF-fájlok egyszerűsítéséhez. | -| [Csökkentse a PDF fájl méretét az alapvető betűtípusok beágyazásának elhagyásával](./avoid-embedding-core-fonts/) | Ismerje meg, hogyan csökkentheti a PDF-fájlok méretét az alapvető betűtípusok beágyazásának elhagyásával az Aspose.Words for .NET használatával. Kövesse lépésről lépésre szóló útmutatónkat PDF-fájljai optimalizálásához. | +| [Csökkentse a PDF fájl méretét az alapvető betűtípusok beágyazásának elhagyásával](./avoid-embedding-core-fonts/) | Ismerje meg, hogyan csökkentheti a PDF-fájlok méretét az alapvető betűtípusok beágyazásának elhagyásával az Aspose.Words for .NET használatával. Kövesse lépésről lépésre szóló útmutatónkat PDF-fájlok optimalizálásához. | | [Escape URI PDF dokumentumban](./escape-uri/) Ismerje meg, hogyan lehet URI-kat elfedni a PDF-ekben az Aspose.Words for .NET használatával. Ez a részletes útmutató lépésről lépésre végigvezeti a folyamaton. | | [Word dokumentum fejlécének, láblécének könyvjelzőinek exportálása PDF dokumentumba](./export-header-footer-bookmarks/) | Tanulja meg, hogyan exportálhat fejléc- és lábléckönyvjelzőket Word-dokumentumból PDF-be az Aspose.Words for .NET használatával lépésről lépésre bemutató útmutatónkkal. | -| [PDF méretének csökkentése a WMF betűtípusok metafájl méretre skálázásával](./scale-wmf-fonts-to-metafile-size/) | Lépésről lépésre útmutató a PDF méretének csökkentéséhez a wmf betűtípusok metafájl méretre skálázásával, amikor az Aspose.Words for .NET segítségével PDF-be konvertál. +| [PDF méretének csökkentése a WMF betűtípusok metafájl méretre skálázásával](./scale-wmf-fonts-to-metafile-size/) | Lépésről lépésre útmutató a PDF méretének csökkentéséhez a wmf betűtípusok metafájl méretre skálázásával, amikor az Aspose.Words for .NET segítségével PDF-be konvertál. | | [PDF szövegpozicionálás javítása kiegészítő szövegpozicionálással](./additional-text-positioning/) | Tanulja meg, hogyan javíthatja a PDF szövegének elhelyezését az Aspose.Words for .NET segítségével néhány egyszerű lépésben. Javítsa dokumentuma megjelenését. | | [Word dokumentum konvertálása PDF-be 1.7](./conversion-to-pdf-17/) | Könnyedén konvertálhat Word dokumentumokat PDF 1.7 formátumba az Aspose.Words for .NET segítségével. Kövesse ezt az útmutatót, hogy dokumentumai univerzálisan hozzáférhetőek és professzionálisan formázottak legyenek. | | [PDF dokumentum méretének csökkentése képek kicsinyítésével](./downsampling-images/) | Csökkentse a PDF dokumentum méretét képek felbontásának csökkentésével az Aspose.Words for .NET segítségével. Optimalizálja PDF-jeit a gyorsabb feltöltési és letöltési idő érdekében. | -| [Vázlatbeállítások megadása PDF dokumentumban](./set-outline-options/) | Ismerje meg, hogyan adhat meg vázlatbeállításokat egy PDF dokumentumban az Aspose.Words for .NET használatával. Javítsa a PDF navigációt a címsorszintek és a kibővített vázlatok konfigurálásával. +| [Vázlatbeállítások megadása PDF dokumentumban](./set-outline-options/) | Ismerje meg, hogyan adhat meg vázlatbeállításokat egy PDF dokumentumban az Aspose.Words for .NET használatával. Javítsa a PDF navigációt a címsorszintek és a kibővített vázlatok konfigurálásával. | | [Egyéni tulajdonságok exportálása PDF dokumentumban](./custom-properties-export/) | Tanulja meg, hogyan exportálhat egyéni tulajdonságokat PDF dokumentumban az Aspose.Words for .NET használatával részletes, lépésről lépésre szóló útmutatónkkal. | | [Word dokumentum szerkezetének exportálása PDF dokumentumba](./export-document-structure/) | Exportáljon egy Word-dokumentum szerkezetét PDF-be az Aspose.Words for .NET segítségével. Kövesse lépésről lépésre szóló útmutatónkat a dokumentum elrendezésének megőrzéséhez és a PDF-navigáció javításához. | | [Képtömörítés PDF dokumentumban](./image-compression/) Ismerje meg, hogyan tömörítheti a képeket PDF dokumentumokban az Aspose.Words for .NET segítségével. Kövesse ezt az útmutatót az optimalizált fájlméret és minőség érdekében. | | [PDF dokumentum utolsó nyomtatott tulajdonságának frissítése](./update-last-printed-property/) | Tanulja meg, hogyan frissítheti a PDF dokumentum utolsó nyomtatott tulajdonságát az Aspose.Words for .NET használatával lépésről lépésre bemutató útmutatónkkal. | | [3D DML 3DEffektusok renderelése PDF dokumentumban](./dml-3deffects-rendering/) | Tanulja meg, hogyan jeleníthet meg lenyűgöző 3D DML-effektusokat PDF dokumentumokban az Aspose.Words for .NET használatával ezzel az átfogó, lépésről lépésre szóló útmutatóval. | | [Képek interpolálása egy PDF dokumentumban](./interpolate-images/) | Tanulja meg, hogyan interpolálhat képeket egy PDF dokumentumban az Aspose.Words for .NET használatával lépésről lépésre bemutató útmutatónkkal. Javítsa PDF-je képminőségét könnyedén. | - +| [Akadálymentes PDF létrehozása Wordből – Lépésről lépésre útmutató](./create-accessible-pdf-from-word-step-by-step-guide/) | Tanulja meg, hogyan hozhat létre akadálymentes PDF-et Word dokumentumból az Aspose.Words for .NET segítségével, részletes lépésről lépésre útmutatóval. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/hungarian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..9d3e7245db --- /dev/null +++ b/words/hungarian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,239 @@ +--- +category: general +date: 2026-04-07 +description: Hozzon létre akadálymentes PDF-et egy DOCX fájlból C#-ban. Tanulja meg, + hogyan konvertálja a Word-et PDF-be, mentse a docx-et PDF-ként, és biztosítsa a + PDF/UA megfelelőséget. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: hu +og_description: Készítsen hozzáférhető PDF-et Wordből C#-ban. Ez az útmutató bemutatja, + hogyan konvertálja a Word dokumentumot PDF-be, hogyan mentse a docx fájlt PDF-ként, + és hogyan feleljen meg a PDF/UA szabványoknak. +og_title: Akadálymentes PDF létrehozása – Teljes C# oktatóanyag +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Akadálymentes PDF létrehozása Wordből – Lépésről lépésre útmutató +url: /hu/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hozzon létre akadálymentes PDF-et Wordből – Teljes programozási útmutató + +Valaha szüksége volt **akadálymentes PDF** létrehozására egy Word dokumentumból, de nem tudta, mely beállításokat kell módosítani? Nem egyedül van. Sok vállalatnál a PDF/UA (Universal Accessibility) megfelelés szigorú követelmény, és a szokásos „convert‑to‑PDF” gomb egyszerűen nem elegendő. + +Ebben az útmutatóban egy tömör, vég‑től‑végig megoldáson megyünk végig, amely **Word‑ot PDF‑re konvertál**, **docx‑et PDF‑ként ment**, és garantálja, hogy a kimenet megfeleljen az akadálymentességi szabványoknak. Nincsenek homályos hivatkozások – csak a másolható‑beilleszthető kód, valamint a „miért” minden egyes sor mögött. + +> **TL;DR:** Töltsön be egy `.docx` fájlt, állítsa be a `PdfSaveOptions.Compliance` értékét `PdfUa1`‑re (vagy `PdfUa2`‑ra), és hívja meg a `Document.Save` metódust. Ennyi a **akadálymentes PDF** létrehozásához az Aspose.Words for .NET‑el. + +--- + +## Mit fog megtanulni + +- Hogyan **konvertálja a Word‑ot PDF‑re**, miközben megőrzi a címsorokat, az alt‑szöveget és az olvasási sorrendet. +- A `PdfUa1` és `PdfUa2` közötti különbség, valamint mikor melyiket válassza. +- Hogyan **mentse a docx‑et PDF‑ként** néhány C# sorral. +- Gyakori buktatók (hiányzó betűkészletek, nem támogatott címkék) és gyors megoldások. +- Egy kész‑készlet kódminta, amelyet bármely .NET projektbe beilleszthet. + +### Előfeltételek + +- .NET 6 vagy újabb (a kód .NET Framework 4.7+‑on is működik). +- Aspose.Words for .NET telepítve NuGet‑en keresztül (`Install-Package Aspose.Words`). +- Egy Word fájl (`input.docx`), amely már megfelelő struktúrával rendelkezik (stílusok, alt‑szöveg a képekhez). + +Ha még nem adta hozzá az Aspose.Words‑t, futtassa az alábbi parancsot a Package Manager Console‑ban: + +```powershell +Install-Package Aspose.Words +``` + +Ez az egyetlen külső függőség, amire szüksége van. + +--- + +## Akadálymentes PDF létrehozása – Miért fontos az akadálymentesség + +Amikor egy PDF **PDF/UA**‑ként (Universal Accessibility) van megjelölve, a képernyőolvasók képesek navigálni a címsorok, táblázatok és űrlapmezők között, akárcsak az eredeti Word fájlban. Ez nem csak egy plusz funkció; sok kormány és vállalat a PDF/UA megfelelést jogi követelménynek tekinti. + +A `Compliance` tulajdonság beállítása a `PdfSaveOptions`‑on azt mondja a könyvtárnak, hogy ágyazza be a szükséges címkéket, állítsa be a helyes dokumentumnyelvet, és adjon hozzá logikus olvasási sorrendet. Ennek a lépésnek a kihagyása „csak‑vizuális” PDF‑et eredményez, amely nem felel meg az akadálymentességi auditoknak. + +--- + +## Word konvertálása PDF‑re az Aspose.Words‑szal + +Az alábbi a legegyszerűbb módja annak, hogy **Word‑ot PDF‑re konvertáljon**, miközben a dokumentum akadálymentes marad. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Mi történik itt?** + +- `Document` beolvassa a Word fájlt, megőrizve minden stílust és struktúrát. +- `PdfSaveOptions.Compliance` azt mondja az Aspose.Words‑nek, hogy a kimenetet PDF/UA‑ként címkézze. +- `doc.Save` a PDF‑et a lemezre írja, automatikusan beágyazva a címkéket. + +> **Pro tipp:** Ha a forrás Word fájl egyedi címsor‑stílusokat használ, győződjön meg róla, hogy ezek a beépített címsor‑szintekhez (`Heading1`, `Heading2`, …) vannak leképezve. Ez biztosítja, hogy a generált PDF megfelelő címsor‑címkéket kapjon. + +--- + +## Docx mentése PDF‑ként – PDF/UA megfelelőség beállítása + +Ha már ismeri a `PdfSaveOptions` osztályt, kíváncsi lehet, vannak-e más kapcsolók, amelyek befolyásolják az akadálymentességet. Néhány hasznos tulajdonság: + +| Tulajdonság | Hatás az akadálymentességre | Tipikus érték | +|------------|----------------------------|---------------| +| `Compliance` | Bekapcsolja vagy kikapcsolja a PDF/UA címkézést | `PdfCompliance.PdfUa1` vagy `PdfUa2` | +| `EmbedFullFonts` | Biztosítja, hogy az olvasók a tervezett tipográfiát lássák | `true` (alapértelmezett) | +| `OptimizeOutput` | Csökkenti a fájlméretet a címkék eltávolítása nélkül | `true` | + +Kiterjesztheti az előző kódrészletet így: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +A `PdfUa2`‑re váltás újabb PDF/UA funkciókat támogat, például a *artifact* címkézést a díszítő képekhez. Ha ezekre nincs szüksége, maradjon a `PdfUa1`‑nél a régebbi segédeszközökkel való maximális kompatibilitás érdekében. + +--- + +## Docx exportálása PDF‑re – Teljes működő példa + +Az alábbi önálló konzolalkalmazás bemutatja a teljes folyamatot, a fájl betöltésétől a kimenet ellenőrzéséig. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Várható eredmény + +- Egy **Compliant.pdf** nevű fájl jelenik meg ugyanabban a mappában, ahol a végrehajtható állomány található. +- A PDF megnyitása az Adobe Acrobat Pro‑ban → *Tools → Accessibility → Full Check* **Nincs akadálymentességi probléma** jelentést kell, hogy adjon (feltéve, hogy a forrás Word fájl jól strukturált volt). +- A PDF *Properties → Advanced* fülén **PDF/UA** jelenik meg a „PDF/A and PDF/UA compliance” szakasz alatt. + +--- + +## Gyakori szélhelyzetek és megoldások + +| Helyzet | Miért fontos | Gyors megoldás | +|---------|--------------|----------------| +| **Missing fonts** | A PDF alapértelmezett betűkészletre válthat, ami tönkreteszi a vizuális elrendezést. | Állítsa be az `EmbedFullFonts = true`‑t (már alapértelmezett) és győződjön meg róla, hogy a betűkészlet‑fájlok elérhetők a build gépen. | +| **Images without alt‑text** | A képernyőolvasók csak „kép” szöveget olvasnak le leírás nélkül. | Adjon `Alt Text`‑et a Word‑ben (`Jobb‑klikk → Format Picture → Alt Text`) a konvertálás előtt. | +| **Custom styles not recognized as headings** | A PDF/UA-nek megfelelő címsor‑címkék szükségesek. | Mapolja az egyedi stílusokat a beépített címsorokra a `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` segítségével. | +| **Large documents cause memory pressure** | Egy 500 oldalas fájl konvertálása jelentős RAM‑használatot eredményezhet. | Használja a `doc.Save(outputPath, options)`‑t `options.SaveFormat = SaveFormat.Pdf` beállítással, és fontolja meg a feldolgozást darabokban, ha `OutOfMemoryException`-t kap. | +| **Need to export docx to pdf without accessibility** | Néha csak egy gyors vizuális PDF-re van szükség. | Hagyja ki a `Compliance` beállítást, vagy állítsa `PdfCompliance.Pdf15`‑re. | + +--- + +## Kép példa (Alt Text beágyazva) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Az előző alt‑szöveg megerősíti a fő kulcsszót, és segít mind a felhasználóknak, mind az AI modelleknek megérteni a kép kontextusát.* + +--- + +## Gyakran Ismételt Kérdések + +**Q: Működik ez .NET Core‑dal?** +A: Teljesen. Az Aspose.Words platformfüggetlen; csak hivatkozzon a NuGet csomagra a .NET 6+ projektjében. + +**Q: Képes vagyok több DOCX fájlt egyszerre feldolgozni?** +A: Igen. Tegye a betöltési és mentési logikát egy `foreach (var file in Directory.GetFiles(folder, "*.docx"))` ciklusba. A teljesítmény érdekében használjon egyetlen `PdfSaveOptions` példányt újra és újra. + +**Q: Mi a teendő, ha egy egyedi PDF/UA címkét kell hozzáadni, amit az Aspose nem generál automatikusan?** +A: Használja az alacsony szintű PDF API‑t (`PdfSaveOptions.CustomProperties`), vagy utófeldolgozza a PDF‑et egy olyan könyvtárral, mint az iText 7, amely lehetővé teszi a manuális címke‑beszúrást. + +--- + +## Összegzés + +Ö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/hungarian/net/working-with-fonts/_index.md b/words/hungarian/net/working-with-fonts/_index.md index 609ee46620..46ea296450 100644 --- a/words/hungarian/net/working-with-fonts/_index.md +++ b/words/hungarian/net/working-with-fonts/_index.md @@ -40,7 +40,7 @@ Akár különböző betűtípusokkal szeretné formázni a szöveget, betűtípu | [Betűtípusok mappáinak prioritás szerinti beállítása](./set-fonts-folders-with-priority/) | Ismerje meg, hogyan állíthat be prioritást a betűtípus-mappákban a Word-dokumentumokban az Aspose.Words for .NET használatával. Útmutatónk biztosítja, hogy dokumentumai minden alkalommal tökéletesen jelenjenek meg. | | [True Type betűtípusok mappa beállítása](./set-true-type-fonts-folder/) | Ismerje meg, hogyan állíthat be True Type Fonts mappát Word-dokumentumokban az Aspose.Words for .NET segítségével. Kövesse részletes, lépésről lépésre szóló útmutatónkat a betűtípus-kezelés egységessége érdekében. | | [Alapértelmezett betűtípus megadása rendereléshez](./specify-default-font-when-rendering/) | Ismerje meg, hogyan adhat meg alapértelmezett betűtípust Word-dokumentumok renderelésekor az Aspose.Words for .NET használatával. Biztosítsa a dokumentumok egységes megjelenését a platformokon átívelően. | -| [Betűtípus-beállítások betöltési opciókkal](./font-settings-with-load-options/) Ismerje meg, hogyan kezelheti a betűtípus-beállításokat a betöltési opciókkal az Aspose.Words for .NET programban. Lépésről lépésre útmutató fejlesztőknek a betűtípusok egységes megjelenésének biztosításához a Word-dokumentumokban. +| [Betűtípus-beállítások betöltési opciókkal](./font-settings-with-load-options/) Ismerje meg, hogyan kezelheti a betűtípus-beállításokat a betöltési opciókkal az Aspose.Words for .NET programban. Lépésről lépésre útmutató fejlesztőknek a betűtípusok egységes megjelenésének biztosításához a Word-dokumentumokban. | | [Betűtípusok beállítása mappa](./set-fonts-folder/) | Ismerje meg, hogyan állíthat be egyéni betűtípusmappát az Aspose.Words for .NET programban, hogy Word-dokumentumai helyesen jelenjenek meg hiányzó betűtípusok nélkül. | | [Betűtípusbeállítások Alapértelmezett példány](./font-settings-default-instance/) | Ebben az oktatóanyagban megtudhatja, hogyan konfigurálhatja az alapértelmezett betűtípus-beállításokat egy Word-dokumentumban az Aspose.Words for .NET segítségével. | | [Elérhető betűtípusok listájának lekérése](./get-list-of-available-fonts/) | Fedezze fel, hogyan kérheti le az elérhető betűtípusok listáját az Aspose.Words for .NET használatával ebben a részletes, lépésről lépésre szóló útmutatóban. Fejlessze betűtípus-kezelési készségeit. | @@ -48,7 +48,7 @@ Akár különböző betűtípusokkal szeretné formázni a szöveget, betűtípu | [Figyelmeztető értesítés fogadása](./receive-warning-notification/) Ismerje meg, hogyan kaphat figyelmeztető értesítést az Aspose.Words for .NET használatakor, és hogyan kezelheti a dokumentumokban előforduló problémákat vagy figyelmeztetéseket. | | [Erőforrás Steam betűtípus forrás példa](./resource-steam-font-source-example/) | Ismerje meg, hogyan használható a Resource Stream Font Source egyéni betűtípusok betöltéséhez az Aspose.Words for .NET fájlba. | | [Helyettesítés kérése utótagok nélkül](./get-substitution-without-suffixes/) | Ebben az oktatóanyagban megtudhatja, hogyan lehet utótag nélküli felülírásokat beállítani egy Word-dokumentumban az Aspose.Words for .NET segítségével. | - +| [Hogyan észlelhet betűtípusokat az Aspose.Words-ben – Teljes útmutató](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Ismerje meg, hogyan detektálhatja a betűtípusokat Word-dokumentumokban az Aspose.Words for .NET segítségével részletes útmutatóval. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/hungarian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/hungarian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..a878e2e860 --- /dev/null +++ b/words/hungarian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,283 @@ +--- +category: general +date: 2026-04-07 +description: Ismerje meg, hogyan lehet felismerni a betűtípusokat, és hogyan lehet + figyelmeztetéseket rögzíteni a hiányzó betűtípusok kezelése során C#‑ban az Aspose.Words + használatával. Lépésről‑lépésre kód is mellékelve. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: hu +og_description: Hogyan lehet felismerni a betűtípusokat az Aspose.Words-ben? Kövesse + ezt az útmutatót a figyelmeztetések rögzítéséhez és a hiányzó betűtípusok könnyed + kezeléséhez. +og_title: Hogyan lehet betűtípusokat felismerni az Aspose.Words-ben – Teljes útmutató +tags: +- Aspose.Words +- C# +- Font handling +title: Hogyan lehet betűtípusokat felismerni az Aspose.Words-ben – Teljes útmutató +url: /hu/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan észleljük a betűtípusokat az Aspose.Words‑ban – Teljes útmutató + +Gondolkodtál már azon, **hogyan lehet észlelni a betűtípusokat**, amelyek hiányoznak egy Word‑dokumentumból, mielőtt a termelésbe küldenéd? Nem vagy egyedül. Sok vállalati helyzetben egy eltévedt betűtípus tönkreteheti a PDF‑konverziós folyamatot, vagy elrendezési hibákat okozhat, amelyek nem professzionálisak. A jó hír, hogy az Aspose.Words beépített módot biztosít ezeknek a hiányzó betűtípusoknak a felderítésére és egyértelmű figyelmeztetések megjelenítésére. + +Ebben az útmutatóban pontosan végigvezetünk a **betűtípusok észlelésének**, **figyelmeztetések rögzítésének**, és a **hiányzó betűtípusok kezelésének** legjobb gyakorlataiban, hogy alkalmazásod megbízható maradjon. Nincs szükség külső eszközökre, nincs találgatás – csak tiszta C# kód, amelyet azonnal beilleszthetsz a projektedbe. + +> **Gyors előzetes:** A végére egy újrahasználható `FontSubstitutionWarningCollector`-t kapsz, amely minden betűtípus‑helyettesítési üzenetet összegyűjt a dokumentum betöltése során, és tudni fogod, hogyan reagálj, ha egy betűtípus nem található. + +--- + +## Mit fogsz megtanulni + +- Hogyan konfiguráljuk a `LoadOptions`‑t, hogy figyelje a betűtípus‑helyettesítési figyelmeztetéseket. +- Hogyan rögzítsük ezeket a figyelmeztetéseket egy egyedi gyűjtőosztályban. +- Hogyan dolgozzuk fel a gyűjtött figyelmeztetéseket, és döntsünk arról, hogy megszakítsuk, naplózzuk vagy helyettesítsük a betűtípusokat. +- Szélsőséges esetek kezelése olyan dokumentumoknál, amelyek távoli vagy beágyazott betűtípusokra hivatkoznak. + +**Előfeltételek:** .NET 6+ (vagy .NET Framework 4.6+), Aspose.Words for .NET (legújabb verzió), és alapvető C# ismeretek. Ha még soha nem használtad az Aspose.Words‑t, ne aggódj – ez az útmutató csak néhány perc beállítási időt igényel. + +--- + +## Betűtípusok észlelése az Aspose.Words LoadOptions használatával + +Az első lépés a hiányzó betűtípusok észleléséhez, hogy megmondjuk az Aspose.Words‑nek, jelentse őket. Ezt a `LoadOptions.WarningCallback` tulajdonságon keresztül tehetjük meg, amely bármely, `IWarningCallback`‑t megvalósító osztályt elfogad. Az alábbiakban létrehozunk egy apró gyűjtőt, amely minden figyelmeztetést tárol későbbi ellenőrzéshez. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Miért fontos:** Figyelmeztető visszahívó nélkül az Aspose.Words csendben helyettesíti a hiányzó betűtípusokat egy alapértelmezettel, és sosem tudod, hogy probléma van. A `WarningType.FontSubstitution` rögzítésével teljes átláthatóságot kapunk – pontosan az adatokat, amelyekre szükséged van a **betűtípusok észleléséhez**, amelyek nem állnak rendelkezésre a gépen. + +Most csatlakoztatjuk a gyűjtőt a `LoadOptions`‑ba, és betöltünk egy dokumentumot: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Pro tipp:** Ha kötegelt módon sok dokumentummal dolgozol, használd újra ugyanazt a `FontSubstitutionWarningCollector` példányt, de ne felejtsd el a `Clear()` hívását a betöltések között, hogy elkerüld a figyelmeztetések keveredését különböző fájlokból. + +--- + +## Figyelmeztetések rögzítése a dokumentum betöltése során + +Miután a dokumentum betöltődött, a gyűjtő már tartalmazza minden betűtípus‑kapcsolatú figyelmeztetést. A következő logikus kérdés: *Hogyan rögzítsek figyelmeztetéseket* úgy, hogy könnyen naplózható vagy megjeleníthető legyen? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +A tipikus kimenet így néz ki: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Mit jelent ez:** Minden sor feltárja az eredeti betűtípus nevét és azt a helyettesítést, amelyet az Aspose.Words választott. Ezzel az információval eldöntheted, hogy a helyettesítés elfogadható-e, vagy manuálisan be kell-e ágyazni a hiányzó betűtípust. + +--- + +## Hiányzó betűtípusok kezelése elegánsan + +A figyelmeztetések észlelése és rögzítése csak a harc felét jelenti. Az igazi érték akkor jön, amikor **hiányzó betűtípusokat kezelsz** egy termelésre kész módon. Az alábbiakban három gyakori stratégia található: + +1. **Naplózás és folytatás** – Alkalmas kötegelt feldolgozáshoz, ahol csak egy audit nyomra van szükség. +2. **Megszakítás kritikus betűtípusok esetén** – Kivételt dob, ha egy adott betűtípus (pl. egy márkaspecifikus tipográfia) hiányzik. +3. **Betűtípus beágyazása futás közben** – Betölti a hiányzó betűtípust egy ismert mappából, és regisztrálja az Aspose.Words‑nél a dokumentum újratöltése előtt. + +### Példa: Megszakítás kritikus betűtípus esetén + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Példa: Hiányzó betűtípusok automatikus beágyazása + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Miért hasznosak ezek a minták:** Ha egyértelműen meghatározod, mit tegyél hiányzó betűtípus esetén, megszünteted a csendes helyettesítéseket, amelyek veszélyeztethetik a márkát vagy az olvashatóságot. Ez a **hiányzó betűtípusok kezelése** lényegének tekinthető kontrollált módon. + +--- + +## Teljes működő példa + +Mindent összevonva, itt egy önálló, azonnal futtatható program, amely bemutatja a **betűtípusok észlelését**, a **figyelmeztetések rögzítését**, és egy egyszerű szabályt a **hiányzó betűtípusok naplózással történő kezelésére**. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Várható eredmény:** Ha a programot egy olyan dokumentummal futtatod, amely egy a gépen nem létező betűtípusra hivatkozik, a konzol felsorolja minden helyettesítési figyelmeztetést. Ha bármely figyelmeztetés a `critical` halmazból származó betűtípust érinti, a program korán kilép, megakadályozva egy hibás PDF generálását. + +--- + +## Gyakran Ismételt Kérdések (GYIK) + +| Kérdés | Válasz | +|----------|--------| +| *Szükségem van licencre az Aspose.Words használatához ehhez a kódhoz?* | Igen, egy érvényes Aspose.Words licenc eltávolítja a kiértékelési vízjeleket és feloldja a teljes funkcionalitást. | +| *Felismeri ez a megközelítés a beágyazott betűtípusokat?* | A beágyazott betűtípusok már a fájl részei, ezért az Aspose.Words nem generál helyettesítési figyelmeztetést. Szükség esetén a `Document.FontInfos` segítségével felsorolhatod a beágyazott betűtípusokat. | +| *Mi van, ha a hiányzó betűtípus Windows rendszeren rendszerbetűtípus, de Linuxon nem?* | Ugyanaz a figyelmeztetés fog megjelenni Linuxon, mivel a betűtípus nincs telepítve. Használd a „hiányzó betűtípusok kezelése” stratégiát, hogy a szükséges `.ttf` fájlokat az alkalmazásoddal együtt szállítsd. | +| *A figyelmeztető gyűjtő szá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/indonesian/net/basic-conversions/_index.md b/words/indonesian/net/basic-conversions/_index.md index a4f93f422e..78345b791b 100644 --- a/words/indonesian/net/basic-conversions/_index.md +++ b/words/indonesian/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Simpan Word sebagai PDF dengan Aspose.Words – Panduan Lengkap C#](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Panduan langkah demi langkah menyimpan dokumen Word ke PDF menggunakan Aspose.Words dalam C#. Sempurna untuk pengembang. | | [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: | +| [Mengonversi DOCX ke PDF dalam C# – Panduan Pemrograman Lengkap](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Panduan langkah demi langkah mengonversi DOCX ke PDF dalam C# menggunakan Aspose.Words. Lengkap dengan contoh kode. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/indonesian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..8e4294f26a --- /dev/null +++ b/words/indonesian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: Konversi DOCX ke PDF di C# dengan cepat. Pelajari cara menyimpan Word + sebagai PDF, memuat dokumen docx di C#, dan memastikan kepatuhan PDF/UA‑2 dalam + hitungan menit. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: id +og_description: Konversi DOCX ke PDF di C# secara instan. Panduan ini menunjukkan + cara menyimpan Word sebagai PDF, memuat dokumen docx di C# dan memenuhi standar + PDF/UA‑2. +og_title: Mengonversi DOCX ke PDF di C# – Panduan Langkah demi Langkah +tags: +- Aspose.Words +- C# +- PDF Generation +title: Mengonversi DOCX ke PDF di C# – Panduan Pemrograman Lengkap +url: /id/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Mengonversi DOCX ke PDF di C# – Panduan Pemrograman Lengkap + +Pernah membutuhkan untuk **convert DOCX to PDF** dalam aplikasi C# tetapi tidak yakin harus mulai dari mana? Anda tidak sendirian. Banyak pengembang menemui kebuntuan ketika menyadari bahwa tombol “save as PDF” sederhana di Word tidak dapat langsung diterjemahkan ke kode. Kabar baiknya? Dengan beberapa baris Aspose.Words (atau perpustakaan serupa) Anda dapat mengotomatisasi seluruh proses, menjaga bentuk mengambang tetap inline, dan bahkan mencapai kepatuhan PDF/UA‑2 tanpa kesulitan. + +Dalam tutorial ini Anda akan belajar cara **save Word as PDF**, **load docx document C#**, dan menyesuaikan opsi ekspor sehingga file yang dihasilkan siap untuk audit aksesibilitas. Pada akhir tutorial Anda akan memiliki program mandiri yang dapat dijalankan yang mengubah file `.docx` apa pun menjadi PDF yang bersih dan sesuai standar. + +> **Mengapa penting?** +> Mengonversi DOCX ke PDF adalah kebutuhan umum untuk sistem faktur, generator laporan, dan alur kerja pengarsipan dokumen. Mengotomatisasinya menghilangkan langkah manual, mengurangi kesalahan manusia, dan memastikan setiap output terlihat persis sama di semua platform. + +--- + +## Apa yang Anda Butuhkan + +- **.NET 6.0** atau lebih baru (kode ini juga berfungsi pada .NET Framework 4.6+ ) +- **Aspose.Words for .NET** (versi percobaan gratis atau berlisensi) – Anda dapat menginstalnya via NuGet: `dotnet add package Aspose.Words` +- Contoh file `input.docx` yang ditempatkan di folder yang Anda kontrol (kami akan menyebutnya `YOUR_DIRECTORY`) +- Visual Studio, VS Code, atau editor C# apa pun yang Anda suka + +Itu saja—tanpa layanan tambahan, tanpa panggilan REST. Hanya C# murni. + +--- + +## Langkah 1: Memuat Dokumen DOCX di C# + +Sebelum Anda dapat **convert docx to pdf**, Anda harus membawa file Word ke dalam memori. Kelas `Document` melakukan hal itu untuk Anda. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Mengapa ini penting:** +Memuat file memberi Anda model objek yang sepenuhnya terurai—paragraf, tabel, bentuk mengambang, semuanya. Ini adalah langkah pertama dalam alur kerja **load docx document c#**, dan juga memvalidasi bahwa file tidak rusak sebelum Anda membuang waktu untuk konversi. + +> **Pro tip:** Jika Anda menangani file yang diunggah pengguna, bungkus pemanggilan `new Document()` dalam blok try/catch untuk menangani file DOCX yang tidak valid secara elegan. + +--- + +## Langkah 2: Mengonfigurasi Opsi Penyimpanan PDF (Kepatuhan & Penanganan Bentuk) + +Anda mungkin bertanya, “Apakah saya perlu menyesuaikan apa pun, atau cukup memanggil `Save`?” Jawaban singkatnya: Anda bisa, tetapi mengatur opsi yang tepat membuat PDF menjadi dapat diakses dan visualnya setia. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Mengapa ini penting:** +- `ExportFloatingShapesAsInlineTag = true` mencegah objek mengambang hilang atau salah‑posisi ketika PDF dilihat di perangkat berbeda. +- `Compliance = PdfCompliance.PdfUa2` memastikan output memenuhi standar PDF/UA‑2, yang penting untuk kompatibilitas pembaca layar dan pengarsipan legal. + +Jika Anda tidak memerlukan aksesibilitas, Anda dapat menghapus baris `Compliance`, tetapi mempertahankannya hampir tidak menambah beban dan membuat solusi Anda tahan masa depan. + +--- + +## Langkah 3: Menyimpan Dokumen sebagai PDF – Aksi Inti **Convert DOCX to PDF** + +Sekarang dokumen sudah dimuat dan opsi sudah diatur, konversi sebenarnya hanyalah satu pemanggilan metode. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Apa yang akan Anda lihat:** +Menjalankan program menghasilkan `output.pdf` di folder yang sama. Buka dengan penampil PDF apa pun dan Anda akan memperhatikan bahwa: + +- Semua teks, tabel, dan gambar muncul persis seperti di DOCX asli. +- Bentuk mengambang tetap terjaga inline, mempertahankan tata letak. +- File melewati alat validasi PDF/UA‑2 dasar (misalnya Adobe Acrobat Preflight). + +--- + +## Contoh Lengkap yang Siap Jalan – Dari Atas ke Bawah + +Berikut adalah aplikasi konsol lengkap yang siap dijalankan yang mendemonstrasikan seluruh alur. Salin‑tempel ke proyek C# baru dan tekan **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Output yang diharapkan di konsol:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Dan file `output.pdf` yang rapi berada di samping file sumber Anda. + +--- + +## Pertanyaan yang Sering Diajukan & Kasus Tepi + +| Pertanyaan | Jawaban | +|------------|---------| +| **Bisakah saya mengonversi DOCX yang disimpan dalam `MemoryStream`?** | Tentu saja. Gunakan `new Document(stream)` alih‑alih jalur file. | +| **Bagaimana jika DOCX berisi makro?** | Aspose.Words mengabaikan makro VBA secara default; mereka tidak akan muncul di PDF. | +| **Apakah saya memerlukan lisensi untuk produksi?** | Versi percobaan menambahkan watermark setelah sejumlah halaman tertentu. Untuk penggunaan komersial, dapatkan lisensi untuk menghilangkannya. | +| **Bagaimana cara mengubah ukuran halaman PDF?** | Setel `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` sebelum menyimpan. | +| **Apakah ada cara menyematkan font khusus?** | Ya—tambahkan `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Tips Pro untuk Pengalaman **Save Word as PDF** yang Lancar + +- **Pemrosesan batch:** Bungkus logika konversi dalam loop dan beri daftar jalur DOCX. +- **Kinerja:** Gunakan satu instance `PdfSaveOptions` saat mengonversi banyak file; ini mengurangi tekanan GC. +- **Logging:** Tampilkan ukuran PDF yang dihasilkan (`new FileInfo(outputPath).Length`) untuk memantau hasil kompresi. +- **Penanganan error:** Bedakan antara `FileNotFoundException` (DOCX hilang) dan `UnauthorizedAccessException` (masalah izin menulis). + +--- + +## Kesimpulan + +Anda kini memiliki pola yang solid dan siap produksi untuk **convert DOCX to PDF** di C#. Dengan memuat DOCX, mengonfigurasi opsi penyimpanan PDF, dan memanggil `Save`, Anda dapat **save Word as PDF**, menghormati nuansa tata letak, dan memenuhi standar aksesibilitas—semua dalam beberapa baris kode. + +Siap untuk tantangan berikutnya? Coba ganti `PdfSaveOptions` dengan `ImageSaveOptions` untuk **save Word as PNG**, atau jelajahi kelas `HtmlSaveOptions` untuk menghasilkan output siap web. Bagaimanapun, dasar **load docx document c#** tetap sama, menjadikan basis kode Anda tahan masa depan. + +Selamat coding, dan semoga PDF Anda selalu patuh! + +--- + +![Contoh output Convert DOCX ke PDF](convert-docx-to-pdf-output.png "Contoh output Convert DOCX ke 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/indonesian/net/programming-with-loadoptions/_index.md b/words/indonesian/net/programming-with-loadoptions/_index.md index 10933602a0..e224995d11 100644 --- a/words/indonesian/net/programming-with-loadoptions/_index.md +++ b/words/indonesian/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Memuat File Chm Dalam Dokumen Word](./load-chm/) | Muat file CHM ke dalam dokumen Word dengan mudah menggunakan Aspose.Words for .NET dengan tutorial langkah demi langkah ini. Sempurna untuk menggabungkan dokumentasi teknis Anda. | | [Cara Memulihkan DOCX dengan Aspose.Words – Langkah demi Langkah](./how-to-recover-docx-with-aspose-words-step-by-step/) | Pelajari cara memulihkan file DOCX yang rusak menggunakan Aspose.Words dengan panduan langkah demi langkah. | | [Aspose Load Options – Muat DOCX dengan Pengaturan Font Kustom](./aspose-load-options-load-docx-with-custom-font-settings/) Pelajari cara memuat file DOCX dengan pengaturan font khusus menggunakan Aspose Load Options dalam .NET. | +| [Pulihkan DOCX Rusak – Panduan Lengkap C# untuk Memperbaiki dan Menyimpan File](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Panduan lengkap C# untuk memperbaiki file DOCX yang rusak dan menyimpannya kembali dengan Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/indonesian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..b6264479a5 --- /dev/null +++ b/words/indonesian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-04-07 +description: Pelajari cara memulihkan file DOCX yang rusak di C# dan menyimpan dokumen + yang dipulihkan dengan aman. Panduan langkah demi langkah dengan contoh Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: id +og_description: Pulihkan file DOCX yang rusak di C# dan simpan dokumen yang dipulihkan + dengan Aspose.Words. Kode lengkap, penjelasan, dan tips praktik terbaik. +og_title: Pulihkan DOCX Rusak – Panduan C# Langkah demi Langkah +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Pulihkan DOCX yang Rusak – Panduan Lengkap C# untuk Memperbaiki dan Menyimpan + File +url: /id/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Pulihkan DOCX Rusak – Panduan Lengkap C# untuk Memperbaiki dan Menyimpan File + +Pernah mencoba membuka DOCX yang terlihat baik di Explorer tetapi melemparkan pengecualian di aplikasi Anda? Itu adalah mimpi buruk klasik “file Word rusak”, dan biasanya berakhir dengan jejak tumpukan (stack‑trace) yang tidak ingin Anda lihat. Kabar baiknya? Aspose.Words memberikan fitur **recover corrupted docx** yang memungkinkan Anda tetap bekerja meskipun file tersebut rusak. + +Dalam tutorial ini kami akan menjelaskan langkah‑langkah tepat untuk memuat dokumen yang rusak, memberi tahu perpustakaan untuk terus berjalan, dan kemudian **save recovered document** ke file baru yang bersih. Pada akhir Anda akan mengetahui mengapa mode pemulihan penting, cara mengkonfigurasinya, dan jebakan apa yang harus dihindari—tanpa jalan pintas “lihat dokumentasi” yang samar. + +## Apa yang Anda Butuhkan + +- **Aspose.Words for .NET** (versi terbaru apa pun; 24.11 digunakan saat menulis panduan ini) +- Lingkungan pengembangan .NET (Visual Studio, Rider, atau VS Code dengan ekstensi C#) +- Contoh DOCX yang Anda curigai rusak (Anda dapat merusak file dengan membukanya di editor zip dan menghapus sebuah bagian, hanya untuk pengujian) +- Pengetahuan dasar C#—tidak perlu yang rumit, cukup kemampuan membuat aplikasi console + +Jika Anda sudah memiliki semuanya, bagus—mari langsung masuk ke solusi. + +## Langkah 1: Siapkan LoadOptions dengan Strategi Pemulihan yang Tepat + +Inti perbaikan adalah objek `LoadOptions`. Ia memberi tahu Aspose.Words bagaimana berperilaku ketika menemukan XML yang tidak valid atau bagian yang hilang di dalam paket DOCX. Flag `RecoveryMode.RecoverAndContinue` adalah yang paling toleran—ia berusaha menyelamatkan apa pun yang bisa dan melewati sisanya. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Mengapa ini penting:** Jika Anda mengabaikan `LoadOptions` atau menggunakan mode default (`RecoveryMode.NoRecovery`), konstruktor `Document` akan melemparkan pengecualian begitu menemukan masalah. Dengan `RecoverAndContinue`, API menelan kesalahan non‑kritikal dan membangun objek dokumen parsial yang masih dapat Anda gunakan. + +> **Pro tip:** Untuk batch file yang sangat besar, pertimbangkan untuk membungkus pemanggilan load dalam blok `try/catch`—beberapa kesalahan memang fatal (mis., file `[Content_Types].xml` yang hilang) dan tidak dapat dipulihkan. + +## Langkah 2: Muat DOCX yang Mungkin Rusak + +Sekarang opsi sudah siap, muat file Anda. Konstruktor menerima jalur file dan `LoadOptions` yang baru saja kami siapkan. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Apa yang terjadi di balik layar?** +Aspose.Words mengurai kontainer ZIP, membaca setiap bagian XML, dan mencoba membangun kembali DOM Open XML. Ketika menemukan bagian yang rusak, mesin pemulihan mencatat peringatan (terlihat di konsol jika Anda mengaktifkan diagnostik) dan melanjutkan. Objek `Document` yang dihasilkan mungkin kehilangan beberapa paragraf atau gambar, tetapi sisanya tetap utuh. + +## Langkah 3: Verifikasi Konten yang Dipulihkan (Opsional tetapi Disarankan) + +Sebelum Anda menyimpan file ke disk, sebaiknya periksa beberapa node untuk memastikan bagian penting tetap ada. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Jika output terlihat masuk akal, Anda telah berhasil memulihkan konten **recover corrupted docx**. Jika Anda melihat bagian yang hilang, Anda masih dapat memutuskan apakah akan melanjutkan—kadang bagian yang hilang hanya bersifat dekoratif. + +## Langkah 4: Simpan Dokumen yang Dipulihkan + +Berikut bagian yang paling sering ditanyakan pengembang: “Bagaimana cara **save recovered document** tanpa memperkenalkan kembali korupsi asli?” Jawabannya cukup memanggil `Document.Save` dengan jalur baru. Aspose.Words menulis paket ZIP yang benar‑baru, sehingga bagian yang rusak yang tersisa tidak ikut. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Mengapa ini berhasil:** Metode `Save` menyerialisasi DOM dalam memori kembali menjadi paket Open XML yang bersih. Karena bagian yang rusak tidak pernah dimuat ke dalam DOM (dibuang selama pemulihan), mereka tidak pernah masuk ke file baru. Hasilnya adalah DOCX yang sehat dan dapat dibuka di Word, Google Docs, atau penampil lainnya. + +## Langkah 5: Otomatiskan Proses untuk Banyak File (Bonus) + +Dalam skenario dunia nyata Anda sering memiliki folder penuh file bermasalah. Bungkus langkah‑langkah sebelumnya dalam loop, dan Anda akan memiliki utilitas pemulihan kecil. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Sekarang Anda dapat menaruh seluruh direktori file DOCX rusak ke `C:\Docs\Batch` dan membiarkan skrip membersihkannya secara otomatis. + +## Pertanyaan Umum & Kasus Tepi + +| Question | Answer | +|----------|--------| +| **Apakah ini bekerja dengan file .doc?** | Kelas `LoadOptions` yang sama berlaku, tetapi Anda harus merujuk ke format Word lama (`doc`). Aspose.Words masih dapat memulihkan, meskipun pola kesalahannya berbeda. | +| **Bagaimana jika file dilindungi kata sandi?** | Pemulihan tidak akan melewati enkripsi. Anda harus menyediakan kata sandi melalui `LoadOptions.Password`. | +| **Apakah gambar akan hilang?** | Hanya gambar yang merupakan bagian dari XML yang rusak yang mungkin dihilangkan. Sisanya tetap dipertahankan karena disimpan sebagai aliran biner terpisah. | +| **Bisakah saya mencatat peringatan yang dihasilkan Aspose?** | Ya—atur `LoadOptions.LoadFormat` ke `LoadFormat.Docx` dan berlangganan ke `Document.WarningCallback` untuk menangkap pesan detail. | +| **Apakah `RecoverAndContinue` aman untuk produksi?** | Secara umum ya, tetapi uji dengan data Anda. Dalam pipeline yang sangat penting, Anda mungkin ingin menandai dokumen yang memerlukan pemulihan untuk ditinjau nanti. | + +## Contoh Lengkap yang Berfungsi (Siap Salin‑Tempel) + +Berikut adalah program lengkap yang dapat Anda kompilasi sebagai aplikasi console. Program ini mencakup semua langkah, penanganan kesalahan, dan logika pemrosesan batch opsional. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Hasil yang diharapkan:** Setelah menjalankan program, `Recovered.docx` terbuka di Microsoft Word tanpa dialog kesalahan asli. Bagian yang terlalu rusak hanya dihilangkan, tetapi isi utama, judul, dan sebagian besar gambar tetap utuh. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Kesimpulan + +Kami telah membahas semua yang Anda perlukan untuk **recover corrupted docx** file menggunakan Aspose.Words, mulai dari mengkonfigurasi `LoadOptions` hingga dengan aman **save recovered document**. Poin pentingnya adalah: + +- Gunakan `RecoveryMode.RecoverAndContinue` agar perpustakaan mengabaikan kesalahan non‑kritikal. +- Verifikasi konten yang dimuat sebelum menyimpannya, terutama saat menangani dokumen bisnis yang kritis. +- Menyimpan dokumen menghasilkan paket ZIP yang bersih, secara efektif menghilangkan korupsi asli. +- Pola yang sama dapat diterapkan pada operasi batch, memungkinkan pembersihan otomatis repositori dokumen yang besar. + +Siap untuk langkah selanjutnya? Cobalah mengintegrasikan logika ini ke dalam layanan latar belakang yang memantau folder unggahan, atau bereksperimen dengan `WarningCallback` untuk membuat laporan file mana yang memerlukan pemulihan. Semakin Anda bermain dengan API, semakin Anda akan menghargai betapa kuatnya Aspose.Words untuk pemrosesan dokumen dunia nyata. + +Ada variasi yang ingin Anda bagikan—mungkin menangani file yang dilindungi kata sandi atau menggabungkan dokumen yang dipulihkan? Tinggalkan komentar di bawah, dan mari teruskan diskusi. 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/programming-with-markdownsaveoptions/_index.md b/words/indonesian/net/programming-with-markdownsaveoptions/_index.md index 99c8d539a0..8265507308 100644 --- a/words/indonesian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/indonesian/net/programming-with-markdownsaveoptions/_index.md @@ -41,6 +41,8 @@ Pelajari cara mengekspor dokumen Word ke Markdown dengan panduan lengkap C#. Pelajari cara menyimpan file DOCX sebagai Markdown dengan panduan langkah demi langkah menggunakan C#. ### [Cara Mengekspor Markdown dari DOCX – Panduan Lengkap](./how-to-export-markdown-from-docx-complete-guide/) Pelajari cara mengekspor dokumen DOCX ke format Markdown dengan panduan lengkap. +### [Simpan Word sebagai Markdown dengan Folder Gambar Kustom – Panduan Lengkap](./save-word-as-markdown-with-custom-image-folder-full-guide/) +Pelajari cara menyimpan dokumen Word sebagai Markdown dengan mengatur folder gambar khusus menggunakan Aspose.Words untuk .NET. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/indonesian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..94983058c0 --- /dev/null +++ b/words/indonesian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: Simpan Word sebagai Markdown dan ekstrak gambar dari docx menggunakan + callback. Pelajari cara menggunakan callback untuk menyimpan folder gambar markdown + secara efisien. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: id +og_description: Simpan Word sebagai Markdown dan ekstrak gambar dari docx menggunakan + callback. Panduan ini menunjukkan cara menggunakan callback untuk membuat folder + gambar markdown. +og_title: Simpan Word sebagai Markdown – Panduan Langkah-demi-Langkah Lengkap +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Simpan Word sebagai Markdown dengan Folder Gambar Kustom – Panduan Lengkap +url: /id/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Simpan Word sebagai Markdown – Panduan Lengkap Langkah‑per‑Langkah + +Pernahkah Anda perlu **menyimpan Word sebagai Markdown** tetapi tidak yakin harus berbuat apa dengan gambar yang disematkan? Anda tidak sendirian. Dalam banyak proyek, output markdown terlihat bagus—*sampai* Anda menyadari tautan gambar rusak karena file tidak pernah keluar dari paket Word. + +Kabar baiknya, Aspose.Words memberi Anda cara bersih untuk **mengekstrak gambar dari docx** dan menempatkannya tepat di mana Anda inginkan, menggunakan **callback** yang memungkinkan Anda mengontrol folder gambar markdown. Dalam tutorial ini kami akan membahas seluruh proses, mulai dari memuat file `.docx` hingga menghasilkan folder PNG yang rapi (atau format apa pun yang Anda miliki) dan file markdown yang mengarah ke gambar-gambar tersebut. + +Pada akhir panduan ini Anda akan dapat: + +* Mengonversi dokumen Word apa pun ke Markdown dengan satu baris kode. +* Secara otomatis mengekspor setiap gambar ke sub‑folder `images` yang khusus. +* Menyesuaikan nama file sehingga tidak pernah bentrok, bahkan ketika sumber berisi puluhan gambar. + +Tanpa skrip eksternal, tanpa menyalin‑tempel manual—hanya C# murni dan Aspose.Words. + +## Prasyarat + +Sebelum kita mulai, pastikan Anda memiliki: + +* **Aspose.Words for .NET** (versi stabil terbaru; pada saat penulisan ini versi 24.9). +* Lingkungan pengembangan .NET (Visual Studio, Rider, atau `dotnet` CLI). +* Dokumen Word (`.docx`) yang berisi setidaknya satu gambar—sebut saja `DocWithImages.docx`. + +Jika Anda belum pernah menggunakan Aspose.Words sebelumnya, jangan khawatir. Library ini sepenuhnya dikelola, tidak memerlukan interop COM, dan berfungsi pada .NET 6+ serta .NET Framework 4.8. + +## Langkah 1 – Menyiapkan Proyek dan Menginstal Paket + +Pertama, buat aplikasi console baru (atau tambahkan kode ke proyek yang sudah ada). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Tips pro:** Jika Anda menargetkan .NET 6, `Program.cs` default sudah menggunakan pernyataan top‑level, yang membuat contoh menjadi singkat. + +## Langkah 2 – Membuat Callback untuk Mengontrol Penyimpanan Gambar + +Aspose.Words memanggil `IResourceSavingCallback.ResourceSaving` untuk setiap sumber daya eksternal yang perlu ditulis (gambar, CSS, dll.). Dengan mengimplementasikan antarmuka ini, kami memperoleh kontrol penuh atas **bagaimana folder gambar markdown** dibangun. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Mengapa menggunakan callback? + +* **Kontrol granular** – Anda menentukan struktur folder dan skema penamaan. +* **Kinerja** – Anda menulis aliran sekali, menghindari fallback penulisan ganda library. +* **Fleksibilitas** – Anda dapat menambahkan logging, optimasi gambar, atau bahkan mengunggah ke penyimpanan cloud pada titik ini. + +## Langkah 3 – Memuat Dokumen Word + +Sekarang callback sudah siap, kita hanya perlu mengarahkan Aspose.Words ke file sumber. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Bagaimana jika file tidak ditemukan?** +> `Document` akan melempar `FileNotFoundException`. Bungkus pemuatan dalam `try/catch` jika Anda mengharapkan jalur dinamis. + +## Langkah 4 – Menghubungkan MarkdownSaveOptions + +Kelas `MarkdownSaveOptions` memungkinkan kami menyambungkan callback yang baru saja dibuat. Kami juga mengatur folder tempat gambar akan disimpan relatif terhadap file markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Properti `ImagesFolder` memberi tahu Aspose untuk menghasilkan tautan markdown seperti `![Alt text](images/img_123.png)`. Karena kami juga mengatur `ResourceFileName` di dalam callback, file sebenarnya akan ditempatkan tepat di sana. + +## Langkah 5 – Menyimpan sebagai Markdown dan Memverifikasi Hasil + +Akhirnya, kami menulis file markdown. Callback sudah mengisi sub‑folder `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Output yang Diharapkan + +Menjalankan program seharusnya mencetak sesuatu seperti: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Buka `Doc.md` di penampil markdown apa pun; Anda akan melihat tautan gambar yang mengarah dengan benar ke folder `images`. + +--- + +## Pertanyaan yang Sering Diajukan (FAQ) + +### Cara **mengekstrak gambar dari docx** tanpa mengonversi ke markdown? + +Anda dapat menggunakan kembali `MyMarkdownResourceCallback` yang sama tetapi memberikannya ke `doc.Save("images.zip", SaveFormat.Zip)`. Callback tetap akan dipanggil untuk setiap gambar, memungkinkan Anda menempatkannya di mana saja yang Anda inginkan. + +### Bagaimana jika saya membutuhkan **format gambar yang berbeda**? + +`args.FileName` sudah berisi ekstensi asli (`.png`, `.jpg`, dll.). Jika Anda harus mengonversi semua gambar ke satu format, tambahkan langkah konversi di dalam `ResourceSaving` sebelum menulis aliran. + +### Bisakah saya **menyesuaikan folder gambar markdown** per dokumen? + +Tentu saja. Callback menerima jalur folder melalui konstruktor, sehingga Anda dapat membuat instance callback baru dengan folder yang berbeda untuk setiap dokumen dalam proses batch. + +### Apakah ini bekerja dengan **dokumen besar** (ratusan gambar)? + +Ya. Callback menyalurkan gambar langsung ke disk, menjaga penggunaan memori tetap rendah. Pastikan drive target memiliki ruang yang cukup dan Anda tidak mencapai batas handle file OS. + +--- + +## Contoh Lengkap yang Berfungsi + +Berikut adalah program lengkap yang siap disalin‑tempel. Ganti `YOUR_DIRECTORY` dengan jalur absolut atau relatif yang sesuai dengan lingkungan Anda. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +{{< /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-officemath/_index.md b/words/indonesian/net/programming-with-officemath/_index.md index b853b4ac3f..e27e0400d3 100644 --- a/words/indonesian/net/programming-with-officemath/_index.md +++ b/words/indonesian/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Tutorial Aspose.Words untuk .NET tentang Pemrosesan Kata dengan OfficeMath akan | Judul | Deskripsi | Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Persamaan Matematika](./math-equations/) | Pelajari cara mengonfigurasi persamaan matematika dalam dokumen Word menggunakan Aspose.Words untuk .NET. Panduan langkah demi langkah dengan contoh, Tanya Jawab Umum, dan banyak lagi. | +| [Simpan docx sebagai txt – Ekspor Word Math ke LaTeX dalam C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Pelajari cara mengekspor persamaan Word ke format LaTeX dan menyimpan dokumen docx sebagai file txt menggunakan C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/indonesian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..a4ded161c6 --- /dev/null +++ b/words/indonesian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: Simpan docx ke txt dengan cepat dan pelajari cara mengekspor matematika + ke LaTeX. Konversi Word ke txt, tangani Office Math, dan jaga persamaan tetap utuh. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: id +og_description: Simpan docx sebagai txt dengan ekspor matematika LaTeX. Tutorial C# + langkah‑demi‑langkah yang menunjukkan cara mengonversi Word ke txt dan mempertahankan + persamaan. +og_title: Simpan docx sebagai txt – Panduan C# untuk mengekspor matematika Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Simpan docx sebagai txt – Ekspor Matematika Word ke LaTeX dalam C# +url: /id/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Simpan docx sebagai txt – Ekspor Word Math ke LaTeX dalam C# + +Pernahkah Anda perlu **save docx as txt** tetapi khawatir persamaan Anda akan berubah menjadi kumpulan simbol yang berantakan? Anda tidak sendirian. Banyak pengembang menemui kendala ini saat mereka mencoba **convert word to txt** untuk pemrosesan lanjutan, terutama ketika sumbernya berisi objek Office Math. + +Kabar baiknya? Dengan beberapa baris C# dan opsi penyimpanan yang tepat, Anda dapat mempertahankan setiap persamaan sebagai LaTeX yang bersih, menjadikan file teks biasa dapat dibaca manusia dan siap untuk alur kerja ilmiah. Dalam tutorial ini kami akan membahas seluruh proses, menjawab *bagaimana mengekspor matematika* dari file Word, dan menunjukkan *cara mengonversi docx* tanpa kehilangan akurasi matematika. + +## Apa yang Akan Anda Pelajari + +- Memuat file `.docx` menggunakan Aspose.Words (atau perpustakaan kompatibel lainnya). +- Mengonfigurasi `TxtSaveOptions` sehingga Office Math diekspor sebagai LaTeX. +- Menyimpan dokumen sebagai file `.txt` yang mempertahankan persamaan utuh. +- Tips menangani kasus tepi seperti persamaan tersembunyi atau dokumen besar. +- Contoh kode lengkap yang dapat langsung Anda salin‑tempel. + +Tidak perlu alat build yang rumit, hanya proyek .NET dan paket NuGet Aspose.Words. Mari mulai. + +--- + +## Prasyarat + +| Persyaratan | Mengapa penting | +|-------------|-----------------| +| .NET 6.0 atau lebih baru | Fitur bahasa modern dan kinerja yang lebih baik. | +| Aspose.Words untuk .NET (NuGet) | Menyediakan `Document`, `TxtSaveOptions`, dan `OfficeMathExportMode`. | +| File Word (`.docx`) yang berisi persamaan | Untuk melihat ekspor LaTeX beraksi. | +| Pengetahuan dasar C# | Anda akan mengikuti kode baris demi baris. | + +Jika Anda belum menambahkan Aspose.Words, jalankan: + +```bash +dotnet add package Aspose.Words +``` + +Itu saja—tidak ada konfigurasi tambahan yang diperlukan. + +--- + +## Langkah 1: Muat File DOCX + +Pertama, kita perlu membawa dokumen sumber ke memori. Anggap saja ini seperti membuka buku sebelum mulai membaca. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Tip pro:** Gunakan jalur absolut selama pengujian untuk menghindari kejutan “file tidak ditemukan”. Pada produksi Anda kemungkinan akan menerima jalur dari file konfigurasi atau unggahan pengguna. + +--- + +## Langkah 2: Konfigurasikan Opsi Penyimpanan TXT untuk Ekspor Matematika + +Secara default, `TxtSaveOptions` mengekspor teks biasa dan menghapus Office Math. Kita tidak menginginkannya. Menetapkan `OfficeMathExportMode` ke `LaTeX` memberi tahu perpustakaan untuk menerjemahkan setiap persamaan ke representasi LaTeX‑nya. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Mengapa LaTeX? + +LaTeX adalah bahasa universal penerbitan ilmiah. Ketika Anda kemudian memasukkan file `.txt` ke pemroses markdown, notebook Jupyter, atau alat lain yang mendukung LaTeX, persamaan akan dirender dengan sempurna. Jika Anda lebih suka simbol Unicode biasa, Anda dapat beralih ke `OfficeMathExportMode.Unicode`, tetapi LaTeX memberi Anda kontrol paling besar. + +--- + +## Langkah 3: Simpan Dokumen sebagai File Teks Biasa + +Sekarang keajaiban terjadi. Metode `Save` menulis dokumen ke disk menggunakan opsi yang baru saja kita definisikan. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Setelah baris ini dijalankan, `Math.txt` akan berisi: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Perhatikan bagaimana persamaan muncul di dalam `\[` dan `\]`—tepat seperti yang diharapkan LaTeX. + +--- + +## Cara Mengekspor Matematika dari Dokumen Kompleks + +### Menangani Persamaan Tersembunyi atau Inline + +Beberapa file Word menyimpan persamaan di dalam bingkai teks tersembunyi. Aspose.Words memperlakukan mereka sama dengan persamaan yang terlihat, sehingga ekspor LaTeX bekerja secara otomatis. Namun, jika Anda melihat persamaan yang hilang, periksa kembali bahwa objek `Document` tidak diatur untuk mengabaikan konten tersembunyi: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Dokumen Besar dan Penggunaan Memori + +Menyimpan tesis 500 halaman dapat mengonsumsi banyak RAM. Untuk menjaga jejak memori tetap rendah, Anda dapat men-stream output: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming menulis potongan ke disk saat mereka dihasilkan, mencegah seluruh file berada di memori sekaligus. + +--- + +## Kesalahan Umum & Cara Menghindarinya + +| Kesalahan | Gejala | Solusi | +|-----------|--------|--------| +| Kurang tanda kurung LaTeX | Persamaan muncul sebagai kode mentah (`E = mc^{2}`) | Pastikan `OfficeMathExportMode = LaTeX`. | +| File output kosong | Jalur salah atau izin tidak cukup | Verifikasi direktori output ada dan dapat ditulisi. | +| Karakter kacau | File dienkode UTF‑8 tanpa BOM pada sistem yang mengharapkan ANSI | Tambahkan `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Persamaan menghilang setelah konversi | Dokumen dimuat dengan `LoadOptions` yang mengecualikan matematika | Gunakan `LoadOptions` default atau set `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Contoh Lengkap yang Dapat Dijalankan + +Berikut adalah program lengkap yang dapat Anda kompilasi dan jalankan. Termasuk penanganan error, validasi jalur, dan log konsol kecil sehingga Anda tahu semuanya berhasil. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Output yang diharapkan** (cuplikan dari `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Sekarang Anda dapat memasukkan file ini ke prosesor apa pun yang mendukung LaTeX, dan persamaan akan dirender dengan indah. + +--- + +## Cara Mengonversi DOCX ke TXT Tanpa Kehilangan Format + +Jika Anda hanya membutuhkan teks biasa dan tidak peduli dengan matematika, cukup hilangkan baris `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Namun ingat, **bagaimana mengekspor matematika** adalah pembeda untuk alur kerja ilmiah. Menjaga LaTeX tetap utuh adalah apa yang membuat konversi ini benar‑benar berguna. + +--- + +## Langkah Selanjutnya & Topik Terkait + +- **Konversi batch:** Bungkus kode dalam loop `foreach` untuk memproses seluruh folder file `.docx`. +- **Pembuatan markdown:** Tambahkan header `#` atau bullet `*` ke teks untuk menghasilkan markdown siap terbit. +- **Ekspor PDF:** Gunakan `PdfSaveOptions` untuk membuat versi PDF bersamaan dengan txt. +- **Penyesuaian LaTeX lanjutan:** Pasca‑proses output dengan regex untuk mengganti `\[`/`\]` menjadi `$...$` bagi persamaan inline. + +Masing‑masing langkah ini dibangun di atas fondasi yang sama—memuat `Document` dan memilih `SaveOptions` yang tepat. Silakan bereksperimen; API cukup fleksibel untuk sebagian besar skenario otomasi dokumen. + +--- + +## Kesimpulan + +Kami telah membahas semua yang Anda perlukan untuk **save docx as txt** sambil mempertahankan setiap persamaan sebagai LaTeX. Dari memuat file sumber, mengonfigurasi `TxtSaveOptions` untuk **bagaimana mengekspor matematika**, hingga menulis file teks akhir, seluruh alur kerja muat dalam beberapa pernyataan C# yang singkat. + +Sekarang Anda dapat mengotomatisasi konversi laporan Word, makalah akademik, atau dokumen apa pun yang mencampur teks dan matematika, serta memasukkan `.txt` yang dihasilkan ke alat downstream tanpa kehilangan detail ilmiah. + +Cobalah, sesuaikan opsi sesuai kebutuhan Anda, dan beri tahu kami di komentar bagaimana hasilnya. Selamat coding! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "pipeline simpan docx sebagai txt") + +{{< /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-pdfsaveoptions/_index.md b/words/indonesian/net/programming-with-pdfsaveoptions/_index.md index 967ed3b1ec..a9cdfec29f 100644 --- a/words/indonesian/net/programming-with-pdfsaveoptions/_index.md +++ b/words/indonesian/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Bahasa Indonesia: --- | --- Bahasa Indonesia: | [Perbarui Properti Terakhir Dicetak dalam Dokumen PDF](./update-last-printed-property/) | Pelajari cara memperbarui properti cetak terakhir dalam dokumen PDF menggunakan Aspose.Words untuk .NET dengan panduan langkah demi langkah kami. Bahasa Indonesia: | [Render 3D DML 3D Effects dalam Dokumen PDF](./dml-3deffects-rendering/) | Pelajari cara membuat efek DML 3D yang menakjubkan dalam dokumen PDF menggunakan Aspose.Words untuk .NET dengan panduan langkah demi langkah yang komprehensif ini. Bahasa Indonesia: | [Interpolasi Gambar dalam Dokumen PDF](./interpolate-images/) | Pelajari cara menginterpolasi gambar dalam dokumen PDF menggunakan Aspose.Words untuk .NET dengan panduan langkah demi langkah kami. Tingkatkan kualitas gambar PDF Anda dengan mudah. | - +| [Buat PDF Aksesibel dari Word – Panduan Langkah demi Langkah](./create-accessible-pdf-from-word-step-by-step-guide/) | Pelajari cara membuat PDF yang dapat diakses dari dokumen Word dengan Aspose.Words untuk .NET melalui panduan langkah demi langkah ini. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/indonesian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..bd8b2d43ec --- /dev/null +++ b/words/indonesian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Buat PDF yang dapat diakses dari file DOCX di C#. Pelajari cara mengonversi + Word ke PDF, menyimpan DOCX sebagai PDF, dan memastikan kepatuhan PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: id +og_description: Buat PDF yang dapat diakses dari Word dengan C#. Panduan ini menunjukkan + cara mengonversi Word ke PDF, menyimpan docx sebagai PDF, dan memenuhi standar PDF/UA. +og_title: Buat PDF Aksesibel – Tutorial Lengkap C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Buat PDF Aksesibel dari Word – Panduan Langkah demi Langkah +url: /id/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Buat PDF yang Aksesibel dari Word – Tutorial Pemrograman Lengkap + +Pernah perlu **membuat PDF yang aksesibel** dari dokumen Word tetapi tidak yakin pengaturan mana yang harus diubah? Anda tidak sendirian. Di banyak perusahaan, kepatuhan terhadap PDF/UA (Universal Accessibility) merupakan persyaratan wajib, dan tombol “convert‑to‑PDF” biasa tidak cukup. + +Dalam panduan ini kami akan menelusuri solusi singkat, menyeluruh yang **mengonversi Word ke PDF**, **menyimpan docx sebagai PDF**, dan menjamin hasilnya memenuhi standar aksesibilitas. Tanpa referensi yang samar—hanya kode yang dapat Anda salin‑tempel, plus penjelasan “mengapa” di balik setiap baris. + +> **TL;DR:** Muat file `.docx`, atur `PdfSaveOptions.Compliance` ke `PdfUa1` (atau `PdfUa2`), dan panggil `Document.Save`. Itu saja yang Anda perlukan untuk **membuat PDF yang aksesibel** dengan Aspose.Words untuk .NET. + +--- + +## Apa yang Akan Anda Pelajari + +- Cara **mengonversi Word ke PDF** sambil mempertahankan heading, alt‑text, dan urutan baca. +- Perbedaan antara `PdfUa1` dan `PdfUa2` serta kapan memilih masing‑masing. +- Cara **menyimpan docx sebagai PDF** hanya dengan beberapa baris C#. +- Kendala umum (font yang hilang, tag yang tidak didukung) dan solusi cepatnya. +- Contoh kode siap‑jalankan yang dapat Anda masukkan ke proyek .NET apa pun. + +### Prasyarat + +- .NET 6 atau lebih baru (kode ini juga bekerja pada .NET Framework 4.7+). +- Aspose.Words untuk .NET terpasang via NuGet (`Install-Package Aspose.Words`). +- File Word (`input.docx`) yang sudah berisi struktur yang tepat (style, alt‑text untuk gambar). + +Jika Anda belum menambahkan Aspose.Words, jalankan perintah berikut di Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +Itulah satu‑satunya dependensi eksternal yang Anda perlukan. + +--- + +## Buat PDF yang Aksesibel – Mengapa Aksesibilitas Penting + +Ketika sebuah PDF ditandai sebagai **PDF/UA** (Universal Accessibility), pembaca layar dapat menavigasi heading, tabel, dan field formulir seperti pada file Word asli. Ini bukan sekadar fitur tambahan; banyak pemerintah dan korporasi menganggap kepatuhan PDF/UA sebagai keharusan hukum. + +Menetapkan properti `Compliance` pada `PdfSaveOptions` memberi tahu pustaka untuk menyematkan tag yang diperlukan, mengatur bahasa dokumen yang tepat, dan menambahkan urutan baca logis. Melewatkan langkah ini menghasilkan PDF “visual‑only” yang gagal dalam audit aksesibilitas. + +--- + +## Mengonversi Word ke PDF dengan Aspose.Words + +Berikut cara paling sederhana untuk **mengonversi Word ke PDF** sambil menjaga dokumen tetap aksesibel. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Apa yang terjadi di sini?** + +- `Document` membaca file Word, mempertahankan semua style dan struktur. +- `PdfSaveOptions.Compliance` memberi tahu Aspose.Words untuk menandai output sebagai PDF/UA. +- `doc.Save` menulis PDF ke disk, secara otomatis menyematkan tag. + +> **Pro tip:** Jika file Word sumber Anda menggunakan style heading kustom, pastikan mereka dipetakan ke level heading bawaan (`Heading1`, `Heading2`, …). Hal ini memastikan PDF yang dihasilkan memperoleh tag heading yang tepat. + +--- + +## Simpan Docx sebagai PDF – Mengonfigurasi Kepatuhan PDF/UA + +Jika Anda sudah familiar dengan kelas `PdfSaveOptions`, mungkin bertanya apakah ada saklar lain yang memengaruhi aksesibilitas. Beberapa properti berguna: + +| Property | Effect on Accessibility | Typical Value | +|----------|------------------------|---------------| +| `Compliance` | Mengaktifkan/mematikan tagging PDF/UA | `PdfCompliance.PdfUa1` atau `PdfUa2` | +| `EmbedFullFonts` | Menjamin pembaca melihat tipografi yang dimaksud | `true` (default) | +| `OptimizeOutput` | Mengurangi ukuran file tanpa menghapus tag | `true` | + +Anda dapat memperluas cuplikan sebelumnya seperti ini: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Berpindah ke `PdfUa2` menambahkan dukungan untuk fitur PDF/UA terbaru seperti penandaan *artifact* untuk gambar dekoratif. Jika Anda tidak memerlukannya, tetap gunakan `PdfUa1` untuk kompatibilitas maksimal dengan teknologi bantu yang lebih lama. + +--- + +## Ekspor Docx ke PDF – Contoh Lengkap yang Berfungsi + +Berikut aplikasi konsol mandiri yang mendemonstrasikan seluruh alur, mulai dari memuat file hingga memverifikasi output. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Hasil yang Diharapkan + +- Sebuah file bernama **Compliant.pdf** muncul di folder yang sama dengan executable. +- Membuka PDF di Adobe Acrobat Pro → *Tools → Accessibility → Full Check* seharusnya melaporkan **No accessibility issues** (asalkan file Word sumber terstruktur dengan baik). +- Tab *Properties → Advanced* pada PDF akan menampilkan **PDF/UA** di bagian “PDF/A and PDF/UA compliance”. + +--- + +## Kasus Pinggiran Umum & Cara Menanganinya + +| Situation | Why it matters | Quick fix | +|-----------|----------------|-----------| +| **Missing fonts** | PDF dapat beralih ke font default, merusak tata letak visual. | Atur `EmbedFullFonts = true` (sudah default) dan pastikan file font dapat diakses pada mesin build. | +| **Images without alt‑text** | Pembaca layar akan membaca “image” tanpa deskripsi. | Tambahkan `Alt Text` di Word (`Klik kanan → Format Picture → Alt Text`) sebelum konversi. | +| **Custom styles not recognized as headings** | PDF/UA membutuhkan tag heading yang tepat. | Pemetakan style kustom ke heading bawaan via `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Mengonversi file 500‑halaman dapat meningkatkan penggunaan RAM. | Gunakan `doc.Save(outputPath, options)` dengan `options.SaveFormat = SaveFormat.Pdf` dan pertimbangkan pemrosesan bertahap jika terjadi `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | Kadang Anda hanya menginginkan PDF visual cepat. | Hilangkan pengaturan `Compliance` atau atur ke `PdfCompliance.Pdf15`. | + +--- + +## Contoh Gambar (Alt Text Disertakan) + +![Screenshot menunjukkan pohon tag PDF/UA di Adobe Acrobat – memperlihatkan bahwa kami berhasil membuat PDF yang aksesibel](https://example.com/images/accessible-pdf-screenshot.png) + +*Alt‑text di atas memperkuat kata kunci utama dan membantu baik pengguna maupun model AI memahami konteks gambar.* + +--- + +## Pertanyaan yang Sering Diajukan + +**T: Apakah ini bekerja dengan .NET Core?** +J: Tentu saja. Aspose.Words bersifat lintas‑platform; cukup referensikan paket NuGet di proyek .NET 6+ Anda. + +**T: Bisakah saya memproses batch banyak file DOCX?** +J: Ya. Bungkus logika pemuatan dan penyimpanan dalam loop `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Ingat untuk menggunakan satu instance `PdfSaveOptions` demi performa. + +**T: Bagaimana jika saya perlu menambahkan tag PDF/UA kustom yang tidak dikeluarkan secara otomatis oleh Aspose?** +J: Gunakan API PDF tingkat rendah (`PdfSaveOptions.CustomProperties`) atau proses PDF setelahnya dengan pustaka seperti iText 7 yang memungkinkan penyisipan tag manual. + +--- + +## Kesimpulan + +Anda + +{{< /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 11693f2f17..d13338131b 100644 --- a/words/indonesian/net/working-with-fonts/_index.md +++ b/words/indonesian/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ Bahasa Indonesia: [Atur Folder Font](./set-fonts-folder/) | Pelajari cara mengat | [Terima Pemberitahuan Peringatan](./receive-warning-notification/) Pelajari cara menerima pemberitahuan peringatan saat menggunakan Aspose.Words untuk .NET dan mengelola masalah atau peringatan apa pun dalam dokumen Anda. Bahasa Indonesia: | [Contoh Sumber Font Steam Sumber Daya](./resource-steam-font-source-example/) | Pelajari cara menggunakan Resource Stream Font Source untuk memuat font kustom ke Aspose.Words untuk .NET. Bahasa Indonesia: | [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 – Panduan Lengkap](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Pelajari cara mendeteksi font yang digunakan dalam dokumen Word dengan Aspose.Words melalui panduan lengkap langkah demi langkah. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/indonesian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/indonesian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..3e1176686a --- /dev/null +++ b/words/indonesian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-04-07 +description: Pelajari cara mendeteksi font dan menangkap peringatan saat menangani + font yang hilang di C# menggunakan Aspose.Words. Kode langkah demi langkah disertakan. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: id +og_description: Bagaimana cara mendeteksi font di Aspose.Words? Ikuti tutorial ini + untuk menangkap peringatan dan menangani font yang hilang dengan mudah. +og_title: Cara Mendeteksi Font di Aspose.Words – Panduan Lengkap +tags: +- Aspose.Words +- C# +- Font handling +title: Cara Mendeteksi Font di Aspose.Words – Panduan Lengkap +url: /id/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara Mendeteksi Font di Aspose.Words – Panduan Lengkap + +Pernah bertanya‑tanya **bagaimana cara mendeteksi font** yang tidak ada dalam dokumen Word sebelum Anda mengirimnya ke produksi? Anda tidak sendirian. Dalam banyak skenario perusahaan, satu font yang hilang dapat merusak alur konversi PDF atau menyebabkan gangguan tata letak yang tampak tidak profesional. Kabar baiknya, Aspose.Words menyediakan cara bawaan untuk menemukan tipe huruf yang tidak ada tersebut dan menampilkan peringatan yang jelas. + +Dalam tutorial ini kami akan membahas secara detail **cara mendeteksi font**, **cara menangkap peringatan**, dan praktik terbaik untuk **menangani font yang hilang** sehingga aplikasi Anda tetap tangguh. Tanpa alat eksternal, tanpa tebakan—hanya kode C# murni yang dapat Anda tambahkan ke proyek Anda sekarang juga. + +> **Pratinjau cepat:** Pada akhir tutorial Anda akan memiliki `FontSubstitutionWarningCollector` yang dapat digunakan kembali untuk mengumpulkan setiap pesan substitusi font selama pemuatan dokumen, dan Anda akan tahu cara merespons ketika sebuah font tidak dapat ditemukan. + +--- + +## Apa yang Akan Anda Pelajari + +- Cara mengonfigurasi `LoadOptions` untuk mendengarkan peringatan substitusi font. +- Cara menangkap peringatan tersebut dalam kelas kolektor khusus. +- Cara memproses peringatan yang terkumpul dan memutuskan apakah akan menghentikan proses, mencatat, atau mengganti font. +- Penanganan kasus tepi untuk dokumen yang merujuk font remote atau font yang disematkan. + +**Prasyarat:** .NET 6+ (atau .NET Framework 4.6+), Aspose.Words untuk .NET (versi terbaru), dan pemahaman dasar tentang C#. Jika Anda belum pernah menggunakan Aspose.Words sebelumnya, jangan khawatir—panduan ini mengasumsikan hanya beberapa menit waktu penyiapan. + +--- + +## Cara Mendeteksi Font Menggunakan Aspose.Words LoadOptions + +Langkah pertama untuk mendeteksi font yang hilang adalah memberi tahu Aspose.Words untuk melaporkannya. Hal ini dilakukan melalui properti `LoadOptions.WarningCallback`, yang menerima kelas apa pun yang mengimplementasikan `IWarningCallback`. Di bawah ini kami membuat kolektor kecil yang menyimpan setiap peringatan untuk inspeksi selanjutnya. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Mengapa ini penting:** Tanpa callback peringatan, Aspose.Words secara diam‑diam mengganti font yang hilang dengan font default, dan Anda tidak pernah tahu bahwa ada masalah. Dengan menangkap `WarningType.FontSubstitution` kita mendapatkan visibilitas penuh—tepat data yang Anda butuhkan untuk **mendeteksi font** yang tidak tersedia di mesin host. + +Sekarang kita mengaitkan kolektor ke dalam `LoadOptions` dan memuat sebuah dokumen: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Tips pro:** Jika Anda bekerja dengan banyak dokumen secara batch, gunakan kembali instance `FontSubstitutionWarningCollector` yang sama tetapi ingat untuk memanggil `Clear()` di antara pemuatan untuk menghindari pencampuran peringatan dari file yang berbeda. + +--- + +## Menangkap Peringatan Selama Pemuatan Dokumen + +Setelah dokumen dimuat, kolektor sudah menyimpan setiap peringatan yang terkait dengan font. Pertanyaan logis berikutnya adalah: *Bagaimana saya menangkap peringatan* dengan cara yang mudah dicatat atau ditampilkan? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Output tipikal terlihat seperti: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Apa yang diberitahukan:** Setiap baris mengungkapkan nama font asli dan fallback yang dipilih oleh Aspose.Words. Dengan informasi ini Anda dapat memutuskan apakah fallback tersebut dapat diterima atau apakah Anda perlu menyematkan font yang hilang secara manual. + +--- + +## Menangani Font yang Hilang dengan Elegan + +Mendeteksi dan menangkap peringatan hanyalah setengah dari perjuangan. Nilai sebenarnya muncul ketika Anda **menangani font yang hilang** secara siap produksi. Berikut tiga strategi umum: + +1. **Catat dan Lanjutkan** – Cocok untuk pemrosesan batch di mana Anda hanya memerlukan jejak audit. +2. **Hentikan pada Font Kritis** – Lemparkan exception jika font tertentu (misalnya, tipe huruf merek khusus) tidak ada. +3. **Sematkan Font Secara Dinamis** – Muat font yang hilang dari folder yang diketahui dan daftarkan ke Aspose.Words sebelum memuat ulang dokumen. + +### Contoh: Hentikan pada Font Kritis + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Contoh: Auto‑Embed Font yang Hilang + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Mengapa pola ini membantu:** Dengan secara eksplisit memutuskan apa yang harus dilakukan ketika sebuah font tidak ada, Anda menghilangkan fallback diam‑diam yang dapat merusak merek atau keterbacaan. Inilah inti dari **menangani font yang hilang** secara terkontrol. + +--- + +## Contoh Kerja Lengkap + +Menggabungkan semuanya, berikut adalah program tunggal yang siap dijalankan yang mendemonstrasikan **cara mendeteksi font**, **cara menangkap peringatan**, dan kebijakan sederhana untuk **menangani font yang hilang** dengan mencatatnya. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Hasil yang diharapkan:** Saat Anda menjalankan program terhadap dokumen yang merujuk font yang tidak ada di mesin, konsol akan menampilkan setiap peringatan substitusi. Jika ada peringatan yang melibatkan font dari himpunan `critical`, program akan keluar lebih awal, mencegah PDF yang cacat dihasilkan. + +--- + +## Pertanyaan yang Sering Diajukan (FAQ) + +| Pertanyaan | Jawaban | +|------------|----------| +| *Apakah saya memerlukan lisensi untuk Aspose.Words agar dapat menggunakan kode ini?* | Ya, lisensi Aspose.Words yang valid menghilangkan watermark evaluasi dan membuka semua fungsi penuh. | +| *Apakah pendekatan ini dapat mendeteksi font yang disematkan?* | Font yang disematkan sudah menjadi bagian dari file, sehingga Aspose.Words tidak akan mengeluarkan peringatan substitusi. Anda dapat memeriksa `Document.FontInfos` untuk mendaftar font yang disematkan bila diperlukan. | +| *Bagaimana jika font yang hilang adalah font sistem di Windows tetapi tidak ada di Linux?* | Peringatan yang sama akan muncul di Linux karena font tidak terpasang di sana. Gunakan strategi “menangani font yang hilang” untuk menyertakan file `.ttf` yang diperlukan bersama aplikasi Anda. | +| *Apakah kolektor peringatan berjalan di thread | + +{{< /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 9f8ae95ae3..6fadd10c94 100644 --- a/words/italian/net/basic-conversions/_index.md +++ b/words/italian/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ | [Come esportare LaTeX da Word – Guida passo‑passo](./how-to-export-latex-from-word-step-by-step-guide/) | Scopri come esportare contenuti LaTeX da documenti Word usando Aspose.Words per .NET, con esempi pratici e istruzioni dettagliate. | | [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#. | +| [Converti DOCX in PDF in C# – Guida completa di programmazione](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Scopri come convertire DOCX in PDF usando C# con Aspose.Words, con esempi di codice dettagliati e consigli pratici. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/italian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..cfc1398ade --- /dev/null +++ b/words/italian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: Converti DOCX in PDF in C# rapidamente. Scopri come salvare Word come + PDF, caricare un documento docx in C# e garantire la conformità PDF/UA‑2 in pochi + minuti. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: it +og_description: Converti DOCX in PDF in C# istantaneamente. Questa guida ti mostra + come salvare Word come PDF, caricare un documento docx in C# e rispettare gli standard + PDF/UA‑2. +og_title: Converti DOCX in PDF con C# – Guida passo passo +tags: +- Aspose.Words +- C# +- PDF Generation +title: Converti DOCX in PDF con C# – Guida completa alla programmazione +url: /it/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Converti DOCX in PDF con C# – Guida Completa alla Programmazione + +Ti è mai capitato di dover **convertire DOCX in PDF** in un'applicazione C# ma non sapevi da dove iniziare? Non sei il solo. Molti sviluppatori si trovano di fronte a un ostacolo quando scoprono che il semplice pulsante “salva come PDF” di Word non si traduce in codice. La buona notizia? Con poche righe di Aspose.Words (o qualsiasi libreria comparabile) puoi automatizzare l'intero processo, mantenere le forme fluttuanti in linea e persino raggiungere la conformità PDF/UA‑2 senza alcuno sforzo. + +In questo tutorial imparerai come **save Word as PDF**, **load docx document C#**, e regolare le opzioni di esportazione in modo che il file risultante sia pronto per le verifiche di accessibilità. Alla fine avrai un programma autonomo e eseguibile che trasforma qualsiasi file `.docx` in un PDF pulito e conforme agli standard. + +> **Perché importa?** +> Convertire DOCX in PDF è una necessità comune per i sistemi di fatturazione, i generatori di report e le pipeline di archiviazione dei documenti. Automatizzarlo elimina passaggi manuali, riduce gli errori umani e garantisce che ogni output abbia esattamente lo stesso aspetto su tutte le piattaforme. + +--- + +## Cosa ti serve + +- **.NET 6.0** o versioni successive (il codice funziona anche su .NET Framework 4.6+) +- **Aspose.Words for .NET** (versione di prova gratuita o licenziata) – puoi installarlo tramite NuGet: `dotnet add package Aspose.Words` +- Un file di esempio `input.docx` posizionato in una cartella di tua scelta (lo chiameremo `YOUR_DIRECTORY`) +- Visual Studio, VS Code, o qualsiasi editor C# tu preferisca + +È tutto—nessun servizio aggiuntivo, nessuna chiamata REST. Solo puro C#. + +--- + +## Passo 1: Carica il documento DOCX in C# + +Prima di poter **convertire docx in pdf**, devi caricare il file Word in memoria. La classe `Document` lo fa per te. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Perché è importante:** +Caricare il file ti fornisce un modello di oggetti completamente analizzato—paragrafi, tabelle, forme fluttuanti, tutto. È il primo passo in qualsiasi flusso di lavoro **load docx document c#**, e verifica anche che il file non sia corrotto prima di sprecare tempo nella conversione. + +> **Consiglio professionale:** Se gestisci file caricati dagli utenti, avvolgi la chiamata `new Document()` in un blocco try/catch per gestire i file DOCX malformati in modo elegante. + +--- + +## Passo 2: Configura le Opzioni di Salvataggio PDF (Conformità e Gestione delle Forme) + +Potresti chiederti, “Devo modificare qualcosa o posso semplicemente chiamare `Save`?” La risposta breve: puoi, ma impostare le opzioni corrette rende il PDF accessibile e visivamente fedele. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Perché è importante:** +- `ExportFloatingShapesAsInlineTag = true` impedisce che gli oggetti fluttuanti vengano persi o disallineati quando il PDF viene visualizzato su dispositivi diversi. +- `Compliance = PdfCompliance.PdfUa2` garantisce che l'output rispetti lo standard PDF/UA‑2, fondamentale per la compatibilità con i lettori di schermo e per l'archiviazione legale. + +Se non ti serve l'accessibilità, puoi rimuovere la riga `Compliance`, ma mantenerla aggiunge quasi nessun overhead e rende la tua soluzione pronta per il futuro. + +--- + +## Passo 3: Salva il Documento come PDF – L'Azione Principale **Convert DOCX to PDF** + +Ora che il documento è caricato e le opzioni sono impostate, la conversione reale è una singola chiamata di metodo. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Cosa vedrai:** +Eseguendo il programma viene generato `output.pdf` nella stessa cartella. Aprilo con qualsiasi visualizzatore PDF e noterai che: + +- Tutto il testo, le tabelle e le immagini appaiono esattamente come nel DOCX originale. +- Le forme fluttuanti sono mantenute in linea, preservando il layout. +- Il file supera gli strumenti di validazione PDF/UA‑2 di base (ad esempio, Adobe Acrobat Preflight). + +--- + +## Esempio Completo – Dall'Inizio alla Fine + +Di seguito trovi un'app console completa, pronta per l'esecuzione, che dimostra l'intero flusso. Copiala e incollala in un nuovo progetto C# e premi **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Output previsto nella console:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +E un ordinato `output.pdf` si trova accanto al tuo file sorgente. + +--- + +## Domande Frequenti & Casi Limite + +| Question | Answer | +|----------|--------| +| **Posso convertire un DOCX memorizzato in un `MemoryStream`?** | Assolutamente. Usa `new Document(stream)` invece di un percorso file. | +| **E se il DOCX contiene macro?** | Aspose.Words ignora le macro VBA per impostazione predefinita; non appariranno nel PDF. | +| **Ho bisogno di una licenza per la produzione?** | La versione di prova gratuita aggiunge una filigrana dopo un certo numero di pagine. Per uso commerciale, ottieni una licenza per rimuoverla. | +| **Come modifico la dimensione della pagina PDF?** | Imposta `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` prima di salvare. | +| **È possibile incorporare un font personalizzato?** | Sì—aggiungi `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Consigli Professionali per un'Esperienza Fluida di **Save Word as PDF** + +- **Elaborazione batch:** Inserisci la logica di conversione in un ciclo e fornisci un elenco di percorsi DOCX. +- **Prestazioni:** Riutilizza una singola istanza di `PdfSaveOptions` quando converti molti file; riduce la pressione sul GC. +- **Logging:** Stampa la dimensione del PDF generato (`new FileInfo(outputPath).Length`) per monitorare i risultati della compressione. +- **Gestione degli errori:** Distinguere tra `FileNotFoundException` (DOCX mancante) e `UnauthorizedAccessException` (problemi di permessi di scrittura). + +--- + +## Conclusione + +Ora disponi di un modello solido e pronto per la produzione per **convertire DOCX in PDF** con C#. Caricando il DOCX, configurando le opzioni di salvataggio PDF e invocando `Save`, puoi **save Word as PDF**, rispettare le sfumature del layout e soddisfare gli standard di accessibilità—tutto in meno di una dozzina di righe di codice. + +Pronto per la prossima sfida? Prova a sostituire `PdfSaveOptions` con `ImageSaveOptions` per **save Word as PNG**, oppure esplora la classe `HtmlSaveOptions` per generare output pronto per il web. In entrambi i casi, i fondamenti **load docx document c#** rimangono gli stessi, rendendo il tuo codice pronto per il futuro. + +Buon coding, e che i tuoi PDF siano sempre conformi! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/italian/net/programming-with-loadoptions/_index.md index e84db824ef..298228f440 100644 --- a/words/italian/net/programming-with-loadoptions/_index.md +++ b/words/italian/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ In questi tutorial imparerai come utilizzare LoadOptions per caricare documenti | [Carica file CHM nel documento Word](./load-chm/) | Carica facilmente file CHM in documenti Word utilizzando Aspose.Words per .NET con questo tutorial passo passo. Perfetto per consolidare la tua documentazione tecnica. | | [Come recuperare un docx con Aspose.Words – passo passo](./how-to-recover-docx-with-aspose-words-step-by-step/) | Scopri come ripristinare documenti docx corrotti usando Aspose.Words per .NET con questa guida dettagliata passo passo. | | [Aspose Load Options – Carica DOCX con impostazioni di font personalizzate](./aspose-load-options-load-docx-with-custom-font-settings/) | Scopri come caricare file DOCX specificando impostazioni di font personalizzate con Aspose Load Options. | +| [Recupera DOCX corrotto – Guida completa C# per riparare e salvare i file](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Scopri come riparare e salvare documenti DOCX corrotti con una guida passo passo in C# usando Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/italian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..8124504376 --- /dev/null +++ b/words/italian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Scopri come recuperare file DOCX corrotti in C# e salvare il documento + recuperato in modo sicuro. Guida passo‑passo con esempio Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: it +og_description: Recupera file DOCX corrotti in C# e salva il documento recuperato + con Aspose.Words. Codice completo, spiegazioni e consigli di best‑practice. +og_title: Recupera DOCX corrotti – Guida passo‑passo C# +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Recupera DOCX corrotti – Guida completa in C# per correggere e salvare i file +url: /it/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Recuperare DOCX Corrotti – Guida Completa in C# per Riparare e Salvare i File + +Hai mai provato ad aprire un DOCX che sembra a posto in Esplora Risorse ma genera un'eccezione nella tua applicazione? È l'incubo classico del “file Word corrotto”, e di solito termina con uno stack‑trace che non vuoi vedere. La buona notizia? Aspose.Words ti offre una funzionalità di **recover corrupted docx** che ti permette di continuare a lavorare anche quando il file è danneggiato. + +In questo tutorial ti guideremo passo passo nel caricare un documento danneggiato, indicare alla libreria di proseguire, e poi **save recovered document** in un nuovo file pulito. Alla fine saprai perché la modalità di recupero è importante, come configurarla e quali insidie evitare—senza vaghi “vedi la documentazione” come scorciatoia. + +## Di cosa avrai bisogno + +- **Aspose.Words for .NET** (qualsiasi versione recente; è stata usata la 24.11 durante la stesura di questa guida) +- Un ambiente di sviluppo .NET (Visual Studio, Rider o VS Code con l’estensione C#) +- Un file DOCX di esempio che sospetti sia corrotto (puoi corrompere un file aprendo un editor zip e cancellando una parte, solo per test) +- Conoscenze di base di C#—nulla di complicato, solo la capacità di creare un’app console + +Se li hai già, ottimo—passiamo direttamente alla soluzione. + +## Passo 1: Configurare LoadOptions con la Strategia di Recupero Corretta + +Il cuore della correzione è l'oggetto `LoadOptions`. Indica ad Aspose.Words come comportarsi quando incontra XML malformato o parti mancanti all'interno del pacchetto DOCX. Il flag `RecoveryMode.RecoverAndContinue` è il più tollerante—cerca di recuperare tutto ciò che può e ignora il resto. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Perché è importante:** Se ometti `LoadOptions` o usi la modalità predefinita (`RecoveryMode.NoRecovery`), il costruttore `Document` lancerà un'eccezione non appena rileva un problema. Con `RecoverAndContinue`, l'API ignora gli errori non critici e costruisce un oggetto documento parziale con cui puoi comunque lavorare. + +> **Consiglio professionale:** Per enormi lotti di file, considera comunque di avvolgere la chiamata di caricamento in un blocco `try/catch`—alcuni errori sono davvero fatali (ad es., file `[Content_Types].xml` mancante) e non possono essere recuperati. + +## Passo 2: Caricare il DOCX Potenzialmente Corrotto + +Ora che le opzioni sono pronte, carica il tuo file. Il costruttore accetta il percorso del file e le `LoadOptions` appena preparate. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Cosa succede dietro le quinte?** +Aspose.Words analizza il contenitore ZIP, legge ogni parte XML e tenta di ricostruire il DOM Open XML. Quando incontra una parte danneggiata, il motore di recupero registra un avviso (visibile nella console se abiliti il debug) e continua. L'oggetto `Document` risultante potrebbe mancare di alcuni paragrafi o immagini, ma il resto del contenuto rimane intatto. + +## Passo 3: Verificare il Contenuto Recuperato (Opzionale ma Consigliato) + +Prima di salvare il file su disco, è consigliabile ispezionare alcuni nodi per assicurarsi che le sezioni importanti siano sopravvissute. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Se l'output sembra sensato, hai recuperato con successo il contenuto **recover corrupted docx**. Se noti sezioni mancanti, puoi comunque decidere se procedere—a volte le parti perse sono solo decorative. + +## Passo 4: Salvare il Documento Recuperato + +Ecco la parte che la maggior parte degli sviluppatori chiede: “Come faccio a **save recovered document** senza re‑introdurre la corruzione originale?” La risposta è semplicemente chiamare `Document.Save` con un nuovo percorso. Aspose.Words scrive un pacchetto ZIP completamente nuovo, quindi eventuali parti rotte residue vengono lasciate indietro. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Perché funziona:** Il metodo `Save` serializza il DOM in memoria nuovamente in un pacchetto Open XML pulito. Poiché le parti rotte non sono mai state caricate nel DOM (sono state scartate durante il recupero), non finiscono mai nel nuovo file. Il risultato è un DOCX sano che si apre in Word, Google Docs o qualsiasi altro visualizzatore. + +## Passo 5: Automatizzare il Processo per più File (Bonus) + +Nelle situazioni reali spesso hai una cartella piena di file problematici. Avvolgi i passaggi precedenti in un ciclo, e avrai una piccola utility di recupero. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Ora puoi inserire un'intera directory di file DOCX rotti in `C:\Docs\Batch` e lasciare che lo script li pulisca automaticamente. + +## Domande Frequenti & Casi Limite + +| Domanda | Risposta | +|----------|--------| +| **Funziona con file .doc?** | La stessa classe `LoadOptions` si applica, ma devi fare riferimento al formato Word più vecchio (`doc`). Aspose.Words può comunque recuperare, anche se i pattern di errore differiscono. | +| **E se il file è protetto da password?** | Il recupero non bypassa la crittografia. Devi fornire la password tramite `LoadOptions.Password`. | +| **Le immagini verranno perse?** | Solo le immagini che fanno parte di una parte XML corrotta potrebbero essere omesse. Le altre sono preservate perché sono memorizzate come flussi binari separati. | +| **Posso registrare gli avvisi generati da Aspose?** | Sì—imposta `LoadOptions.LoadFormat` a `LoadFormat.Docx` e sottoscrivi `Document.WarningCallback` per catturare messaggi dettagliati. | +| **`RecoverAndContinue` è sicuro per la produzione?** | Generalmente sì, ma testalo con i tuoi dati. In pipeline mission‑critical potresti voler segnare i documenti che hanno richiesto il recupero per una revisione successiva. | + +## Esempio Completo Funzionante (Pronto per Copia‑Incolla) + +Di seguito trovi il programma completo che puoi compilare come app console. Include tutti i passaggi, la gestione degli errori e la logica opzionale di elaborazione batch. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Risultato atteso:** Dopo aver eseguito il programma, `Recovered.docx` si apre in Microsoft Word senza la finestra di errore originale. Qualsiasi parte troppo danneggiata viene semplicemente omessa, ma il corpo principale, i titoli e la maggior parte delle immagini rimangono intatti. + +![esempio di recupero docx corrotto](https://example.com/images/recover-corrupted-docx.png "recupera docx corrotto – confronto visivo prima/dopo") + +## Conclusione + +Abbiamo coperto tutto ciò che ti serve per **recover corrupted docx** file usando Aspose.Words, dalla configurazione di `LoadOptions` al sicuro **save recovered document**. I punti chiave sono: + +- Usa `RecoveryMode.RecoverAndContinue` per permettere alla libreria di ignorare gli errori non critici. +- Verifica il contenuto caricato prima di salvarlo, soprattutto quando si tratta di documenti aziendali critici. +- Il salvataggio del documento genera un pacchetto ZIP pulito, rimuovendo efficacemente la corruzione originale. +- Lo stesso schema si scala alle operazioni batch, consentendo la pulizia automatizzata di grandi repository di documenti. + +Pronto per il passo successivo? Prova a integrare questa logica in un servizio in background che monitora una cartella di upload, oppure sperimenta con `WarningCallback` per creare un report dei file che hanno richiesto il recupero. Più giochi con l'API, più apprezzerai quanto sia robusta Aspose.Words per l'elaborazione di documenti nel mondo reale. + +Hai un'idea da condividere—magari la gestione di file protetti da password o la fusione di documenti recuperati? Lascia un commento qui sotto, e continuiamo la discussione. Buon 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/italian/net/programming-with-markdownsaveoptions/_index.md b/words/italian/net/programming-with-markdownsaveoptions/_index.md index b690ecf4d4..80744d38a0 100644 --- a/words/italian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/italian/net/programming-with-markdownsaveoptions/_index.md @@ -22,7 +22,7 @@ | Titolo | Descrizione | | --- | --- | | [Esporta in Markdown con allineamento del contenuto della tabella](./export-into-markdown-with-table-content-alignment/) | Scopri come esportare documenti Word in Markdown con tabelle allineate utilizzando Aspose.Words per .NET. Segui la nostra guida passo passo per creare tabelle Markdown perfette. | -| [Imposta cartella immagini](./set-images-folder/) Converti i documenti Word in Markdown con il corretto allineamento delle tabelle utilizzando Aspose.Words per .NET. Segui la nostra guida dettagliata per risultati perfetti. | +| [Imposta cartella immagini](./set-images-folder/) | Converti i documenti Word in Markdown con il corretto allineamento delle tabelle utilizzando Aspose.Words per .NET. Segui la nostra guida dettagliata per risultati perfetti. | | [Salva Word come PDF e recupera Word corrotto – Converti Word in Markdown – C#](./save-word-as-pdf-and-recover-corrupted-word-convert-word-to/) | Salva documenti Word come PDF e recupera file Word corrotti, convertendo Word in Markdown con C#. | | [Crea PDF accessibile e converti Word in Markdown – Guida completa C#](./create-accessible-pdf-and-convert-word-to-markdown-full-c-gu/) | Scopri come generare PDF accessibili e trasformare documenti Word in Markdown con una guida completa in C#. | | [Come usare Markdown: Converti DOCX in Markdown con equazioni LaTeX](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | Scopri come convertire documenti DOCX in Markdown mantenendo le equazioni LaTeX con Aspose.Words per .NET. | @@ -32,6 +32,7 @@ | [Come esportare Markdown da Word – Guida completa C#](./how-to-export-markdown-from-word-complete-c-guide/) | Scopri come esportare documenti Word in Markdown con una guida completa in C#. | | [Come esportare Markdown da DOCX – Guida completa](./how-to-export-markdown-from-docx-complete-guide/) | Scopri come esportare documenti DOCX in Markdown con una guida completa in C#. | | [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. | +| [Salva Word come Markdown con cartella immagini personalizzata – Guida completa](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Scopri come esportare documenti Word in Markdown impostando una cartella immagini personalizzata con Aspose.Words per .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/italian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..2fa103d92d --- /dev/null +++ b/words/italian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,291 @@ +--- +category: general +date: 2026-04-07 +description: Salva Word come Markdown ed estrai le immagini dal docx usando un callback. + Scopri come utilizzare il callback per archiviare la cartella delle immagini Markdown + in modo efficiente. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: it +og_description: Salva Word come Markdown ed estrai le immagini da docx usando un callback. + Questa guida mostra come usare il callback per creare una cartella di immagini Markdown. +og_title: Salva Word in Markdown – Guida completa passo passo +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Salva Word come Markdown con cartella immagini personalizzata – Guida completa +url: /it/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salva Word come Markdown – Guida Completa Passo‑per‑Passo + +Ti è mai capitato di dover **salvare Word come Markdown** ma non sapevi cosa fare con le immagini incorporate? Non sei l'unico. In molti progetti l'output markdown sembra ottimo—*finché* non ti accorgi che i collegamenti alle immagini sono rotti perché i file non sono mai usciti dal pacchetto Word. + +La buona notizia è che Aspose.Words ti offre un modo semplice per **estrarre immagini da docx** e posizionarle esattamente dove desideri, usando un **callback** che ti permette di controllare la cartella delle immagini markdown. In questo tutorial percorreremo l'intero processo, dal caricamento di un file `.docx` fino a ottenere una cartella ordinata di PNG (o qualsiasi formato tu abbia) e un file markdown che vi punta. + +Alla fine di questa guida sarai in grado di: + +* Convertire qualsiasi documento Word in Markdown con una singola riga di codice. +* Scaricare automaticamente ogni immagine in una sottocartella dedicata `images`. +* Personalizzare i nomi dei file in modo che non entrino mai in conflitto, anche quando la sorgente contiene decine di immagini. + +Nessuno script esterno, nessun copia‑incolla manuale—solo puro C# e Aspose.Words. + +## Prerequisiti + +Prima di iniziare, assicurati di avere: + +* **Aspose.Words for .NET** (l'ultima versione stabile; al momento della stesura è la 24.9). +* Un ambiente di sviluppo .NET (Visual Studio, Rider o la CLI `dotnet`). +* Un documento Word (`.docx`) che contiene almeno un'immagine—chiamalo `DocWithImages.docx`. + +Se non hai mai usato Aspose.Words, non preoccuparti. La libreria è completamente gestita, non richiede interop COM e funziona su .NET 6+ così come su .NET Framework 4.8. + +## Passo 1 – Configura il Progetto e Installa il Pacchetto + +Per prima cosa, crea una nuova applicazione console (o aggiungi il codice a un progetto esistente). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Suggerimento:** Se stai puntando a .NET 6, il `Program.cs` predefinito utilizza già le dichiarazioni top‑level, il che mantiene l'esempio conciso. + +## Passo 2 – Crea un Callback per Controllare il Salvataggio delle Immagini + +Aspose.Words chiama `IResourceSavingCallback.ResourceSaving` per ogni risorsa esterna che deve scrivere (immagini, CSS, ecc.). Implementando questa interfaccia otteniamo il pieno controllo su **come viene costruita la cartella delle immagini markdown**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Perché usare un callback? + +* **Controllo granulare** – decidi la struttura delle cartelle e lo schema di denominazione. +* **Performance** – scrivi lo stream una sola volta, evitando il fallback di doppia scrittura della libreria. +* **Flessibilità** – puoi aggiungere logging, ottimizzazione delle immagini o persino caricare su storage cloud in questo punto. + +## Passo 3 – Carica il Documento Word + +Ora che il callback è pronto, dobbiamo solo indicare ad Aspose.Words il file di origine. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **E se il file non viene trovato?** +> `Document` lancerà una `FileNotFoundException`. Avvolgi il caricamento in un `try/catch` se ti aspetti percorsi dinamici. + +## Passo 4 – Configura le MarkdownSaveOptions + +La classe `MarkdownSaveOptions` ci permette di collegare il callback appena creato. Impostiamo anche la cartella in cui le immagini saranno salvate rispetto al file markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +La proprietà `ImagesFolder` indica ad Aspose di generare collegamenti markdown come `![Alt text](images/img_123.png)`. Poiché impostiamo anche `ResourceFileName` all'interno del callback, il file reale viene salvato esattamente lì. + +## Passo 5 – Salva come Markdown e Verifica il Risultato + +Infine, scriviamo il file markdown. Il callback avrà già popolato la sottocartella `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Output previsto + +Eseguendo il programma dovrebbe stampare qualcosa del genere: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Apri `Doc.md` in qualsiasi visualizzatore markdown; vedrai i collegamenti alle immagini che puntano correttamente alla cartella `images`. + +--- + +## Domande Frequenti (FAQ) + +### Come **estrarre immagini da docx** senza convertire in markdown? + +Puoi riutilizzare lo stesso `MyMarkdownResourceCallback` ma passarlo a `doc.Save("images.zip", SaveFormat.Zip)`. Il callback verrà comunque attivato per ogni immagine, permettendoti di posizionarle dove preferisci. + +### E se ho bisogno di **formati immagine diversi**? + +`args.FileName` contiene già l'estensione originale (`.png`, `.jpg`, ecc.). Se devi convertire tutte le immagini in un unico formato, aggiungi un passaggio di conversione all'interno di `ResourceSaving` prima di scrivere lo stream. + +### Posso **personalizzare la cartella delle immagini markdown** per documento? + +Assolutamente. Il callback riceve il percorso della cartella tramite il suo costruttore, così puoi istanziare un nuovo callback con una cartella diversa per ogni documento in un processo batch. + +### Funziona con **documenti di grandi dimensioni** (centinaia di immagini)? + +Sì. Il callback trasmette l'immagine direttamente su disco, mantenendo basso l'uso della memoria. Assicurati solo che l'unità di destinazione abbia spazio sufficiente e che non si raggiungano i limiti di handle dei file del sistema operativo. + +--- + +## Esempio Completo Funzionante + +Di seguito trovi il programma completo, pronto per il copia‑incolla. Sostituisci `YOUR_DIRECTORY` con un percorso assoluto o relativo adatto al tuo ambiente. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +{{< /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-officemath/_index.md b/words/italian/net/programming-with-officemath/_index.md index 02c33a2873..c58a81e8a4 100644 --- a/words/italian/net/programming-with-officemath/_index.md +++ b/words/italian/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ tutorial di Aspose.Words per .NET sull'elaborazione testi con OfficeMath vi guid | Titolo | Descrizione | | --- | --- | | [Equazioni matematiche](./math-equations/) | Scopri come configurare equazioni matematiche nei documenti Word utilizzando Aspose.Words per .NET. Guida dettagliata con esempi, FAQ e altro ancora. | +| [Salva docx come txt – Esporta Word Math in LaTeX in C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Scopri come convertire equazioni Word Math in LaTeX esportando documenti .docx in file .txt con C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/italian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..e3483c3eb4 --- /dev/null +++ b/words/italian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: Salva docx come txt rapidamente e impara come esportare la matematica + in LaTeX. Converti Word in txt, gestisci Office Math e mantieni intatte le equazioni. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: it +og_description: Salva docx come txt con esportazione di formule LaTeX. Un tutorial + passo‑passo in C# che mostra come convertire Word in txt e mantenere le equazioni. +og_title: Salva docx come txt – Guida C# per esportare le equazioni di Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Salva docx come txt – Esporta la matematica di Word in LaTeX in C# +url: /it/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salva docx come txt – Esporta la matematica di Word in LaTeX con C# + +Hai mai avuto bisogno di **salvare docx come txt** ma temuto che le tue equazioni si trasformassero in un caos di simboli? Non sei solo. Molti sviluppatori incontrano questo ostacolo quando provano a **convertire word in txt** per l'elaborazione successiva, soprattutto quando la sorgente contiene oggetti Office Math. + +La buona notizia? Con poche righe di C# e le opzioni di salvataggio corrette, puoi preservare ogni equazione come LaTeX pulito, rendendo il file di testo semplice sia leggibile dall'uomo sia pronto per pipeline scientifiche. In questo tutorial percorreremo l'intero processo, risponderemo a *come esportare la matematica* da un file Word e ti mostreremo *come convertire docx* senza perdere alcuna fedeltà matematica. + +## Cosa imparerai + +- Caricare un file `.docx` usando Aspose.Words (o qualsiasi libreria compatibile). +- Configurare `TxtSaveOptions` affinché Office Math venga esportato come LaTeX. +- Salvare il documento come file `.txt` che mantiene intatte le equazioni. +- Suggerimenti per gestire casi particolari come equazioni nascoste o documenti di grandi dimensioni. +- Un esempio di codice completo e eseguibile che puoi copiare‑incollare subito. + +Nessuno strumento di build complicato, solo un progetto .NET e il pacchetto NuGet Aspose.Words. Iniziamo. + +--- + +## Prerequisiti + +| Requisito | Perché è importante | +|-------------|----------------| +| .NET 6.0 o successivo | Funzionalità linguistiche moderne e migliori prestazioni. | +| Aspose.Words for .NET (NuGet) | Fornisce `Document`, `TxtSaveOptions` e `OfficeMathExportMode`. | +| Un file Word (`.docx`) che contiene equazioni | Per vedere l'esportazione LaTeX in azione. | +| Conoscenze di base di C# | Seguirai il codice riga per riga. | + +Se non hai ancora aggiunto Aspose.Words, esegui: + +```bash +dotnet add package Aspose.Words +``` + +Tutto qui—nessuna configurazione aggiuntiva necessaria. + +## Passo 1: Caricare il file DOCX + +Per prima cosa, dobbiamo caricare il documento sorgente in memoria. Pensalo come aprire un libro prima di iniziare a leggerlo. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Consiglio professionale:** Usa un percorso assoluto durante i test per evitare sorprese del tipo “file non trovato”. In produzione probabilmente riceverai il percorso da un file di configurazione o da un upload dell'utente. + +## Passo 2: Configurare le opzioni di salvataggio TXT per l'esportazione della matematica + +Per impostazione predefinita, `TxtSaveOptions` genera solo testo semplice e rimuove Office Math. Non lo vogliamo. Impostare `OfficeMathExportMode` su `LaTeX` indica alla libreria di tradurre ogni equazione nella sua rappresentazione LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Perché LaTeX? + +LaTeX è la lingua franca della pubblicazione scientifica. Quando in seguito inserisci il `.txt` in un processore markdown, Jupyter notebook o qualsiasi strumento che supporta LaTeX, le equazioni vengono renderizzate perfettamente. Se preferisci invece simboli Unicode semplici, potresti passare a `OfficeMathExportMode.Unicode`, ma LaTeX ti offre il massimo controllo. + +## Passo 3: Salvare il documento come file di testo semplice + +Ora avviene la magia. Il metodo `Save` scrive il documento su disco usando le opzioni appena definite. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Dopo l'esecuzione di questa riga, `Math.txt` conterrà: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Nota come l'equazione appare all'interno di `\[` e `\]` — esattamente ciò che LaTeX si aspetta. + +## Come esportare la matematica da documenti complessi + +### Gestione di equazioni nascoste o in linea + +Alcuni file Word memorizzano le equazioni all'interno di riquadri di testo nascosti. Aspose.Words le tratta allo stesso modo delle equazioni visibili, quindi l'esportazione LaTeX funziona automaticamente. Tuttavia, se noti equazioni mancanti, verifica che l'oggetto `Document` non sia impostato per ignorare il contenuto nascosto: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Documenti di grandi dimensioni e utilizzo della memoria + +Salvare una tesi di 500 pagine può consumare molta RAM. Per mantenere basso l'impronta di memoria, puoi trasmettere in streaming l'output: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Lo streaming scrive blocchi su disco man mano che vengono generati, evitando che l'intero file risieda in memoria contemporaneamente. + +## Problemi comuni e come evitarli + +| Problema | Sintomo | Risoluzione | +|---------|---------|-----| +| Mancano le parentesi LaTeX | Le equazioni appaiono come codice grezzo (`E = mc^{2}`) | Assicurati che `OfficeMathExportMode = LaTeX`. | +| File di output vuoto | Percorso errato o permessi insufficienti | Verifica che la directory di output esista e sia scrivibile. | +| Caratteri corrotti | File codificato in UTF‑8 senza BOM su un sistema che si aspetta ANSI | Aggiungi `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Le equazioni scompaiono dopo la conversione | Documento caricato con `LoadOptions` che escludono la matematica | Usa `LoadOptions` predefinite o imposta `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## Esempio completo funzionante + +Di seguito trovi il programma completo che puoi compilare ed eseguire. Include la gestione degli errori, la validazione del percorso e un piccolo log della console così sai che tutto è riuscito. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Output previsto** (estratto da `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Ora puoi inserire questo file in qualsiasi processore che supporta LaTeX, e le equazioni verranno renderizzate splendidamente. + +## Come convertire DOCX in TXT senza perdere la formattazione + +Se ti serve solo testo semplice e non ti interessa la matematica, basta omettere la riga `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Ma ricorda, **come esportare la matematica** è il fattore distintivo per i flussi di lavoro scientifici. Mantenere LaTeX intatto è ciò che rende la conversione davvero utile. + +## Prossimi passi e argomenti correlati + +- **Conversione batch:** Avvolgi il codice in un ciclo `foreach` per elaborare un'intera cartella di file `.docx`. +- **Generazione di Markdown:** Aggiungi intestazioni `#` o elenchi `*` al testo per produrre markdown pronto per la pubblicazione. +- **Esportazione PDF:** Usa `PdfSaveOptions` per creare una versione PDF accanto al txt. +- **Messa a punto avanzata di LaTeX:** Post‑processa l'output con regex per sostituire `\[`/`\]` con `$...$` per le equazioni in linea. + +Ognuno di questi si basa sulla stessa base: caricare un `Document` e scegliere le `SaveOptions` corrette. Sentiti libero di sperimentare; l'API è sufficientemente flessibile per la maggior parte degli scenari di automazione dei documenti. + +## Conclusione + +Abbiamo coperto tutto ciò di cui hai bisogno per **salvare docx come txt** mantenendo ogni equazione in LaTeX. Dal caricamento del file sorgente, alla configurazione di `TxtSaveOptions` per **come esportare la matematica**, fino alla scrittura del file di testo finale, l'intero flusso di lavoro si adatta in poche concise istruzioni C#. + +Ora puoi automatizzare la conversione di report Word, articoli accademici o qualsiasi documento che mescola testo e matematica, e inserire il `.txt` risultante in strumenti successivi senza perdere alcun dettaglio scientifico. + +Provalo, modifica le opzioni per il tuo caso d'uso e facci sapere nei commenti come è andata. Buon coding! + +![Diagramma che mostra la pipeline di conversione da DOCX → elaborazione C# → TXT con matematica LaTeX](https://example.com/images/save-docx-as-txt.png "pipeline di salvataggio docx come txt") + +{{< /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-pdfsaveoptions/_index.md b/words/italian/net/programming-with-pdfsaveoptions/_index.md index dd622098b0..2d7c4a4704 100644 --- a/words/italian/net/programming-with-pdfsaveoptions/_index.md +++ b/words/italian/net/programming-with-pdfsaveoptions/_index.md @@ -45,6 +45,7 @@ Che tu voglia convertire documenti Word in PDF per la distribuzione online, l'ar | [Aggiorna l'ultima proprietà stampata nel documento PDF](./update-last-printed-property/) | Scopri come aggiornare l'ultima proprietà stampata in un documento PDF utilizzando Aspose.Words per .NET con la nostra guida dettagliata. | [Rendering di effetti 3D DML 3D in un documento PDF](./dml-3deffects-rendering/) | Scopri come ottenere effetti DML 3D sorprendenti nei documenti PDF utilizzando Aspose.Words per .NET con questa guida completa passo dopo passo. | [Interpolazione delle immagini in un documento PDF](./interpolate-images/) | Scopri come interpolare le immagini in un documento PDF utilizzando Aspose.Words per .NET con la nostra guida passo passo. Migliora facilmente la qualità delle immagini del tuo PDF. | +| [Crea PDF accessibile da Word – Guida passo‑passo](./create-accessible-pdf-from-word-step-by-step-guide/) | Scopri come generare PDF accessibili da documenti Word con Aspose.Words per .NET, passo dopo passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/italian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/italian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..ba3091007d --- /dev/null +++ b/words/italian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Crea PDF accessibile da un file DOCX in C#. Scopri come convertire Word + in PDF, salvare il DOCX come PDF e garantire la conformità PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: it +og_description: Crea PDF accessibile da Word in C#. Questa guida mostra come convertire + Word in PDF, salvare docx come PDF e rispettare gli standard PDF/UA. +og_title: Crea PDF accessibili – Tutorial completo C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Crea PDF accessibile da Word – Guida passo passo +url: /it/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Creare PDF Accessibile da Word – Tutorial di Programmazione Completo + +Hai mai dovuto **creare PDF accessibili** da un documento Word ma non sapevi quali impostazioni modificare? Non sei l'unico. In molte aziende, la conformità a PDF/UA (Universal Accessibility) è un requisito imprescindibile, e il tradizionale pulsante “converti‑in‑PDF” non basta. + +In questa guida percorreremo una soluzione concisa, end‑to‑end, che **converte Word in PDF**, **salva docx come PDF**, e garantisce che l'output rispetti gli standard di accessibilità. Nessun riferimento vago—solo il codice da copiare‑incollare, più il “perché” dietro ogni riga. + +> **TL;DR:** Carica un `.docx`, imposta `PdfSaveOptions.Compliance` su `PdfUa1` (o `PdfUa2`), e chiama `Document.Save`. È tutto ciò che serve per **creare PDF accessibili** con Aspose.Words per .NET. + +--- + +## Cosa Imparerai + +- Come **convertire Word in PDF** preservando intestazioni, testo alternativo e ordine di lettura. +- La differenza tra `PdfUa1` e `PdfUa2` e quando scegliere ciascuna. +- Come **salvare docx come PDF** usando solo poche righe di C#. +- Problemi comuni (font mancanti, tag non supportati) e soluzioni rapide. +- Un esempio di codice pronto all'uso che puoi inserire in qualsiasi progetto .NET. + +### Prerequisiti + +- .NET 6 o versioni successive (il codice funziona anche su .NET Framework 4.7+). +- Aspose.Words per .NET installato via NuGet (`Install-Package Aspose.Words`). +- Un file Word (`input.docx`) che contenga già una struttura corretta (stili, testo alternativo per le immagini). + +Se non hai ancora aggiunto Aspose.Words, esegui il comando qui sotto nella Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +Questa è l'unica dipendenza esterna necessaria. + +--- + +## Creare PDF Accessibile – Perché l'Accessibilità è Importante + +Quando un PDF è contrassegnato come **PDF/UA** (Universal Accessibility), i lettori di schermo possono navigare intestazioni, tabelle e campi modulo proprio come farebbero nel file Word originale. Non è solo una comodità; molti governi e grandi aziende considerano la conformità a PDF/UA un obbligo legale. + +Impostare la proprietà `Compliance` su `PdfSaveOptions` indica alla libreria di incorporare i tag necessari, impostare la lingua corretta del documento e aggiungere un ordine di lettura logico. Saltare questo passaggio produce un PDF “solo visuale” che non supera le verifiche di accessibilità. + +--- + +## Convertire Word in PDF con Aspose.Words + +Di seguito trovi il modo più semplice per **convertire Word in PDF** mantenendo il documento accessibile. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Cosa succede qui?** + +- `Document` legge il file Word, preservando tutti gli stili e la struttura. +- `PdfSaveOptions.Compliance` indica ad Aspose.Words di taggare l'output come PDF/UA. +- `doc.Save` scrive il PDF su disco, incorporando automaticamente i tag. + +> **Pro tip:** Se il tuo file Word di origine utilizza stili di intestazione personalizzati, assicurati che siano mappati ai livelli di intestazione predefiniti (`Heading1`, `Heading2`, …). In questo modo il PDF generato otterrà i tag di intestazione corretti. + +--- + +## Salvare Docx come PDF – Configurare la Conformità PDF/UA + +Se conosci già la classe `PdfSaveOptions`, potresti chiederti se esistono altri switch che influenzano l'accessibilità. Ecco alcune proprietà utili: + +| Property | Effect on Accessibility | Typical Value | +|----------|------------------------|---------------| +| `Compliance` | Attiva/disattiva il tagging PDF/UA | `PdfCompliance.PdfUa1` o `PdfUa2` | +| `EmbedFullFonts` | Garantisce che i lettori vedano la tipografia prevista | `true` (default) | +| `OptimizeOutput` | Riduce le dimensioni del file senza rimuovere i tag | `true` | + +Puoi estendere lo snippet precedente in questo modo: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Passare a `PdfUa2` aggiunge il supporto a funzionalità PDF/UA più recenti, come il tagging *artifact* per le immagini decorative. Se non ti servono, resta su `PdfUa1` per la massima compatibilità con le tecnologie assistive più vecchie. + +--- + +## Esportare Docx in PDF – Esempio Completo Funzionante + +Di seguito trovi un’app console autonoma che dimostra l’intero flusso, dal caricamento del file alla verifica dell’output. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Risultato Atteso + +- Un file chiamato **Compliant.pdf** appare nella stessa cartella dell’eseguibile. +- Aprendo il PDF in Adobe Acrobat Pro → *Strumenti → Accessibilità → Controllo completo* dovrebbe comparire **Nessun problema di accessibilità** (supponendo che il file Word di origine fosse ben strutturato). +- Nella scheda *Proprietà → Avanzate* del PDF verrà mostrato **PDF/UA** nella sezione “Conformità PDF/A e PDF/UA”. + +--- + +## Casi Limite Comuni & Come Gestirli + +| Situazione | Perché è importante | Soluzione rapida | +|-----------|---------------------|------------------| +| **Font mancanti** | Il PDF potrebbe ricorrere a un font predefinito, rovinando il layout visivo. | Imposta `EmbedFullFonts = true` (già il valore predefinito) e assicurati che i file dei font siano disponibili sulla macchina di build. | +| **Immagini senza testo alternativo** | I lettori di schermo leggeranno “immagine” senza descrizione. | Aggiungi `Alt Text` in Word (`Click destro → Formato immagine → Testo alternativo`) prima della conversione. | +| **Stili personalizzati non riconosciuti come intestazioni** | PDF/UA richiede tag di intestazione corretti. | Mappa gli stili personalizzati a intestazioni predefinite tramite `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Documenti molto grandi causano pressione sulla memoria** | Convertire un file di 500 pagine può aumentare l'uso di RAM. | Usa `doc.Save(outputPath, options)` con `options.SaveFormat = SaveFormat.Pdf` e valuta di processare a blocchi se incontri `OutOfMemoryException`. | +| **Esportare docx in pdf senza accessibilità** | A volte serve solo un PDF visivo veloce. | Ometti l’impostazione `Compliance` o impostala su `PdfCompliance.Pdf15`. | + +--- + +## Esempio di Immagine (Testo Alternativo Incluso) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Il testo alternativo sopra rafforza la parola chiave principale e aiuta sia gli utenti sia i modelli AI a comprendere il contesto dell’immagine.* + +--- + +## Domande Frequenti + +**D: Funziona con .NET Core?** +R: Assolutamente. Aspose.Words è cross‑platform; basta referenziare il pacchetto NuGet nel tuo progetto .NET 6+. + +**D: Posso elaborare più file DOCX in batch?** +R: Sì. Avvolgi la logica di caricamento e salvataggio dentro un ciclo `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Ricorda di riutilizzare una singola istanza di `PdfSaveOptions` per migliorare le prestazioni. + +**D: E se devo aggiungere un tag PDF/UA personalizzato che Aspose non genera automaticamente?** +R: Usa l’API PDF a basso livello (`PdfSaveOptions.CustomProperties`) o post‑processa il PDF con una libreria come iText 7, che consente l’inserimento manuale dei tag. + +--- + +## Conclusione + +You + +{{< /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 7049c8dca1..36d1bf661f 100644 --- a/words/italian/net/working-with-fonts/_index.md +++ b/words/italian/net/working-with-fonts/_index.md @@ -44,6 +44,7 @@ Che tu voglia formattare il testo con diversi font, impostare regole di sostituz | [Imposta cartella dei caratteri](./set-fonts-folder/) | Scopri come impostare una cartella di font personalizzata in Aspose.Words per .NET per garantire che i tuoi documenti Word vengano visualizzati correttamente senza font mancanti. | | [Impostazioni font Istanza predefinita](./font-settings-default-instance/) | In questo tutorial imparerai come configurare le impostazioni predefinite dei caratteri in un documento Word con Aspose.Words per .NET. | | [Ottieni l'elenco dei font disponibili](./get-list-of-available-fonts/) | Scopri come ottenere un elenco dei font disponibili utilizzando Aspose.Words per .NET in questo tutorial dettagliato passo dopo passo. Migliora le tue competenze nella gestione dei font. | +| [Come rilevare i font in Aspose.Words – Guida completa](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Scopri come rilevare i font nei documenti Word con Aspose.Words per .NET in questa guida completa passo passo. | | [Ricevi notifiche sui font](./receive-notifications-of-fonts/) | Scopri come ricevere notifiche relative a font mancanti o sostituiti quando utilizzi Aspose.Words per .NET. | | [Ricevi notifica di avviso](./receive-warning-notification/) Scopri come ricevere una notifica di avviso quando usi Aspose.Words per .NET e come gestire eventuali problemi o avvisi nei tuoi documenti. | [Esempio di sorgente del font Steam Resource](./resource-steam-font-source-example/) | Scopri come utilizzare Resource Stream Font Source per caricare font personalizzati in Aspose.Words per .NET. | diff --git a/words/italian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/italian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..08de77e618 --- /dev/null +++ b/words/italian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,279 @@ +--- +category: general +date: 2026-04-07 +description: Scopri come rilevare i caratteri e come catturare gli avvisi gestendo + i caratteri mancanti in C# con Aspose.Words. Codice passo‑passo incluso. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: it +og_description: Come rilevare i font in Aspose.Words? Segui questo tutorial per catturare + gli avvisi e gestire i font mancanti senza sforzo. +og_title: Come rilevare i font in Aspose.Words – Guida completa +tags: +- Aspose.Words +- C# +- Font handling +title: Come rilevare i font in Aspose.Words – Guida completa +url: /it/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Come rilevare i font in Aspose.Words – Guida completa + +Ti sei mai chiesto **come rilevare i font** che mancano in un documento Word prima di inviarlo in produzione? Non sei l'unico. In molti scenari aziendali un font fuori posto può interrompere una pipeline di conversione PDF o causare difetti di layout che appaiono poco professionali. La buona notizia è che Aspose.Words ti offre un modo integrato per individuare quei tipi di carattere assenti e mostrare avvisi chiari. + +In questo tutorial vedremo esattamente **come rilevare i font**, **come catturare gli avvisi**, e le migliori pratiche per **gestire i font mancanti** così la tua applicazione rimane robusta. Nessuno strumento esterno, nessuna congettura—solo puro codice C# che puoi inserire subito nel tuo progetto. + +> **Anteprima rapida:** Alla fine avrai un `FontSubstitutionWarningCollector` riutilizzabile che raccoglie ogni messaggio di sostituzione del font durante il caricamento del documento, e saprai come reagire quando un font non può essere trovato. + +--- + +## Cosa imparerai + +- Come configurare `LoadOptions` per ascoltare gli avvisi di sostituzione dei font. +- Come catturare quegli avvisi in una classe collector personalizzata. +- Come elaborare gli avvisi raccolti e decidere se abortire, registrare o sostituire i font. +- Gestione dei casi limite per documenti che fanno riferimento a font remoti o incorporati. + +**Prerequisiti:** .NET 6+ (o .NET Framework 4.6+), Aspose.Words per .NET (ultima versione), e una conoscenza di base di C#. Se non hai mai usato Aspose.Words, non preoccuparti—questa guida presuppone solo pochi minuti di configurazione. + +## Come rilevare i font usando Aspose.Words LoadOptions + +Il primo passo per rilevare i font mancanti è dire ad Aspose.Words di segnalarli. Questo avviene tramite la proprietà `LoadOptions.WarningCallback`, che accetta qualsiasi classe che implementi `IWarningCallback`. Di seguito creiamo un piccolo collector che memorizza ogni avviso per un'ispezione successiva. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Perché è importante:** Senza un callback per gli avvisi, Aspose.Words sostituisce silenziosamente i font mancanti con uno predefinito, e non saprai mai che esiste un problema. Catturando `WarningType.FontSubstitution` otteniamo piena visibilità—esattamente i dati di cui hai bisogno per **rilevare i font** che non sono disponibili sulla macchina host. + +Ora colleghiamo il collector a `LoadOptions` e carichiamo un documento: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Consiglio professionale:** Se lavori con molti documenti in batch, riutilizza la stessa istanza di `FontSubstitutionWarningCollector` ma ricorda di chiamare `Clear()` tra i caricamenti per evitare di mescolare avvisi provenienti da file diversi. + +--- + +## Catturare gli avvisi durante il caricamento del documento + +Dopo che il documento è stato caricato, il collector contiene già ogni avviso relativo ai font. La prossima domanda logica è: *Come posso catturare gli avvisi* in modo facile da registrare o visualizzare? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +L'output tipico appare così: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Cosa ti dice:** Ogni riga rivela il nome del font originale e il fallback scelto da Aspose.Words. Con queste informazioni puoi decidere se il fallback è accettabile o se è necessario incorporare manualmente il font mancante. + +--- + +## Gestire i font mancanti in modo elegante + +Rilevare e catturare gli avvisi è solo metà della battaglia. Il vero valore arriva quando **gestisci i font mancanti** in modo pronto per la produzione. Di seguito tre strategie comuni: + +1. **Log and Continue** – Adatto per l'elaborazione batch dove ti serve solo un tracciato di audit. +2. **Abort on Critical Fonts** – Lancia un'eccezione se un font particolare (ad esempio un carattere specifico del brand) è mancante. +3. **Embed the Font On‑The‑Fly** – Carica il font mancante da una cartella nota e registralo con Aspose.Words prima di ricaricare il documento. + +### Esempio: Interrompere su un font critico + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Esempio: Incorporamento automatico dei font mancanti + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Perché questi pattern aiutano:** Decidendo esplicitamente cosa fare quando un font è mancante, elimini i fallback silenziosi che potrebbero compromettere il branding o la leggibilità. Questa è l'essenza di **gestire i font mancanti** in modo controllato. + +--- + +## Esempio completo funzionante + +Mettendo tutto insieme, ecco un unico programma pronto all'esecuzione che dimostra **come rilevare i font**, **come catturare gli avvisi**, e una semplice politica per **gestire i font mancanti** registrandoli. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Risultato atteso:** Quando esegui il programma su un documento che fa riferimento a un font non presente sulla macchina, la console elencherà ogni avviso di sostituzione. Se qualche avviso riguarda un font del set `critical`, il programma termina in anticipo, evitando la generazione di un PDF difettoso. + +--- + +## Domande frequenti (FAQ) + +| Question | Answer | +|----------|--------| +| *Ho bisogno di una licenza per Aspose.Words per usare questo codice?* | Sì, una licenza valida di Aspose.Words rimuove le filigrane di valutazione e sblocca tutte le funzionalità. | +| *Questo approccio può rilevare i font incorporati?* | I font incorporati fanno già parte del file, quindi Aspose.Words non genererà un avviso di sostituzione. Puoi controllare `Document.FontInfos` per elencare i font incorporati se necessario. | +| *Cosa succede se il font mancante è un font di sistema su Windows ma non su Linux?* | Lo stesso avviso verrà generato su Linux perché il font non è installato lì. Usa la strategia “gestire i font mancanti” per distribuire i file `.ttf` necessari con la tua app. | +| *Il collector di avvisi è thread* | | + +{{< /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 d77fb6e793..dc804f8aa6 100644 --- a/words/japanese/net/basic-conversions/_index.md +++ b/words/japanese/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ | [Word から LaTeX をエクスポートする方法 – ステップバイステップ ガイド](./how-to-export-latex-from-word-step-by-step-guide/) Aspose.Words for .NET を使用して、Word 文書を LaTeX 形式にエクスポートする方法をステップバイステップで解説します。 | | [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 に変換する完全ガイドです。コード例付きで開発者に最適です。 | +| [C#でDOCXをPDFに変換する – 完全プログラミングガイド](./convert-docx-to-pdf-in-c-complete-programming-guide/) Aspose.Words for .NET を使用して C# で DOCX を PDF に変換する完全ガイドです。ステップバイステップのコード例で開発者をサポートします。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/japanese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..94775ff819 --- /dev/null +++ b/words/japanese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,214 @@ +--- +category: general +date: 2026-04-07 +description: C#でDOCXをPDFに素早く変換。WordをPDFとして保存する方法、C#でdocxドキュメントを読み込む方法、そして数分でPDF/UA‑2準拠を実現する方法を学びましょう。 +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: ja +og_description: C#でDOCXを即座にPDFに変換。このガイドでは、WordをPDFとして保存し、C#でdocxドキュメントを読み込み、PDF/UA‑2規格に準拠する方法を紹介します。 +og_title: C#でDOCXをPDFに変換する – ステップバイステップガイド +tags: +- Aspose.Words +- C# +- PDF Generation +title: C#でDOCXをPDFに変換する – 完全プログラミングガイド +url: /ja/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C# で DOCX を PDF に変換 – 完全プログラミングガイド + +C# アプリケーションで **convert DOCX to PDF** が必要だったことはありませんか?でも、どこから始めればいいか分からなかった…という方は多いです。Word のシンプルな「PDF として保存」ボタンがコードに置き換えられないことに壁を感じる開発者は多数います。良いニュースは、Aspose.Words(または同等のライブラリ)を数行書くだけで、プロセス全体を自動化し、フローティングシェイプをインラインに保ち、さらには PDF/UA‑2 の準拠も楽に達成できるということです。 + +このチュートリアルでは、**save Word as PDF**、**load docx document C#** の方法を学び、エクスポートオプションを調整して、生成されたファイルがアクセシビリティ監査に対応できるようにします。最後まで実行すれば、任意の `.docx` ファイルをクリーンで標準準拠の PDF に変換する、自己完結型の実行可能プログラムが手に入ります。 + +> **なぜ重要か?** +> DOCX を PDF に変換することは、請求システム、レポートジェネレータ、文書アーカイブパイプラインで一般的な要件です。自動化すれば手作業を排除し、ヒューマンエラーを減らし、すべての出力がプラットフォーム間でまったく同じ見た目になることが保証されます。 + +--- + +## 必要なもの + +- **.NET 6.0** 以降(コードは .NET Framework 4.6+ でも動作します) +- **Aspose.Words for .NET**(無料トライアルまたはライセンス版) – NuGet でインストールできます: `dotnet add package Aspose.Words` +- コントロールできるフォルダーに配置したサンプル `input.docx`(ここでは `YOUR_DIRECTORY` と呼びます) +- 好きな C# エディタ(Visual Studio、VS Code など) + +以上です—余分なサービスや REST 呼び出しは不要です。純粋な C# だけです。 + +--- + +## ステップ 1: C# で DOCX ドキュメントをロードする + +**convert docx to pdf** を行う前に、Word ファイルをメモリに読み込む必要があります。`Document` クラスがそれを行います。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**この点が重要な理由:** +ファイルをロードすると、段落、テーブル、フローティングシェイプなどすべてが完全に解析されたオブジェクトモデルが得られます。これは **load docx document c#** ワークフローの最初のステップであり、変換に時間を費やす前にファイルが破損していないかを検証することにもなります。 + +> **プロのコツ:** ユーザーがアップロードしたファイルを扱う場合は、`new Document()` 呼び出しを try/catch ブロックでラップし、破損した DOCX ファイルを適切に処理できるようにします。 + +--- + +## ステップ 2: PDF 保存オプションの設定(コンプライアンスとシェイプ処理) + +「何か設定を変更する必要があるのか、あるいは単に `Save` を呼び出すだけで良いのか?」と疑問に思うかもしれません。短い答えは、可能ですが、適切なオプションを設定することで PDF がアクセシブルかつビジュアル的に忠実になります。 + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**この点が重要な理由:** +- `ExportFloatingShapesAsInlineTag = true` は、PDF を異なるデバイスで表示した際にフローティングオブジェクトが失われたり位置ずれしたりするのを防ぎます。 +- `Compliance = PdfCompliance.PdfUa2` は、出力が PDF/UA‑2 標準に準拠していることを保証し、スクリーンリーダーとの互換性や法的アーカイブに重要です。 + +アクセシビリティが不要な場合は `Compliance` 行を削除しても構いませんが、残しておくことでほとんどオーバーヘッドがなく、将来的な拡張性が確保されます。 + +--- + +## ステップ 3: ドキュメントを PDF として保存 – コア **Convert DOCX to PDF** アクション + +ドキュメントがロードされ、オプションが設定されたので、実際の変換は単一のメソッド呼び出しです。 + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**期待される結果:** +- すべてのテキスト、テーブル、画像が元の DOCX と全く同じように表示されます。 +- フローティングシェイプがインラインで保持され、レイアウトが保たれます。 +- ファイルは基本的な PDF/UA‑2 検証ツール(例: Adobe Acrobat Preflight)を通過します。 + +--- + +## 完全動作例 – 上から下まで + +以下は、全体のフローを示す完全な実行可能コンソールアプリです。新しい C# プロジェクトにコピー&ペーストして **F5** を押してください。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**コンソールでの期待出力:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +そして、整った `output.pdf` がソースファイルの隣に生成されます。 + +--- + +## よくある質問とエッジケース + +| Question | Answer | +|----------|--------| +| **`MemoryStream` に格納された DOCX を変換できますか?** | 可能です。ファイルパスの代わりに `new Document(stream)` を使用してください。 | +| **DOCX にマクロが含まれている場合はどうなりますか?** | Aspose.Words はデフォルトで VBA マクロを無視するため、PDF には表示されません。 | +| **本番環境でライセンスが必要ですか?** | 無料トライアルは一定ページ数を超えると透かしが追加されます。商用利用の場合は、透かしを除去するためにライセンスを取得してください。 | +| **PDF のページサイズを変更するには?** | 保存前に `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` を設定します。 | +| **カスタムフォントを埋め込む方法はありますか?** | あります。`pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` を追加してください。 | + +--- + +## スムーズな **Save Word as PDF** 体験のためのプロのコツ + +- **Batch processing:** 変換ロジックをループで包み、DOCX パスのリストを渡す。 +- **Performance:** 多数のファイルを変換する際は単一の `PdfSaveOptions` インスタンスを再利用すると、GC の負荷が減ります。 +- **Logging:** 生成された PDF のサイズ(`new FileInfo(outputPath).Length`)を出力して圧縮結果を監視します。 +- **Error handling:** `FileNotFoundException`(DOCX が見つからない)と `UnauthorizedAccessException`(書き込み権限の問題)を区別します。 + +--- + +## 結論 + +これで、C# で **convert DOCX to PDF** するための堅牢で本番環境対応のパターンが手に入りました。DOCX をロードし、PDF 保存オプションを設定し、`Save` を呼び出すだけで、**save Word as PDF** が実現でき、レイアウトの微妙な違いを尊重し、アクセシビリティ基準にも適合します—コードは 12 行未満です。 + +次のチャレンジに挑みますか?`PdfSaveOptions` を `ImageSaveOptions` に置き換えて **save Word as PNG** を試すか、`HtmlSaveOptions` クラスを使ってウェブ向け出力を生成してみてください。どちらにせよ、同じ **load docx document c#** の基本が適用されるので、コードベースは将来にわたって堅牢です。 + +コーディングを楽しんで、PDF が常にコンプライアンスに準拠していますように! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/japanese/net/programming-with-loadoptions/_index.md index c5356c7ee6..24113575b5 100644 --- a/words/japanese/net/programming-with-loadoptions/_index.md +++ b/words/japanese/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Aspose.Words for .NET チュートリアルは、LoadOptions を用いた Words | [Word文書にCHMファイルを読み込む](./load-chm/) Aspose.Words for .NET を使って、CHM ファイルを Word 文書に簡単に読み込む方法をステップバイステップで解説するチュートリアルです。技術文書の統合に最適です。 | | [Aspose.Wordsでdocxを復元する手順 – ステップバイステップ](./how-to-recover-docx-with-aspose-words-step-by-step/) Aspose.Words for .NET を使用して、破損した docx ファイルを復元する手順をステップバイステップで解説します。 | | [Aspose Load Options – カスタムフォント設定でDOCXを読み込む](./aspose-load-options-load-docx-with-custom-font-settings/) Aspose.Words for .NET の LoadOptions を使用し、カスタムフォント設定で DOCX を読み込む方法をステップバイステップで解説します。 | +| [破損したDOCXを復元する – 完全C#ガイド:修復と保存](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) Aspose.Words for .NET を使用して、破損した DOCX ファイルを修復し、正常に保存する手順をステップバイステップで解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/japanese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..9e7f75efc4 --- /dev/null +++ b/words/japanese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-04-07 +description: C#で破損したDOCXファイルを復元し、復元した文書を安全に保存する方法を学びましょう。Aspose.Wordsの例を用いたステップバイステップガイドです。 +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: ja +og_description: C#で破損したDOCXファイルを復元し、Aspose.Wordsで復元した文書を保存します。完全なコード、解説、ベストプラクティスのヒントを掲載。 +og_title: 破損したDOCXを復元 – ステップバイステップ C# ガイド +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: 破損したDOCXを復元 – ファイルを修正・保存する完全C#ガイド +url: /ja/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 破損した DOCX の復元 – 完全な C# ガイド:修復と保存 + +エクスプローラーでは正常に見える DOCX を開こうとして、アプリで例外が発生したことはありませんか? それは典型的な「破損した Word ファイル」の悪夢で、通常は見たくないスタックトレースで終わります。良いニュースは、Aspose.Words が **recover corrupted docx** 機能を提供しており、ファイルが損傷していても作業を続けられることです。 + +このチュートリアルでは、破損したドキュメントを読み込み、ライブラリに処理を続行させ、そして **save recovered document** を使って新しいクリーンなファイルに保存する正確な手順を解説します。最後まで読むと、リカバリーモードがなぜ重要か、どのように設定するか、そして避けるべき落とし穴が分かります—曖昧な「ドキュメント参照」的なショートカットはありません。 + +## 必要なもの + +- **Aspose.Words for .NET**(任意の最新バージョン;本ガイド執筆時は 24.11 を使用) +- .NET 開発環境(Visual Studio、Rider、または C# 拡張機能付き VS Code) +- 破損していると疑われるサンプル DOCX(テスト用に zip エディタで開き、パーツを削除してファイルを破損させることができます) +- 基本的な C# の知識—特別なことは不要で、コンソールアプリを作成できれば十分です + +もしすでに揃っているなら、素晴らしいです—すぐに解決策に進みましょう。 + +## 手順 1: 正しいリカバリーストラテジーで LoadOptions を設定する + +修正の核心は `LoadOptions` オブジェクトです。DOCX パッケージ内で不正な XML や欠落したパーツに遭遇した際の Aspose.Words の動作を指示します。`RecoveryMode.RecoverAndContinue` フラグは最も寛容で、可能な限りデータを回復し、残りはスキップします。 + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**この点が重要な理由:** `LoadOptions` を省略するかデフォルトモード(`RecoveryMode.NoRecovery`)を使用すると、`Document` コンストラクタは問題を検出した瞬間に例外をスローします。`RecoverAndContinue` を使用すると、API は致命的でないエラーを無視し、部分的な Document オブジェクトを構築するので、引き続き作業できます。 + +> **Pro tip:** 大量のファイルを処理する場合は、ロード呼び出しを `try/catch` ブロックでラップすることを検討してください—一部のエラーは本当に致命的で(例: `[Content_Types].xml` ファイルが欠如)回復できません。 + +## 手順 2: 潜在的に破損した DOCX を読み込む + +オプションの準備ができたので、ファイルを読み込みます。コンストラクタはファイルパスと先ほど作成した `LoadOptions` を受け取ります。 + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**内部で何が起きているか?** +Aspose.Words は ZIP コンテナを解析し、各 XML パーツを読み取り、Open XML DOM の再構築を試みます。破損したパーツに遭遇すると、リカバリエンジンは警告をログに記録します(診断を有効にすればコンソールに表示されます)そして処理を続行します。結果として得られる `Document` オブジェクトは、いくつかの段落や画像が欠落している可能性がありますが、残りのコンテンツはそのまま保持されます。 + +## 手順 3: 復元されたコンテンツを検証する(任意だが推奨) + +ファイルをディスクに保存する前に、重要なセクションが残っているか確認するためにいくつかのノードを検査することをお勧めします。 + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +出力が妥当であれば、**recover corrupted docx** コンテンツの復元に成功したことになります。欠落したセクションがある場合でも、続行するかどうかは判断できます—失われた部分が装飾的なものだけの場合もあります。 + +## 手順 4: 復元されたドキュメントを保存する + +多くの開発者が尋ねる部分です: “元の破損を再び導入せずに **save recovered document** を行うにはどうすれば良いか?” 答えはシンプルに新しいパスで `Document.Save` を呼び出すことです。Aspose.Words は全く新しい ZIP パッケージを書き出すので、残っている破損部分は残りません。 + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**この方法が機能する理由:** `Save` メソッドはメモリ上の DOM をクリーンな Open XML パッケージにシリアライズします。破損した部分は DOM にロードされていない(リカバリ時に破棄された)ため、新しいファイルに含まれることはありません。その結果、Word、Google Docs、その他のビューアで開くことができる正常な DOCX が生成されます。 + +## 手順 5: �数ファイルの処理を自動化する(ボーナス) + +実際のシナリオでは、問題のあるファイルが入ったフォルダーがあることがよくあります。前述の手順をループで囲むことで、コンパクトな復元ユーティリティが作れます。 + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +これで、破損した DOCX ファイルが入ったディレクトリ全体を `C:\Docs\Batch` に入れ、スクリプトに自動でクリーンアップさせることができます。 + +## よくある質問とエッジケース + +| Question | Answer | +|----------|--------| +| **この方法は .doc ファイルでも機能しますか?** | `LoadOptions` クラスは同じものが適用されますが、古い Word フォーマット(`doc`)を参照する必要があります。Aspose.Words は依然として復元可能ですが、エラーパターンは異なります。 | +| **ファイルがパスワードで保護されている場合はどうですか?** | リカバリは暗号化を回避できません。`LoadOptions.Password` でパスワードを指定する必要があります。 | +| **画像は失われますか?** | 破損した XML パーツの一部である画像だけが省かれる可能性があります。その他の画像は別個のバイナリストリームとして保存されているため保持されます。 | +| **Aspose が生成する警告をログに記録できますか?** | はい。`LoadOptions.LoadFormat` を `LoadFormat.Docx` に設定し、`Document.WarningCallback` を購読して詳細メッセージを取得します。 | +| **`RecoverAndContinue` は本番環境で安全ですか?** | 概ね安全ですが、データでテストしてください。ミッションクリティカルなパイプラインでは、リカバリが必要だったドキュメントにフラグを付けて後でレビューできるようにした方が良いでしょう。 | + +## 完全な動作例(コピー&ペースト可能) + +以下はコンソールアプリとしてコンパイルできる完全なプログラムです。すべての手順、エラーハンドリング、オプションのバッチ処理ロジックが含まれています。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Expected result:** プログラム実行後、`Recovered.docx` は元のエラーダイアログなしで Microsoft Word で開きます。過度に損傷した部分は単に省かれますが、本文、見出し、ほとんどの画像はそのまま残ります。 + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## 結論 + +Aspose.Words を使用して **recover corrupted docx** ファイルを復元し、安全に **save recovered document** するために必要なすべてをカバーしました。主なポイントは次の通りです: + +- `RecoveryMode.RecoverAndContinue` を使用して、ライブラリに致命的でないエラーを無視させます。 +- 特に重要なビジネス文書を扱う場合は、保存する前に読み込んだコンテンツを検証してください。 +- ドキュメントを保存するとクリーンな ZIP パッケージが生成され、元の破損が実質的に除去されます。 +- 同じパターンはバッチ処理にも拡張でき、大規模なドキュメントリポジトリの自動クリーンアップが可能です。 + +次のステップに進みませんか?このロジックをアップロードフォルダーを監視するバックグラウンドサービスに統合したり、`WarningCallback` を使ってどのファイルが復元を必要としたかのレポートを作成したりしてみてください。API を使い込めば使い込むほど、実務の文書処理における Aspose.Words の堅牢さを実感できるでしょう。 + +何か独自の工夫—例えばパスワード保護されたファイルの処理や復元したドキュメントの結合—があればぜひ共有してください。下にコメントを残して、会話を続けましょう。コーディングを楽しんで! + +{{< /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 e40c007092..d838c46d48 100644 --- a/words/japanese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/japanese/net/programming-with-markdownsaveoptions/_index.md @@ -32,6 +32,7 @@ MarkdownSaveOptions を使用した Words Processing は、Aspose.Words for .NET | [Word から Markdown をエクスポートする方法 – 完全 C# ガイド](./how-to-export-markdown-from-word-complete-c-guide/) Aspose.Words for .NET を使用して、Word 文書を Markdown にエクスポートする完全な C# ガイドです。ステップバイステップで解説します。 | | [DOCX から Markdown にエクスポートする方法 – 完全ガイド](./how-to-export-markdown-from-docx-complete-guide/) Aspose.Words for .NET を使用して、DOCX 文書を Markdown にエクスポートする完全なガイドです。ステップバイステップで解説します。 | | [DOCX から Markdown に保存する方法 – ステップバイステップ ガイド](./how-to-save-markdown-from-docx-step-by-step-guide/) Aspose.Words for .NET を使用して、DOCX ファイルを Markdown に変換し保存する手順をステップバイステップで解説します。 | +| [カスタム画像フォルダーで Word を Markdown に保存 – 完全ガイド](./save-word-as-markdown-with-custom-image-folder-full-guide/) Aspose.Words for .NET を使用して、カスタム画像フォルダーを設定しながら Word 文書を Markdown にエクスポートする完全ガイドです。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/japanese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..17c0e2dd54 --- /dev/null +++ b/words/japanese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: Word を Markdown に保存し、コールバックを使用して docx から画像を抽出します。コールバックを活用して Markdown + の画像フォルダーを効率的に保存する方法を学びましょう。 +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: ja +og_description: Word を Markdown に保存し、コールバックを使用して docx から画像を抽出します。このガイドでは、コールバックを使って + Markdown 用の画像フォルダーを作成する方法を示します。 +og_title: Word を Markdown に保存する – 完全ステップバイステップガイド +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: カスタム画像フォルダーでWordをMarkdownに保存する完全ガイド +url: /ja/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word を Markdown として保存 – 完全ステップバイステップガイド + +**Word を Markdown として保存**したいけれど、埋め込まれた画像の扱いに悩んだことはありませんか? あなただけではありません。多くのプロジェクトで Markdown の出力は見た目が良いものの、*画像リンクが壊れている*ことに気付くのは、画像ファイルが Word パッケージから抜き出されていないからです。 + +良いニュースは、Aspose.Words が **docx から画像を抽出**し、**コールバック**を使って Markdown の画像フォルダーを自由に制御できるクリーンな方法を提供してくれることです。このチュートリアルでは、`.docx` ファイルの読み込みから PNG(または任意の形式)の整然としたフォルダーと、画像を指す Markdown ファイルが完成するまでの全工程を解説します。 + +このガイドを読み終えると、以下ができるようになります: + +* 1 行のコードで任意の Word 文書を Markdown に変換。 +* すべての画像を専用の `images` サブフォルダーに自動的にダンプ。 +* ファイル名をカスタマイズし、元の文書に多数の画像が含まれていても衝突しないように管理。 + +外部スクリプト不要、手動コピーも不要—純粋に C# と Aspose.Words だけです。 + +## 前提条件 + +作業を始める前に、以下を用意してください: + +* **Aspose.Words for .NET**(最新の安定版;執筆時点では 24.9)。 +* .NET 開発環境(Visual Studio、Rider、または `dotnet` CLI)。 +* 少なくとも 1 枚の画像を含む Word 文書(例:`DocWithImages.docx`)。 + +Aspose.Words をまだ使ったことがなくても心配はいりません。ライブラリは完全にマネージドで、COM 相互運用は不要。 .NET 6+ と .NET Framework 4.8 の両方で動作します。 + +## Step 1 – プロジェクトのセットアップとパッケージのインストール + +まず、コンソールアプリを新規作成(または既存プロジェクトにコードを追加)します。 + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tip:** .NET 6 をターゲットにしている場合、デフォルトの `Program.cs` はトップレベルステートメントを使用しているため、サンプルがコンパクトに収まります。 + +## Step 2 – 画像保存を制御するコールバックを作成 + +Aspose.Words は外部リソース(画像、CSS など)を書き出すたびに `IResourceSavingCallback.ResourceSaving` を呼び出します。このインターフェイスを実装することで、**Markdown の画像フォルダーの構築方法**を完全にコントロールできます。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### なぜコールバックを使うのか? + +* **細かな制御** – フォルダー構造や命名規則を自分で決められます。 +* **パフォーマンス** – ストリームを書き込む回数を 1 回に抑え、ライブラリの二重書き込みフォールバックを回避。 +* **柔軟性** – ロギングや画像最適化、さらにはクラウドストレージへのアップロードもこの段階で実装可能です。 + +## Step 3 – Word 文書を読み込む + +コールバックの準備ができたら、次は Aspose.Words にソースファイルを指示します。 + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **ファイルが見つからなかった場合は?** +> `Document` は `FileNotFoundException` をスローします。動的パスが想定される場合は `try/catch` でラップしてください。 + +## Step 4 – MarkdownSaveOptions を設定 + +`MarkdownSaveOptions` クラスを使って、先ほど作成したコールバックをプラグインします。また、画像が保存されるフォルダーを Markdown ファイルに対する相対パスで指定します。 + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder` プロパティにより、Aspose は `![Alt text](images/img_123.png)` のような Markdown リンクを生成します。コールバック内で `ResourceFileName` も設定しているため、実際のファイルはその場所に正確に配置されます。 + +## Step 5 – Markdown として保存し、結果を確認 + +最後に Markdown ファイルを書き出します。コールバックはすでに `images` サブフォルダーに画像を配置済みです。 + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### 期待される出力 + +プログラムを実行すると、次のような出力がコンソールに表示されます: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +任意の Markdown ビューアで `Doc.md` を開くと、`images` フォルダーを正しく指す画像リンクが表示されます。 + +--- + +## Frequently Asked Questions (FAQ) + +### **docx から画像を抽出**し、Markdown に変換せずに取得する方法は? + +同じ `MyMarkdownResourceCallback` を再利用し、`doc.Save("images.zip", SaveFormat.Zip)` に渡すだけです。コールバックは各画像で引き続き発火し、好きな場所に配置できます。 + +### **異なる画像形式**が必要な場合は? + +`args.FileName` には元の拡張子(`.png`、`.jpg` など)が既に含まれています。すべての画像を単一形式に変換したい場合は、`ResourceSaving` 内でストリームを書き込む前に変換処理を追加してください。 + +### 文書ごとに **Markdown の画像フォルダー**をカスタマイズできるか? + +可能です。コールバックはコンストラクタでフォルダー パスを受け取るので、バッチ処理で文書ごとに異なるフォルダーを持つ新しいコールバックをインスタンス化すれば実現できます。 + +### **大量の画像**(数百枚)を含む大規模文書でも動作するか? + +はい。コールバックは画像を直接ディスクにストリームするため、メモリ使用量が低く抑えられます。対象ドライブに十分な空き容量があること、OS のファイルハンドル制限に引っかからないことだけ確認してください。 + +--- + +## 完全動作サンプル + +以下はコピー&ペーストだけで動作する完全版プログラムです。`YOUR_DIRECTORY` を環境に合わせた絶対パスまたは相対パスに置き換えてください。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +プログラムを実行(`dotnet run`)すると、`Doc.md` と `images` サブフォルダーが新規作成され、画像が格納されます。 + +{{< /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-officemath/_index.md b/words/japanese/net/programming-with-officemath/_index.md index cae5f24383..ed9af28ea1 100644 --- a/words/japanese/net/programming-with-officemath/_index.md +++ b/words/japanese/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Aspose.Words for .NET の OfficeMath を使った Words Processing チュート タイトル | 説明 | | --- | --- | | [数式](./math-equations/) Aspose.Words for .NET を使用して Word 文書に数式を設定する方法を学びます。例、FAQ などを交えたステップバイステップのガイドです。 | +| [docx を txt に保存 – C# で Word Math を LaTeX にエクスポート](./save-docx-as-txt-export-word-math-to-latex-in-c/) Aspose.Words for .NET を使用して、docx ファイルをテキスト形式に変換し、数式を LaTeX 形式でエクスポートする方法を学びます。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/japanese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..a193134464 --- /dev/null +++ b/words/japanese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: docx をすばやく txt に保存し、数式を LaTeX にエクスポートする方法を学びましょう。Word を txt に変換し、Office + Math に対応し、数式をそのまま保持します。 +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: ja +og_description: docx を txt に保存し、LaTeX 数式をエクスポートします。Word を txt に変換し、数式を保持する方法を示すステップバイステップの + C# チュートリアルです。 +og_title: docx を txt に保存 – Word の数式をエクスポートする C# ガイド +tags: +- C# +- Aspose.Words +- DocumentConversion +title: docx を txt として保存 – C# で Word の数式を LaTeX にエクスポート +url: /ja/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# docx を txt として保存 – C# で Word の数式を LaTeX にエクスポート + +Ever needed to **save docx as txt** but worried your equations would turn into a mess of symbols? You're not alone. Many developers hit that wall when they try to **convert word to txt** for downstream processing, especially when the source contains Office Math objects. + +The good news? With a few lines of C# and the right save options, you can preserve every equation as clean LaTeX, making the plain‑text file both human‑readable and ready for scientific pipelines. In this tutorial we’ll walk through the whole process, answer *how to export math* from a Word file, and show you *how to convert docx* without losing any math fidelity. + +## 学べること + +- Load a `.docx` file using Aspose.Words (or any compatible library). +- Configure `TxtSaveOptions` so Office Math is exported as LaTeX. +- Save the document as a `.txt` file that keeps equations intact. +- Tips for handling edge cases like hidden equations or large documents. +- A complete, runnable code sample you can copy‑paste right now. + +No fancy build tools, just a .NET project and the Aspose.Words NuGet package. Let’s get started. + +--- + +## 前提条件 + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6.0 or later | Modern language features and better performance. | +| Aspose.Words for .NET (NuGet) | Provides `Document`, `TxtSaveOptions`, and `OfficeMathExportMode`. | +| A Word file (`.docx`) that contains equations | To see the LaTeX export in action. | +| Basic C# knowledge | You’ll follow the code line‑by‑line. | + +If you haven’t added Aspose.Words yet, run: + +```bash +dotnet add package Aspose.Words +``` + +That’s it—no extra configuration needed. + +## 手順 1: DOCX ファイルをロード + +First, we need to bring the source document into memory. Think of this as opening a book before you start reading. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** Use an absolute path during testing to avoid “file not found” surprises. In production you’ll probably receive the path from a configuration file or a user upload. + +## 手順 2: 数式エクスポート用に TXT 保存オプションを設定 + +By default, `TxtSaveOptions` dumps plain text and strips out Office Math. We don’t want that. Setting `OfficeMathExportMode` to `LaTeX` tells the library to translate each equation into its LaTeX representation. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### なぜ LaTeX? + +LaTeX is the lingua franca of scientific publishing. When you later feed the `.txt` into a markdown processor, Jupyter notebook, or any LaTeX‑aware tool, the equations render perfectly. If you prefer plain Unicode symbols instead, you could switch to `OfficeMathExportMode.Unicode`, but LaTeX gives you the most control. + +## 手順 3: プレーンテキストファイルとしてドキュメントを保存 + +Now the magic happens. The `Save` method writes the document to disk using the options we just defined. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +After this line runs, `Math.txt` will contain: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Notice how the equation appears inside `\[` and `\]`—exactly what LaTeX expects. + +## 複雑なドキュメントから数式をエクスポートする方法 + +### 隠しまたはインライン数式の処理 + +Some Word files store equations inside hidden text frames. Aspose.Words treats them the same as visible equations, so the LaTeX export works automatically. However, if you notice missing equations, double‑check that the `Document` object isn’t set to ignore hidden content: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### 大規模ドキュメントとメモリ使用量 + +Saving a 500‑page thesis can consume a lot of RAM. To keep memory footprint low, you can stream the output: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming writes chunks to disk as they’re generated, preventing the whole file from living in memory at once. + +## よくある落とし穴と回避策 + +| Pitfall | Symptom | Fix | +|---------|---------|-----| +| Missing LaTeX brackets | Equations appear as raw code (`E = mc^{2}`) | Ensure `OfficeMathExportMode = LaTeX`. | +| Blank output file | Wrong path or insufficient permissions | Verify the output directory exists and is writable. | +| Garbled characters | File encoded in UTF‑8 without BOM on a system expecting ANSI | Add `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Equations disappear after conversion | Document loaded with `LoadOptions` that exclude math | Use default `LoadOptions` or set `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## 完全な動作例 + +Below is the complete program you can compile and run. It includes error handling, path validation, and a small console log so you know everything succeeded. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Expected output** (excerpt from `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +You can now feed this file into any LaTeX‑aware processor, and the equations will render beautifully. + +## 書式を失わずに DOCX を TXT に変換する方法 + +If you only need plain text and don’t care about math, simply omit the `OfficeMathExportMode` line: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +But remember, **how to export math** is the differentiator for scientific workflows. Keeping LaTeX intact is what makes the conversion truly useful. + +## 次のステップと関連トピック + +- **Batch conversion:** Wrap the code in a `foreach` loop to process an entire folder of `.docx` files. +- **Markdown generation:** Append `#` headers or `*` bullets to the text to produce ready‑to‑publish markdown. +- **PDF export:** Use `PdfSaveOptions` to create a PDF version alongside the txt. +- **Advanced LaTeX tweaking:** Post‑process the output with regex to replace `\[`/`\]` with `$...$` for inline equations. + +Each of these builds on the same foundation—loading a `Document` and choosing the right `SaveOptions`. Feel free to experiment; the API is flexible enough for most document‑automation scenarios. + +## 結論 + +We’ve covered everything you need to **save docx as txt** while preserving every equation as LaTeX. From loading the source file, configuring `TxtSaveOptions` for **how to export math**, to writing the final plain‑text file, the entire workflow fits in a handful of concise C# statements. + +Now you can automate the conversion of Word reports, academic papers, or any document that mixes text and math, and feed the resulting `.txt` into downstream tools without losing any scientific detail. + +Give it a try, tweak the options for your own use case, and let us know in the comments how it worked for you. Happy coding! + +![DOCX → C# 処理 → LaTeX 数式付き TXT への変換パイプラインを示す図](https://example.com/images/save-docx-as-txt.png "docx を txt に変換するパイプライン") + +{{< /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-pdfsaveoptions/_index.md b/words/japanese/net/programming-with-pdfsaveoptions/_index.md index f9c4137125..0eea111459 100644 --- a/words/japanese/net/programming-with-pdfsaveoptions/_index.md +++ b/words/japanese/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Word文書をPDFに変換してオンライン配信、アーカイブ、印刷 | [PDF ドキュメントの最終印刷プロパティを更新する](./update-last-printed-property/) ステップバイステップ ガイドを使用して、Aspose.Words for .NET を使用して PDF ドキュメント内の最後に印刷されたプロパティを更新する方法を学習します。 | | [PDF ドキュメントで 3D DML 3DEffects をレンダリングする](./dml-3deffects-rendering/) この包括的なステップバイステップ ガイドでは、Aspose.Words for .NET を使用して PDF ドキュメントで魅力的な 3D DML 効果をレンダリングする方法を学習します。 | | [PDF文書内の画像を補間する](./interpolate-images/) Aspose.Words for .NET を使用してPDFドキュメント内の画像を補間する方法を、ステップバイステップガイドで学びましょう。PDFの画像品質を簡単に向上させることができます。 | - +| [Word からアクセシブルな PDF を作成する – ステップバイステップ ガイド](./create-accessible-pdf-from-word-step-by-step-guide/) Aspose.Words for .NET を使用して、アクセシビリティ対応の PDF を Word 文書から作成する手順を詳しく解説します。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/japanese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2d7d3b3d2c --- /dev/null +++ b/words/japanese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,235 @@ +--- +category: general +date: 2026-04-07 +description: C#でDOCXファイルからアクセシブルなPDFを作成する。WordをPDFに変換する方法、docxをPDFとして保存する方法、そしてPDF/UA準拠を確保する方法を学びましょう。 +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: ja +og_description: C#でWordからアクセシブルなPDFを作成する。このガイドでは、WordをPDFに変換し、docxをPDFとして保存し、PDF/UA基準に準拠する方法を示します。 +og_title: アクセシブルPDFの作成 – 完全C#チュートリアル +tags: +- Aspose.Words +- PDF accessibility +- C# +title: WordからアクセシブルなPDFを作成する – ステップバイステップガイド +url: /ja/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word からアクセシブルな PDF を作成 – 完全プログラミングチュートリアル + +Word ドキュメントから **アクセシブルな PDF** を作成する必要があったが、どの設定を調整すればよいか分からなかったことはありませんか? あなただけではありません。多くの企業では PDF/UA(Universal Accessibility)への準拠が必須要件となっており、通常の「PDF に変換」ボタンだけでは不十分です。 + +このガイドでは、**Word を PDF に変換**し、**docx を PDF として保存**し、出力がアクセシビリティ基準を満たすことを保証する簡潔なエンドツーエンドソリューションを順を追って説明します。曖昧な参照は一切なく、コピー&ペーストできるコードと各行の「なぜ」を提供します。 + +> **TL;DR:** `.docx` を読み込み、`PdfSaveOptions.Compliance` を `PdfUa1`(または `PdfUa2`)に設定し、`Document.Save` を呼び出すだけです。これだけで Aspose.Words for .NET を使って **アクセシブルな PDF** を作成できます。 + +--- + +## 学べること + +- 見出し、代替テキスト、読み順を保持しながら **Word を PDF に変換**する方法。 +- `PdfUa1` と `PdfUa2` の違いと、どちらを選択すべきか。 +- 数行の C# だけで **docx を PDF として保存**する方法。 +- よくある落とし穴(フォント欠如、未対応タグ)と迅速な対処法。 +- 任意の .NET プロジェクトに組み込める、すぐに実行可能なコードサンプル。 + +### 前提条件 + +- .NET 6 以降(コードは .NET Framework 4.7+ でも動作します)。 +- NuGet でインストールした Aspose.Words for .NET(`Install-Package Aspose.Words`)。 +- 適切な構造(スタイル、画像の代替テキスト)をすでに持つ Word ファイル(`input.docx`)。 + +まだ Aspose.Words を追加していない場合は、パッケージマネージャコンソールで以下のコマンドを実行してください。 + +```powershell +Install-Package Aspose.Words +``` + +これが唯一必要な外部依存関係です。 + +--- + +## アクセシブルな PDF を作成 – アクセシビリティが重要な理由 + +PDF が **PDF/UA**(Universal Accessibility)としてマークされていると、スクリーンリーダーは見出し、表、フォームフィールドを元の Word ファイルと同様にナビゲートできます。これは単なる「あると便利」ではなく、多くの政府機関や企業が法的要件として PDF/UA 準拠を求めています。 + +`PdfSaveOptions` の `Compliance` プロパティを設定すると、ライブラリは必要なタグを埋め込み、正しい文書言語を設定し、論理的な読み順を追加します。このステップを省くと、アクセシビリティ監査に不合格となる「視覚的のみ」の PDF が生成されます。 + +--- + +## Aspose.Words で Word を PDF に変換 + +以下は、文書をアクセシブルに保ったまま **Word を PDF に変換**する最もシンプルな方法です。 + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**ここで何が起きているのか?** + +- `Document` が Word ファイルを読み込み、すべてのスタイルと構造を保持します。 +- `PdfSaveOptions.Compliance` が Aspose.Words に出力を PDF/UA としてタグ付けさせます。 +- `doc.Save` が PDF をディスクに書き込み、タグを自動的に埋め込みます。 + +> **プロのコツ:** ソースの Word ファイルでカスタム見出しスタイルを使用している場合は、必ずそれらを組み込み見出しレベル(`Heading1`、`Heading2`、…)にマッピングしてください。これにより生成された PDF に正しい見出しタグが付与されます。 + +--- + +## Docx を PDF として保存 – PDF/UA コンプライアンスの設定 + +`PdfSaveOptions` クラスに慣れているなら、アクセシビリティに影響する他のスイッチがあるか気になるでしょう。便利なプロパティをいくつか紹介します。 + +| プロパティ | アクセシビリティへの影響 | 典型的な値 | +|----------|------------------------|---------------| +| `Compliance` | PDF/UA タグ付けのオン/オフを切り替える | `PdfCompliance.PdfUa1` または `PdfUa2` | +| `EmbedFullFonts` | 読み取り側が意図したタイポグラフィを確実に表示できるようにする | `true`(デフォルト) | +| `OptimizeOutput` | タグを削除せずにファイルサイズを削減する | `true` | + +前のスニペットを次のように拡張できます。 + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +`PdfUa2` に切り替えると、装飾画像用の *artifact* タグ付けなど、最新の PDF/UA 機能がサポートされます。これが不要な場合は、古い支援技術との互換性を最大化するために `PdfUa1` を使用してください。 + +--- + +## Docx を PDF にエクスポート – 完全動作サンプル + +以下は、ファイルの読み込みから出力の検証までの全フローを示す、自己完結型コンソールアプリです。 + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### 期待される結果 + +- 実行ファイルと同じフォルダーに **Compliant.pdf** という名前のファイルが作成されます。 +- Adobe Acrobat Pro で PDF を開き、*ツール → アクセシビリティ → フルチェック* を実行すると、**アクセシビリティの問題はありません** と表示されます(元の Word ファイルが適切に構造化されていることが前提)。 +- PDF の *プロパティ → 詳細* タブに「PDF/A と PDF/UA コンプライアンス」セクションで **PDF/UA** が表示されます。 + +--- + +## よくあるエッジケースと対処法 + +| 状況 | 重要な理由 | 簡単な対処法 | +|-----------|----------------|-----------| +| **Missing fonts** | PDF がデフォルトフォントにフォールバックし、レイアウトが崩れる可能性があります。 | `EmbedFullFonts = true`(既定で有効)を設定し、ビルドマシンでフォントファイルにアクセスできることを確認してください。 | +| **Images without alt‑text** | スクリーンリーダーは「画像」とだけ読み上げ、説明がありません。 | Word で画像に **Alt Text** を追加(右クリック → 画像の書式設定 → Alt Text)してから変換してください。 | +| **Custom styles not recognized as headings** | PDF/UA には正しい見出しタグが必要です。 | `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` のようにカスタムスタイルを組み込み見出しにマッピングします。 | +| **Large documents cause memory pressure** | 500 ページのファイルを変換すると RAM 使用量が急増することがあります。 | `doc.Save(outputPath, options)` で `options.SaveFormat = SaveFormat.Pdf` を指定し、`OutOfMemoryException` が発生した場合はチャンク処理を検討してください。 | +| **Need to export docx to pdf without accessibility** | 時には視覚的な PDF だけが必要なこともあります。 | `Compliance` 設定を省略するか、`PdfCompliance.Pdf15` に設定します。 | + +--- + +## 画像例(Alt Text 含む) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*上記の代替テキストは主要キーワードを強調し、ユーザーと AI モデルの両方が画像のコンテキストを理解しやすくします。* + +--- + +## よくある質問 + +**Q: .NET Core でも動作しますか?** +A: もちろんです。Aspose.Words はクロスプラットフォーム対応で、.NET 6 以上のプロジェクトに NuGet パッケージを参照すれば使用できます。 + +**Q: 複数の DOCX ファイルを一括処理できますか?** +A: はい。`foreach (var file in Directory.GetFiles(folder, "*.docx"))` ループで読み込みと保存ロジックを囲みます。パフォーマンス向上のため、`PdfSaveOptions` インスタンスは 1 つだけ再利用してください。 + +**Q: Aspose が自動で出力しないカスタム PDF/UA タグを追加したい場合は?** +A: 低レベル PDF API(`PdfSaveOptions.CustomProperties`)を使用するか、iText 7 などのライブラリで 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/japanese/net/working-with-fonts/_index.md b/words/japanese/net/working-with-fonts/_index.md index 3e703a30da..571861a2e9 100644 --- a/words/japanese/net/working-with-fonts/_index.md +++ b/words/japanese/net/working-with-fonts/_index.md @@ -48,6 +48,7 @@ | [警告通知を受け取る](./receive-warning-notification/) Aspose.Words for .NET の使用時に警告通知を受信し、ドキュメント内の問題や警告を管理する方法について説明します。 | | [リソース Steam フォントソースの例](./resource-steam-font-source-example/) リソース ストリーム フォント ソースを使用してカスタム フォントを Aspose.Words for .NET に読み込む方法を学習します。 | | [接尾辞なしの置換を取得する](./get-substitution-without-suffixes/) このチュートリアルでは、Aspose.Words for .NET を使用して Word 文書でサフィックスなしのオーバーライドを取得する方法を学習します。 | +| [Aspose.Words でフォントを検出する方法 – 完全ガイド](./how-to-detect-fonts-in-aspose-words-complete-guide/) Aspose.Words for .NET を使用して文書内のフォントを検出する完全ガイドです。 | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/japanese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/japanese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..ab2b5f198a --- /dev/null +++ b/words/japanese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-04-07 +description: Aspose.Words を使用した C# でフォントの検出方法と、フォントが欠落している場合の警告取得方法を学びます。ステップバイステップのコードが含まれています。 +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: ja +og_description: Aspose.Wordsでフォントを検出する方法は?このチュートリアルに従って警告を取得し、欠落フォントを簡単に処理しましょう。 +og_title: Aspose.Wordsでフォントを検出する方法 – 完全ガイド +tags: +- Aspose.Words +- C# +- Font handling +title: Aspose.Wordsでフォントを検出する方法 – 完全ガイド +url: /ja/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words でフォントを検出する方法 – 完全ガイド + +本番環境にリリースする前に、Word 文書に欠落している **フォントを検出** したいと思ったことはありませんか? 多くのエンタープライズシナリオで、余計なフォントが PDF 変換パイプラインを壊したり、レイアウトの乱れを引き起こしたりして、プロフェッショナルでない印象を与えてしまいます。良いニュースは、Aspose.Words には欠損フォントを検出し、明確な警告を出す組み込み機能があることです。 + +このチュートリアルでは、**フォントの検出方法**、**警告の取得方法**、そして **欠損フォントの処理ベストプラクティス** を順を追って解説します。外部ツールは不要、推測も不要—今すぐプロジェクトに組み込める純粋な C# コードだけです。 + +> **クイックプレビュー:** 最後まで読むと、ドキュメント読み込み時にすべてのフォント置換メッセージを収集する再利用可能な `FontSubstitutionWarningCollector` が手に入り、フォントが見つからなかったときの対処方法が分かります。 + +--- + +## 学べること + +- `LoadOptions` を設定してフォント置換警告をリッスンする方法。 +- カスタムコレクタークラスでその警告を取得する方法。 +- 収集した警告を処理し、処理を中止するか、ログに記録するか、フォントを置換するかを決定する方法。 +- リモートフォントや埋め込みフォントを参照するドキュメントに対するエッジケースの取り扱い。 + +**前提条件:** .NET 6+(または .NET Framework 4.6+)、Aspose.Words for .NET(最新バージョン)、C# の基本的な知識。Aspose.Words を使ったことがなくても心配はいりません—このガイドは数分のセットアップ時間だけを想定しています。 + +--- + +## Aspose.Words LoadOptions を使用したフォント検出方法 + +欠損フォントを検出する最初のステップは、Aspose.Words にそれらを報告させることです。これは `LoadOptions.WarningCallback` プロパティで実現でき、`IWarningCallback` を実装した任意のクラスを受け取ります。以下では、警告をすべて保存する小さなコレクターを作成します。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**重要ポイント:** 警告コールバックを設定しないと、Aspose.Words は欠損フォントをデフォルトフォントに静かに置換してしまい、問題があることに気付くことができません。`WarningType.FontSubstitution` を捕捉することで、**利用できないフォント** を完全に可視化できます。 + +次に、コレクターを `LoadOptions` に組み込み、ドキュメントを読み込みます。 + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **プロのコツ:** バッチ処理で多数のドキュメントを扱う場合、同じ `FontSubstitutionWarningCollector` インスタンスを再利用できますが、ロードごとに `Clear()` を呼んで警告がファイル間で混在しないようにしてください。 + +--- + +## ドキュメント読み込み時の警告取得 + +ドキュメントが読み込まれた後、コレクターにはすでにフォント関連の警告がすべて格納されています。次に考えるべきは、*警告をどのように取得して* ログや画面に表示しやすくするかです。 + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +典型的な出力例は次のとおりです: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**この情報が示すこと:** 各行は元のフォント名と、Aspose.Words が選択した代替フォントを示しています。この情報をもとに、代替フォントが許容できるか、あるいは欠損フォントを手動で埋め込む必要があるかを判断できます。 + +--- + +## 欠損フォントを上手に処理する + +警告を検出・取得するだけでは不十分です。実際の価値は、**欠損フォントを本番環境向けに処理** できることにあります。以下に、一般的な 3 つの戦略を示します。 + +1. **ログを残して続行** – 監査トレイルが必要なバッチ処理に最適。 +2. **重要フォントで中止** – 特定のフォント(例: ブランド専用フォント)が欠損している場合は例外をスロー。 +3. **欠損フォントをオンザフライで埋め込む** – 既知のフォルダーから欠損フォントを読み込み、再度ドキュメントを読み込む前に Aspose.Words に登録。 + +### 例: 重要フォントで中止する + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### 例: 欠損フォントを自動埋め込み + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**これらのパターンが有効な理由:** フォントが欠損したときに何をすべきかを明示的に決めることで、ブランドや可読性を損なうサイレントな置換を防げます。これが **欠損フォントの制御された処理** の本質です。 + +--- + +## 完全動作サンプル + +すべてを統合した、**フォント検出**、**警告取得**、そして **欠損フォントをログに記録して処理** するシンプルなポリシーを実装した、単一の実行可能プログラムを以下に示します。 + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**期待される結果:** マシンに存在しないフォントを参照しているドキュメントでプログラムを実行すると、コンソールに各置換警告が一覧表示されます。警告が `critical` セットに含まれるフォントに関係している場合、プログラムは早期に終了し、欠陥のある PDF が生成されるのを防ぎます。 + +--- + +## よくある質問 (FAQ) + +| 質問 | 回答 | +|------|------| +| *Aspose.Words のこのコードを使用するのにライセンスは必要ですか?* | はい、有効な Aspose.Words ライセンスがないと評価版の透かしが表示され、機能が制限されます。 | +| *埋め込みフォントも検出できますか?* | 埋め込みフォントはファイルに既に含まれているため、Aspose.Words は置換警告を出しません。必要に応じて `Document.FontInfos` で埋め込みフォントを列挙できます。 | +| *Windows ではシステムフォントだが Linux では存在しない場合はどうなりますか?* | Linux ではフォントがインストールされていないため同じ警告が発生します。必要な `.ttf` ファイルをアプリに同梱し、**欠損フォントの処理** 戦略で対処してください。 | +| *警告コレクターはスレッドセーフですか* | {{< /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 938bccaaa3..b915a1307a 100644 --- a/words/korean/net/basic-conversions/_index.md +++ b/words/korean/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ | [Word에서 LaTeX 내보내기 – 단계별 가이드](./how-to-export-latex-from-word-step-by-step-guide/) | Aspose.Words for .NET을 사용하여 Word 문서에서 LaTeX 코드를 추출하고 내보내는 방법을 단계별로 안내합니다. | | [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로 변환하는 전체 단계별 가이드입니다. | +| [C#에서 DOCX를 PDF로 변환 – 완전한 프로그래밍 가이드](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Aspose.Words for .NET을 활용해 C#에서 DOCX를 PDF로 변환하는 전체 단계별 프로그래밍 가이드입니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/korean/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..0ed75dd4dd --- /dev/null +++ b/words/korean/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: C#에서 DOCX를 빠르게 PDF로 변환하세요. Word를 PDF로 저장하는 방법, C#에서 docx 문서를 로드하는 방법, + 그리고 몇 분 안에 PDF/UA‑2 준수를 보장하는 방법을 배워보세요. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: ko +og_description: C#에서 DOCX를 즉시 PDF로 변환하세요. 이 가이드는 Word를 PDF로 저장하고, C#에서 docx 문서를 로드하며, + PDF/UA‑2 표준을 충족하는 방법을 보여줍니다. +og_title: C#에서 DOCX를 PDF로 변환하기 – 단계별 가이드 +tags: +- Aspose.Words +- C# +- PDF Generation +title: C#에서 DOCX를 PDF로 변환하기 – 완전한 프로그래밍 가이드 +url: /ko/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#에서 DOCX를 PDF로 변환 – 완전한 프로그래밍 가이드 + +C# 애플리케이션에서 **DOCX를 PDF로 변환**해야 할 때, 어디서 시작해야 할지 몰라 고민한 적이 있나요? 당신만 그런 것이 아닙니다. 많은 개발자들이 Word의 간단한 “PDF로 저장” 버튼이 코드로는 바로 적용되지 않는다는 것을 알게 되면서 난관에 부딪히곤 합니다. 좋은 소식은? Aspose.Words(또는 유사한 라이브러리) 몇 줄만 사용하면 전체 프로세스를 자동화하고, 떠다니는 도형을 인라인으로 유지하며, PDF/UA‑2 준수까지 손쉽게 달성할 수 있다는 것입니다. + +이 튜토리얼에서는 **Word를 PDF로 저장**, **load docx document C#** 방법을 배우고, 내보내기 옵션을 조정해 결과 파일이 접근성 감사를 통과하도록 만드는 방법을 다룹니다. 최종적으로 `.docx` 파일을 깔끔하고 표준을 준수하는 PDF로 변환하는 독립 실행형 프로그램을 만들 수 있습니다. + +> **왜 신경 써야 할까요?** +> DOCX를 PDF로 변환하는 것은 청구 시스템, 보고서 생성기, 문서 보관 파이프라인 등에서 흔히 요구됩니다. 이를 자동화하면 수동 작업을 없애고, 인간 오류를 줄이며, 모든 출력물이 플랫폼에 관계없이 동일하게 보장됩니다. + +--- + +## 준비물 + +- **.NET 6.0** 이상 (코드는 .NET Framework 4.6+에서도 동작합니다) +- **Aspose.Words for .NET** (무료 체험판 또는 정식 라이선스) – NuGet으로 설치할 수 있습니다: `dotnet add package Aspose.Words` +- `YOUR_DIRECTORY` 라고 부를 수 있는 폴더에 배치한 샘플 `input.docx` 파일 +- Visual Studio, VS Code 또는 원하는 C# 편집기 + +그게 전부—추가 서비스나 REST 호출이 필요 없습니다. 순수 C#만 있으면 됩니다. + +--- + +## Step 1: Load the DOCX Document in C# + +DOCX를 PDF로 **변환**하려면 먼저 Word 파일을 메모리로 가져와야 합니다. `Document` 클래스가 이를 담당합니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**왜 중요한가요:** +파일을 로드하면 전체 파싱된 객체 모델(단락, 표, 떠다니는 도형 등)을 얻게 됩니다. 이는 모든 **load docx document c#** 워크플로의 첫 단계이며, 변환에 들어가기 전에 파일이 손상되지 않았는지 검증하는 역할도 합니다. + +> **프로 팁:** 사용자가 업로드한 파일을 처리할 경우, `new Document()` 호출을 try/catch 블록으로 감싸서 손상된 DOCX 파일을 우아하게 처리하세요. + +--- + +## Step 2: Configure PDF Save Options (Compliance & Shape Handling) + +“옵션을 조정할 필요가 있을까, 아니면 그냥 `Save`만 호출하면 될까?” 라고 생각할 수 있습니다. 짧게 답하자면: 가능하지만, 올바른 옵션을 설정하면 PDF가 접근 가능하고 시각적으로 정확해집니다. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**왜 중요한가요:** +- `ExportFloatingShapesAsInlineTag = true` 은 떠다니는 객체가 다른 디바이스에서 PDF를 볼 때 손실되거나 잘못 정렬되는 것을 방지합니다. +- `Compliance = PdfCompliance.PdfUa2` 은 출력물이 PDF/UA‑2 표준을 만족하도록 하여 스크린 리더 호환성 및 법적 보관에 필수적입니다. + +접근성이 필요 없으면 `Compliance` 라인을 삭제해도 되지만, 이를 유지해도 거의 오버헤드가 없으며 향후 요구 사항에 대비할 수 있습니다. + +--- + +## Step 3: Save the Document as PDF – The Core **Convert DOCX to PDF** Action + +문서를 로드하고 옵션을 설정했으니, 실제 변환은 단 한 줄의 메서드 호출로 끝납니다. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**실행 결과:** +프로그램을 실행하면 동일한 폴더에 `output.pdf` 가 생성됩니다. PDF 뷰어로 열어 보면: + +- 모든 텍스트, 표, 이미지가 원본 DOCX와 정확히 동일하게 표시됩니다. +- 떠다니는 도형이 인라인으로 유지되어 레이아웃이 보존됩니다. +- 기본 PDF/UA‑2 검증 도구(예: Adobe Acrobat Preflight)를 통과합니다. + +--- + +## Full Working Example – From Top to Bottom + +아래는 전체 흐름을 보여주는 완전한 콘솔 앱 예제입니다. 새 C# 프로젝트에 복사‑붙여넣기하고 **F5** 를 눌러 실행해 보세요. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**콘솔에 예상되는 출력:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +그리고 깔끔한 `output.pdf` 가 소스 파일 옆에 생성됩니다. + +--- + +## Frequently Asked Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Can I convert a DOCX stored in a `MemoryStream`?** | Absolutely. Use `new Document(stream)` instead of a file path. | +| **What if the DOCX contains macros?** | Aspose.Words ignores VBA macros by default; they won’t appear in the PDF. | +| **Do I need a license for production?** | The free trial adds a watermark after a certain page count. For commercial use, obtain a license to remove it. | +| **How do I change the PDF page size?** | Set `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` before saving. | +| **Is there a way to embed a custom font?** | Yes—add `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Pro Tips for a Smooth **Save Word as PDF** Experience + +- **배치 처리:** 변환 로직을 루프에 감싸고 DOCX 경로 목록을 전달하세요. +- **성능:** 여러 파일을 변환할 때는 `PdfSaveOptions` 인스턴스를 재사용하면 GC 압력을 줄일 수 있습니다. +- **로그 기록:** 생성된 PDF 크기(`new FileInfo(outputPath).Length`)를 출력해 압축 결과를 모니터링하세요. +- **오류 처리:** `FileNotFoundException`(DOCX 누락)과 `UnauthorizedAccessException`(쓰기 권한 문제)를 구분해 처리하세요. + +--- + +## Conclusion + +이제 C#에서 **DOCX를 PDF로 변환**하는 견고하고 프로덕션 준비가 된 패턴을 갖추었습니다. DOCX를 로드하고, PDF 저장 옵션을 구성한 뒤 `Save`를 호출하면 **Word를 PDF로 저장**, 레이아웃을 정확히 유지하고, 접근성 표준을 충족하는 PDF를 단 몇 줄의 코드로 만들 수 있습니다. + +다음 과제에 도전해 보시겠어요? `PdfSaveOptions` 를 `ImageSaveOptions` 로 바꿔 **Word를 PNG로 저장**하거나, `HtmlSaveOptions` 클래스를 사용해 웹용 출력을 생성해 보세요. 어느 경우든 동일한 **load docx document c#** 기본 원칙이 적용되므로 코드베이스가 미래에도 견고합니다. + +행복한 코딩 되시고, 여러분의 PDF가 언제나 표준을 준수하길 바랍니다! + +--- + +![DOCX를 PDF로 변환한 예시 출력](convert-docx-to-pdf-output.png "DOCX를 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-loadoptions/_index.md b/words/korean/net/programming-with-loadoptions/_index.md index de8f051447..c7d16997fb 100644 --- a/words/korean/net/programming-with-loadoptions/_index.md +++ b/words/korean/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Aspose.Words for .NET 튜토리얼은 LoadOptions를 사용하여 워드 프로 | [Word 문서에 CHM 파일 로드](./load-chm/) | Aspose.Words for .NET을 사용하여 CHM 파일을 Word 문서에 쉽게 로드하는 단계별 튜토리얼을 소개합니다. 기술 문서를 통합하는 데 적합합니다. | | [Aspose.Words로 docx 복구하기 – 단계별 가이드](./how-to-recover-docx-with-aspose-words-step-by-step/) | Aspose.Words를 활용해 손상된 docx 파일을 복구하는 방법을 단계별로 안내합니다. | | [Aspose Load Options – 사용자 정의 글꼴 설정으로 DOCX 로드](./aspose-load-options-load-docx-with-custom-font-settings/) | Aspose.Words for .NET에서 사용자 지정 글꼴을 설정하여 DOCX 파일을 로드하는 방법을 단계별로 안내합니다. | +| [손상된 DOCX 복구 – 파일을 수정하고 저장하는 완전한 C# 가이드](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Aspose.Words for .NET을 활용해 손상된 DOCX 파일을 복구하고 저장하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/korean/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..e99d30e01c --- /dev/null +++ b/words/korean/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: C#에서 손상된 DOCX 파일을 복구하고 복구된 문서를 안전하게 저장하는 방법을 배우세요. Aspose.Words 예제를 포함한 + 단계별 가이드. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: ko +og_description: C#에서 손상된 DOCX 파일을 복구하고 Aspose.Words로 복구된 문서를 저장합니다. 전체 코드, 설명 및 모범 + 사례 팁. +og_title: 손상된 DOCX 복구 – 단계별 C# 가이드 +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: 손상된 DOCX 복구 – 파일을 고치고 저장하는 완전 C# 가이드 +url: /ko/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 손상된 DOCX 복구 – 파일을 수정하고 저장하는 완전한 C# 가이드 + +탐색기에서는 정상으로 보이지만 앱에서 열 때 예외가 발생한 DOCX를 열어본 적 있나요? 바로 전형적인 “손상된 Word 파일” 악몽이며, 보통 보고 싶지 않은 스택 트레이스로 끝납니다. 좋은 소식은? Aspose.Words는 파일이 손상된 경우에도 작업을 계속할 수 있게 해주는 **recover corrupted docx** 기능을 제공합니다. + +이 튜토리얼에서는 손상된 문서를 로드하고, 라이브러리에 계속 진행하도록 지시한 뒤, **save recovered document**를 새로운 깨끗한 파일에 저장하는 정확한 단계를 살펴봅니다. 끝까지 읽으면 복구 모드가 왜 중요한지, 어떻게 설정하는지, 그리고 피해야 할 함정은 무엇인지 알 수 있습니다—모호한 “문서 참고”식 shortcuts는 없습니다. + +## 필요 사항 + +- **Aspose.Words for .NET** (최근 버전이면 모두 가능; 이 가이드를 작성할 때는 24.11 사용) +- .NET 개발 환경 (Visual Studio, Rider, 혹은 C# 확장 기능이 설치된 VS Code) +- 손상되었을 가능성이 있는 샘플 DOCX (테스트용으로 zip 편집기로 열어 일부를 삭제해 손상시킬 수 있음) +- 기본적인 C# 지식—특별한 것이 아니라 콘솔 앱을 만들 수 있는 정도면 충분합니다 + +이미 준비가 되었다면, 바로 해결책으로 뛰어들어 보세요. + +## Step 1: Set Up LoadOptions with the Right Recovery Strategy + +복구의 핵심은 `LoadOptions` 객체입니다. 이 객체는 Aspose.Words에게 DOCX 패키지 내부에서 잘못된 XML이나 누락된 파트를 만나면 어떻게 동작할지 알려줍니다. `RecoveryMode.RecoverAndContinue` 플래그가 가장 관대하게 동작하며, 가능한 부분을 살리고 나머지는 건너뜁니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**왜 중요한가:** `LoadOptions`를 생략하거나 기본 모드(`RecoveryMode.NoRecovery`)를 사용하면 `Document` 생성자가 문제를 발견하는 즉시 예외를 발생시킵니다. `RecoverAndContinue`를 사용하면 API가 비치명적인 오류를 무시하고 부분적인 문서 객체를 만들어 계속 작업할 수 있습니다. + +> **Pro tip:** 파일이 많을 경우 `try/catch` 블록으로 로드 호출을 감싸는 것이 좋습니다—예를 들어 `[Content_Types].xml` 파일이 없을 경우처럼 완전히 복구할 수 없는 치명적인 오류도 존재합니다. + +## Step 2: Load the Potentially Corrupted DOCX + +옵션이 준비되었으니 파일을 로드합니다. 생성자는 파일 경로와 방금 만든 `LoadOptions`를 인수로 받습니다. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**내부에서 무슨 일이 일어나나요?** +Aspose.Words는 ZIP 컨테이너를 파싱하고 각 XML 파트를 읽어 Open XML DOM을 재구성하려 시도합니다. 손상된 파트를 만나면 복구 엔진이 경고를 로그에 남기고(진단을 켰을 경우 콘솔에 표시) 계속 진행합니다. 결과 `Document` 객체는 몇 개의 단락이나 이미지가 누락될 수 있지만, 나머지 내용은 그대로 유지됩니다. + +## Step 3: Verify the Recovered Content (Optional but Recommended) + +디스크에 파일을 저장하기 전에 몇몇 노드를 검사해 중요한 섹션이 살아남았는지 확인하는 것이 현명합니다. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +출력이 정상적으로 보인다면 **recover corrupted docx** 작업에 성공한 것입니다. 누락된 섹션이 있다면 계속 진행 여부를 판단할 수 있습니다—때로는 손실된 부분이 단순히 장식용일 수도 있습니다. + +## Step 4: Save the Recovered Document + +대부분의 개발자가 가장 많이 묻는 질문: “원본 손상을 다시 도입하지 않고 **save recovered document**를 어떻게 할까?” 답은 간단합니다. 새 경로를 지정해 `Document.Save`를 호출하면 됩니다. Aspose.Words는 완전히 새로운 ZIP 패키지를 작성하므로 남아 있던 손상된 파트는 자동으로 제외됩니다. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**왜 이렇게 동작하나요:** `Save` 메서드는 메모리 상의 DOM을 깨끗한 Open XML 패키지로 직렬화합니다. 복구 과정에서 로드되지 않은 손상된 부분은 DOM에 존재하지 않기 때문에 새 파일에 포함되지 않습니다. 결과적으로 Word, Google Docs, 기타 뷰어에서 정상적으로 열리는 건강한 DOCX가 생성됩니다. + +## Step 5: Automate the Process for Multiple Files (Bonus) + +실제 환경에서는 문제가 있는 파일이 가득한 폴더를 마주하게 됩니다. 앞 단계들을 루프 안에 넣으면 작은 복구 유틸리티가 완성됩니다. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +이제 `C:\Docs\Batch` 폴더에 손상된 DOCX 파일들을 모두 넣어두면 스크립트가 자동으로 정리해 줍니다. + +## Common Questions & Edge Cases + +| Question | Answer | +|----------|--------| +| **Does this work with .doc files?** | 동일한 `LoadOptions` 클래스를 사용할 수 있지만, 오래된 Word 포맷(`doc`)을 참조해야 합니다. Aspose.Words는 여전히 복구할 수 있지만 오류 패턴이 다릅니다. | +| **What if the file is password‑protected?** | 복구 과정에서 암호를 우회할 수 없습니다. `LoadOptions.Password`를 통해 비밀번호를 제공해야 합니다. | +| **Will images be lost?** | 손상된 XML 파트에 포함된 이미지만 누락될 수 있습니다. 나머지 이미지는 별도의 바이너리 스트림으로 저장돼 그대로 보존됩니다. | +| **Can I log the warnings Aspose generates?** | 가능합니다—`LoadOptions.LoadFormat`을 `LoadFormat.Docx`로 설정하고 `Document.WarningCallback`에 구독하면 상세 경고 메시지를 캡처할 수 있습니다. | +| **Is `RecoverAndContinue` safe for production?** | 일반적으로 안전하지만 데이터로 충분히 테스트하세요. 미션 크리티컬 파이프라인에서는 복구가 필요했던 문서를 별도로 표시해 추후 검토하도록 하는 것이 좋습니다. | + +## Full Working Example (Copy‑Paste Ready) + +아래는 콘솔 앱으로 컴파일할 수 있는 완전한 프로그램 예시입니다. 모든 단계, 오류 처리, 선택적인 배치 처리 로직이 포함되어 있습니다. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**예상 결과:** 프로그램을 실행하면 `Recovered.docx`가 Microsoft Word에서 원본 오류 대화상자 없이 열립니다. 너무 손상된 부분은 제외되지만 본문, 제목, 대부분의 이미지는 그대로 유지됩니다. + +![손상된 docx 복구 예시](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Conclusion + +우리는 Aspose.Words를 사용해 `LoadOptions` 설정부터 안전하게 **save recovered document**까지 **recover corrupted docx** 파일을 복구하는 모든 과정을 다루었습니다. 핵심 포인트는 다음과 같습니다: + +- `RecoveryMode.RecoverAndContinue`를 사용해 라이브러리가 비치명적인 오류를 무시하도록 합니다. +- 특히 중요한 비즈니스 문서를 다룰 때는 저장하기 전에 로드된 내용을 반드시 검증하십시오. +- 문서를 저장하면 깨끗한 ZIP 패키지가 생성되어 원본 손상이 효과적으로 제거됩니다. +- 동일한 패턴을 배치 작업에 적용하면 대량 문서 저장소를 자동으로 정리할 수 있습니다. + +다음 단계가 준비되셨나요? 업로드 폴더를 모니터링하는 백그라운드 서비스에 이 로직을 통합하거나, `WarningCallback`을 활용해 복구가 필요한 파일 목록 보고서를 만들어 보세요. API를 직접 사용해 볼수록 Aspose.Words가 실제 문서 처리에 얼마나 견고한지 체감하게 될 것입니다. + +비밀번호 보호 파일 처리나 복구된 문서 병합 같은 트릭을 공유하고 싶으신가요? 아래 댓글로 남겨 주세요. 대화를 이어가며 함께 성장합시다. 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/korean/net/programming-with-markdownsaveoptions/_index.md b/words/korean/net/programming-with-markdownsaveoptions/_index.md index 7958496a56..d2293e1371 100644 --- a/words/korean/net/programming-with-markdownsaveoptions/_index.md +++ b/words/korean/net/programming-with-markdownsaveoptions/_index.md @@ -23,6 +23,7 @@ | --- | --- | | [표 내용 정렬을 사용하여 마크다운으로 내보내기](./export-into-markdown-with-table-content-alignment/) | Aspose.Words for .NET을 사용하여 정렬된 표가 있는 Word 문서를 Markdown으로 내보내는 방법을 알아보세요. 완벽한 Markdown 표를 만드는 단계별 가이드를 따라해 보세요. | | [이미지 폴더 설정](./set-images-folder/) Aspose.Words for .NET을 사용하여 Word 문서를 적절한 표 정렬을 통해 Markdown으로 변환하세요. 완벽한 결과를 얻으려면 자세한 가이드를 따르세요. | +| [사용자 지정 이미지 폴더로 Word를 Markdown으로 저장 – 전체 가이드](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Aspose.Words for .NET을 사용하여 사용자 지정 이미지 폴더를 설정하고 Word 문서를 Markdown으로 저장하는 전체 가이드 | | [Word를 PDF로 저장하고 손상된 Word 복구 – C#에서 Word를 Markdown으로 변환](./save-word-as-pdf-and-recover-corrupted-word-convert-word-to/) | | | [접근성 PDF 만들기 및 Word를 Markdown으로 변환 – 전체 C# 가이드](./create-accessible-pdf-and-convert-word-to-markdown-full-c-gu/) | Aspose.Words for .NET을 사용하여 접근성 PDF를 생성하고 Word를 Markdown으로 변환하는 전체 C# 가이드 | | [Markdown 사용 방법: LaTeX 수식이 포함된 DOCX를 Markdown으로 변환](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | Aspose.Words for .NET을 사용하여 LaTeX 수식이 포함된 DOCX 파일을 정확히 Markdown으로 변환하는 단계별 가이드 | diff --git a/words/korean/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/korean/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..06d43d1f6b --- /dev/null +++ b/words/korean/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,290 @@ +--- +category: general +date: 2026-04-07 +description: 콜백을 사용하여 Word를 Markdown으로 저장하고 docx에서 이미지를 추출합니다. 콜백을 활용해 마크다운 이미지 폴더를 + 효율적으로 저장하는 방법을 배워보세요. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: ko +og_description: 콜백을 사용하여 Word를 Markdown으로 저장하고 docx에서 이미지를 추출합니다. 이 가이드는 콜백을 사용해 마크다운 + 이미지 폴더를 만드는 방법을 보여줍니다. +og_title: Word를 Markdown으로 저장하기 – 완전한 단계별 가이드 +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: 맞춤 이미지 폴더로 워드 파일을 마크다운으로 저장하기 – 전체 가이드 +url: /ko/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word를 Markdown으로 저장 – 완전 단계별 가이드 + +Word를 **Markdown으로 저장**해야 했지만 삽입된 그림을 어떻게 할지 몰랐던 적이 있나요? 당신만 그런 것이 아닙니다. 많은 프로젝트에서 markdown 출력은 보기 좋지만—*그때* 파일이 Word 패키지를 떠나지 않아 이미지 링크가 깨진 것을 깨닫게 됩니다. + +좋은 소식은 Aspose.Words가 **extract images from docx**를 깔끔하게 수행하고 원하는 위치에 배치할 수 있는 **callback**을 제공한다는 것입니다. 이 콜백을 사용하면 markdown 이미지 폴더를 제어할 수 있습니다. 이 튜토리얼에서는 `.docx` 파일을 로드하는 것부터 PNG(또는 사용 중인 다른 형식)의 정돈된 폴더와 해당 이미지를 가리키는 markdown 파일을 만드는 전체 과정을 단계별로 안내합니다. + +이 가이드를 끝까지 따라하면 다음을 할 수 있습니다: + +* 한 줄의 코드만으로 Word 문서를 Markdown으로 변환합니다. +* 모든 그림을 전용 `images` 하위 폴더에 자동으로 덤프합니다. +* 파일 이름을 맞춤 설정하여 소스에 수십 개의 그림이 있어도 충돌하지 않게 합니다. + +외부 스크립트 없이, 수동 복사‑붙여넣기 없이—순수 C#와 Aspose.Words만으로 가능합니다. + +## Prerequisites + +시작하기 전에 다음을 준비하세요: + +* **Aspose.Words for .NET** (최신 안정 버전; 작성 시점 기준 24.9). +* .NET 개발 환경 (Visual Studio, Rider, 또는 `dotnet` CLI). +* 최소 하나의 이미지를 포함하고 있는 Word 문서(`.docx`)—예: `DocWithImages.docx`. + +Aspose.Words를 처음 사용한다면 걱정하지 마세요. 이 라이브러리는 완전 관리형이며 COM 인터옵이 필요 없고 .NET 6+와 .NET Framework 4.8 모두에서 동작합니다. + +## Step 1 – Set Up the Project and Install the Package + +새 콘솔 앱을 만들거나 기존 프로젝트에 코드를 추가합니다. + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tip:** .NET 6을 대상으로 하는 경우 기본 `Program.cs`가 이미 top‑level statements를 사용하므로 샘플이 간결합니다. + +## Step 2 – Create a Callback to Control Image Saving + +Aspose.Words는 이미지, CSS 등 외부 리소스를 쓸 때마다 `IResourceSavingCallback.ResourceSaving`을 호출합니다. 이 인터페이스를 구현하면 **how the markdown images folder**를 완전히 제어할 수 있습니다. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Why use a callback? + +* **Granular control** – 폴더 구조와 파일 명명 방식을 직접 결정합니다. +* **Performance** – 스트림을 한 번만 쓰므로 라이브러리의 이중 쓰기 fallback을 피합니다. +* **Flexibility** – 이 시점에 로깅, 이미지 최적화, 혹은 클라우드 스토리지 업로드까지 추가할 수 있습니다. + +## Step 3 – Load the Word Document + +콜백이 준비되었으니 이제 Aspose.Words에 원본 파일을 지정하면 됩니다. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **What if the file isn’t found?** +> `Document`는 `FileNotFoundException`을 발생시킵니다. 동적 경로를 사용할 경우 `try/catch`로 로드를 감싸세요. + +## Step 4 – Wire Up the MarkdownSaveOptions + +`MarkdownSaveOptions` 클래스를 사용해 방금 만든 콜백을 연결합니다. 또한 이미지가 markdown 파일을 기준으로 저장될 폴더를 지정합니다. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder` 속성은 Aspose가 `![Alt text](images/img_123.png)`와 같은 markdown 링크를 생성하도록 합니다. 콜백 안에서 `ResourceFileName`을 설정했기 때문에 실제 파일도 정확히 그 위치에 저장됩니다. + +## Step 5 – Save as Markdown and Verify the Result + +이제 markdown 파일을 저장합니다. 콜백이 이미 `images` 하위 폴더를 채워 두었습니다. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Expected output + +프로그램을 실행하면 다음과 비슷한 내용이 출력됩니다: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +`Doc.md`를任意의 markdown 뷰어에서 열면 이미지 링크가 `images` 폴더를 올바르게 가리키는 것을 확인할 수 있습니다. + +--- + +## Frequently Asked Questions (FAQ) + +### How to **extract images from docx** without converting to markdown? + +같은 `MyMarkdownResourceCallback`을 재사용하되 `doc.Save("images.zip", SaveFormat.Zip)`에 전달하면 됩니다. 콜백은 각 이미지마다 여전히 호출되어 원하는 위치에 저장할 수 있습니다. + +### What if I need **different image formats**? + +`args.FileName`에는 이미 원본 확장자(`.png`, `.jpg` 등)가 포함되어 있습니다. 모든 이미지를 단일 형식으로 변환해야 한다면 `ResourceSaving` 내부에서 스트림을 쓰기 전에 변환 단계를 추가하면 됩니다. + +### Can I **customize the markdown images folder** per document? + +물론입니다. 콜백은 생성자에서 폴더 경로를 받으므로 배치 처리 시 각 문서마다 다른 폴더를 지정해 새로운 콜백 인스턴스를 만들면 됩니다. + +### Does this work with **large documents** (hundreds of images)? + +예. 콜백은 이미지를 직접 디스크에 스트리밍하므로 메모리 사용량이 낮습니다. 대상 드라이브에 충분한 여유 공간이 있는지, OS 파일 핸들 제한에 걸리지 않는지만 확인하면 됩니다. + +## Full Working Example + +아래는 복사‑붙여넣기만 하면 바로 실행 가능한 전체 프로그램입니다. `YOUR_DIRECTORY`를 환경에 맞는 절대 경로나 상대 경로로 바꾸세요. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +프로그램을 실행(`dotnet run`)하면 `Doc.md`와 함께 `images` 하위 폴더가 생성되고, 그 안에 이미지 파일들이 들어 있습니다. + +{{< /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-officemath/_index.md b/words/korean/net/programming-with-officemath/_index.md index 2783f1e016..0035743aa2 100644 --- a/words/korean/net/programming-with-officemath/_index.md +++ b/words/korean/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Aspose.Words for .NET 튜토리얼에서는 OfficeMath를 활용한 단어 처 | 제목 | 설명 | | --- | --- | | [수학 방정식](./math-equations/) | Aspose.Words for .NET을 사용하여 Word 문서에서 수학 방정식을 구성하는 방법을 알아보세요. 예제, FAQ 등이 포함된 단계별 가이드입니다. | +| [docx를 txt로 저장 – C#에서 Word 수학을 LaTeX로 내보내기](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Aspose.Words for .NET을 사용하여 docx 파일을 txt로 저장하고, Word 수학 방정식을 LaTeX 형식으로 내보내는 방법을 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/korean/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..dc219484c2 --- /dev/null +++ b/words/korean/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: docx를 빠르게 txt로 저장하고 수식을 LaTeX로 내보내는 방법을 배우세요. Word를 txt로 변환하고 Office + Math를 처리하며 수식을 그대로 유지합니다. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: ko +og_description: LaTeX 수식 내보내기로 docx를 txt로 저장합니다. Word를 txt로 변환하고 수식을 유지하는 방법을 보여주는 + 단계별 C# 튜토리얼. +og_title: docx를 txt로 저장 – Word 수학을 내보내는 C# 가이드 +tags: +- C# +- Aspose.Words +- DocumentConversion +title: docx를 txt로 저장 – C#에서 Word 수식을 LaTeX로 내보내기 +url: /ko/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# docx를 txt로 저장 – C#에서 Word 수학을 LaTeX로 내보내기 + +Ever needed to **save docx as txt** but worried your equations would turn into a mess of symbols? You're not alone. Many developers hit that wall when they try to **convert word to txt** for downstream processing, especially when the source contains Office Math objects. + +The good news? With a few lines of C# and the right save options, you can preserve every equation as clean LaTeX, making the plain‑text file both human‑readable and ready for scientific pipelines. In this tutorial we’ll walk through the whole process, answer *how to export math* from a Word file, and show you *how to convert docx* without losing any math fidelity. + +## 배울 내용 + +- Aspose.Words(또는 호환 라이브러리)를 사용하여 `.docx` 파일을 로드합니다. +- `TxtSaveOptions`를 구성하여 Office Math를 LaTeX로 내보냅니다. +- 수식을 그대로 유지하는 `.txt` 파일로 문서를 저장합니다. +- 숨겨진 수식이나 대용량 문서와 같은 엣지 케이스를 처리하기 위한 팁. +- 지금 바로 복사‑붙여넣기 할 수 있는 완전한 실행 가능한 코드 샘플. + +특별한 빌드 도구는 필요 없으며, .NET 프로젝트와 Aspose.Words NuGet 패키지만 있으면 됩니다. 시작해봅시다. + +--- + +## 사전 요구 사항 + +| 요구 사항 | 중요한 이유 | +|-------------|----------------| +| .NET 6.0 or later | 최신 언어 기능 및 향상된 성능. | +| Aspose.Words for .NET (NuGet) | `Document`, `TxtSaveOptions`, `OfficeMathExportMode` 제공. | +| A Word file (`.docx`) that contains equations | LaTeX 내보내기를 확인하기 위해. | +| Basic C# knowledge | 코드를 한 줄씩 따라갈 수 있습니다. | + +아직 Aspose.Words를 추가하지 않았다면, 다음을 실행하세요: + +```bash +dotnet add package Aspose.Words +``` + +그게 전부입니다—추가 설정은 필요 없습니다. + +## 1단계: DOCX 파일 로드 + +먼저, 소스 문서를 메모리로 가져와야 합니다. 책을 읽기 전에 여는 것과 같은 개념입니다. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** 테스트 중에는 절대 경로를 사용하여 “파일을 찾을 수 없음” 오류를 방지하세요. 실제 환경에서는 보통 설정 파일이나 사용자 업로드에서 경로를 받게 될 것입니다. + +## 2단계: 수학 내보내기를 위한 TXT 저장 옵션 구성 + +기본적으로 `TxtSaveOptions`는 일반 텍스트만 추출하고 Office Math를 제거합니다. 우리는 그것을 원하지 않습니다. `OfficeMathExportMode`를 `LaTeX`로 설정하면 라이브러리가 각 수식을 LaTeX 표현으로 변환합니다. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### 왜 LaTeX인가? + +LaTeX는 과학 출판의 공통 언어입니다. 이후 `.txt`를 마크다운 프로세서, Jupyter 노트북, 혹은 LaTeX를 지원하는 도구에 넣으면 수식이 완벽하게 렌더링됩니다. 대신 일반 Unicode 기호를 원한다면 `OfficeMathExportMode.Unicode`로 전환할 수 있지만, LaTeX가 가장 많은 제어권을 제공합니다. + +## 3단계: 문서를 일반 텍스트 파일로 저장 + +이제 마법이 일어납니다. `Save` 메서드는 방금 정의한 옵션을 사용해 문서를 디스크에 씁니다. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +이 코드를 실행하면 `Math.txt`에 다음과 같이 저장됩니다: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +`\[`와 `\]` 안에 수식이 들어가는 것을 확인하세요—LaTeX가 기대하는 형식 그대로입니다. + +## 복잡한 문서에서 수식 내보내기 + +### 숨겨진 또는 인라인 수식 처리 + +일부 Word 파일은 숨겨진 텍스트 프레임 안에 수식을 저장합니다. Aspose.Words는 이를 보이는 수식과 동일하게 처리하므로 LaTeX 내보내기가 자동으로 작동합니다. 하지만 수식이 누락된 경우, `Document` 객체가 숨긴 내용을 무시하도록 설정되지 않았는지 확인하세요: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### 대용량 문서와 메모리 사용량 + +500페이지 분량의 논문을 저장하면 많은 RAM을 사용할 수 있습니다. 메모리 사용량을 최소화하려면 출력을 스트리밍할 수 있습니다: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +스트리밍은 생성되는 대로 청크를 디스크에 쓰므로 전체 파일이 한 번에 메모리에 올라가는 것을 방지합니다. + +## 흔히 발생하는 실수와 회피 방법 + +| 실수 | 증상 | 해결책 | +|---------|---------|-----| +| Missing LaTeX brackets | 수식이 원시 코드(`E = mc^{2}`) 형태로 표시됨 | `OfficeMathExportMode = LaTeX`를 설정하세요. | +| Blank output file | 경로가 잘못되었거나 권한이 부족함 | 출력 디렉터리가 존재하고 쓰기 가능한지 확인하세요. | +| Garbled characters | 시스템이 ANSI를 기대하는데 파일이 BOM 없는 UTF‑8로 인코딩됨 | `txtSaveOptions.Encoding = Encoding.UTF8;`를 추가하세요. | +| Equations disappear after conversion | 수식을 제외하고 로드하는 `LoadOptions`로 문서를 로드함 | 기본 `LoadOptions`를 사용하거나 `LoadOptions.LoadFormat = LoadFormat.Docx`로 설정하세요. | + +## 전체 작동 예제 + +아래는 컴파일하고 실행할 수 있는 전체 프로그램입니다. 오류 처리, 경로 검증, 그리고 성공 여부를 알려주는 간단한 콘솔 로그가 포함되어 있습니다. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**예상 출력** (`Math.txt`의 일부): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +이제 이 파일을 어떤 LaTeX 지원 프로세서에 넣어도 수식이 아름답게 렌더링됩니다. + +## 서식 손실 없이 DOCX를 TXT로 변환하는 방법 + +텍스트만 필요하고 수식은 신경 쓰지 않아도 된다면, `OfficeMathExportMode` 라인을 그냥 생략하면 됩니다: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +하지만 기억하세요, **how to export math**가 과학 워크플로우에서 차별화 요소입니다. LaTeX를 그대로 유지하는 것이 변환을 진정으로 유용하게 만듭니다. + +## 다음 단계 및 관련 주제 + +- **Batch conversion:** 코드를 `foreach` 루프로 감싸서 `.docx` 파일이 들어 있는 전체 폴더를 처리합니다. +- **Markdown generation:** 텍스트에 `#` 헤더나 `*` 리스트를 추가해 바로 게시 가능한 마크다운을 생성합니다. +- **PDF export:** `PdfSaveOptions`를 사용해 txt와 함께 PDF 버전을 생성합니다. +- **Advanced LaTeX tweaking:** 정규식을 사용해 출력에서 `\[`/`\]`를 `$...$`로 바꿔 인라인 수식으로 변환합니다. + +이 모든 것은 동일한 기반—`Document`를 로드하고 적절한 `SaveOptions`를 선택하는—위에 구축됩니다. 자유롭게 실험해 보세요; API는 대부분의 문서 자동화 시나리오에 충분히 유연합니다. + +## 결론 + +우리는 **save docx as txt**를 수행하면서 모든 수식을 LaTeX로 보존하는 방법을 모두 다루었습니다. 소스 파일 로드, **how to export math**를 위한 `TxtSaveOptions` 구성, 최종 일반 텍스트 파일 쓰기까지 전체 워크플로우는 몇 줄의 간결한 C# 문장에 들어갑니다. + +이제 Word 보고서, 학술 논문, 혹은 텍스트와 수식이 혼합된 모든 문서의 변환을 자동화하고, 결과 `.txt`를 다운스트림 도구에 손실 없이 전달할 수 있습니다. + +시도해 보고, 옵션을 자신의 사용 사례에 맞게 조정한 뒤, 댓글에 어떻게 작동했는지 알려 주세요. 즐거운 코딩 되세요! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/korean/net/programming-with-pdfsaveoptions/_index.md index 5e07c21333..50d37e06b4 100644 --- a/words/korean/net/programming-with-pdfsaveoptions/_index.md +++ b/words/korean/net/programming-with-pdfsaveoptions/_index.md @@ -45,14 +45,12 @@ Aspose.Words for .NET 튜토리얼에서는 PDFSaveOptions를 사용한 워드 | [PDF 문서에서 마지막으로 인쇄된 속성 업데이트](./update-last-printed-property/) | Aspose.Words for .NET을 사용하여 PDF 문서에서 마지막으로 인쇄된 속성을 업데이트하는 방법을 단계별 가이드를 통해 알아보세요. | | [PDF 문서에서 3D DML 3DEffects 렌더링](./dml-3deffects-rendering/) | 이 포괄적인 단계별 가이드를 통해 Aspose.Words for .NET을 사용하여 PDF 문서에서 놀라운 3D DML 효과를 렌더링하는 방법을 알아보세요. | | [PDF 문서에서 이미지 보간](./interpolate-images/) | Aspose.Words for .NET을 사용하여 PDF 문서의 이미지를 보간하는 방법을 단계별 가이드를 통해 알아보세요. PDF 이미지 품질을 쉽게 개선할 수 있습니다. | - +| [Word에서 접근 가능한 PDF 만들기 – 단계별 가이드](./create-accessible-pdf-from-word-step-by-step-guide/) | Aspose.Words for .NET을 사용하여 Word 문서를 접근성 높은 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-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/korean/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..d80e43c421 --- /dev/null +++ b/words/korean/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: C#에서 DOCX 파일로부터 접근 가능한 PDF를 만들기. Word를 PDF로 변환하는 방법, DOCX를 PDF로 저장하는 + 방법, 그리고 PDF/UA 준수를 보장하는 방법을 배워보세요. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: ko +og_description: C#에서 Word를 사용해 접근성 PDF 만들기. 이 가이드는 Word를 PDF로 변환하고, docx를 PDF로 저장하며, + PDF/UA 표준을 충족하는 방법을 보여줍니다. +og_title: 접근성 PDF 만들기 – 완전한 C# 튜토리얼 +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Word에서 접근 가능한 PDF 만들기 – 단계별 가이드 +url: /ko/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word에서 접근 가능한 PDF 만들기 – 완전 프로그래밍 튜토리얼 + +Word 문서에서 **접근 가능한 PDF**를 만들어야 했지만 어떤 설정을 조정해야 할지 몰랐던 적이 있나요? 당신만 그런 것이 아닙니다. 많은 기업에서 PDF/UA(Universal Accessibility) 준수는 필수 요구 사항이며, 일반적인 “PDF 변환” 버튼만으로는 충분하지 않습니다. + +이 가이드에서는 **Word를 PDF로 변환**, **docx를 PDF로 저장**하고 출력물이 접근성 표준을 충족하도록 보장하는 간결하고 완전한 솔루션을 단계별로 살펴봅니다. 모호한 설명은 없습니다—복사‑붙여넣기 할 수 있는 코드와 각 라인 뒤에 있는 “왜”를 제공합니다. + +> **TL;DR:** `.docx`를 로드하고 `PdfSaveOptions.Compliance`를 `PdfUa1`(또는 `PdfUa2`)으로 설정한 뒤 `Document.Save`를 호출하면 됩니다. 이것만으로 Aspose.Words for .NET으로 **접근 가능한 PDF**를 만들 수 있습니다. + +--- + +## 배워게 될 내용 + +- **Word를 PDF로 변환**하면서 제목, 대체 텍스트, 읽기 순서를 보존하는 방법. +- `PdfUa1`과 `PdfUa2`의 차이점 및 각각을 선택해야 하는 시점. +- 몇 줄의 C# 코드만으로 **docx를 PDF로 저장**하는 방법. +- 흔히 발생하는 문제점(글꼴 누락, 지원되지 않는 태그)과 빠른 해결책. +- 어떤 .NET 프로젝트에도 바로 넣어 사용할 수 있는 실행 가능한 코드 샘플. + +### 전제 조건 + +- .NET 6 이상(코드는 .NET Framework 4.7+에서도 작동합니다). +- NuGet을 통해 Aspose.Words for .NET을 설치(`Install-Package Aspose.Words`). +- 올바른 구조(스타일, 이미지 대체 텍스트)가 이미 포함된 Word 파일(`input.docx`). + +Aspose.Words를 아직 추가하지 않았다면, 패키지 관리자 콘솔에서 아래 명령을 실행하세요: + +```powershell +Install-Package Aspose.Words +``` + +필요한 외부 종속성은 이것뿐입니다. + +--- + +## 접근 가능한 PDF 만들기 – 접근성의 중요성 + +PDF가 **PDF/UA**(Universal Accessibility)로 표시되면 스크린 리더가 원본 Word 파일과 마찬가지로 제목, 표, 양식 필드를 탐색할 수 있습니다. 이는 단순히 ‘있으면 좋은’ 기능이 아니라, 많은 정부와 기업이 PDF/UA 준수를 법적 요구 사항으로 간주합니다. + +`PdfSaveOptions`의 `Compliance` 속성을 설정하면 라이브러리가 필요한 태그를 삽입하고, 올바른 문서 언어를 지정하며, 논리적인 읽기 순서를 추가합니다. 이 단계를 건너뛰면 시각적인 요소만 포함된 “시각 전용” PDF가 생성되어 접근성 검증에 실패합니다. + +--- + +## Aspose.Words를 사용한 Word to PDF 변환 + +아래는 문서를 접근 가능하게 유지하면서 **Word를 PDF로 변환**하는 가장 간단한 방법입니다. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**무슨 일이 일어나고 있나요?** + +- `Document`가 Word 파일을 읽어 모든 스타일과 구조를 보존합니다. +- `PdfSaveOptions.Compliance`가 Aspose.Words에 출력 파일을 PDF/UA로 태그하도록 지시합니다. +- `doc.Save`가 PDF를 디스크에 기록하고 태그를 자동으로 삽입합니다. + +> **Pro tip:** 원본 Word 파일에 사용자 정의 제목 스타일이 있는 경우, 해당 스타일을 내장 제목 수준(`Heading1`, `Heading2`, …)에 매핑하세요. 이렇게 하면 생성된 PDF에 올바른 제목 태그가 적용됩니다. + +--- + +## Docx를 PDF로 저장 – PDF/UA 준수 설정 + +`PdfSaveOptions` 클래스를 이미 알고 있다면, 접근성에 영향을 주는 다른 스위치가 있는지 궁금할 수 있습니다. 유용한 속성 몇 가지를 소개합니다: + +| Property | 접근성에 미치는 영향 | Typical Value | +|----------|--------------------|---------------| +| `Compliance` | PDF/UA 태깅을 켜거나 끕니다 | `PdfCompliance.PdfUa1` 또는 `PdfUa2` | +| `EmbedFullFonts` | 독자가 의도한 타이포그래피를 볼 수 있도록 보장합니다 | `true` (기본값) | +| `OptimizeOutput` | 태그를 제거하지 않고 파일 크기를 줄입니다 | `true` | + +이전 스니펫을 다음과 같이 확장할 수 있습니다: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +`PdfUa2`로 전환하면 장식용 이미지에 대한 *artifact* 태깅과 같은 최신 PDF/UA 기능을 지원합니다. 이러한 기능이 필요하지 않다면, 구형 보조 기술과의 최대 호환성을 위해 `PdfUa1`을 유지하세요. + +--- + +## Docx를 PDF로 내보내기 – 전체 작업 예제 + +아래는 파일 로드부터 출력 검증까지 전체 흐름을 보여주는 독립 실행형 콘솔 앱 예제입니다. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### 예상 결과 + +- 실행 파일과 동일한 폴더에 **Compliant.pdf** 파일이 생성됩니다. +- Adobe Acrobat Pro에서 PDF를 열고 *Tools → Accessibility → Full Check*를 수행하면 **No accessibility issues**가 보고됩니다(소스 Word 파일이 잘 구조화된 경우). +- PDF의 *Properties → Advanced* 탭에 “PDF/A and PDF/UA compliance” 섹션 아래 **PDF/UA**가 표시됩니다. + +--- + +## 일반적인 엣지 케이스 및 해결 방법 + +| Situation | 왜 중요한가 | 빠른 해결책 | +|-----------|------------|------------| +| **글꼴 누락** | PDF가 기본 글꼴로 대체되어 시각 레이아웃이 깨질 수 있습니다. | `EmbedFullFonts = true`(이미 기본값)로 설정하고 빌드 머신에서 글꼴 파일에 접근 가능하도록 합니다. | +| **대체 텍스트 없는 이미지** | 스크린 리더가 “이미지”라고만 읽고 설명이 없습니다. | 변환 전에 Word에서 `Alt Text`를 추가합니다(`우클릭 → Format Picture → Alt Text`). | +| **사용자 정의 스타일이 제목으로 인식되지 않음** | PDF/UA는 올바른 제목 태그가 필요합니다. | `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";`와 같이 사용자 정의 스타일을 내장 제목에 매핑합니다. | +| **대용량 문서로 인한 메모리 압박** | 500페이지 파일을 변환하면 RAM 사용량이 급증할 수 있습니다. | `doc.Save(outputPath, options)`에서 `options.SaveFormat = SaveFormat.Pdf`를 사용하고 `OutOfMemoryException`이 발생하면 청크 단위로 처리하는 방안을 고려합니다. | +| **접근성 없이 docx를 pdf로 내보내야 함** | 때때로 빠른 시각 전용 PDF만 필요할 때가 있습니다. | `Compliance` 설정을 생략하거나 `PdfCompliance.Pdf15`로 설정합니다. | + +--- + +## 이미지 예시 (Alt Text 포함) + +![Adobe Acrobat에서 PDF/UA 태그 트리를 보여주는 스크린샷 – 접근 가능한 PDF를 성공적으로 생성했음을 보여줍니다](https://example.com/images/accessible-pdf-screenshot.png) + +*위의 대체 텍스트는 주요 키워드를 강화하고 사용자와 AI 모델 모두가 이미지 컨텍스트를 이해하도록 돕습니다.* + +--- + +## 자주 묻는 질문 + +**Q: Does this work with .NET Core?** +A: Absolutely. Aspose.Words is cross‑platform; just reference the NuGet package in your .NET 6+ project. + +**Q: Can I batch‑process multiple DOCX files?** +A: Yes. Wrap the loading and saving logic inside a `foreach (var file in Directory.GetFiles(folder, "*.docx"))` loop. Remember to reuse a single `PdfSaveOptions` instance for performance. + +**Q: What if I need to add a custom PDF/UA tag that Aspose doesn’t emit automatically?** +A: Use the low‑level PDF API (`PdfSaveOptions.CustomProperties`) or post‑process the PDF with a library like iText 7 that allows manual tag insertion. + +--- + +## Conclusion + +You + +{{< /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 6f0e573229..1e9208f263 100644 --- a/words/korean/net/working-with-fonts/_index.md +++ b/words/korean/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ | [경고 알림 수신](./receive-warning-notification/) Aspose.Words for .NET을 사용할 때 경고 알림을 받는 방법과 문서의 문제나 경고를 관리하는 방법을 알아보세요. | | [리소스 Steam 글꼴 소스 예시](./resource-steam-font-source-example/) | Aspose.Words for .NET에 사용자 정의 글꼴을 로드하기 위해 Resource Stream 글꼴 소스를 사용하는 방법을 알아보세요. | | [접미사 없이 대체 가져오기](./get-substitution-without-suffixes/) | 이 튜토리얼에서는 Aspose.Words for .NET을 사용하여 Word 문서에서 접미사 없는 재정의를 얻는 방법을 알아봅니다. | - +| [Aspose.Words에서 글꼴을 감지하는 방법 – 완전 가이드](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Aspose.Words for .NET을 사용하여 문서에서 사용된 글꼴을 감지하고 확인하는 방법을 단계별로 안내합니다. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/korean/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/korean/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..cc5441e127 --- /dev/null +++ b/words/korean/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-04-07 +description: Aspose.Words를 사용하여 C#에서 글꼴을 감지하고 누락된 글꼴을 처리하면서 경고를 캡처하는 방법을 배웁니다. 단계별 + 코드가 포함되어 있습니다. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: ko +og_description: Aspose.Words에서 글꼴을 감지하는 방법은? 이 튜토리얼을 따라 경고를 포착하고 누락된 글꼴을 손쉽게 처리하세요. +og_title: Aspose.Words에서 폰트 감지하는 방법 – 완전 가이드 +tags: +- Aspose.Words +- C# +- Font handling +title: Aspose.Words에서 글꼴을 감지하는 방법 – 완전 가이드 +url: /ko/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words에서 폰트 감지하는 방법 – 완전 가이드 + +Word 문서를 프로덕션에 배포하기 전에 **누락된 폰트를 감지**하고 싶으신가요? 여러분만 그런 것이 아닙니다. 많은 엔터프라이즈 시나리오에서 한 글자체가 PDF 변환 파이프라인을 중단시키거나 레이아웃 오류를 일으켜 비전문적으로 보이게 할 수 있습니다. 좋은 소식은 Aspose.Words가 이러한 부재 폰트를 찾아내고 명확한 경고를 표시하는 내장 기능을 제공한다는 점입니다. + +이 튜토리얼에서는 **폰트를 감지하는 방법**, **경고를 캡처하는 방법**, 그리고 **누락된 폰트를 처리하는** 최선의 방법을 단계별로 살펴보겠습니다. 외부 도구 없이, 추측 없이—지금 바로 프로젝트에 삽입할 수 있는 순수 C# 코드만 제공합니다. + +> **빠른 미리보기:** 마지막에 재사용 가능한 `FontSubstitutionWarningCollector`를 얻어 문서 로드 중 발생하는 모든 폰트 대체 메시지를 수집하고, 폰트를 찾을 수 없을 때 어떻게 대응해야 하는지 알게 됩니다. + +--- + +## 배울 내용 + +- `LoadOptions`를 구성하여 폰트 대체 경고를 수신하는 방법. +- 사용자 정의 컬렉터 클래스에서 해당 경고를 캡처하는 방법. +- 수집된 경고를 처리하여 중단, 로그 기록 또는 폰트 대체를 결정하는 방법. +- 원격 또는 임베디드 폰트를 참조하는 문서에 대한 엣지 케이스 처리. + +**전제 조건:** .NET 6+ (또는 .NET Framework 4.6+), Aspose.Words for .NET (최신 버전), 그리고 C#에 대한 기본 지식. Aspose.Words를 처음 사용한다면 걱정 마세요—이 가이드는 몇 분만 투자하면 따라 할 수 있도록 설계되었습니다. + +--- + +## Aspose.Words LoadOptions를 사용한 폰트 감지 + +누락된 폰트를 감지하려면 먼저 Aspose.Words에 이를 보고하도록 지시해야 합니다. 이는 `LoadOptions.WarningCallback` 속성을 통해 수행되며, `IWarningCallback`을 구현하는 모든 클래스를 받을 수 있습니다. 아래에서는 모든 경고를 저장하는 작은 컬렉터를 만들었습니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**왜 중요한가:** 경고 콜백이 없으면 Aspose.Words는 누락된 폰트를 기본 폰트로 조용히 대체하고, 문제 존재 여부를 알 수 없습니다. `WarningType.FontSubstitution`을 캡처함으로써 **사용 가능한 폰트가 아닌 경우**를 정확히 파악할 수 있습니다. + +이제 컬렉터를 `LoadOptions`에 연결하고 문서를 로드합니다: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **프로 팁:** 배치로 여러 문서를 처리할 경우 동일한 `FontSubstitutionWarningCollector` 인스턴스를 재사용하되, 서로 다른 파일에서 발생한 경고가 섞이지 않도록 로드 사이에 `Clear()`를 호출하세요. + +--- + +## 문서 로드 중 경고 캡처 + +문서가 로드된 후 컬렉터는 이미 모든 폰트 관련 경고를 보유하고 있습니다. 다음 논리적인 질문은: *경고를 어떻게 캡처*해서 로그나 화면에 쉽게 표시할 수 있느냐 입니다. + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typical output looks like: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**이것이 의미하는 바:** 각 라인은 원본 폰트 이름과 Aspose.Words가 선택한 대체 폰트를 보여줍니다. 이 정보를 바탕으로 대체 폰트가 허용 가능한지, 아니면 누락된 폰트를 직접 임베드해야 하는지 판단할 수 있습니다. + +--- + +## 누락된 폰트를 우아하게 처리하기 + +경고를 감지하고 캡처하는 것만으로는 절반에 불과합니다. 실제 가치는 **누락된 폰트를 프로덕션 수준으로 처리**할 때 비로소 발휘됩니다. 아래는 흔히 사용되는 세 가지 전략입니다: + +1. **로그 기록 후 계속 진행** – 배치 처리에서 감사 로그만 필요할 때 적합합니다. +2. **중요 폰트에 대해 중단** – 특정 폰트(예: 브랜드 전용 서체)가 없을 경우 예외를 발생시킵니다. +3. **실시간 폰트 임베드** – 알려진 폴더에서 누락된 폰트를 로드하고, 문서를 다시 로드하기 전에 Aspose.Words에 등록합니다. + +### 예시: 중요한 폰트에 대해 중단 + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### 예시: 누락된 폰트 자동 임베드 + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**왜 이런 패턴이 도움이 되는가:** 폰트가 없을 때 명시적으로 어떤 행동을 할지 결정함으로써, 브랜드나 가독성을 해칠 수 있는 조용한 대체를 방지합니다. 이것이 **누락된 폰트를 제어된 방식으로 처리**하는 핵심입니다. + +--- + +## 완전한 작동 예제 + +모든 내용을 하나로 합치면, **폰트를 감지하고**, **경고를 캡처하며**, **누락된 폰트를 로그로 기록**하는 간단한 정책을 구현한 단일 실행 프로그램이 됩니다. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**예상 결과:** 머신에 존재하지 않는 폰트를 참조하는 문서를 대상으로 프로그램을 실행하면 콘솔에 각 대체 경고가 나열됩니다. 경고 중 `critical` 집합에 포함된 폰트가 있으면 프로그램이 조기에 종료되어 결함이 있는 PDF가 생성되는 것을 방지합니다. + +--- + +## 자주 묻는 질문 (FAQs) + +| Question | Answer | +|----------|--------| +| *Aspose.Words 라이선스가 필요합니까?* | 예, 유효한 Aspose.Words 라이선스를 적용하면 평가 워터마크가 제거되고 전체 기능을 사용할 수 있습니다. | +| *이 방법으로 임베드된 폰트를 감지할 수 있나요?* | 임베드된 폰트는 파일에 이미 포함되어 있으므로 Aspose.Words는 대체 경고를 발생시키지 않습니다. 필요하다면 `Document.FontInfos`를 확인해 임베드된 폰트를 열거할 수 있습니다. | +| *Windows에서는 시스템 폰트가 있지만 Linux에서는 없을 경우는 어떻게 되나요?* | Linux에서는 해당 폰트가 설치되지 않았기 때문에 동일한 경고가 발생합니다. “누락된 폰트 처리” 전략을 사용해 필요한 `.ttf` 파일을 앱과 함께 배포하세요. | +| *Is the warning collector thread | | + +{{< /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 209d5ec211..03f14f82e6 100644 --- a/words/polish/net/basic-conversions/_index.md +++ b/words/polish/net/basic-conversions/_index.md @@ -25,6 +25,7 @@ Basic Conversions przeprowadzi Cię przez podstawowe konwersje dokumentów przy | [Konwertuj Docx do RTF](./docx-to-rtf/) | Dowiedz się, jak przekonwertować DOCX na RTF za pomocą Aspose.Words dla .NET dzięki naszemu przewodnikowi krok po kroku. Łatwa konwersja dla bezproblemowego przetwarzania dokumentów. | | [Konwertuj plik Word do PDF](./docx-to-pdf/) Dowiedz się, jak łatwo konwertować pliki Word do PDF za pomocą Aspose.Words dla .NET z naszym przewodnikiem. Idealne dla programistów poszukujących szybkiej i niezawodnej konwersji dokumentów. | | [Konwertuj Word do PDF w C# przy użyciu Aspose.Words – przewodnik](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Dowiedz się, jak w prosty sposób konwertować dokumenty Word do PDF w C# przy użyciu biblioteki Aspose.Words. | +| [Konwertuj DOCX do PDF w C# – Kompletny przewodnik programistyczny](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Dowiedz się, jak w prosty sposób konwertować pliki DOCX do PDF w C# przy użyciu Aspose.Words. Szczegółowy przewodnik krok po kroku. | | [Konwertuj Docx na Bajt](./docx-to-byte/) | Dowiedz się, jak przekonwertować Docx na tablicę bajtów w .NET przy użyciu Aspose.Words w celu wydajnego przetwarzania dokumentów. Zawiera przewodnik krok po kroku. | | [Konwertuj Docx do Epub](./docx-to-epub/) | Łatwa konwersja DOCX do EPUB za pomocą Aspose.Words dla .NET. Skorzystaj z naszego samouczka, aby zapewnić sobie bezproblemową integrację z aplikacjami .NET. | | [Konwertuj Docx na Mhtml i wysyłaj e-mailem](./docx-to-mhtml-and-sending-email/) | Dowiedz się, jak konwertować DOCX na MHTML i wysyłać e-maile za pomocą Aspose.Words dla .NET w tym przewodniku krok po kroku. Zwiększ swoją produktywność dzięki łatwej automatyzacji. | diff --git a/words/polish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/polish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..a0500c80a2 --- /dev/null +++ b/words/polish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-04-07 +description: Szybko konwertuj DOCX na PDF w C#. Dowiedz się, jak zapisać Word jako + PDF, wczytać dokument docx w C# i zapewnić zgodność z PDF/UA‑2 w kilka minut. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: pl +og_description: Konwertuj DOCX na PDF w C# natychmiast. Ten przewodnik pokazuje, jak + zapisać Word jako PDF, wczytać dokument docx w C# i spełnić standardy PDF/UA‑2. +og_title: Konwertuj DOCX na PDF w C# – Przewodnik krok po kroku +tags: +- Aspose.Words +- C# +- PDF Generation +title: Konwertuj DOCX na PDF w C# – Kompletny przewodnik programistyczny +url: /pl/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Konwertowanie DOCX do PDF w C# – Kompletny przewodnik programistyczny + +Kiedykolwiek potrzebowałeś **convert DOCX to PDF** w aplikacji C#, ale nie wiedziałeś od czego zacząć? Nie jesteś sam. Wielu programistów napotyka problem, gdy odkrywają, że prosty przycisk „zapisz jako PDF” w Wordzie nie przekłada się na kod. Dobre wieści? Kilka linii Aspose.Words (lub dowolnej podobnej biblioteki) pozwala zautomatyzować cały proces, zachować pływające kształty w linii i nawet osiągnąć zgodność PDF/UA‑2 bez wysiłku. + +W tym samouczku nauczysz się, jak **save Word as PDF**, **load docx document C#**, oraz dostosować opcje eksportu, aby powstały plik był gotowy do audytów dostępności. Po zakończeniu będziesz mieć samodzielny, uruchamialny program, który zamienia każdy plik `.docx` w czysty, zgodny ze standardami PDF. + +> **Why care?** +> Konwertowanie DOCX do PDF jest powszechnym wymogiem dla systemów fakturowania, generatorów raportów i potoków archiwizacji dokumentów. Automatyzacja eliminuje ręczne kroki, zmniejsza liczbę błędów ludzkich i zapewnia, że każdy wynik wygląda dokładnie tak samo na wszystkich platformach. + +--- + +## Czego będziesz potrzebować + +- **.NET 6.0** lub nowszy (kod działa również na .NET Framework 4.6+) +- **Aspose.Words for .NET** (bezpłatna wersja próbna lub licencjonowana) – możesz zainstalować ją przez NuGet: `dotnet add package Aspose.Words` +- Przykładowy plik `input.docx` umieszczony w folderze, którym zarządzasz (będziemy odnosić się do niego jako `YOUR_DIRECTORY`) +- Visual Studio, VS Code lub dowolny edytor C#, który lubisz + +To wszystko—bez dodatkowych usług, bez wywołań REST. Po prostu czysty C#. + +--- + +## Krok 1: Załaduj dokument DOCX w C# + +Zanim będziesz mógł **convert docx to pdf**, musisz wczytać plik Word do pamięci. Klasa `Document` robi to za Ciebie. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Dlaczego to ważne:** +Wczytanie pliku daje w pełni sparsowany model obiektowy — akapity, tabele, pływające kształty, wszystko. To pierwszy krok w każdym workflow **load docx document c#**, a także weryfikuje, że plik nie jest uszkodzony, zanim zmarnujesz czas na konwersję. + +> **Pro tip:** Jeśli masz do czynienia z plikami przesyłanymi przez użytkowników, otocz wywołanie `new Document()` blokiem try/catch, aby elegancko obsłużyć nieprawidłowe pliki DOCX. + +--- + +## Krok 2: Skonfiguruj opcje zapisu PDF (Zgodność i obsługa kształtów) + +Możesz się zastanawiać, „Czy muszę coś dostosować, czy mogę po prostu wywołać `Save`?” Krótką odpowiedzią jest: możesz, ale ustawienie właściwych opcji sprawia, że PDF jest dostępny i wierny wizualnie. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Dlaczego to ważne:** +- `ExportFloatingShapesAsInlineTag = true` zapobiega utracie lub nieprawidłowemu wyrównaniu pływających obiektów podczas przeglądania PDF na różnych urządzeniach. +- `Compliance = PdfCompliance.PdfUa2` zapewnia, że wynik spełnia standard PDF/UA‑2, co jest kluczowe dla kompatybilności z czytnikami ekranu i archiwizacji prawnej. + +Jeśli nie potrzebujesz dostępności, możesz pominąć linię `Compliance`, ale jej pozostawienie nie wprowadza praktycznie żadnego narzutu i zabezpiecza rozwiązanie na przyszłość. + +--- + +## Krok 3: Zapisz dokument jako PDF – Główna akcja **Convert DOCX to PDF** + +Gdy dokument jest już załadowany, a opcje ustawione, rzeczywista konwersja odbywa się jednym wywołaniem metody. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Co zobaczysz:** +- Uruchomienie programu tworzy `output.pdf` w tym samym folderze. Otwórz go w dowolnym przeglądarce PDF i zauważysz, że: + - Wszystko tekst, tabele i obrazy wyglądają dokładnie tak jak w oryginalnym DOCX. + - Pływające kształty są zachowane w linii, zachowując układ. + - Plik przechodzi podstawowe narzędzia walidacji PDF/UA‑2 (np. Adobe Acrobat Preflight). + +--- + +## Pełny działający przykład – od góry do dołu + +Poniżej znajduje się kompletny, gotowy do uruchomienia program konsolowy, który demonstruje cały przepływ. Skopiuj i wklej go do nowego projektu C# i naciśnij **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Oczekiwany wynik w konsoli:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +A schludny `output.pdf` znajduje się obok Twojego pliku źródłowego. + +--- + +## Najczęściej zadawane pytania i przypadki brzegowe + +| Question | Answer | +|----------|--------| +| **Czy mogę konwertować DOCX przechowywany w `MemoryStream`?** | Oczywiście. Użyj `new Document(stream)` zamiast ścieżki do pliku. | +| **Co jeśli DOCX zawiera makra?** | Aspose.Words domyślnie ignoruje makra VBA; nie pojawią się w PDF. | +| **Czy potrzebuję licencji do produkcji?** | Wersja próbna dodaje znak wodny po określonej liczbie stron. Do użytku komercyjnego należy uzyskać licencję, aby go usunąć. | +| **Jak zmienić rozmiar strony PDF?** | Ustaw `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` przed zapisem. | +| **Czy istnieje sposób na osadzenie własnej czcionki?** | Tak — dodaj `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Pro tipy dla płynnego doświadczenia **Save Word as PDF** + +- **Batch processing:** Umieść logikę konwersji w pętli i podaj jej listę ścieżek DOCX. +- **Performance:** Ponownie używaj jednej instancji `PdfSaveOptions` przy konwertowaniu wielu plików; zmniejsza to obciążenie GC. +- **Logging:** Wypisz rozmiar wygenerowanego PDF (`new FileInfo(outputPath).Length`), aby monitorować wyniki kompresji. +- **Error handling:** Rozróżniaj `FileNotFoundException` (brakujący DOCX) i `UnauthorizedAccessException` (problemy z uprawnieniami zapisu). + +--- + +## Zakończenie + +Masz teraz solidny, gotowy do produkcji wzorzec do **convert DOCX to PDF** w C#. Ładując DOCX, konfigurując opcje zapisu PDF i wywołując `Save`, możesz **save Word as PDF**, zachować niuanse układu i spełnić standardy dostępności — wszystko w mniej niż tuzinie linii kodu. + +Gotowy na kolejne wyzwanie? Spróbuj zamienić `PdfSaveOptions` na `ImageSaveOptions`, aby **save Word as PNG**, lub zbadaj klasę `HtmlSaveOptions`, aby generować wyjście gotowe na stronę internetową. W każdym przypadku te same podstawy **load docx document c#** mają zastosowanie, czyniąc Twój kod odpornym na przyszłość. + +Szczęśliwego kodowania i niech Twoje PDFy zawsze będą zgodne! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/polish/net/programming-with-loadoptions/_index.md index 2eb3ec6594..bf56cddcb2 100644 --- a/words/polish/net/programming-with-loadoptions/_index.md +++ b/words/polish/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ W tych samouczkach nauczysz się, jak używać LoadOptions do ładowania dokumen | [Załaduj pliki Chm w dokumencie Word](./load-chm/) | Łatwo ładuj pliki CHM do dokumentów Word za pomocą Aspose.Words dla .NET dzięki temu samouczkowi krok po kroku. Idealne do konsolidacji dokumentacji technicznej. | | [Jak odzyskać plik docx za pomocą Aspose.Words – krok po kroku](./how-to-recover-docx-with-aspose-words-step-by-step/) | Dowiedz się, jak odzyskać uszkodzone pliki docx przy użyciu Aspose.Words w kilku prostych krokach. | | [Aspose Load Options – Ładowanie DOCX z niestandardowymi ustawieniami czcionek](./aspose-load-options-load-docx-with-custom-font-settings/) | Dowiedz się, jak ładować dokumenty DOCX z własnymi ustawieniami czcionek przy użyciu Aspose Load Options w .NET. | +| [Odzyskaj uszkodzony DOCX – Kompletny przewodnik C# naprawy i zapisu plików](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Dowiedz się, jak naprawić uszkodzone pliki DOCX i zapisać je ponownie przy użyciu C# i Aspose.Words w kilku prostych krokach. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/polish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..4535dc1d1d --- /dev/null +++ b/words/polish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Dowiedz się, jak odzyskać uszkodzone pliki DOCX w C# i bezpiecznie zapisać + odzyskany dokument. Przewodnik krok po kroku z przykładem Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: pl +og_description: Odzyskaj uszkodzone pliki DOCX w C# i zapisz odzyskany dokument przy + użyciu Aspose.Words. Pełny kod, wyjaśnienia i wskazówki dotyczące najlepszych praktyk. +og_title: Odzyskaj uszkodzony DOCX – Przewodnik krok po kroku w C# +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Odzyskaj uszkodzony DOCX – Kompletny przewodnik C# naprawy i zapisu plików +url: /pl/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Odzyskaj uszkodzony DOCX – Kompletny przewodnik C# jak naprawić i zapisać pliki + +Czy kiedykolwiek próbowałeś otworzyć plik DOCX, który wygląda poprawnie w Eksploratorze, ale w Twojej aplikacji wyrzuca wyjątek? To klasyczny koszmar „uszkodzony plik Word”, który zazwyczaj kończy się śladem stosu, którego nie chcesz widzieć. Dobre wieści? Aspose.Words oferuje funkcję **recover corrupted docx**, która pozwala kontynuować pracę nawet, gdy plik jest uszkodzony. + +W tym samouczku przeprowadzimy Cię krok po kroku przez proces wczytywania uszkodzonego dokumentu, poinstruujemy bibliotekę, aby kontynuowała pracę, a następnie **save recovered document** do nowego, czystego pliku. Po zakończeniu będziesz wiedział, dlaczego tryb odzyskiwania ma znaczenie, jak go skonfigurować i jakich pułapek unikać — bez niejasnych „zobacz dokumentację” skrótów. + +## Czego będziesz potrzebować + +- **Aspose.Words for .NET** (dowolna aktualna wersja; przy pisaniu tego przewodnika użyto 24.11) +- Środowisko programistyczne .NET (Visual Studio, Rider lub VS Code z rozszerzeniem C#) +- Przykładowy plik DOCX, który podejrzewasz o uszkodzenie (możesz uszkodzić plik, otwierając go w edytorze ZIP i usuwając część, wyłącznie w celach testowych) +- Podstawowa znajomość C# — nic skomplikowanego, po prostu umiejętność stworzenia aplikacji konsolowej + +Jeśli już masz te elementy, świetnie — przejdźmy od razu do rozwiązania. + +## Krok 1: Skonfiguruj LoadOptions z odpowiednią strategią odzyskiwania + +Serce naprawy to obiekt `LoadOptions`. Informuje on Aspose.Words, jak zachować się, gdy napotka nieprawidłowy XML lub brakujące części w pakiecie DOCX. Flaga `RecoveryMode.RecoverAndContinue` jest najbardziej wyrozumiała — próbuje uratować wszystko, co się da, i pomija resztę. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Dlaczego to ważne:** Jeśli pominiesz `LoadOptions` lub użyjesz domyślnego trybu (`RecoveryMode.NoRecovery`), konstruktor `Document` rzuci wyjątek w momencie wykrycia problemu. Dzięki `RecoverAndContinue` API pomija błędy niekrytyczne i buduje częściowy obiekt dokumentu, z którym nadal możesz pracować. + +> **Pro tip:** Przy ogromnych partiach plików rozważ opakowanie wywołania ładowania w blok `try/catch` — niektóre błędy są naprawdę krytyczne (np. brak pliku `[Content_Types].xml`) i nie mogą zostać odzyskane. + +## Krok 2: Wczytaj potencjalnie uszkodzony DOCX + +Teraz, gdy opcje są gotowe, wczytaj swój plik. Konstruktor przyjmuje ścieżkę do pliku oraz `LoadOptions`, które właśnie przygotowaliśmy. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Co dzieje się pod maską?** +Aspose.Words parsuje kontener ZIP, odczytuje każdą część XML i próbuje odtworzyć drzewo DOM Open XML. Gdy natrafi na uszkodzoną część, silnik odzyskiwania zapisuje ostrzeżenie (widoczne w konsoli po włączeniu diagnostyki) i kontynuuje. Powstały obiekt `Document` może brakować kilku akapitów lub obrazów, ale reszta zawartości pozostaje nienaruszona. + +## Krok 3: Zweryfikuj odzyskane treści (Opcjonalnie, ale zalecane) + +Zanim zapiszesz plik na dysku, warto sprawdzić kilka węzłów, aby upewnić się, że najważniejsze sekcje przetrwały. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Jeśli wynik wygląda sensownie, udało Ci się **recover corrupted docx**. Jeśli zauważysz brakujące sekcje, możesz nadal zdecydować, czy kontynuować — czasami utracone fragmenty są jedynie dekoracyjne. + +## Krok 4: Zapisz odzyskany dokument + +Oto część, o którą najczęściej pytają programiści: „Jak **save recovered document** bez ponownego wprowadzania pierwotnego uszkodzenia?” Odpowiedź jest prosta — wywołaj `Document.Save` z nową ścieżką. Aspose.Words zapisuje zupełnie nowy pakiet ZIP, więc wszelkie pozostałe uszkodzone części zostają pominięte. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Dlaczego to działa:** Metoda `Save` serializuje pamięciowy DOM z powrotem do czystego pakietu Open XML. Ponieważ uszkodzone fragmenty nigdy nie zostały załadowane do DOM (zostały odrzucone podczas odzyskiwania), nie trafiają do nowego pliku. Efektem jest zdrowy DOCX, który otwiera się w Wordzie, Google Docs czy dowolnym innym podglądzie. + +## Krok 5: Zautomatyzuj proces dla wielu plików (Bonus) + +W rzeczywistych scenariuszach często masz folder pełen problematycznych plików. Owiń poprzednie kroki w pętlę i otrzymasz małe narzędzie do odzyskiwania. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Teraz możesz wrzucić cały katalog uszkodzonych plików DOCX do `C:\Docs\Batch` i pozwolić skryptowi automatycznie je oczyścić. + +## Często zadawane pytania i przypadki brzegowe + +| Pytanie | Odpowiedź | +|----------|--------| +| **Czy to działa z plikami .doc?** | Ta sama klasa `LoadOptions` ma zastosowanie, ale musisz odwołać się do starszego formatu Word (`doc`). Aspose.Words nadal może odzyskać plik, choć wzorce błędów się różnią. | +| **Co jeśli plik jest zabezpieczony hasłem?** | Odzyskiwanie nie obejdzie szyfrowania. Musisz podać hasło za pomocą `LoadOptions.Password`. | +| **Czy obrazy zostaną utracone?** | Tylko obrazy będące częścią uszkodzonej części XML mogą zostać pominięte. Reszta zostaje zachowana, ponieważ są przechowywane jako oddzielne strumienie binarne. | +| **Czy mogę logować ostrzeżenia generowane przez Aspose?** | Tak — ustaw `LoadOptions.LoadFormat` na `LoadFormat.Docx` i subskrybuj `Document.WarningCallback`, aby przechwycić szczegółowe komunikaty. | +| **Czy `RecoverAndContinue` jest bezpieczne w produkcji?** | Zasadniczo tak, ale przetestuj na własnych danych. W krytycznych pipeline’ach możesz chcieć oznaczyć dokumenty, które wymagały odzyskiwania, do późniejszej weryfikacji. | + +## Pełny działający przykład (Gotowy do skopiowania) + +Poniżej znajduje się kompletny program, który możesz skompilować jako aplikację konsolową. Zawiera wszystkie kroki, obsługę błędów oraz opcjonalną logikę przetwarzania wsadowego. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Oczekiwany rezultat:** Po uruchomieniu programu `Recovered.docx` otwiera się w Microsoft Word bez pierwotnego okna dialogowego błędu. Wszystkie części, które były zbyt uszkodzone, są po prostu pomijane, ale główna treść, nagłówki i większość obrazów pozostaje nienaruszona. + +![przykład odzyskiwania uszkodzonego docx](https://example.com/images/recover-corrupted-docx.png "odzyskiwanie uszkodzonego docx – wizualne porównanie przed/po") + +## Podsumowanie + +Omówiliśmy wszystko, co potrzebne, aby **recover corrupted docx** przy użyciu Aspose.Words, od konfiguracji `LoadOptions` po bezpieczne **save recovered document**. Najważniejsze wnioski to: + +- Użyj `RecoveryMode.RecoverAndContinue`, aby biblioteka ignorowała błędy niekrytyczne. +- Zweryfikuj wczytaną zawartość przed jej zapisaniem, szczególnie przy dokumentach o krytycznym znaczeniu biznesowym. +- Zapis dokumentu generuje czysty pakiet ZIP, skutecznie usuwając pierwotne uszkodzenia. +- Ten sam wzorzec skaluje się do operacji wsadowych, umożliwiając automatyczne czyszczenie dużych repozytoriów dokumentów. + +Gotowy na kolejny krok? Spróbuj zintegrować tę logikę z usługą w tle monitorującą folder z przesyłanymi plikami lub poeksperymentuj z `WarningCallback`, aby stworzyć raport, które pliki wymagały odzyskiwania. Im więcej bawisz się API, tym bardziej docenisz, jak solidny jest Aspose.Words w rzeczywistym przetwarzaniu dokumentów. + +Masz własny pomysł, którym chciałbyś się podzielić — może obsługę plików zabezpieczonych hasłem lub scalanie odzyskanych dokumentów? Dodaj komentarz poniżej i kontynuujmy dyskusję. Szczęśliwego kodowania! + +{{< /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 1b3955d9fc..cb19e85abd 100644 --- a/words/polish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/polish/net/programming-with-markdownsaveoptions/_index.md @@ -46,6 +46,9 @@ Kompletny przewodnik krok po kroku, jak zapisać plik DOCX jako Markdown przy u ### [Jak wyeksportować Markdown z DOCX – Kompletny przewodnik](./how-to-export-markdown-from-docx-complete-guide/) Kompletny przewodnik pokazujący, jak wyeksportować pliki DOCX do formatu Markdown przy użyciu Aspose.Words dla .NET. +### [Zapisz Word jako Markdown z własnym folderem obrazów – Pełny przewodnik](./save-word-as-markdown-with-custom-image-folder-full-guide/) +Kompletny przewodnik C# pokazujący, jak zapisywać dokumenty Word jako Markdown z własnym folderem obrazów przy użyciu Aspose.Words. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/polish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..51efad7f71 --- /dev/null +++ b/words/polish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: Zapisz dokument Word jako Markdown i wyodrębnij obrazy z pliku docx przy + użyciu callbacku. Dowiedz się, jak używać callbacku do efektywnego przechowywania + folderu z obrazami w formacie Markdown. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: pl +og_description: Zapisz dokument Word jako Markdown i wyodrębnij obrazy z pliku docx + przy użyciu callbacku. Ten przewodnik pokazuje, jak używać callbacku do tworzenia + folderu z obrazami w formacie Markdown. +og_title: Zapisz Word jako Markdown – Kompletny przewodnik krok po kroku +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Zapisz Word jako Markdown z własnym folderem obrazów – pełny przewodnik +url: /pl/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Zapisz Word jako Markdown – Kompletny przewodnik krok po kroku + +Czy kiedykolwiek potrzebowałeś **zapisz Word jako Markdown**, ale nie wiedziałeś, co zrobić z osadzonymi obrazkami? Nie jesteś sam. W wielu projektach wynikowy markdown wygląda świetnie—*aż* zdasz sobie sprawę, że linki do obrazków są zepsute, ponieważ pliki nigdy nie opuściły pakietu Word. + +Dobrą wiadomością jest to, że Aspose.Words zapewnia czysty sposób na **wyodrębnienie obrazków z docx** i umieszczenie ich dokładnie tam, gdzie chcesz, przy użyciu **callbacku**, który pozwala kontrolować folder z obrazkami markdown. W tym samouczku przeprowadzimy Cię przez cały proces, od wczytania pliku `.docx` po uzyskanie uporządkowanego folderu z PNG (lub w dowolnym formacie, który posiadasz) oraz pliku markdown, który do nich odwołuje. + +Na koniec tego przewodnika będziesz w stanie: + +* Przekonwertować dowolny dokument Word na Markdown jedną linią kodu. +* Automatycznie zrzucić każdy obrazek do dedykowanego podfolderu `images`. +* Dostosować nazwy plików tak, aby nigdy nie kolidowały, nawet gdy źródło zawiera dziesiątki obrazków. + +Bez zewnętrznych skryptów, bez ręcznego kopiowania‑wklejania — tylko czysty C# i Aspose.Words. + +## Wymagania wstępne + +Zanim zaczniemy, upewnij się, że masz: + +* **Aspose.Words for .NET** (najnowsza stabilna wersja; w momencie pisania to 24.9). +* Środowisko programistyczne .NET (Visual Studio, Rider lub `dotnet` CLI). +* Dokument Word (`.docx`) zawierający przynajmniej jeden obrazek — nazwij go `DocWithImages.docx`. + +Jeśli nigdy wcześniej nie używałeś Aspose.Words, nie martw się. Biblioteka jest w pełni zarządzana, nie wymaga interfejsu COM i działa na .NET 6+ oraz .NET Framework 4.8. + +## Krok 1 – Konfiguracja projektu i instalacja pakietu + +Najpierw utwórz nową aplikację konsolową (lub dodaj kod do istniejącego projektu). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Wskazówka:** Jeśli celujesz w .NET 6, domyślny plik `Program.cs` już używa instrukcji na najwyższym poziomie, co sprawia, że przykład jest zwięzły. + +## Krok 2 – Utwórz callback kontrolujący zapisywanie obrazków + +Aspose.Words wywołuje `IResourceSavingCallback.ResourceSaving` dla każdego zewnętrznego zasobu, który musi zapisać (obrazki, CSS itp.). Implementując ten interfejs, uzyskujemy pełną kontrolę nad **sposobem budowania folderu z obrazkami markdown**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Dlaczego używać callbacku? + +* **Precyzyjna kontrola** – decydujesz o strukturze folderów i schemacie nazewnictwa. +* **Wydajność** – zapisujesz strumień raz, unikając podwójnego zapisu biblioteki. +* **Elastyczność** – możesz dodać logowanie, optymalizację obrazków lub nawet przesyłanie ich do chmury w tym miejscu. + +## Krok 3 – Wczytaj dokument Word + +Gdy callback jest gotowy, musimy jedynie wskazać Aspose.Words na plik źródłowy. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Co jeśli plik nie zostanie znaleziony?** +> `Document` rzuci `FileNotFoundException`. Owiń wczytywanie w `try/catch`, jeśli spodziewasz się dynamicznych ścieżek. + +## Krok 4 – Skonfiguruj MarkdownSaveOptions + +Klasa `MarkdownSaveOptions` pozwala podłączyć callback, który właśnie stworzyliśmy. Ustawiamy również folder, w którym będą znajdować się obrazy względem pliku markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Właściwość `ImagesFolder` instruuje Aspose, aby generował linki markdown w postaci `![Alt text](images/img_123.png)`. Ponieważ w callbacku ustawiliśmy również `ResourceFileName`, rzeczywisty plik trafia dokładnie tam. + +## Krok 5 – Zapisz jako Markdown i zweryfikuj wynik + +Na koniec zapisujemy plik markdown. Callback już wcześniej wypełnił podfolder `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Oczekiwany wynik + +Uruchomienie programu powinno wypisać coś w rodzaju: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Otwórz `Doc.md` w dowolnym przeglądarce markdown; zobaczysz linki do obrazków, które prawidłowo wskazują na folder `images`. + +--- + +## Najczęściej zadawane pytania (FAQ) + +### Jak **wyodrębnić obrazki z docx** bez konwertowania do markdown? + +Możesz ponownie użyć tego samego `MyMarkdownResourceCallback`, ale przekazać go do `doc.Save("images.zip", SaveFormat.Zip)`. Callback nadal zostanie wywołany dla każdego obrazka, pozwalając umieścić je tam, gdzie chcesz. + +### Co zrobić, jeśli potrzebuję **różnych formatów obrazków**? + +`args.FileName` już zawiera oryginalne rozszerzenie (`.png`, `.jpg` itp.). Jeśli musisz przekonwertować wszystkie obrazki na jeden format, dodaj krok konwersji wewnątrz `ResourceSaving` przed zapisem strumienia. + +### Czy mogę **dostosować folder z obrazkami markdown** dla każdego dokumentu? + +Oczywiście. Callback otrzymuje ścieżkę folderu przez konstruktor, więc możesz utworzyć nowy callback z innym folderem dla każdego dokumentu w procesie wsadowym. + +### Czy to działa z **dużymi dokumentami** (setki obrazków)? + +Tak. Callback strumieniuje obrazek bezpośrednio na dysk, utrzymując niskie zużycie pamięci. Upewnij się tylko, że docelowy dysk ma wystarczająco miejsca i że nie przekraczasz limitów uchwytów plików systemu operacyjnego. + +## Pełny działający przykład + +Poniżej znajduje się kompletny, gotowy do skopiowania i wklejenia program. Zamień `YOUR_DIRECTORY` na ścieżkę absolutną lub względną odpowiednią dla Twojego środowiska. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Uruchom program (`dotnet run`), a zobaczysz świeżo utworzony `Doc.md` obok podfolderu `images` zawierającego + +{{< /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-officemath/_index.md b/words/polish/net/programming-with-officemath/_index.md index eb26f6e1b0..7d253e3779 100644 --- a/words/polish/net/programming-with-officemath/_index.md +++ b/words/polish/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Samouczki Aspose.Words for .NET dotyczące przetwarzania słów za pomocą Offic | Tytuł | Opis | | --- | --- | | [Równania matematyczne](./math-equations/) | Dowiedz się, jak skonfigurować równania matematyczne w dokumentach Word za pomocą Aspose.Words dla .NET. Przewodnik krok po kroku z przykładami, często zadawanymi pytaniami i nie tylko. | +| [Zapisz docx jako txt – eksportuj Word Math do LaTeX w C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Jak zapisać plik docx jako txt i wyeksportować równania Word Math do LaTeX w C# przy użyciu Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/polish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..6c3d2bc934 --- /dev/null +++ b/words/polish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: Szybko zapisz plik docx jako txt i dowiedz się, jak eksportować matematykę + do LaTeX. Konwertuj Word na txt, obsługuj Office Math i zachowaj równania w nienaruszonym + stanie. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: pl +og_description: Zapisz docx jako txt z eksportem równań LaTeX. Szczegółowy samouczek + C#, który pokazuje, jak przekonwertować Word na txt i zachować równania. +og_title: Zapisz docx jako txt – przewodnik C# po eksporcie matematyki w Wordzie +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Zapisz docx jako txt – Eksportuj równania Word do LaTeX w C# +url: /pl/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Zapisz docx jako txt – Eksportuj matematyczne elementy Word do LaTeX w C# + +Czy kiedykolwiek potrzebowałeś **zapisz docx jako txt**, ale obawiałeś się, że twoje równania zamienią się w chaotyczny zbiór symboli? Nie jesteś sam. Wielu programistów napotyka ten problem, gdy próbują **convert word to txt** w celu dalszego przetwarzania, szczególnie gdy źródło zawiera obiekty Office Math. + +Dobra wiadomość? Kilka linijek C# i odpowiednie opcje zapisu pozwolą zachować każde równanie jako czysty LaTeX, dzięki czemu plik tekstowy będzie zarówno czytelny dla człowieka, jak i gotowy do użycia w naukowych pipeline’ach. W tym tutorialu przejdziemy przez cały proces, odpowiemy na pytanie *jak eksportować matematykę* z pliku Word oraz pokażemy *jak konwertować docx* bez utraty dokładności równań. + +## Co się nauczysz + +- Załadujesz plik `.docx` przy użyciu Aspose.Words (lub dowolnej kompatybilnej biblioteki). +- Skonfigurujesz `TxtSaveOptions`, aby Office Math był eksportowany jako LaTeX. +- Zapiszesz dokument jako plik `.txt`, w którym równania pozostaną nienaruszone. +- Poznasz wskazówki dotyczące obsługi przypadków brzegowych, takich jak ukryte równania czy duże dokumenty. +- Otrzymasz kompletny, gotowy do uruchomienia przykład kodu, który możesz skopiować i wkleić od razu. + +Bez skomplikowanych narzędzi budujących, tylko projekt .NET i pakiet NuGet Aspose.Words. Zaczynajmy. + +--- + +## Wymagania wstępne + +| Wymaganie | Dlaczego jest ważne | +|-----------|----------------------| +| .NET 6.0 lub nowszy | Nowoczesne funkcje języka i lepsza wydajność. | +| Aspose.Words for .NET (NuGet) | Dostarcza `Document`, `TxtSaveOptions` i `OfficeMathExportMode`. | +| Plik Word (`.docx`) zawierający równania | Aby zobaczyć eksport LaTeX w działaniu. | +| Podstawowa znajomość C# | Będziesz podążać za kodem linia po linii. | + +Jeśli jeszcze nie dodałeś Aspose.Words, uruchom: + +```bash +dotnet add package Aspose.Words +``` + +To wszystko — nie potrzebna jest dodatkowa konfiguracja. + +--- + +## Krok 1: Załaduj plik DOCX + +Najpierw musimy wczytać źródłowy dokument do pamięci. Pomyśl o tym jak o otwarciu książki przed rozpoczęciem czytania. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** Używaj ścieżki bezwzględnej podczas testów, aby uniknąć niespodzianek typu „plik nie znaleziony”. W środowisku produkcyjnym prawdopodobnie otrzymasz ścieżkę z pliku konfiguracyjnego lub od użytkownika. + +--- + +## Krok 2: Skonfiguruj opcje zapisu TXT dla eksportu matematyki + +Domyślnie `TxtSaveOptions` zapisuje czysty tekst i usuwa Office Math. Nie chcemy tego. Ustawienie `OfficeMathExportMode` na `LaTeX` mówi bibliotece, aby przetłumaczyła każde równanie na jego reprezentację LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Dlaczego LaTeX? + +LaTeX jest lingua franca publikacji naukowych. Kiedy później podasz plik `.txt` do procesora markdown, notatnika Jupyter lub dowolnego narzędzia obsługującego LaTeX, równania zostaną wyrenderowane idealnie. Jeśli wolisz zwykłe symbole Unicode, możesz przełączyć się na `OfficeMathExportMode.Unicode`, ale LaTeX daje najwięcej kontroli. + +--- + +## Krok 3: Zapisz dokument jako plik tekstowy + +Teraz dzieje się magia. Metoda `Save` zapisuje dokument na dysku przy użyciu wcześniej zdefiniowanych opcji. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Po wykonaniu tej linii, `Math.txt` będzie zawierał: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Zauważ, że równanie pojawia się wewnątrz `\[` i `\]` — dokładnie tak, jak oczekuje LaTeX. + +--- + +## Jak eksportować matematykę z złożonych dokumentów + +### Obsługa ukrytych lub wbudowanych równań + +Niektóre pliki Word przechowują równania w ukrytych ramkach tekstowych. Aspose.Words traktuje je tak samo jak widoczne równania, więc eksport LaTeX działa automatycznie. Jednak jeśli zauważysz brakujące równania, sprawdź, czy obiekt `Document` nie jest ustawiony na ignorowanie ukrytej zawartości: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Duże dokumenty i zużycie pamięci + +Zapis pracy dyplomowej o 500 stronach może pochłonąć dużo RAMu. Aby utrzymać niski ślad pamięci, możesz strumieniowo zapisywać wynik: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Strumieniowanie zapisuje fragmenty na dysk w miarę ich generowania, zapobiegając trzymaniu całego pliku w pamięci jednocześnie. + +--- + +## Typowe pułapki i jak ich unikać + +| Pułapka | Objaw | Rozwiązanie | +|---------|-------|--------------| +| Brak nawiasów LaTeX | Równania pojawiają się jako surowy kod (`E = mc^{2}`) | Upewnij się, że `OfficeMathExportMode = LaTeX`. | +| Pusty plik wyjściowy | Nieprawidłowa ścieżka lub niewystarczające uprawnienia | Zweryfikuj, czy katalog wyjściowy istnieje i jest zapisywalny. | +| Zniekształcone znaki | Plik zakodowany w UTF‑8 bez BOM na systemie oczekującym ANSI | Dodaj `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Równania znikają po konwersji | Dokument wczytany z `LoadOptions`, które wykluczają matematykę | Użyj domyślnych `LoadOptions` lub ustaw `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Pełny działający przykład + +Poniżej znajduje się kompletny program, który możesz skompilować i uruchomić. Zawiera obsługę błędów, walidację ścieżek oraz mały log w konsoli, abyś wiedział, że wszystko się powiodło. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Oczekiwany wynik** (fragment z `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Teraz możesz podać ten plik do dowolnego procesora obsługującego LaTeX, a równania zostaną wyrenderowane pięknie. + +--- + +## Jak konwertować DOCX do TXT bez utraty formatowania + +Jeśli potrzebujesz jedynie czystego tekstu i nie zależy ci na matematyce, po prostu pomiń linię `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Jednak pamiętaj, że **how to export math** jest tym, co odróżnia workflow naukowy. Zachowanie LaTeX w całości to kluczowa zaleta tej konwersji. + +--- + +## Kolejne kroki i tematy powiązane + +- **Konwersja wsadowa:** Owiń kod w pętlę `foreach`, aby przetworzyć cały folder plików `.docx`. +- **Generowanie Markdown:** Dodaj nagłówki `#` lub wypunktowania `*` do tekstu, aby uzyskać gotowy do publikacji markdown. +- **Eksport PDF:** Użyj `PdfSaveOptions`, aby jednocześnie stworzyć wersję PDF obok txt. +- **Zaawansowane dostosowanie LaTeX:** Przetwarzaj wynik przy pomocy wyrażeń regularnych, aby zamienić `\[`/`\]` na `$...$` dla równań w linii. + +Wszystkie te elementy opierają się na tej samej bazie — wczytaniu `Document` i wybraniu odpowiednich `SaveOptions`. Śmiało eksperymentuj; API jest na tyle elastyczne, że sprosta większości scenariuszy automatyzacji dokumentów. + +--- + +## Zakończenie + +Omówiliśmy wszystko, co potrzebne, aby **save docx as txt** przy jednoczesnym zachowaniu każdego równania w formacie LaTeX. Od załadowania pliku źródłowego, przez konfigurację `TxtSaveOptions` dla **how to export math**, po zapis finalnego pliku tekstowego — cały przepływ mieści się w kilku zwięzłych instrukcjach C#. + +Teraz możesz zautomatyzować konwersję raportów Word, prac akademickich lub dowolnych dokumentów łączących tekst i matematykę, i przekazać wynikowy `.txt` do kolejnych narzędzi bez utraty szczegółów naukowych. + +Wypróbuj, dostosuj opcje do własnych potrzeb i daj znać w komentarzach, jak ci poszło. Szczęśliwego kodowania! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/polish/net/programming-with-pdfsaveoptions/_index.md index 81c85b6691..61fd4094f4 100644 --- a/words/polish/net/programming-with-pdfsaveoptions/_index.md +++ b/words/polish/net/programming-with-pdfsaveoptions/_index.md @@ -35,7 +35,7 @@ Niezależnie od tego, czy chcesz przekonwertować dokumenty Word do PDF w celu d | [URI ucieczki w dokumencie PDF](./escape-uri/) Dowiedz się, jak uciec URI w plikach PDF za pomocą Aspose.Words dla .NET. Ten szczegółowy przewodnik przeprowadzi Cię przez ten proces krok po kroku. | | [Eksportuj nagłówek, stopkę i zakładki dokumentu Word do dokumentu PDF](./export-header-footer-bookmarks/) | Dowiedz się, jak eksportować zakładki nagłówka i stopki z dokumentu Word do pliku PDF za pomocą Aspose.Words dla .NET, korzystając z naszego przewodnika krok po kroku. | | [Zmniejsz rozmiar pliku PDF za pomocą funkcji Skaluj czcionki WMF do rozmiaru metapliku](./scale-wmf-fonts-to-metafile-size/) | Przewodnik krok po kroku, jak zmniejszyć rozmiar pliku PDF, skalując czcionki WMF do rozmiaru metapliku podczas konwersji do pliku PDF za pomocą Aspose.Words dla platformy .NET. | -| [Popraw pozycjonowanie tekstu PDF dzięki dodatkowemu pozycjonowaniu tekstu](./additional-text-positioning/) | Dowiedz się, jak poprawić pozycjonowanie tekstu PDF za pomocą Aspose.Words dla .NET w kilku prostych krokach. Popraw wygląd swojego dokumentu. | +| [Popraw pozycjonowanie tekstu PDF dzięki dodatkowi pozycjonowania tekstu](./additional-text-positioning/) | Dowiedz się, jak poprawić pozycjonowanie tekstu PDF za pomocą Aspose.Words dla .NET w kilku prostych krokach. Popraw wygląd swojego dokumentu. | | [Konwertuj dokument Word do PDF 1.7](./conversion-to-pdf-17/) | Bezproblemowa konwersja dokumentów Word do PDF 1.7 przy użyciu Aspose.Words dla .NET. Postępuj zgodnie z tym przewodnikiem, aby mieć pewność, że Twoje dokumenty są powszechnie dostępne i profesjonalnie sformatowane. | | [Zmniejsz rozmiar dokumentu PDF dzięki próbkowaniu obrazów w dół](./downsampling-images/) | Zmniejsz rozmiar dokumentu PDF, zmniejszając próbkowanie obrazów za pomocą Aspose.Words dla .NET. Zoptymalizuj pliki PDF, aby przyspieszyć czas przesyłania i pobierania. | | [Ustawianie opcji konspektu w dokumencie PDF](./set-outline-options/) | Dowiedz się, jak ustawić opcje konspektu w dokumencie PDF za pomocą Aspose.Words for .NET. Ulepsz nawigację w pliku PDF, konfigurując poziomy nagłówków i rozszerzone konspekty. | @@ -45,7 +45,7 @@ Niezależnie od tego, czy chcesz przekonwertować dokumenty Word do PDF w celu d | [Aktualizuj ostatnio wydrukowaną właściwość w dokumencie PDF](./update-last-printed-property/) | Dowiedz się, jak zaktualizować ostatnią wydrukowaną właściwość w dokumencie PDF za pomocą Aspose.Words dla platformy .NET, korzystając z naszego przewodnika krok po kroku. | | [Renderuj efekty 3D DML 3DEffects w dokumencie PDF](./dml-3deffects-rendering/) | Dowiedz się, jak renderować niesamowite efekty 3D DML w dokumentach PDF za pomocą Aspose.Words dla .NET dzięki temu kompleksowemu przewodnikowi krok po kroku. | | [Interpolacja obrazów w dokumencie PDF](./interpolate-images/) | Dowiedz się, jak interpolować obrazy w dokumencie PDF za pomocą Aspose.Words dla .NET dzięki naszemu przewodnikowi krok po kroku. Łatwo popraw jakość obrazu w swoim pliku PDF. | - +| [Utwórz dostępny PDF z Worda – przewodnik krok po kroku](./create-accessible-pdf-from-word-step-by-step-guide/) | Dowiedz się, jak wygenerować dostępny plik PDF z dokumentu Word, spełniający standardy dostępności, przy użyciu Aspose.Words dla .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/polish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..1417b5058d --- /dev/null +++ b/words/polish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Utwórz dostępny PDF z pliku DOCX w C#. Dowiedz się, jak konwertować Word + na PDF, zapisać DOCX jako PDF i zapewnić zgodność z PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: pl +og_description: Utwórz dostępny PDF z Worda w C#. Ten przewodnik pokazuje, jak konwertować + Word na PDF, zapisać docx jako PDF i spełnić standardy PDF/UA. +og_title: Utwórz dostępny PDF – Kompletny samouczek C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Utwórz dostępny PDF z Worda – przewodnik krok po kroku +url: /pl/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Utwórz dostępny PDF z Word – Kompletny poradnik programistyczny + +Czy kiedykolwiek potrzebowałeś **utworzyć dostępny PDF** z dokumentu Word, ale nie byłeś pewien, które ustawienia należy zmienić? Nie jesteś sam. W wielu przedsiębiorstwach zgodność z PDF/UA (Universal Accessibility) jest twardym wymogiem, a zwykły przycisk „konwertuj‑do‑PDF” po prostu nie wystarcza. + +W tym przewodniku przeprowadzimy Cię przez zwięzłe, kompleksowe rozwiązanie, które **konwertuje Word na PDF**, **zapisuje docx jako PDF** i zapewnia, że wynik spełnia standardy dostępności. Bez niejasnych odwołań — tylko kod, który możesz skopiować‑wkleić, oraz wyjaśnienie „dlaczego” za każdą linią. + +> **TL;DR:** Załaduj plik `.docx`, ustaw `PdfSaveOptions.Compliance` na `PdfUa1` (lub `PdfUa2`) i wywołaj `Document.Save`. To wszystko, czego potrzebujesz, aby **utworzyć dostępny PDF** przy użyciu Aspose.Words dla .NET. + +--- + +## Co się nauczysz + +- Jak **konwertować Word na PDF** zachowując nagłówki, tekst alternatywny i kolejność czytania. +- Różnicę między `PdfUa1` a `PdfUa2` oraz kiedy wybrać każdą z nich. +- Jak **zapisać docx jako PDF** używając zaledwie kilku linii C#. +- Typowe pułapki (brakujące czcionki, nieobsługiwane znaczniki) i szybkie rozwiązania. +- Gotowy przykład kodu, który możesz wkleić do dowolnego projektu .NET. + +### Wymagania wstępne + +- .NET 6 lub nowszy (kod działa również na .NET Framework 4.7+). +- Aspose.Words dla .NET zainstalowany przez NuGet (`Install-Package Aspose.Words`). +- Plik Word (`input.docx`) zawierający już prawidłową strukturę (style, tekst alternatywny dla obrazów). + +Jeśli jeszcze nie dodałeś Aspose.Words, uruchom poniższe polecenie w konsoli Menedżera Pakietów: + +```powershell +Install-Package Aspose.Words +``` + +To jedyne zewnętrzne zależności, które są potrzebne. + +--- + +## Utwórz dostępny PDF – Dlaczego dostępność ma znaczenie + +Gdy PDF jest oznaczony jako **PDF/UA** (Universal Accessibility), czytniki ekranu mogą nawigować po nagłówkach, tabelach i polach formularzy tak, jak w oryginalnym pliku Word. To nie jest tylko „miły dodatek”; wiele rządów i korporacji traktuje zgodność z PDF/UA jako wymóg prawny. + +Ustawienie właściwości `Compliance` w `PdfSaveOptions` instruuje bibliotekę, aby wbudowała niezbędne znaczniki, ustawiła właściwy język dokumentu i dodała logiczną kolejność czytania. Pominięcie tego kroku skutkuje „wyłącznie wizualnym” PDF‑em, który nie przejdzie audytu dostępności. + +--- + +## Konwertuj Word na PDF przy użyciu Aspose.Words + +Poniżej najprostszy sposób na **konwersję Word na PDF** przy zachowaniu dostępności dokumentu. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Co się tutaj dzieje?** + +- `Document` odczytuje plik Word, zachowując wszystkie style i strukturę. +- `PdfSaveOptions.Compliance` informuje Aspose.Words, aby oznaczył wynik jako PDF/UA. +- `doc.Save` zapisuje PDF na dysku, automatycznie wbudowując znaczniki. + +> **Pro tip:** Jeśli Twój źródłowy plik Word używa niestandardowych stylów nagłówków, upewnij się, że są one mapowane na wbudowane poziomy nagłówków (`Heading1`, `Heading2`, …). Dzięki temu wygenerowany PDF otrzyma prawidłowe znaczniki nagłówków. + +--- + +## Zapisz Docx jako PDF – Konfiguracja zgodności PDF/UA + +Jeśli już znasz klasę `PdfSaveOptions`, możesz się zastanawiać, czy istnieją inne przełączniki wpływające na dostępność. Oto kilka przydatnych właściwości: + +| Właściwość | Wpływ na dostępność | Typowa wartość | +|------------|----------------------|----------------| +| `Compliance` | Włącza/wyłącza tagowanie PDF/UA | `PdfCompliance.PdfUa1` lub `PdfUa2` | +| `EmbedFullFonts` | Gwarantuje, że czytniki zobaczą zamierzoną typografię | `true` (domyślnie) | +| `OptimizeOutput` | Zmniejsza rozmiar pliku bez usuwania znaczników | `true` | + +Możesz rozbudować poprzedni fragment w ten sposób: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Przejście na `PdfUa2` dodaje obsługę nowszych funkcji PDF/UA, takich jak tagowanie *artifact* dla dekoracyjnych obrazów. Jeśli ich nie potrzebujesz, pozostań przy `PdfUa1` dla maksymalnej kompatybilności ze starszymi technologiami wspomagającymi. + +--- + +## Eksportuj Docx do PDF – Pełny działający przykład + +Poniżej samodzielna aplikacja konsolowa, która demonstruje cały przepływ, od wczytania pliku po weryfikację wyniku. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Oczekiwany rezultat + +- Plik o nazwie **Compliant.pdf** pojawia się w tym samym folderze co plik wykonywalny. +- Otwierając PDF w Adobe Acrobat Pro → *Tools → Accessibility → Full Check* powinien pojawić się komunikat **No accessibility issues** (zakładając, że źródłowy plik Word był prawidłowo zbudowany). +- W zakładce *Properties → Advanced* PDF pokaże **PDF/UA** w sekcji „PDF/A and PDF/UA compliance”. + +--- + +## Typowe przypadki brzegowe i jak sobie z nimi radzić + +| Sytuacja | Dlaczego ma znaczenie | Szybka naprawa | +|----------|-----------------------|----------------| +| **Brakujące czcionki** | PDF może przejść na domyślną czcionkę, psując układ wizualny. | Ustaw `EmbedFullFonts = true` (już domyślnie) i upewnij się, że pliki czcionek są dostępne na maszynie budującej. | +| **Obrazy bez tekstu alternatywnego** | Czytniki ekranu odczytają „obraz” bez opisu. | Dodaj `Alt Text` w Wordzie (`Kliknij prawym przyciskiem → Format Picture → Alt Text`) przed konwersją. | +| **Niestandardowe style nie rozpoznawane jako nagłówki** | PDF/UA wymaga prawidłowych znaczników nagłówków. | Mapuj niestandardowe style na wbudowane nagłówki poprzez `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Duże dokumenty powodują obciążenie pamięci** | Konwersja pliku o 500 stron może zwiększyć zużycie RAM. | Użyj `doc.Save(outputPath, options)` z `options.SaveFormat = SaveFormat.Pdf` i rozważ przetwarzanie w partiach, jeśli napotkasz `OutOfMemoryException`. | +| **Potrzeba eksportu docx do pdf bez dostępności** | Czasem potrzebny jest szybki, wyłącznie wizualny PDF. | Pomiń ustawienie `Compliance` lub ustaw je na `PdfCompliance.Pdf15`. | + +--- + +## Przykład obrazu (z tekstem alternatywnym) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Powyższy tekst alternatywny podkreśla główne słowo kluczowe i pomaga zarówno użytkownikom, jak i modelom AI zrozumieć kontekst obrazu.* + +--- + +## Najczęściej zadawane pytania + +**P: Czy to działa z .NET Core?** +O: Zdecydowanie tak. Aspose.Words jest wieloplatformowy; wystarczy odwołać się do pakietu NuGet w projekcie .NET 6+. + +**P: Czy mogę przetwarzać wsadowo wiele plików DOCX?** +O: Tak. Umieść logikę wczytywania i zapisu wewnątrz pętli `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Pamiętaj, aby ponownie używać jednej instancji `PdfSaveOptions` dla lepszej wydajności. + +**P: Co zrobić, gdy potrzebuję dodać własny znacznik PDF/UA, którego Aspose nie generuje automatycznie?** +O: Skorzystaj z niskopoziomowego API PDF (`PdfSaveOptions.CustomProperties`) lub przetwórz PDF po konwersji przy użyciu biblioteki takiej jak iText 7, która umożliwia ręczne wstawianie znaczników. + +--- + +## Zakończenie + +You + +{{< /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 5208aef90b..546f6b419c 100644 --- a/words/polish/net/working-with-fonts/_index.md +++ b/words/polish/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ Niezależnie od tego, czy chcesz formatować tekst za pomocą różnych czcionek | [Otrzymaj powiadomienie ostrzegawcze](./receive-warning-notification/) Dowiedz się, jak otrzymywać powiadomienia ostrzegawcze podczas korzystania z Aspose.Words dla platformy .NET i jak zarządzać wszelkimi problemami lub ostrzeżeniami w dokumentach. | | [Przykład źródła czcionki Steam](./resource-steam-font-source-example/) | Dowiedz się, jak używać źródła czcionek strumienia zasobów do ładowania niestandardowych czcionek do Aspose.Words dla platformy .NET. | | [Uzyskaj zamiennik bez sufiksów](./get-substitution-without-suffixes/) | W tym samouczku dowiesz się, jak uzyskać nadpisania bez sufiksów w dokumencie programu Word za pomocą Aspose.Words dla platformy .NET. | - +| [Jak wykrywać czcionki w Aspose.Words – Kompletny przewodnik](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Dowiedz się, jak wykrywać czcionki w dokumentach przy użyciu Aspose.Words dla .NET w tym kompletnym przewodniku. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/polish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/polish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..10a634f725 --- /dev/null +++ b/words/polish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-04-07 +description: Dowiedz się, jak wykrywać czcionki i jak przechwytywać ostrzeżenia podczas + obsługi brakujących czcionek w C# przy użyciu Aspose.Words. Dołączony kod krok po + kroku. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: pl +og_description: Jak wykrywać czcionki w Aspose.Words? Skorzystaj z tego samouczka, + aby przechwytywać ostrzeżenia i łatwo obsługiwać brakujące czcionki. +og_title: Jak wykrywać czcionki w Aspose.Words – Kompletny przewodnik +tags: +- Aspose.Words +- C# +- Font handling +title: Jak wykrywać czcionki w Aspose.Words – Kompletny przewodnik +url: /pl/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak wykrywać czcionki w Aspose.Words – Kompletny przewodnik + +Zastanawiałeś się kiedyś **jak wykrywać czcionki**, które brakuje w dokumencie Word przed wdrożeniem go do produkcji? Nie jesteś sam. W wielu scenariuszach korporacyjnych niepożądana czcionka może zepsuć potok konwersji PDF lub spowodować nieprofesjonalne artefakty układu. Dobrą wiadomością jest to, że Aspose.Words oferuje wbudowany sposób na wykrycie brakujących krojów pisma i wyświetlenie czytelnych ostrzeżeń. + +W tym samouczku przejdziemy krok po kroku przez **wykrywanie czcionek**, **przechwytywanie ostrzeżeń** oraz najlepsze praktyki **obsługi brakujących czcionek**, aby Twoja aplikacja była odporna. Bez zewnętrznych narzędzi, bez zgadywania — czysty kod C#, który możesz od razu wkleić do swojego projektu. + +> **Szybki podgląd:** Po zakończeniu będziesz mieć wielokrotnego użytku `FontSubstitutionWarningCollector`, który zbiera wszystkie komunikaty o podstawianiu czcionek podczas ładowania dokumentu, oraz będziesz wiedział, jak zareagować, gdy czcionka nie zostanie znaleziona. + +--- + +## Czego się nauczysz + +- Jak skonfigurować `LoadOptions`, aby nasłuchiwał ostrzeżeń o podstawianiu czcionek. +- Jak przechwycić te ostrzeżenia w własnej klasie kolektora. +- Jak przetworzyć zebrane ostrzeżenia i zdecydować, czy przerwać, zalogować, czy podmienić czcionki. +- Obsługa przypadków brzegowych dla dokumentów odwołujących się do zdalnych lub osadzonych czcionek. + +**Wymagania wstępne:** .NET 6+ (lub .NET Framework 4.6+), Aspose.Words for .NET (najnowsza wersja) oraz podstawowa znajomość C#. Jeśli nigdy nie używałeś Aspose.Words, nie martw się — ten przewodnik zakłada jedynie kilka minut konfiguracji. + +--- + +## Jak wykrywać czcionki przy użyciu Aspose.Words LoadOptions + +Pierwszym krokiem do wykrycia brakujących czcionek jest poinstruowanie Aspose.Words, aby je zgłaszał. Robi się to poprzez właściwość `LoadOptions.WarningCallback`, która przyjmuje dowolną klasę implementującą `IWarningCallback`. Poniżej tworzymy mały kolektor, który przechowuje każde ostrzeżenie do późniejszej analizy. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Dlaczego to ważne:** Bez callbacku ostrzeżeń Aspose.Words cicho podmienia brakujące czcionki domyślną, a Ty nigdy nie dowiesz się, że problem istnieje. Przechwycając `WarningType.FontSubstitution`, uzyskasz pełną widoczność — dokładnie te dane, których potrzebujesz, aby **wykrywać czcionki**, które nie są dostępne na maszynie hosta. + +Teraz podpinamy kolektor do `LoadOptions` i ładujemy dokument: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Porada:** Jeśli pracujesz z wieloma dokumentami w partii, używaj tego samego egzemplarza `FontSubstitutionWarningCollector`, ale pamiętaj, aby wywołać `Clear()` pomiędzy ładowaniami, aby nie mieszać ostrzeżeń z różnych plików. + +--- + +## Przechwytywanie ostrzeżeń podczas ładowania dokumentu + +Po załadowaniu dokumentu kolektor już zawiera wszystkie ostrzeżenia związane z czcionkami. Następne logiczne pytanie brzmi: *Jak przechwycić ostrzeżenia* w sposób łatwy do logowania lub wyświetlania? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typowy wynik wygląda tak: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Co to oznacza:** Każda linia ujawnia pierwotną nazwę czcionki oraz zamiennik, który wybrało Aspose.Words. Mając te informacje, możesz zdecydować, czy zamiennik jest akceptowalny, czy musisz ręcznie osadzić brakującą czcionkę. + +--- + +## Elegancka obsługa brakujących czcionek + +Wykrywanie i przechwytywanie ostrzeżeń to dopiero połowa walki. Prawdziwa wartość pojawia się, gdy **obsługujesz brakujące czcionki** w gotowy do produkcji sposób. Poniżej trzy popularne strategie: + +1. **Loguj i kontynuuj** – Odpowiednie dla przetwarzania wsadowego, gdy potrzebny jest jedynie ślad audytu. +2. **Przerwij przy krytycznych czcionkach** – Rzuć wyjątek, jeśli brak konkretnej czcionki (np. specyficznego kroju marki). +3. **Osadź czcionkę w locie** – Załaduj brakującą czcionkę z określonego folderu i zarejestruj ją w Aspose.Words przed ponownym wczytaniem dokumentu. + +### Przykład: Przerwanie przy krytycznej czcionce + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Przykład: Automatyczne osadzanie brakujących czcionek + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Dlaczego te wzorce pomagają:** Decydując wyraźnie, co zrobić, gdy czcionka jest nieobecna, eliminujesz ciche podstawienia, które mogłyby zaszkodzić identyfikacji wizualnej lub czytelności. To istota **obsługi brakujących czcionek** w kontrolowany sposób. + +--- + +## Kompletny działający przykład + +Łącząc wszystko w jedną całość, oto prosty program gotowy do uruchomienia, który demonstruje **wykrywanie czcionek**, **przechwytywanie ostrzeżeń** oraz prostą politykę **obsługi brakujących czcionek** poprzez ich logowanie. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Oczekiwany rezultat:** Po uruchomieniu programu przeciwko dokumentowi, który odwołuje się do czcionki nieobecnej na maszynie, konsola wypisze każde ostrzeżenie o podstawieniu. Jeśli któreś ostrzeżenie dotyczy czcionki z zestawu `critical`, program zakończy się wcześniej, zapobiegając wygenerowaniu wadliwego PDF‑a. + +--- + +## Najczęściej zadawane pytania (FAQ) + +| Pytanie | Odpowiedź | +|----------|-----------| +| *Czy potrzebna jest licencja na Aspose.Words, aby używać tego kodu?* | Tak, ważna licencja Aspose.Words usuwa znak wodny wersji ewaluacyjnej i odblokowuje pełną funkcjonalność. | +| *Czy to podejście wykrywa czcionki osadzone w dokumencie?* | Czcionki osadzone są już częścią pliku, więc Aspose.Words nie zgłosi ostrzeżenia o podstawieniu. W razie potrzeby możesz sprawdzić `Document.FontInfos`, aby wyliczyć osadzone czcionki. | +| *Co zrobić, gdy brakująca czcionka jest systemowa w Windows, a nie w Linux?* | To samo ostrzeżenie pojawi się w Linux, ponieważ czcionka nie jest tam zainstalowana. Skorzystaj ze strategii „obsługi brakujących czcionek”, aby dołączyć wymagane pliki `.ttf` do aplikacji. | +| *Czy kolektor ostrzeżeń jest wątkowo‑bezpieczny* | {{< /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 52ea0a466d..855e4dd2f3 100644 --- a/words/portuguese/net/basic-conversions/_index.md +++ b/words/portuguese/net/basic-conversions/_index.md @@ -33,6 +33,8 @@ Conversões Básicas orienta você nas conversões básicas de documentos usando | [Como Exportar LaTeX do Word – Guia Passo a Passo](./how-to-export-latex-from-word-step-by-step-guide/) | Aprenda a exportar conteúdo LaTeX de documentos Word usando Aspose.Words para .NET. Guia passo a passo com exemplos de código. | | [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. | +| [Converter DOCX para PDF em C# – Guia de Programação Completo](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Aprenda a converter DOCX para PDF em C# usando Aspose.Words para .NET com este guia completo passo a passo. | + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/portuguese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..90b67a3b47 --- /dev/null +++ b/words/portuguese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: Converta DOCX para PDF em C# rapidamente. Aprenda como salvar Word como + PDF, carregar documento DOCX em C# e garantir conformidade PDF/UA‑2 em minutos. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: pt +og_description: Converta DOCX para PDF em C# instantaneamente. Este guia mostra como + salvar Word como PDF, carregar documento docx em C# e atender aos padrões PDF/UA‑2. +og_title: Converter DOCX para PDF em C# – Guia passo a passo +tags: +- Aspose.Words +- C# +- PDF Generation +title: Converter DOCX para PDF em C# – Guia Completo de Programação +url: /pt/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Converter DOCX para PDF em C# – Guia de Programação Completo + +Já precisou **convert DOCX to PDF** em uma aplicação C# mas não sabia por onde começar? Você não está sozinho. Muitos desenvolvedores se deparam com um obstáculo ao descobrir que o simples botão “salvar como PDF” no Word não tem equivalente em código. A boa notícia? Com algumas linhas de Aspose.Words (ou qualquer biblioteca comparável) você pode automatizar todo o processo, manter formas flutuantes em linha e ainda alcançar conformidade PDF/UA‑2 sem esforço. + +Neste tutorial você aprenderá como **save Word as PDF**, **load docx document C#**, e ajustar as opções de exportação para que o arquivo resultante esteja pronto para auditorias de acessibilidade. Ao final, você terá um programa autônomo e executável que transforma qualquer arquivo `.docx` em um PDF limpo e compatível com padrões. + +> **Why care?** +> Converter DOCX para PDF é uma necessidade comum em sistemas de faturamento, geradores de relatórios e pipelines de arquivamento de documentos. Automatizá‑lo elimina etapas manuais, reduz erros humanos e garante que cada saída tenha exatamente a mesma aparência em todas as plataformas. + +--- + +## O que você vai precisar + +- **.NET 6.0** ou superior (o código também funciona no .NET Framework 4.6+) +- **Aspose.Words for .NET** (versão de avaliação ou licenciada) – você pode instalá‑lo via NuGet: `dotnet add package Aspose.Words` +- Um arquivo de exemplo `input.docx` colocado em uma pasta que você controla (nos referiremos a ele como `YOUR_DIRECTORY`) +- Visual Studio, VS Code ou qualquer editor C# de sua preferência + +É só isso—sem serviços extras, sem chamadas REST. Apenas C# puro. + +--- + +## Etapa 1: Carregar o Documento DOCX em C# + +Antes de poder **convert docx to pdf**, você precisa trazer o arquivo Word para a memória. A classe `Document` faz isso por você. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Por que isso importa:** +Carregar o arquivo fornece um modelo de objeto totalmente analisado—parágrafos, tabelas, formas flutuantes, tudo. É o primeiro passo em qualquer fluxo de **load docx document c#**, e também valida que o arquivo não está corrompido antes de desperdiçar tempo com a conversão. + +> **Pro tip:** Se você estiver lidando com arquivos enviados por usuários, envolva a chamada `new Document()` em um bloco try/catch para tratar arquivos DOCX malformados de forma elegante. + +--- + +## Etapa 2: Configurar Opções de Salvamento PDF (Conformidade e Manipulação de Formas) + +Você pode se perguntar: “Preciso ajustar alguma coisa ou basta chamar `Save`?” A resposta curta: pode, mas definir as opções corretas torna o PDF acessível e visualmente fiel. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Por que isso importa:** +- `ExportFloatingShapesAsInlineTag = true` impede que objetos flutuantes sejam perdidos ou desalinhados quando o PDF for visualizado em diferentes dispositivos. +- `Compliance = PdfCompliance.PdfUa2` garante que a saída atenda ao padrão PDF/UA‑2, crucial para compatibilidade com leitores de tela e arquivamento legal. + +Se você não precisar de acessibilidade, pode remover a linha `Compliance`, mas mantê‑la quase não gera sobrecarga e deixa sua solução preparada para o futuro. + +--- + +## Etapa 3: Salvar o Documento como PDF – A Ação Central **Convert DOCX to PDF** + +Agora que o documento está carregado e as opções definidas, a conversão real é uma única chamada de método. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**O que você verá:** +Executar o programa gera `output.pdf` na mesma pasta. Abra-o com qualquer visualizador de PDF e você notará que: + +- Todo o texto, tabelas e imagens aparecem exatamente como no DOCX original. +- Formas flutuantes são mantidas em linha, preservando o layout. +- O arquivo passa nas ferramentas básicas de validação PDF/UA‑2 (por exemplo, Adobe Acrobat Preflight). + +--- + +## Exemplo Completo – Do Início ao Fim + +Abaixo está um aplicativo console completo, pronto para executar, que demonstra todo o fluxo. Copie‑e‑cole em um novo projeto C# e pressione **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Saída esperada no console:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +E um `output.pdf` bem formatado fica ao lado do seu arquivo fonte. + +--- + +## Perguntas Frequentes & Casos de Borda + +| Pergunta | Resposta | +|----------|----------| +| **Posso converter um DOCX armazenado em um `MemoryStream`?** | Absolutamente. Use `new Document(stream)` em vez de um caminho de arquivo. | +| **E se o DOCX contiver macros?** | Aspose.Words ignora macros VBA por padrão; elas não aparecerão no PDF. | +| **Preciso de licença para produção?** | A versão de avaliação adiciona marca d'água após certa quantidade de páginas. Para uso comercial, obtenha uma licença para removê‑la. | +| **Como altero o tamanho da página PDF?** | Defina `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` antes de salvar. | +| **Existe uma forma de incorporar uma fonte personalizada?** | Sim—adicione `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Dicas Profissionais para uma Experiência Suave de **Save Word as PDF** + +- **Processamento em lote:** Envolva a lógica de conversão em um loop e alimente‑a com uma lista de caminhos DOCX. +- **Desempenho:** Reutilize uma única instância de `PdfSaveOptions` ao converter muitos arquivos; isso reduz a pressão sobre o GC. +- **Log:** Registre o tamanho do PDF gerado (`new FileInfo(outputPath).Length`) para monitorar os resultados de compressão. +- **Tratamento de erros:** Distinga entre `FileNotFoundException` (DOCX ausente) e `UnauthorizedAccessException` (problemas de permissão de gravação). + +--- + +## Conclusão + +Agora você tem um padrão sólido e pronto para produção para **convert DOCX to PDF** em C#. Ao carregar o DOCX, configurar as opções de salvamento PDF e invocar `Save`, você pode **save Word as PDF**, respeitar nuances de layout e atender a padrões de acessibilidade—all in under a dozen lines of code. + +Pronto para o próximo desafio? Experimente trocar `PdfSaveOptions` por `ImageSaveOptions` para **save Word as PNG**, ou explore a classe `HtmlSaveOptions` para gerar saída pronta para a web. De qualquer forma, os mesmos fundamentos de **load docx document c#** se aplicam, tornando sua base de código à prova de futuro. + +Happy coding, and may your PDFs always be compliant! + +--- + +![Exemplo de saída da conversão de DOCX para PDF](convert-docx-to-pdf-output.png "Exemplo de saída da conversão de DOCX para 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/portuguese/net/programming-with-loadoptions/_index.md b/words/portuguese/net/programming-with-loadoptions/_index.md index 3f084e50bd..56e516b7aa 100644 --- a/words/portuguese/net/programming-with-loadoptions/_index.md +++ b/words/portuguese/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Nestes tutoriais, você aprenderá a usar LoadOptions para carregar documentos d | [Carregar arquivos CHM em um documento do Word](./load-chm/) | Carregue facilmente arquivos CHM em documentos do Word usando o Aspose.Words para .NET com este tutorial passo a passo. Perfeito para consolidar sua documentação técnica. | | [Como recuperar docx com Aspose.Words – passo a passo](./how-to-recover-docx-with-aspose-words-step-by-step/) | Aprenda a recuperar arquivos DOCX corrompidos usando Aspose.Words passo a passo. | | [Aspose Load Options – Carregar DOCX com Configurações de Fonte Personalizadas](./aspose-load-options-load-docx-with-custom-font-settings/) | Aprenda a carregar documentos DOCX usando LoadOptions com fontes personalizadas no Aspose.Words para .NET. Guia passo a passo incluído. | +| [Recuperar DOCX Corrompido – Guia Completo em C# para Corrigir e Salvar Arquivos](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Aprenda a recuperar arquivos DOCX corrompidos usando C# e Aspose.Words, passo a passo, com dicas para corrigir e salvar. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/portuguese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..6fc5a0bb66 --- /dev/null +++ b/words/portuguese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Aprenda como recuperar arquivos DOCX corrompidos em C# e salvar o documento + recuperado com segurança. Guia passo a passo com exemplo do Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: pt +og_description: Recupere arquivos DOCX corrompidos em C# e salve o documento recuperado + com Aspose.Words. Código completo, explicações e dicas de boas práticas. +og_title: Recuperar DOCX Corrompido – Guia C# Passo a Passo +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Recuperar DOCX Corrompido – Guia Completo em C# para Corrigir e Salvar Arquivos +url: /pt/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Recuperar DOCX Corrompido – Guia Completo em C# para Corrigir e Salvar Arquivos + +Já tentou abrir um DOCX que parece estar bem no Explorer, mas gera uma exceção no seu aplicativo? Essa é a clássica “noite de terror do arquivo Word corrompido”, e geralmente termina com um stack‑trace que você não quer ver. A boa notícia? Aspose.Words oferece um recurso de **recover corrupted docx** que permite continuar trabalhando mesmo quando o arquivo está danificado. + +Neste tutorial vamos percorrer passo a passo como carregar um documento quebrado, instruir a biblioteca a continuar e então **save recovered document** para um novo arquivo limpo. Ao final você saberá por que o modo de recuperação importa, como configurá‑lo e quais armadilhas evitar — sem atalhos vagos como “veja a documentação”. + +## O que você precisará + +- **Aspose.Words for .NET** (qualquer versão recente; 24.11 foi usada ao escrever este guia) +- Um ambiente de desenvolvimento .NET (Visual Studio, Rider ou VS Code com a extensão C#) +- Um DOCX de exemplo que você suspeita estar corrompido (você pode corromper um arquivo abrindo‑o em um editor zip e deletando uma parte, apenas para teste) +- Conhecimento básico de C# — nada sofisticado, apenas a capacidade de criar um aplicativo console + +Se já tem tudo isso, ótimo — vamos direto à solução. + +## Etapa 1: Configurar LoadOptions com a Estratégia de Recuperação Correta + +O coração da correção é o objeto `LoadOptions`. Ele informa ao Aspose.Words como se comportar quando encontra XML mal‑formado ou partes ausentes dentro do pacote DOCX. O sinalizador `RecoveryMode.RecoverAndContinue` é o mais tolerante — ele tenta salvar o que for possível e ignora o resto. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Por que isso importa:** Se você omitir `LoadOptions` ou usar o modo padrão (`RecoveryMode.NoRecovery`), o construtor `Document` lançará uma exceção no momento em que detectar um problema. Com `RecoverAndContinue`, a API suprime erros não críticos e constrói um objeto `Document` parcial com o qual você ainda pode trabalhar. + +> **Dica de especialista:** Para lotes grandes de arquivos, considere envolver a chamada de carregamento em um bloco `try/catch` de qualquer forma — alguns erros são realmente fatais (por exemplo, a falta do arquivo `[Content_Types].xml`) e não podem ser recuperados. + +## Etapa 2: Carregar o DOCX Potencialmente Corrompido + +Agora que as opções estão prontas, carregue seu arquivo. O construtor recebe o caminho do arquivo e o `LoadOptions` que preparamos. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**O que está acontecendo nos bastidores?** +Aspose.Words analisa o contêiner ZIP, lê cada parte XML e tenta reconstruir o DOM Open XML. Quando encontra uma parte quebrada, o motor de recuperação registra um aviso (visível no console se você habilitar diagnósticos) e continua. O objeto `Document` resultante pode estar sem alguns parágrafos ou imagens, mas o restante do conteúdo permanece intacto. + +## Etapa 3: Verificar o Conteúdo Recuperado (Opcional, mas Recomendado) + +Antes de gravar o arquivo no disco, é prudente inspecionar alguns nós para garantir que as seções importantes sobreviveram. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Se a saída parecer sensata, você recuperou com sucesso o conteúdo **recover corrupted docx**. Caso note seções ausentes, ainda pode decidir se prossegue — às vezes os trechos perdidos são apenas decorativos. + +## Etapa 4: Salvar o Documento Recuperado + +Aqui está a parte que a maioria dos desenvolvedores pergunta: “Como faço **save recovered document** sem reintroduzir a corrupção original?” A resposta é simplesmente chamar `Document.Save` com um caminho novo. Aspose.Words grava um pacote ZIP totalmente novo, então quaisquer partes quebradas remanescentes ficam para trás. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Por que isso funciona:** O método `Save` serializa o DOM em memória de volta para um pacote Open XML limpo. Como as partes quebradas nunca foram carregadas no DOM (foram descartadas durante a recuperação), elas nunca entram no novo arquivo. O resultado é um DOCX saudável que abre no Word, Google Docs ou qualquer outro visualizador. + +## Etapa 5: Automatizar o Processo para Vários Arquivos (Bônus) + +Em cenários reais você costuma ter uma pasta cheia de arquivos problemáticos. Envolva as etapas anteriores em um loop e você terá um utilitário de recuperação pequeno. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Agora você pode colocar um diretório inteiro de DOCX quebrados em `C:\Docs\Batch` e deixar o script limpá‑los automaticamente. + +## Perguntas Frequentes & Casos Limítrofes + +| Pergunta | Resposta | +|----------|----------| +| **Isso funciona com arquivos .doc?** | A mesma classe `LoadOptions` se aplica, mas você deve referenciar o formato Word mais antigo (`doc`). Aspose.Words ainda pode recuperar, embora os padrões de erro sejam diferentes. | +| **E se o arquivo estiver protegido por senha?** | A recuperação não ignora a criptografia. Você precisa fornecer a senha via `LoadOptions.Password`. | +| **As imagens serão perdidas?** | Apenas imagens que fazem parte de uma parte XML corrompida podem ser omitidas. O resto é preservado porque são armazenadas como fluxos binários separados. | +| **Posso registrar os avisos que o Aspose gera?** | Sim — defina `LoadOptions.LoadFormat` para `LoadFormat.Docx` e assine `Document.WarningCallback` para capturar mensagens detalhadas. | +| **`RecoverAndContinue` é seguro para produção?** | Geralmente sim, mas teste com seus dados. Em pipelines críticos você pode querer marcar documentos que precisaram de recuperação para revisão posterior. | + +## Exemplo Completo (Pronto para Copiar e Colar) + +Abaixo está o programa completo que você pode compilar como um aplicativo console. Ele inclui todas as etapas, tratamento de erros e lógica opcional de processamento em lote. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Resultado esperado:** Após executar o programa, `Recovered.docx` abre no Microsoft Word sem a caixa de diálogo de erro original. Qualquer parte que estava muito danificada é simplesmente omitida, mas o corpo principal, títulos e a maioria das imagens permanecem intactos. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Conclusão + +Cobremos tudo o que você precisa para **recover corrupted docx** usando Aspose.Words, desde a configuração de `LoadOptions` até o seguro **save recovered document**. Os principais pontos de aprendizado são: + +- Use `RecoveryMode.RecoverAndContinue` para permitir que a biblioteca ignore erros não críticos. +- Verifique o conteúdo carregado antes de gravá‑lo, especialmente ao lidar com documentos críticos de negócios. +- Salvar o documento gera um pacote ZIP limpo, removendo efetivamente a corrupção original. +- O mesmo padrão escala para operações em lote, possibilitando limpeza automatizada de grandes repositórios de documentos. + +Pronto para o próximo passo? Experimente integrar essa lógica em um serviço em segundo plano que monitora uma pasta de uploads, ou experimente o `WarningCallback` para gerar um relatório dos arquivos que precisaram de recuperação. Quanto mais você brincar com a API, mais apreciará a robustez do Aspose.Words para o processamento de documentos no mundo real. + +Tem alguma variação que gostaria de compartilhar — talvez lidando com arquivos protegidos por senha ou mesclando documentos recuperados? Deixe um comentário abaixo e vamos manter a conversa fluindo. 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/programming-with-markdownsaveoptions/_index.md b/words/portuguese/net/programming-with-markdownsaveoptions/_index.md index c6638c1efc..4074c63906 100644 --- a/words/portuguese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/portuguese/net/programming-with-markdownsaveoptions/_index.md @@ -50,6 +50,9 @@ Aprenda a exportar documentos DOCX para Markdown usando C# com Aspose.Words, pas ### [Como salvar Markdown de DOCX – Guia passo a passo](./how-to-save-markdown-from-docx-step-by-step-guide/) Aprenda a salvar documentos DOCX como arquivos Markdown passo a passo usando Aspose.Words para .NET. +### [Salvar Word como Markdown com Pasta de Imagens Personalizada – Guia Completo](./save-word-as-markdown-with-custom-image-folder-full-guide/) +Aprenda a salvar documentos Word como Markdown definindo uma pasta personalizada para imagens usando Aspose.Words para .NET. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/portuguese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..f0ab55b8c7 --- /dev/null +++ b/words/portuguese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,293 @@ +--- +category: general +date: 2026-04-07 +description: Salve Word como Markdown e extraia imagens de docx usando um callback. + Aprenda como usar o callback para armazenar a pasta de imagens do Markdown de forma + eficiente. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: pt +og_description: Salvar Word como Markdown e extrair imagens de docx usando um callback. + Este guia mostra como usar o callback para criar uma pasta de imagens em markdown. +og_title: Salvar Word como Markdown – Guia Completo Passo a Passo +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Salvar Word como Markdown com Pasta de Imagens Personalizada – Guia Completo +url: /pt/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salvar Word como Markdown – Guia Completo Passo‑a‑Passo + +Já precisou **salvar Word como Markdown** mas não sabia o que fazer com as imagens incorporadas? Você não está sozinho. Em muitos projetos a saída em markdown fica ótima — *até* perceber que os links das imagens estão quebrados porque os arquivos nunca deixaram o pacote do Word. + +A boa notícia é que o Aspose.Words oferece uma forma limpa de **extrair imagens de docx** e colocá‑las exatamente onde você quiser, usando um **callback** que permite controlar a pasta de imagens do markdown. Neste tutorial vamos percorrer todo o processo, desde o carregamento de um arquivo `.docx` até a obtenção de uma pasta organizada de PNGs (ou qualquer outro formato que você tenha) e um arquivo markdown que aponta para eles. + +Ao final deste guia você será capaz de: + +* Converter qualquer documento Word para Markdown com uma única linha de código. +* Despejar automaticamente todas as imagens em uma sub‑pasta dedicada `images`. +* Personalizar nomes de arquivos para que nunca entrem em conflito, mesmo quando a origem contém dezenas de imagens. + +Sem scripts externos, sem copiar‑e‑colar manual — apenas C# puro e Aspose.Words. + +## Pré‑requisitos + +Antes de mergulharmos, certifique‑se de que você tem: + +* **Aspose.Words for .NET** (a versão estável mais recente; no momento da escrita é a 24.9). +* Um ambiente de desenvolvimento .NET (Visual Studio, Rider ou a CLI `dotnet`). +* Um documento Word (`.docx`) que contenha ao menos uma imagem — chame‑o de `DocWithImages.docx`. + +Se você nunca usou o Aspose.Words antes, não se preocupe. A biblioteca é totalmente gerenciada, não requer interop COM e funciona em .NET 6+ assim como no .NET Framework 4.8. + +## Etapa 1 – Configurar o Projeto e Instalar o Pacote + +Primeiro, crie um novo aplicativo console (ou adicione o código a um projeto existente). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Dica:** Se você estiver mirando .NET 6, o `Program.cs` padrão já usa declarações de nível superior, o que mantém o exemplo conciso. + +## Etapa 2 – Criar um Callback para Controlar a Salvamento das Imagens + +O Aspose.Words chama `IResourceSavingCallback.ResourceSaving` para cada recurso externo que ele precisa gravar (imagens, CSS, etc.). Ao implementar essa interface, ganhamos total autoridade sobre **como a pasta de imagens do markdown** é construída. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Por que usar um callback? + +* **Controle granular** – você decide a estrutura de pastas e o esquema de nomenclatura. +* **Desempenho** – grava o stream uma única vez, evitando a escrita dupla de fallback da biblioteca. +* **Flexibilidade** – você pode adicionar logs, otimização de imagens ou até mesmo upload para armazenamento em nuvem neste ponto. + +## Etapa 3 – Carregar o Documento Word + +Agora que o callback está pronto, basta apontar o Aspose.Words para o arquivo fonte. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **E se o arquivo não for encontrado?** +> `Document` lançará uma `FileNotFoundException`. Envolva o carregamento em um `try/catch` se você espera caminhos dinâmicos. + +## Etapa 4 – Configurar o MarkdownSaveOptions + +A classe `MarkdownSaveOptions` permite conectar o callback que acabamos de criar. Também definimos a pasta onde as imagens viverão, relativa ao arquivo markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +A propriedade `ImagesFolder` indica ao Aspose para gerar links markdown como `![Alt text](images/img_123.png)`. Como também definimos `ResourceFileName` dentro do callback, o arquivo real será salvo exatamente lá. + +## Etapa 5 – Salvar como Markdown e Verificar o Resultado + +Por fim, gravamos o arquivo markdown. O callback já terá preenchido a sub‑pasta `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Saída esperada + +Executar o programa deve imprimir algo semelhante a: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Abra `Doc.md` em qualquer visualizador de markdown; você verá links de imagem que apontam corretamente para a pasta `images`. + +--- + +## Perguntas Frequentes (FAQ) + +### Como **extrair imagens de docx** sem converter para markdown? + +Você pode reutilizar o mesmo `MyMarkdownResourceCallback`, mas passá‑lo para `doc.Save("images.zip", SaveFormat.Zip)`. O callback ainda será disparado para cada imagem, permitindo que você as coloque onde desejar. + +### E se eu precisar de **formatos de imagem diferentes**? + +`args.FileName` já contém a extensão original (`.png`, `.jpg`, etc.). Se for necessário converter todas as imagens para um único formato, adicione uma etapa de conversão dentro de `ResourceSaving` antes de gravar o stream. + +### Posso **personalizar a pasta de imagens do markdown** por documento?** + +Com certeza. O callback recebe o caminho da pasta via seu construtor, então você pode instanciar um novo callback com uma pasta diferente para cada documento em um processo em lote. + +### Isso funciona com **documentos grandes** (centenas de imagens)? + +Sim. O callback transmite a imagem diretamente para o disco, mantendo o uso de memória baixo. Apenas assegure que o disco de destino tenha espaço suficiente e que você não esteja atingindo limites de handles de arquivos do SO. + +--- + +## Exemplo Completo Funcional + +Abaixo está o programa completo, pronto para copiar e colar. Substitua `YOUR_DIRECTORY` por um caminho absoluto ou relativo que se adeque ao seu ambiente. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Execute o programa (`dotnet run`) e você verá um `Doc.md` recém‑criado ao lado de uma sub‑pasta `images` contendo + +{{< /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-officemath/_index.md b/words/portuguese/net/programming-with-officemath/_index.md index 9748da96cc..55d7e017f0 100644 --- a/words/portuguese/net/programming-with-officemath/_index.md +++ b/words/portuguese/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ Os tutoriais do Aspose.Words para .NET sobre Processamento de Texto com o Office | Título | Descrição | | --- | --- | | [Equações matemáticas](./math-equations/) | Aprenda a configurar equações matemáticas em documentos do Word usando o Aspose.Words para .NET. Guia passo a passo com exemplos, perguntas frequentes e muito mais. | +| [Salvar docx como txt – Exportar Word Math para LaTeX em C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Aprenda a salvar documentos .docx como arquivos .txt e exportar equações Word Math para LaTeX usando C# com Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/portuguese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..4365a23913 --- /dev/null +++ b/words/portuguese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,270 @@ +--- +category: general +date: 2026-04-07 +description: Salve docx como txt rapidamente e aprenda como exportar matemática para + LaTeX. Converta Word para txt, manipule Office Math e mantenha as equações intactas. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: pt +og_description: Salvar docx como txt com exportação de matemática em LaTeX. Um tutorial + passo a passo em C# que mostra como converter Word para txt e manter as equações. +og_title: Salvar docx como txt – Guia C# para exportar matemática do Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Salvar docx como txt – Exportar matemática do Word para LaTeX em C# +url: /pt/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Salvar docx como txt – Exportar matemática do Word para LaTeX em C# + +Já precisou **salvar docx como txt** mas temia que suas equações se transformassem em uma bagunça de símbolos? Você não está sozinho. Muitos desenvolvedores se deparam com esse obstáculo ao tentar **converter word para txt** para processamento posterior, especialmente quando a fonte contém objetos Office Math. + +A boa notícia? Com algumas linhas de C# e as opções de salvamento corretas, você pode preservar cada equação como LaTeX limpo, tornando o arquivo de texto simples legível por humanos e pronto para pipelines científicos. Neste tutorial vamos percorrer todo o processo, responder *como exportar matemática* de um arquivo Word e mostrar *como converter docx* sem perder a fidelidade das equações. + +## O que você vai aprender + +- Carregar um arquivo `.docx` usando Aspose.Words (ou qualquer biblioteca compatível). +- Configurar `TxtSaveOptions` para que o Office Math seja exportado como LaTeX. +- Salvar o documento como um arquivo `.txt` que mantém as equações intactas. +- Dicas para lidar com casos especiais, como equações ocultas ou documentos grandes. +- Um exemplo completo e executável que você pode copiar‑colar agora mesmo. + +Nenhuma ferramenta de build sofisticada, apenas um projeto .NET e o pacote NuGet Aspose.Words. Vamos começar. + +--- + +## Pré‑requisitos + +| Requisito | Por que importa | +|-----------|-----------------| +| .NET 6.0 ou superior | Recursos de linguagem modernos e melhor desempenho. | +| Aspose.Words for .NET (NuGet) | Fornece `Document`, `TxtSaveOptions` e `OfficeMathExportMode`. | +| Um arquivo Word (`.docx`) que contenha equações | Para ver a exportação para LaTeX em ação. | +| Conhecimento básico de C# | Você seguirá o código linha a linha. | + +Se ainda não adicionou o Aspose.Words, execute: + +```bash +dotnet add package Aspose.Words +``` + +É só isso—nenhuma configuração extra necessária. + +--- + +## Etapa 1: Carregar o arquivo DOCX + +Primeiro, precisamos trazer o documento fonte para a memória. Pense nisso como abrir um livro antes de começar a ler. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Dica profissional:** Use um caminho absoluto durante os testes para evitar surpresas de “arquivo não encontrado”. Em produção, você provavelmente receberá o caminho de um arquivo de configuração ou de um upload do usuário. + +--- + +## Etapa 2: Configurar as opções de salvamento TXT para exportar matemática + +Por padrão, `TxtSaveOptions` grava texto simples e remove o Office Math. Não queremos isso. Definir `OfficeMathExportMode` como `LaTeX` indica à biblioteca que traduza cada equação para sua representação LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Por que LaTeX? + +LaTeX é a lingua franca da publicação científica. Quando você posteriormente alimenta o `.txt` a um processador markdown, notebook Jupyter ou qualquer ferramenta que reconheça LaTeX, as equações são renderizadas perfeitamente. Se preferir símbolos Unicode simples, pode mudar para `OfficeMathExportMode.Unicode`, mas LaTeX oferece o controle mais detalhado. + +--- + +## Etapa 3: Salvar o documento como um arquivo de texto simples + +Agora a mágica acontece. O método `Save` grava o documento no disco usando as opções que definimos. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Depois que esta linha for executada, `Math.txt` conterá: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Observe como a equação aparece dentro de `\[` e `\]`—exatamente o que o LaTeX espera. + +--- + +## Como exportar matemática de documentos complexos + +### Lidando com equações ocultas ou embutidas + +Alguns arquivos Word armazenam equações dentro de quadros de texto ocultos. O Aspose.Words trata-os da mesma forma que equações visíveis, então a exportação para LaTeX funciona automaticamente. Contudo, se notar equações ausentes, verifique se o objeto `Document` não está configurado para ignorar conteúdo oculto: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Documentos grandes e uso de memória + +Salvar uma tese de 500 páginas pode consumir muita RAM. Para manter a pegada de memória baixa, você pode transmitir a saída: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +A transmissão grava blocos no disco à medida que são gerados, evitando que o arquivo inteiro permaneça na memória de uma só vez. + +--- + +## Armadilhas comuns & como evitá‑las + +| Armadilha | Sintoma | Solução | +|-----------|---------|---------| +| Falta de colchetes LaTeX | Equações aparecem como código bruto (`E = mc^{2}`) | Garanta `OfficeMathExportMode = LaTeX`. | +| Arquivo de saída vazio | Caminho errado ou permissões insuficientes | Verifique se o diretório de saída existe e tem permissão de escrita. | +| Caracteres estranhos | Arquivo codificado em UTF‑8 sem BOM em um sistema que espera ANSI | Adicione `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Equações desaparecem após a conversão | Documento carregado com `LoadOptions` que exclui matemática | Use `LoadOptions` padrão ou defina `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Exemplo completo em funcionamento + +Abaixo está o programa completo que você pode compilar e executar. Ele inclui tratamento de erros, validação de caminhos e um pequeno log no console para que você saiba que tudo ocorreu com sucesso. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Saída esperada** (trecho de `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Agora você pode alimentar este arquivo a qualquer processador que reconheça LaTeX, e as equações serão renderizadas lindamente. + +--- + +## Como converter DOCX para TXT sem perder formatação + +Se você precisa apenas de texto simples e não se importa com matemática, basta omitir a linha `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Mas lembre‑se, **como exportar matemática** é o diferencial para fluxos de trabalho científicos. Manter o LaTeX intacto é o que torna a conversão realmente útil. + +--- + +## Próximos passos & tópicos relacionados + +- **Conversão em lote:** Envolva o código em um loop `foreach` para processar uma pasta inteira de arquivos `.docx`. +- **Geração de Markdown:** Anexe cabeçalhos `#` ou marcadores `*` ao texto para produzir markdown pronto para publicação. +- **Exportação para PDF:** Use `PdfSaveOptions` para criar uma versão PDF ao lado do txt. +- **Ajustes avançados de LaTeX:** Pós‑processar a saída com regex para substituir `\[`/`\]` por `$...$` para equações inline. + +Cada um desses itens se baseia na mesma fundação—carregar um `Document` e escolher as `SaveOptions` corretas. Sinta‑se à vontade para experimentar; a API é flexível o suficiente para a maioria dos cenários de automação de documentos. + +--- + +## Conclusão + +Cobremos tudo o que você precisa para **salvar docx como txt** preservando cada equação como LaTeX. Desde o carregamento do arquivo fonte, configuração de `TxtSaveOptions` para **como exportar matemática**, até a gravação do arquivo de texto final, todo o fluxo cabe em algumas linhas concisas de C#. + +Agora você pode automatizar a conversão de relatórios Word, artigos acadêmicos ou qualquer documento que misture texto e matemática, e alimentar o `.txt` resultante a ferramentas posteriores sem perder nenhum detalhe científico. + +Experimente, ajuste as opções para o seu caso de uso e conte nos comentários como funcionou para você. Feliz codificação! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/portuguese/net/programming-with-pdfsaveoptions/_index.md index 0e6ad2ad0f..a7eb0ec94b 100644 --- a/words/portuguese/net/programming-with-pdfsaveoptions/_index.md +++ b/words/portuguese/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Quer você queira converter documentos do Word em PDF para distribuição online | [Atualizar a última propriedade impressa no documento PDF](./update-last-printed-property/) | Aprenda como atualizar a última propriedade impressa em um documento PDF usando o Aspose.Words para .NET com nosso guia passo a passo. | | [Renderizar efeitos 3D DML 3DEffects em um documento PDF](./dml-3deffects-rendering/) | Aprenda a renderizar efeitos DML 3D impressionantes em documentos PDF usando o Aspose.Words para .NET com este guia passo a passo abrangente. | | [Interpolar imagens em um documento PDF](./interpolate-images/) | Aprenda a interpolar imagens em um documento PDF usando o Aspose.Words para .NET com nosso guia passo a passo. Melhore a qualidade das imagens do seu PDF facilmente. | - +| [Criar PDF acessível a partir do Word – Guia passo a passo](./create-accessible-pdf-from-word-step-by-step-guide/) | Aprenda a gerar PDFs acessíveis a partir de documentos Word usando Aspose.Words para .NET, seguindo este guia passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/portuguese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..01a14084d0 --- /dev/null +++ b/words/portuguese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Crie PDF acessível a partir de um arquivo DOCX em C#. Aprenda como converter + Word para PDF, salvar DOCX como PDF e garantir a conformidade com PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: pt +og_description: Crie PDF acessível a partir do Word em C#. Este guia mostra como converter + Word para PDF, salvar docx como PDF e atender aos padrões PDF/UA. +og_title: Criar PDF Acessível – Tutorial Completo de C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Criar PDF acessível a partir do Word – Guia passo a passo +url: /pt/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Criar PDF Acessível a partir do Word – Tutorial de Programação Completo + +Já precisou **criar PDF acessível** a partir de um documento Word, mas não tinha certeza de quais configurações ajustar? Você não está sozinho. Em muitas empresas, a conformidade com PDF/UA (Universal Accessibility) é uma exigência rígida, e o botão usual de “converter‑para‑PDF” simplesmente não basta. + +Neste guia, percorreremos uma solução concisa e de ponta a ponta que **converte Word para PDF**, **salva docx como PDF**, e garante que a saída atenda aos padrões de acessibilidade. Sem referências vagas — apenas o código que você pode copiar‑colar, mais o “porquê” por trás de cada linha. + +> **TL;DR:** Carregue um `.docx`, defina `PdfSaveOptions.Compliance` para `PdfUa1` (ou `PdfUa2`) e chame `Document.Save`. Isso é tudo que você precisa para **criar PDF acessível** com Aspose.Words para .NET. + +--- + +## O que você aprenderá + +- Como **converter Word para PDF** preservando títulos, texto alternativo e ordem de leitura. +- A diferença entre `PdfUa1` e `PdfUa2` e quando escolher cada um. +- Como **salvar docx como PDF** usando apenas algumas linhas de C#. +- Problemas comuns (fonte ausente, tags não suportadas) e correções rápidas. +- Um exemplo de código pronto‑para‑executar que você pode inserir em qualquer projeto .NET. + +### Pré-requisitos + +- .NET 6 ou posterior (o código também funciona no .NET Framework 4.7+). +- Aspose.Words para .NET instalado via NuGet (`Install-Package Aspose.Words`). +- Um arquivo Word (`input.docx`) que já contém estrutura adequada (estilos, texto alternativo para imagens). + +Se você ainda não adicionou o Aspose.Words, execute o comando abaixo no Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +Essa é a única dependência externa que você precisa. + +--- + +## Criar PDF Acessível – Por que a Acessibilidade Importa + +Quando um PDF é marcado como **PDF/UA** (Universal Accessibility), leitores de tela podem navegar por títulos, tabelas e campos de formulário assim como fariam no arquivo Word original. Isso não é apenas um recurso opcional; muitos governos e corporações tratam a conformidade com PDF/UA como uma exigência legal. + +Definir a propriedade `Compliance` em `PdfSaveOptions` indica à biblioteca que ela deve incorporar as tags necessárias, definir o idioma correto do documento e adicionar uma ordem de leitura lógica. Pular esta etapa produz um PDF “somente visual” que falha em auditorias de acessibilidade. + +--- + +## Converter Word para PDF com Aspose.Words + +Abaixo está a maneira mais simples de **converter Word para PDF** mantendo o documento acessível. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**O que está acontecendo aqui?** + +- `Document` lê o arquivo Word, preservando todos os estilos e a estrutura. +- `PdfSaveOptions.Compliance` indica ao Aspose.Words que ele deve marcar a saída como PDF/UA. +- `doc.Save` grava o PDF no disco, incorporando as tags automaticamente. + +> **Dica profissional:** Se o seu arquivo Word de origem usa estilos de título personalizados, certifique‑se de que eles estejam mapeados para níveis de título embutidos (`Heading1`, `Heading2`, …). Isso garante que o PDF gerado obtenha tags de título adequadas. + +--- + +## Salvar Docx como PDF – Configurando a Conformidade PDF/UA + +Se você já está familiarizado com a classe `PdfSaveOptions`, pode se perguntar se há outros parâmetros que afetam a acessibilidade. Algumas propriedades úteis: + +| Propriedade | Efeito na Acessibilidade | Valor Típico | +|-------------|--------------------------|--------------| +| `Compliance` | Ativa/desativa a marcação PDF/UA | `PdfCompliance.PdfUa1` ou `PdfUa2` | +| `EmbedFullFonts` | Garante que os leitores vejam a tipografia pretendida | `true` (padrão) | +| `OptimizeOutput` | Reduz o tamanho do arquivo sem remover tags | `true` | + +Você pode estender o trecho anterior assim: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Mudar para `PdfUa2` adiciona suporte a recursos mais recentes do PDF/UA, como marcação *artifact* para imagens decorativas. Se você não precisar desses recursos, permaneça com `PdfUa1` para máxima compatibilidade com tecnologias assistivas mais antigas. + +--- + +## Exportar Docx para PDF – Exemplo Completo Funcional + +Abaixo está um aplicativo de console autocontido que demonstra todo o fluxo, desde o carregamento de um arquivo até a verificação da saída. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Resultado Esperado + +- Um arquivo chamado **Compliant.pdf** aparece na mesma pasta do executável. +- Abrir o PDF no Adobe Acrobat Pro → *Ferramentas → Acessibilidade → Verificação Completa* deve relatar **Nenhum problema de acessibilidade** (supondo que o arquivo Word de origem esteja bem estruturado). +- A aba *Propriedades → Avançado* do PDF mostrará **PDF/UA** na seção “Conformidade PDF/A e PDF/UA”. + +--- + +## Casos Limítrofes Comuns & Como Lidar com Eles + +| Situação | Por que importa | Correção rápida | +|----------|----------------|-----------------| +| **Fonte ausente** | O PDF pode recair para uma fonte padrão, quebrando o layout visual. | Defina `EmbedFullFonts = true` (já é o padrão) e garanta que os arquivos de fonte estejam acessíveis na máquina de compilação. | +| **Imagens sem texto alternativo** | Leitores de tela lerão “imagem” sem descrição. | Adicione `Alt Text` no Word (`Clique‑direito → Format Picture → Alt Text`) antes da conversão. | +| **Estilos personalizados não reconhecidos como títulos** | PDF/UA precisa de tags de título adequadas. | Mapeie estilos personalizados para títulos embutidos via `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Documentos grandes causam pressão de memória** | Converter um arquivo de 500 páginas pode aumentar o uso de RAM. | Use `doc.Save(outputPath, options)` com `options.SaveFormat = SaveFormat.Pdf` e considere processar em partes se encontrar `OutOfMemoryException`. | +| **Precisa exportar docx para pdf sem acessibilidade** | Às vezes você quer apenas um PDF visual rápido. | Omitir a configuração `Compliance` ou defini‑la como `PdfCompliance.Pdf15`. | + +--- + +## Exemplo de Imagem (Texto Alternativo Incluído) + +![Captura de tela mostrando a árvore de tags PDF/UA no Adobe Acrobat – demonstra que criamos com sucesso um PDF acessível](https://example.com/images/accessible-pdf-screenshot.png) + +*O texto alternativo acima reforça a palavra‑chave principal e ajuda tanto os usuários quanto os modelos de IA a entender o contexto da imagem.* + +--- + +## Perguntas Frequentes + +**Q: Isso funciona com .NET Core?** +A: Absolutamente. Aspose.Words é multiplataforma; basta referenciar o pacote NuGet no seu projeto .NET 6+. + +**Q: Posso processar em lote vários arquivos DOCX?** +A: Sim. Envolva a lógica de carregamento e salvamento dentro de um loop `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Lembre‑se de reutilizar uma única instância de `PdfSaveOptions` para desempenho. + +**Q: E se eu precisar adicionar uma tag PDF/UA personalizada que o Aspose não gera automaticamente?** +A: Use a API PDF de baixo nível (`PdfSaveOptions.CustomProperties`) ou pós‑procese o PDF com uma biblioteca como iText 7 que permite inserção manual de tags. + +--- + +## Conclusão + +You + +{{< /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 36022e3fdb..900580919e 100644 --- a/words/portuguese/net/working-with-fonts/_index.md +++ b/words/portuguese/net/working-with-fonts/_index.md @@ -40,7 +40,7 @@ Quer você queira formatar texto com fontes diferentes, definir regras de substi | [Definir pastas de fontes com prioridade](./set-fonts-folders-with-priority/) | Aprenda a definir pastas de fontes com prioridade em documentos do Word usando o Aspose.Words para .NET. Nosso guia garante que seus documentos sejam renderizados perfeitamente sempre. | | [Definir pasta de fontes True Type](./set-true-type-fonts-folder/) | Aprenda a definir uma pasta de fontes True Type em documentos do Word usando o Aspose.Words para .NET. Siga nosso guia passo a passo detalhado para garantir um gerenciamento consistente de fontes. | | [Especificar fonte padrão ao renderizar](./specify-default-font-when-rendering/) | Aprenda a especificar uma fonte padrão ao renderizar documentos do Word usando o Aspose.Words para .NET. Garanta a consistência da aparência do documento em todas as plataformas. | -| [Configurações de fonte com opções de carregamento](./font-settings-with-load-options/) Aprenda a gerenciar as configurações de fonte com opções de carregamento no Aspose.Words para .NET. Guia passo a passo para desenvolvedores garantirem a consistência da aparência da fonte em documentos do Word. +| [Configurações de fonte com opções de carregamento](./font-settings-with-load-options/) Aprenda a gerenciar as configurações de fonte com opções de carregamento no Aspose.Words para .NET. Guia passo a passo para desenvolvedores garantirem a consistência da aparência da fonte em documentos do Word. | | [Definir pasta de fontes](./set-fonts-folder/) | Aprenda como definir uma pasta de fontes personalizada no Aspose.Words para .NET para garantir que seus documentos do Word sejam renderizados corretamente, sem fontes ausentes. | | [Configurações de fonte Instância padrão](./font-settings-default-instance/) | Neste tutorial, aprenda a configurar as configurações de fonte padrão em um documento do Word com o Aspose.Words para .NET. | | [Obtenha a lista de fontes disponíveis](./get-list-of-available-fonts/) | Descubra como obter uma lista de fontes disponíveis usando o Aspose.Words para .NET neste tutorial passo a passo detalhado. Aprimore suas habilidades de gerenciamento de fontes. | @@ -48,7 +48,7 @@ Quer você queira formatar texto com fontes diferentes, definir regras de substi | [Receber notificação de aviso](./receive-warning-notification/) Aprenda como receber uma notificação de aviso ao usar o Aspose.Words para .NET e gerencie quaisquer problemas ou avisos em seus documentos. | | [Exemplo de fonte de fonte do Resource Steam](./resource-steam-font-source-example/) | Aprenda a usar o Resource Stream Font Source para carregar fontes personalizadas no Aspose.Words para .NET. | | [Obtenha substituição sem sufixos](./get-substitution-without-suffixes/) | Neste tutorial, aprenda como obter substituições sem sufixo em um documento do Word com o Aspose.Words para .NET. | - +| [Como Detectar Fontes no Aspose.Words – Guia Completo](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Aprenda a detectar fontes usadas em documentos Word com Aspose.Words para .NET neste guia completo passo a passo. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/portuguese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/portuguese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..7cbda1a250 --- /dev/null +++ b/words/portuguese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-04-07 +description: Aprenda como detectar fontes e como capturar avisos ao lidar com fontes + ausentes em C# usando Aspose.Words. Código passo a passo incluído. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: pt +og_description: Como detectar fontes no Aspose.Words? Siga este tutorial para capturar + avisos e lidar com fontes ausentes sem esforço. +og_title: Como Detectar Fontes no Aspose.Words – Guia Completo +tags: +- Aspose.Words +- C# +- Font handling +title: Como Detectar Fontes no Aspose.Words – Guia Completo +url: /pt/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Como Detectar Fontes no Aspose.Words – Guia Completo + +Já se perguntou **como detectar fontes** que estão ausentes em um documento Word antes de enviá‑lo para produção? Você não está sozinho. Em muitos cenários corporativos, uma fonte fora do lugar pode quebrar um pipeline de conversão para PDF ou causar falhas de layout que parecem pouco profissionais. A boa notícia é que o Aspose.Words oferece um modo interno de identificar essas tipografias ausentes e exibir avisos claros. + +Neste tutorial vamos percorrer passo a passo **como detectar fontes**, **como capturar avisos**, e as melhores práticas para **lidar com fontes ausentes** para que sua aplicação continue robusta. Sem ferramentas externas, sem adivinhações — apenas código C# puro que você pode inserir no seu projeto agora mesmo. + +> **Pré‑visualização rápida:** Ao final você terá um `FontSubstitutionWarningCollector` reutilizável que reúne todas as mensagens de substituição de fonte durante o carregamento do documento, e saberá como reagir quando uma fonte não for encontrada. + +--- + +## O Que Você Vai Aprender + +- Como configurar `LoadOptions` para escutar avisos de substituição de fonte. +- Como capturar esses avisos em uma classe coletora personalizada. +- Como processar os avisos coletados e decidir se aborta, registra ou substitui fontes. +- Tratamento de casos extremos para documentos que referenciam fontes remotas ou incorporadas. + +**Pré‑requisitos:** .NET 6+ (ou .NET Framework 4.6+), Aspose.Words for .NET (versão mais recente) e familiaridade básica com C#. Se você nunca usou o Aspose.Words antes, não se preocupe — este guia assume apenas alguns minutos de configuração. + +--- + +## Como Detectar Fontes Usando Aspose.Words LoadOptions + +O primeiro passo para detectar fontes ausentes é instruir o Aspose.Words a relatá‑las. Isso é feito através da propriedade `LoadOptions.WarningCallback`, que aceita qualquer classe que implemente `IWarningCallback`. Abaixo criamos um pequeno coletor que armazena cada aviso para inspeção posterior. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Por que isso importa:** Sem um callback de aviso, o Aspose.Words substitui silenciosamente fontes ausentes por uma padrão, e você nunca saberá que há um problema. Ao capturar `WarningType.FontSubstitution` ganhamos total visibilidade — exatamente os dados que você precisa para **detectar fontes** que não estão disponíveis na máquina host. + +Agora conectamos o coletor ao `LoadOptions` e carregamos um documento: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Dica de especialista:** Se você trabalha com muitos documentos em lote, reutilize a mesma instância de `FontSubstitutionWarningCollector`, mas lembre‑se de chamar `Clear()` entre os carregamentos para evitar misturar avisos de arquivos diferentes. + +--- + +## Capturar Avisos Durante o Carregamento do Documento + +Depois que o documento é carregado, o coletor já contém todos os avisos relacionados a fontes. A próxima pergunta lógica é: *Como capturo avisos* de forma que seja fácil registrar ou exibir? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +A saída típica se parece com: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**O que isso indica:** Cada linha revela o nome da fonte original e a fonte de fallback que o Aspose.Words escolheu. Munido dessas informações, você pode decidir se o fallback é aceitável ou se precisa incorporar a fonte ausente manualmente. + +--- + +## Lidar com Fontes Ausentes de Forma Elegante + +Detectar e capturar avisos é apenas metade da batalha. O verdadeiro valor surge quando você **lida com fontes ausentes** de maneira pronta para produção. Abaixo estão três estratégias comuns: + +1. **Registrar e Continuar** – Adequado para processamento em lote onde você só precisa de um registro de auditoria. +2. **Abortar em Fontes Críticas** – Lançar uma exceção se uma fonte específica (por exemplo, uma tipografia da marca) estiver ausente. +3. **Incorporar a Fonte Sob Demanda** – Carregar a fonte ausente de uma pasta conhecida e registrá‑la no Aspose.Words antes de recarregar o documento. + +### Exemplo: Abortando em uma Fonte Crítica + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Exemplo: Auto‑Incorporar Fontes Ausentes + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Por que esses padrões ajudam:** Ao decidir explicitamente o que fazer quando uma fonte falta, você elimina substituições silenciosas que poderiam comprometer a identidade visual ou a legibilidade. Essa é a essência de **lidar com fontes ausentes** de forma controlada. + +--- + +## Exemplo Completo Funcional + +Juntando tudo, aqui está um programa único, pronto‑para‑executar, que demonstra **como detectar fontes**, **como capturar avisos**, e uma política simples para **lidar com fontes ausentes** registrando‑as. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Resultado esperado:** Ao executar o programa contra um documento que referencia uma fonte não presente na máquina, o console listará cada aviso de substituição. Se algum aviso envolver uma fonte do conjunto `critical`, o programa encerrará antecipadamente, impedindo a geração de um PDF defeituoso. + +--- + +## Perguntas Frequentes (FAQs) + +| Pergunta | Resposta | +|----------|----------| +| *Preciso de licença para o Aspose.Words usar este código?* | Sim, uma licença válida do Aspose.Words remove marcas d'água de avaliação e desbloqueia toda a funcionalidade. | +| *Esta abordagem consegue detectar fontes incorporadas?* | Fontes incorporadas já fazem parte do arquivo, portanto o Aspose.Words não gera aviso de substituição. Você pode usar `Document.FontInfos` para enumerar fontes incorporadas, se necessário. | +| *E se a fonte ausente for uma fonte do sistema no Windows, mas não no Linux?* | O mesmo aviso será disparado no Linux porque a fonte não está instalada lá. Use a estratégia “lidar com fontes ausentes” para distribuir os arquivos `.ttf` necessários junto com seu aplicativo. | +| *O coletor de avisos é thread...* | + +{{< /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 43375dc72d..044883fc02 100644 --- a/words/russian/net/basic-conversions/_index.md +++ b/words/russian/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ Basic Conversions проведет вас через базовые преобр | [Как экспортировать LaTeX из Word – пошаговое руководство](./how-to-export-latex-from-word-step-by-step-guide/) | Узнайте, как экспортировать документ Word в LaTeX с помощью Aspose.Words для .NET, следуя пошаговому руководству. | | [Конвертировать 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 на C# – Полное руководство по программированию](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Узнайте, как полностью конвертировать DOCX в PDF с помощью C# и Aspose.Words, следуя подробному руководству с примерами кода. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/russian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..b7a100b77f --- /dev/null +++ b/words/russian/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,203 @@ +--- +category: general +date: 2026-04-07 +description: Быстро преобразуйте DOCX в PDF на C#. Узнайте, как сохранять Word в PDF, + загружать документ docx в C# и обеспечить соответствие PDF/UA‑2 за несколько минут. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: ru +og_description: Мгновенно преобразуйте DOCX в PDF на C#. В этом руководстве показано, + как сохранить Word как PDF, загрузить документ DOCX в C# и соответствовать стандартам + PDF/UA‑2. +og_title: Конвертировать DOCX в PDF на C# – пошаговое руководство +tags: +- Aspose.Words +- C# +- PDF Generation +title: Преобразовать DOCX в PDF на C# – Полное руководство по программированию +url: /ru/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Конвертация DOCX в PDF на C# – Полное руководство по программированию + +Когда‑нибудь вам нужно было **convert DOCX to PDF** в приложении на C#, но вы не знали, с чего начать? Вы не одиноки. Многие разработчики сталкиваются с проблемой, когда простая кнопка «save as PDF» в Word не переводится в код. Хорошая новость? С помощью нескольких строк Aspose.Words (или любой аналогичной библиотеки) вы можете автоматизировать весь процесс, сохранять плавающие объекты встроенными и даже достичь соответствия PDF/UA‑2 без усилий. + +В этом руководстве вы узнаете, как **save Word as PDF**, **load docx document C#**, и настроить параметры экспорта, чтобы полученный файл был готов к проверкам доступности. К концу вы получите автономную, исполняемую программу, которая преобразует любой файл `.docx` в чистый PDF, соответствующий стандартам. + +> **Почему это важно?** +> Конвертация DOCX в PDF — распространённое требование для систем выставления счетов, генераторов отчетов и конвейеров архивирования документов. Автоматизация устраняет ручные шаги, снижает человеческие ошибки и гарантирует, что каждый вывод выглядит одинаково на всех платформах. + +## Что понадобится + +- **.NET 6.0** или новее (код также работает на .NET Framework 4.6+). +- **Aspose.Words for .NET** (бесплатная пробная версия или лицензированная) – установить можно через NuGet: `dotnet add package Aspose.Words` +- Пример `input.docx`, размещённый в папке, которой вы управляете (будем называть её `YOUR_DIRECTORY`) +- Visual Studio, VS Code или любой удобный редактор C# + +Это всё — без дополнительных сервисов, без REST‑запросов. Просто чистый C#. + +## Шаг 1: Загрузка DOCX‑документа в C# + +Прежде чем вы сможете **convert docx to pdf**, нужно загрузить файл Word в память. Для этого служит класс `Document`. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Почему это важно:** +Загрузка файла предоставляет полностью разобранную объектную модель — абзацы, таблицы, плавающие объекты и т.д. Это первый шаг в любом рабочем процессе **load docx document c#**, а также проверяет, что файл не повреждён, прежде чем тратить время на конвертацию. + +> **Pro tip:** Если вы работаете с загруженными пользователями файлами, оберните вызов `new Document()` в блок try/catch, чтобы корректно обрабатывать некорректные DOCX‑файлы. + +## Шаг 2: Настройка параметров сохранения PDF (соответствие и обработка фигур) + +Вы можете задаться вопросом: «Нужно ли что‑то настраивать, или можно просто вызвать `Save`?» Краткий ответ: можно, но правильные параметры делают PDF доступным и визуально точным. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Почему это важно:** +- `ExportFloatingShapesAsInlineTag = true` предотвращает потерю или смещение плавающих объектов при просмотре PDF на разных устройствах. +- `Compliance = PdfCompliance.PdfUa2` гарантирует, что результат соответствует стандарту PDF/UA‑2, что критично для совместимости со скрин‑ридерами и юридического архивирования. + +Если вам не нужна доступность, можно убрать строку `Compliance`, но её оставление почти не добавляет нагрузки и делает решение более устойчивым к будущим требованиям. + +## Шаг 3: Сохранение документа как PDF — основное действие **Convert DOCX to PDF** + +Теперь, когда документ загружен и параметры установлены, сама конвертация происходит одним вызовом метода. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Что вы увидите:** +Запуск программы создаёт `output.pdf` в той же папке. Откройте его в любом PDF‑просмотрщике, и вы заметите, что: + +- Весь текст, таблицы и изображения отображаются точно так же, как в оригинальном DOCX. +- Плавающие фигуры сохраняются встроенными, сохраняется макет. +- Файл проходит базовую проверку соответствия PDF/UA‑2 (например, Adobe Acrobat Preflight). + +## Полный рабочий пример — от начала до конца + +Ниже представлен полный, готовый к запуску консольный приложение, демонстрирующее весь процесс. Скопируйте и вставьте его в новый проект C# и нажмите **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Ожидаемый вывод в консоли:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +А аккуратный `output.pdf` окажется рядом с вашим исходным файлом. + +## Часто задаваемые вопросы и особые случаи + +| Question | Answer | +|----------|--------| +| **Можно ли конвертировать DOCX, хранящийся в `MemoryStream`?** | Конечно. Используйте `new Document(stream)` вместо пути к файлу. | +| **Что делать, если DOCX содержит макросы?** | Aspose.Words по умолчанию игнорирует VBA‑макросы; они не появятся в PDF. | +| **Нужна ли лицензия для продакшн?** | Бесплатная пробная версия добавляет водяной знак после определённого количества страниц. Для коммерческого использования получите лицензию, чтобы убрать его. | +| **Как изменить размер страницы PDF?** | Установите `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` перед сохранением. | +| **Можно ли встроить пользовательский шрифт?** | Да — добавьте `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +## Профессиональные советы для плавного процесса **Save Word as PDF** + +- **Batch processing:** Оберните логику конвертации в цикл и передайте список путей к DOCX. +- **Performance:** Переиспользуйте один экземпляр `PdfSaveOptions` при конвертации множества файлов; это снижает нагрузку на сборщик мусора. +- **Logging:** Выводите размер сгенерированного PDF (`new FileInfo(outputPath).Length`) для контроля результатов сжатия. +- **Error handling:** Различайте `FileNotFoundException` (отсутствующий DOCX) и `UnauthorizedAccessException` (проблемы с правами записи). + +## Заключение + +Теперь у вас есть надёжный, готовый к продакшн шаблон для **convert DOCX to PDF** на C#. Загрузив DOCX, настроив параметры сохранения PDF и вызвав `Save`, вы можете **save Word as PDF**, учитывать нюансы макета и соответствовать стандартам доступности — всё это менее чем в дюжине строк кода. + +Готовы к следующему вызову? Попробуйте заменить `PdfSaveOptions` на `ImageSaveOptions`, чтобы **save Word as PNG**, или изучите класс `HtmlSaveOptions` для генерации готового к вебу вывода. В любом случае, те же основы **load docx document c#** применимы, делая ваш код устойчивым к будущим изменениям. + +Удачной разработки, и пусть ваши PDF всегда соответствуют требованиям! + +--- + +![Пример вывода конвертации DOCX в PDF](convert-docx-to-pdf-output.png "Пример вывода конвертации DOCX в 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-loadoptions/_index.md b/words/russian/net/programming-with-loadoptions/_index.md index 2542368e3a..61e5d4e551 100644 --- a/words/russian/net/programming-with-loadoptions/_index.md +++ b/words/russian/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ | [Загрузить файлы CHM в документ Word](./load-chm/) | Легко загружайте файлы CHM в документы Word с помощью Aspose.Words для .NET с помощью этого пошагового руководства. Идеально подходит для консолидации вашей технической документации. | | [Как восстановить DOCX с помощью Aspose.Words – пошагово](./how-to-recover-docx-with-aspose-words-step-by-step/) | Узнайте, как восстановить повреждённые файлы DOCX с помощью Aspose.Words, следуя пошаговому руководству. | | [Aspose Load Options – Загрузка DOCX с пользовательскими настройками шрифтов](./aspose-load-options-load-docx-with-custom-font-settings/) | Узнайте, как загрузить DOCX, задав пользовательские параметры шрифтов с помощью LoadOptions в Aspose.Words для .NET. | +| [Восстановление повреждённого DOCX – Полное руководство C# по исправлению и сохранению файлов](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Узнайте, как исправить и сохранить повреждённые файлы DOCX с помощью C# и Aspose.Words. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/russian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..2dfec4c7a5 --- /dev/null +++ b/words/russian/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: Узнайте, как восстанавливать повреждённые файлы DOCX на C# и безопасно + сохранять восстановленный документ. Пошаговое руководство с примером Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: ru +og_description: Восстановите повреждённые файлы DOCX на C# и сохраните восстановленный + документ с помощью Aspose.Words. Полный код, объяснения и рекомендации по лучшим + практикам. +og_title: Восстановление повреждённого DOCX – пошаговое руководство на C# +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Восстановление повреждённого DOCX – Полное руководство на C# по исправлению + и сохранению файлов +url: /ru/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Восстановление повреждённого DOCX – Полное руководство на C# по исправлению и сохранению файлов + +Когда‑нибудь пытались открыть DOCX, который выглядит нормально в Проводнике, но бросает исключение в вашем приложении? Это классический кошмар «повреждённый файл Word», и обычно он заканчивается стек‑трейсом, который вы не хотите видеть. Хорошая новость? Aspose.Words предоставляет функцию **recover corrupted docx**, позволяющую продолжать работу даже при повреждённом файле. + +В этом руководстве мы пройдём по точным шагам загрузки повреждённого документа, укажем библиотеке продолжать работу и затем **save recovered document** в новый чистый файл. К концу вы поймёте, почему режим восстановления важен, как его настроить и какие подводные камни следует избегать — без расплывчатых «см. документацию» рекомендаций. + +## Что понадобится + +- **Aspose.Words for .NET** (любая актуальная версия; при написании руководства использовалась 24.11) +- Среда разработки .NET (Visual Studio, Rider или VS Code с расширением C#) +- Пример DOCX, который, по вашему мнению, повреждён (можно повредить файл, открыв его в zip‑редакторе и удалив часть, просто для теста) +- Базовые знания C# — ничего сложного, только способность создать консольное приложение + +Если у вас уже есть всё это, отлично — сразу переходим к решению. + +## Шаг 1: Настройка LoadOptions с правильной стратегией восстановления + +Суть исправления заключается в объекте `LoadOptions`. Он указывает Aspose.Words, как вести себя при обнаружении некорректного XML или отсутствующих частей внутри пакета DOCX. Флаг `RecoveryMode.RecoverAndContinue` является самым снисходительным — он пытается спасти всё, что возможно, и пропускает остальное. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Почему это важно:** Если опустить `LoadOptions` или использовать режим по умолчанию (`RecoveryMode.NoRecovery`), конструктор `Document` бросит исключение в момент обнаружения проблемы. С `RecoverAndContinue` API поглощает некритические ошибки и создаёт частичный объект документа, с которым вы всё ещё можете работать. + +> **Pro tip:** Для огромных пакетов файлов рекомендуется всё равно обернуть вызов загрузки в блок `try/catch` — некоторые ошибки действительно фатальны (например, отсутствие файла `[Content_Types].xml`) и не могут быть восстановлены. + +## Шаг 2: Загрузка потенциально повреждённого DOCX + +Теперь, когда параметры готовы, загрузите ваш файл. Конструктор принимает путь к файлу и `LoadOptions`, которые мы только что подготовили. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Что происходит под капотом?** +Aspose.Words разбирает ZIP‑контейнер, читает каждую XML‑часть и пытается восстановить DOM Open XML. Когда встречается повреждённая часть, механизм восстановления записывает предупреждение (видимое в консоли при включённой диагностике) и продолжает. Полученный объект `Document` может не содержать несколько абзацев или изображений, но остальное содержимое остаётся нетронутым. + +## Шаг 3: Проверка восстановленного содержимого (необязательно, но рекомендуется) + +Прежде чем сохранять файл на диск, разумно проверить несколько узлов, чтобы убедиться, что важные разделы выжили. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Если вывод выглядит разумным, вы успешно восстановили содержимое **recover corrupted docx**. Если вы заметите отсутствующие разделы, вы всё ещё можете решить, продолжать ли — иногда потерянные части являются лишь декоративными. + +## Шаг 4: Сохранение восстановленного документа + +Это часть, о которой спрашивают большинство разработчиков: «Как **save recovered document** без повторного внесения исходной порчи?» Ответ прост — вызвать `Document.Save` с новым путём. Aspose.Words записывает совершенно новый ZIP‑пакет, поэтому любые оставшиеся повреждённые части остаются позади. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Почему это работает:** Метод `Save` сериализует DOM в памяти обратно в чистый пакет Open XML. Поскольку повреждённые части никогда не загружались в DOM (они были отброшены во время восстановления), они не попадают в новый файл. В результате получаем здоровый DOCX, который открывается в Word, Google Docs или любом другом просмотрщике. + +## Шаг 5: Автоматизация процесса для нескольких файлов (бонус) + +В реальных сценариях у вас часто есть папка, полная проблемных файлов. Оберните предыдущие шаги в цикл, и у вас будет небольшая утилита восстановления. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Теперь вы можете поместить целый каталог повреждённых файлов DOCX в `C:\Docs\Batch` и позволить скрипту автоматически их очистить. + +## Часто задаваемые вопросы и особые случаи + +| Question | Answer | +|----------|--------| +| **Работает ли это с файлами .doc?** | Класс `LoadOptions` применяется и к ним, но необходимо указать старый формат Word (`doc`). Aspose.Words всё ещё может восстановить, хотя шаблоны ошибок отличаются. | +| **Что если файл защищён паролем?** | Восстановление не обходит шифрование. Необходимо предоставить пароль через `LoadOptions.Password`. | +| **Будут ли потеряны изображения?** | Только изображения, являющиеся частью повреждённой XML‑части, могут быть опущены. Остальные сохраняются, так как хранятся как отдельные бинарные потоки. | +| **Могу ли я логировать предупреждения, генерируемые Aspose?** | Да — установите `LoadOptions.LoadFormat` в `LoadFormat.Docx` и подпишитесь на `Document.WarningCallback`, чтобы получать подробные сообщения. | +| **Безопасен ли `RecoverAndContinue` для продакшена?** | В целом да, но протестируйте на своих данных. В критически важных конвейерах может потребоваться помечать документы, требовавшие восстановления, для последующего обзора. | + +## Полный рабочий пример (готовый к копированию и вставке) + +Ниже приведена полная программа, которую можно собрать как консольное приложение. Она включает все шаги, обработку ошибок и необязательную логику пакетной обработки. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Ожидаемый результат:** После запуска программы `Recovered.docx` открывается в Microsoft Word без исходного диалогового окна ошибки. Любые слишком повреждённые части просто опускаются, но основное тело, заголовки и большинство изображений остаются нетронутыми. + +![пример восстановления повреждённого docx](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Заключение + +Мы рассмотрели всё, что вам нужно для **recover corrupted docx** файлов с помощью Aspose.Words, от настройки `LoadOptions` до безопасного **save recovered document**. Основные выводы: + +- Используйте `RecoveryMode.RecoverAndContinue`, чтобы библиотека игнорировала некритические ошибки. +- Проверяйте загруженное содержимое перед его сохранением, особенно при работе с критически важными бизнес‑документами. +- Сохранение документа генерирует чистый ZIP‑пакет, эффективно удаляя исходную порчу. +- Та же схема масштабируется на пакетные операции, позволяя автоматическую очистку больших репозиториев документов. + +Готовы к следующему шагу? Попробуйте интегрировать эту логику в фоновой сервис, который мониторит папку загрузок, или поэкспериментировать с `WarningCallback`, чтобы создать отчёт о файлах, требующих восстановления. Чем больше вы играете с API, тем больше оцените надёжность Aspose.Words для реальной обработки документов. + +Есть свой вариант, которым хотите поделиться — возможно, обработка защищённых паролем файлов или объединение восстановленных документов? Оставьте комментарий ниже, и давайте продолжать обсуждение. Счастливого кодинга! + +{{< /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 4be0115f6d..bf01eac12d 100644 --- a/words/russian/net/programming-with-markdownsaveoptions/_index.md +++ b/words/russian/net/programming-with-markdownsaveoptions/_index.md @@ -23,6 +23,7 @@ | --- | --- | | [Экспорт в Markdown с выравниванием содержимого таблицы](./export-into-markdown-with-table-content-alignment/) | Узнайте, как экспортировать документы Word в Markdown с выровненными таблицами с помощью Aspose.Words для .NET. Следуйте нашему пошаговому руководству для идеальных таблиц Markdown. | | [Установить папку с изображениями](./set-images-folder/) | Конвертируйте документы Word в Markdown с правильным выравниванием таблиц с помощью Aspose.Words для .NET. Следуйте нашему подробному руководству для идеальных результатов. | +| [Сохранить Word как Markdown с пользовательской папкой изображений – Полное руководство](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Сохраните документ Word в формате Markdown, используя пользовательскую папку для изображений, с полным пошаговым руководством на C#. | | [Сохранить Word как PDF и восстановить повреждённый Word – Конвертировать Word в Markdown на C#](./save-word-as-pdf-and-recover-corrupted-word-convert-word-to/) | Сохраните документ Word в PDF и восстановите повреждённый файл Word, а также конвертируйте Word в Markdown с помощью C#. | | [Создать доступный PDF и конвертировать Word в Markdown – Полное руководство C#](./create-accessible-pdf-and-convert-word-to-markdown-full-c-gu/) | Полное руководство по созданию доступных PDF и конвертации Word в Markdown с использованием C# и Aspose.Words. | | [Как использовать Markdown: преобразовать DOCX в Markdown с уравнениями LaTeX](./how-to-use-markdown-convert-docx-to-markdown-with-latex-equa/) | Конвертируйте документы DOCX в Markdown, сохраняя формулы LaTeX, с помощью Aspose.Words для .NET. | diff --git a/words/russian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/russian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..dcc9841c1a --- /dev/null +++ b/words/russian/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-04-07 +description: Сохраните Word в формате Markdown и извлеките изображения из docx с помощью + обратного вызова. Узнайте, как эффективно использовать обратный вызов для хранения + папки с изображениями Markdown. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: ru +og_description: Сохраните Word как Markdown и извлеките изображения из docx с помощью + обратного вызова. Это руководство показывает, как использовать обратный вызов для + создания папки с изображениями в Markdown. +og_title: Сохраните Word в Markdown — Полное пошаговое руководство +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Сохранить Word в Markdown с пользовательской папкой изображений – Полное руководство +url: /ru/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Сохранить Word как Markdown – Полное пошаговое руководство + +Когда‑нибудь вам нужно было **сохранить Word как Markdown**, но вы не знали, что делать с вложенными изображениями? Вы не одиноки. Во многих проектах вывод markdown выглядит отлично—*пока* не понимаешь, что ссылки на изображения сломаны, потому что файлы никогда не покидали пакет Word. + +Хорошая новость в том, что Aspose.Words предоставляет простой способ **extract images from docx** и разместить их точно там, где вам нужно, используя **callback**, который позволяет контролировать папку с изображениями markdown. В этом руководстве мы пройдем весь процесс, от загрузки файла `.docx` до получения аккуратной папки с PNG (или в любом другом формате) и markdown‑файла, ссылающегося на них. + +К концу этого руководства вы сможете: + +* Преобразовать любой документ Word в Markdown одной строкой кода. +* Автоматически сохранять каждое изображение в отдельную подпапку `images`. +* Настраивать имена файлов так, чтобы они никогда не конфликтовали, даже если источник содержит десятки изображений. + +Без внешних скриптов, без ручного копирования‑вставки — только чистый C# и Aspose.Words. + +## Prerequisites + +Перед тем как приступить, убедитесь, что у вас есть: + +* **Aspose.Words for .NET** (последняя стабильная версия; на момент написания это 24.9). +* Среда разработки .NET (Visual Studio, Rider или `dotnet` CLI). +* Документ Word (`.docx`), содержащий хотя бы одно изображение — назовём его `DocWithImages.docx`. + +Если вы никогда ранее не использовали Aspose.Words, не переживайте. Библиотека полностью управляемая, не требует COM‑interop и работает на .NET 6+ и .NET Framework 4.8. + +## Step 1 – Set Up the Project and Install the Package + +Сначала создайте новое консольное приложение (или добавьте код в существующий проект). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro tip:** Если вы нацеливаетесь на .NET 6, файл `Program.cs` по умолчанию уже использует top‑level statements, что делает пример лаконичным. + +## Step 2 – Create a Callback to Control Image Saving + +Aspose.Words вызывает `IResourceSavingCallback.ResourceSaving` для каждого внешнего ресурса, который необходимо записать (изображения, CSS и т.д.). Реализуя этот интерфейс, мы получаем полный контроль над **how the markdown images folder**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Why use a callback? + +* **Granular control** – вы решаете структуру папок и схему именования. +* **Performance** – вы записываете поток один раз, избегая двойной записи библиотеки. +* **Flexibility** – вы можете добавить логирование, оптимизацию изображений или даже загрузку в облачное хранилище на этом этапе. + +## Step 3 – Load the Word Document + +Теперь, когда callback готов, нам осталось лишь указать Aspose.Words на исходный файл. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Что если файл не найден?** +> `Document` выбросит `FileNotFoundException`. Оберните загрузку в `try/catch`, если ожидаете динамические пути. + +## Step 4 – Wire Up the MarkdownSaveOptions + +Класс `MarkdownSaveOptions` позволяет подключить созданный нами callback. Мы также задаём папку, в которой будут находиться изображения относительно markdown‑файла. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Свойство `ImagesFolder` указывает Aspose генерировать markdown‑ссылки вида `![Alt text](images/img_123.png)`. Поскольку мы также задаём `ResourceFileName` внутри callback, реальный файл оказывается точно в этой папке. + +## Step 5 – Save as Markdown and Verify the Result + +Наконец, мы записываем markdown‑файл. Callback уже заполнил подпапку `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Expected output + +Запуск программы должен вывести что‑то вроде: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Откройте `Doc.md` в любом markdown‑просмотрщике; вы увидите ссылки на изображения, правильно указывающие на папку `images`. + +--- + +## Frequently Asked Questions (FAQ) + +### How to **extract images from docx** without converting to markdown? + +Вы можете повторно использовать тот же `MyMarkdownResourceCallback`, но передать его в `doc.Save("images.zip", SaveFormat.Zip)`. Callback всё равно будет вызываться для каждого изображения, позволяя разместить их где угодно. + +### What if I need **different image formats**? + +`args.FileName` уже содержит оригинальное расширение (`.png`, `.jpg` и т.д.). Если необходимо конвертировать все изображения в один формат, добавьте шаг конвертации внутри `ResourceSaving` перед записью потока. + +### Can I **customize the markdown images folder** per document? + +Конечно. Callback получает путь к папке через конструктор, поэтому вы можете создать новый callback с другой папкой для каждого документа в пакетной обработке. + +### Does this work with **large documents** (hundreds of images)? + +Да. Callback передаёт изображение напрямую на диск, снижая потребление памяти. Просто убедитесь, что на целевом диске достаточно места и что вы не превышаете ограничения ОС на количество открытых файлов. + +--- + +## Full Working Example + +Ниже приведена полная, готовая к копированию и вставке программа. Замените `YOUR_DIRECTORY` на абсолютный или относительный путь, подходящий для вашей среды. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Запустите программу (`dotnet run`), и вы увидите только что созданный `Doc.md` рядом с подпапкой `images`, содержащей + +{{< /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-officemath/_index.md b/words/russian/net/programming-with-officemath/_index.md index 4a3c82976e..90834f55ba 100644 --- a/words/russian/net/programming-with-officemath/_index.md +++ b/words/russian/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ | Название | Описание | | --- | --- | | [Математические уравнения](./math-equations/) | Узнайте, как настраивать математические уравнения в документах Word с помощью Aspose.Words для .NET. Пошаговое руководство с примерами, часто задаваемыми вопросами и многим другим. | +| [Сохранить docx как txt – экспортировать Word Math в LaTeX на C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Узнайте, как сохранить документ Word в формате txt и экспортировать математические уравнения в LaTeX с помощью C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/russian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..fcec6ffe28 --- /dev/null +++ b/words/russian/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-04-07 +description: Быстро сохраняйте docx в txt и узнайте, как экспортировать формулы в + LaTeX. Конвертируйте Word в txt, обрабатывайте Office Math и сохраняйте уравнения + без изменений. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: ru +og_description: Сохранить docx в txt с экспортом LaTeX‑математики. Пошаговый C#‑урок, + показывающий, как конвертировать Word в txt и сохранить уравнения. +og_title: Сохранить docx как txt – руководство C# по экспорту математических формул + Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Сохранить docx как txt – экспортировать формулы Word в LaTeX на C# +url: /ru/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Сохранить docx как txt – экспортировать математические формулы Word в LaTeX на C# + +Когда нужно **сохранить docx как txt**, но боитесь, что уравнения превратятся в набор символов, вы не одиноки. Многие разработчики сталкиваются с этой проблемой, пытаясь **конвертировать word в txt** для дальнейшей обработки, особенно когда исходный файл содержит объекты Office Math. + +Хорошие новости: с несколькими строками C# и правильными параметрами сохранения можно сохранить каждую формулу в виде чистого LaTeX, делая текстовый файл читаемым человеком и готовым к использованию в научных конвейерах. В этом руководстве мы пройдем весь процесс, ответим на вопрос *как экспортировать математику* из файла Word и покажем, *как конвертировать docx* без потери точности формул. + +## Что вы узнаете + +- Как загрузить файл `.docx` с помощью Aspose.Words (или любой совместимой библиотеки). +- Как настроить `TxtSaveOptions`, чтобы Office Math экспортировался как LaTeX. +- Как сохранить документ как файл `.txt`, сохраняющий уравнения. +- Советы по обработке особых случаев, таких как скрытые уравнения или большие документы. +- Полный, готовый к запуску пример кода, который можно скопировать‑вставить прямо сейчас. + +Никаких сложных инструментов сборки, только проект .NET и пакет NuGet Aspose.Words. Поехали. + +--- + +## Предварительные требования + +| Требование | Почему это важно | +|------------|-------------------| +| .NET 6.0 или новее | Современные возможности языка и лучшая производительность. | +| Aspose.Words for .NET (NuGet) | Предоставляет `Document`, `TxtSaveOptions` и `OfficeMathExportMode`. | +| Файл Word (`.docx`) с уравнениями | Чтобы увидеть экспорт LaTeX в действии. | +| Базовые знания C# | Вы будете проходить код построчно. | + +Если вы ещё не добавили Aspose.Words, выполните: + +```bash +dotnet add package Aspose.Words +``` + +Вот и всё — дополнительной конфигурации не требуется. + +--- + +## Шаг 1: Загрузка файла DOCX + +Сначала нужно загрузить исходный документ в память. Представьте, что вы открываете книгу перед тем, как начать её читать. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Совет:** Во время тестирования используйте абсолютный путь, чтобы избежать неожиданностей «файл не найден». В продакшене путь, скорее всего, будет приходить из конфигурационного файла или от загрузки пользователем. + +--- + +## Шаг 2: Настройка параметров сохранения TXT для экспорта формул + +По умолчанию `TxtSaveOptions` сохраняет только обычный текст и отбрасывает Office Math. Нам это не подходит. Установка `OfficeMathExportMode` в `LaTeX` заставит библиотеку переводить каждую формулу в её LaTeX‑представление. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Почему LaTeX? + +LaTeX — lingua franca научных публикаций. Когда позже вы передадите `.txt` в markdown‑процессор, Jupyter notebook или любой LaTeX‑совместимый инструмент, уравнения отобразятся идеально. Если вам нужны обычные Unicode‑символы, можно переключить на `OfficeMathExportMode.Unicode`, но LaTeX даёт наибольший контроль. + +--- + +## Шаг 3: Сохранение документа как обычного текстового файла + +Теперь происходит магия. Метод `Save` записывает документ на диск, используя только что заданные параметры. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +После выполнения этой строки файл `Math.txt` будет содержать: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Обратите внимание, как уравнение помещено между `\[` и `\]` — именно то, что ожидает LaTeX. + +--- + +## Как экспортировать математику из сложных документов + +### Обработка скрытых или встроенных уравнений + +В некоторых файлах Word уравнения находятся внутри скрытых текстовых фреймов. Aspose.Words обрабатывает их так же, как видимые уравнения, поэтому экспорт LaTeX работает автоматически. Однако если вы заметили пропущенные формулы, проверьте, что объект `Document` не настроен игнорировать скрытый контент: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Большие документы и использование памяти + +Сохранение диссертации в 500 страниц может потребовать много ОЗУ. Чтобы уменьшить потребление памяти, можно выводить данные потоково: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Потоковая запись записывает куски на диск по мере их генерации, не удерживая весь файл в памяти одновременно. + +--- + +## Распространённые подводные камни и как их избежать + +| Проблема | Симптом | Решение | +|----------|---------|----------| +| Отсутствие LaTeX‑скобок | Формулы выводятся как сырой код (`E = mc^{2}`) | Убедитесь, что `OfficeMathExportMode = LaTeX`. | +| Пустой файл вывода | Неправильный путь или недостаточные права | Проверьте, что каталог назначения существует и доступен для записи. | +| Искажённые символы | Файл закодирован в UTF‑8 без BOM, а система ожидает ANSI | Добавьте `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Формулы исчезают после конвертации | Документ загружен с `LoadOptions`, исключающими математику | Используйте стандартные `LoadOptions` или задайте `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +--- + +## Полный рабочий пример + +Ниже представлен полностью готовая программа, которую можно собрать и запустить. В ней реализована обработка ошибок, проверка путей и небольшое логирование в консоль, чтобы вы знали, что всё прошло успешно. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Ожидаемый вывод** (фрагмент из `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Теперь вы можете передать этот файл в любой LaTeX‑совместимый процессор, и уравнения отобразятся красиво. + +--- + +## Как конвертировать DOCX в TXT без потери форматирования + +Если вам нужен только обычный текст и математика не важна, просто опустите строку с `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Но помните, **как экспортировать математику** — это ключевой момент для научных рабочих процессов. Сохранение LaTeX делает конвертацию действительно полезной. + +--- + +## Следующие шаги и смежные темы + +- **Пакетная конверсия:** Оберните код в цикл `foreach`, чтобы обработать всю папку с файлами `.docx`. +- **Генерация Markdown:** Добавьте заголовки `#` или маркеры `*` к тексту, чтобы получить готовый к публикации markdown. +- **Экспорт в PDF:** Используйте `PdfSaveOptions` для создания PDF‑версии рядом с txt. +- **Продвинутая настройка LaTeX:** Пост‑обработайте вывод с помощью regex, заменив `\[`/`\]` на `$...$` для встроенных уравнений. + +Все эти возможности базируются на одной и той же основе — загрузке `Document` и выборе правильных `SaveOptions`. Экспериментируйте, API достаточно гибок для большинства сценариев автоматизации документов. + +--- + +## Заключение + +Мы рассмотрели всё, что нужно, чтобы **сохранить docx как txt** с сохранением каждой формулы в виде LaTeX. От загрузки исходного файла, настройки `TxtSaveOptions` для **как экспортировать математику**, до записи окончательного текстового файла — весь процесс укладывается в несколько лаконичных строк C#. + +Теперь вы можете автоматизировать конвертацию Word‑отчётов, академических статей или любых документов, сочетающих текст и математику, и передавать полученный `.txt` в последующие инструменты без потери научных деталей. + +Попробуйте, подстройте параметры под свои задачи и расскажите в комментариях, как у вас всё получилось. Приятного кодинга! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/russian/net/programming-with-pdfsaveoptions/_index.md index 9590111d2c..b9900a99e1 100644 --- a/words/russian/net/programming-with-pdfsaveoptions/_index.md +++ b/words/russian/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ | [Обновить последнее напечатанное свойство в документе PDF](./update-last-printed-property/) | Узнайте, как обновить последнее напечатанное свойство в документе PDF с помощью Aspose.Words для .NET с помощью нашего пошагового руководства. | | [Визуализация 3D DML 3DEffects в PDF-документе](./dml-3deffects-rendering/) | Узнайте, как визуализировать потрясающие 3D-эффекты DML в документах PDF с помощью Aspose.Words для .NET с помощью этого подробного пошагового руководства. | | [Интерполяция изображений в PDF-документе](./interpolate-images/) | Узнайте, как интерполировать изображения в PDF-документе с помощью Aspose.Words для .NET с помощью нашего пошагового руководства. Улучшите качество изображений в PDF-файле легко. | - +| [Создание доступного PDF из Word – пошаговое руководство](./create-accessible-pdf-from-word-step-by-step-guide/) | Узнайте, как с помощью Aspose.Words для .NET создать доступный PDF из документа Word, соблюдая стандарты доступности, шаг за шагом. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/russian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/russian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..be7ab357a0 --- /dev/null +++ b/words/russian/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,238 @@ +--- +category: general +date: 2026-04-07 +description: Создайте доступный PDF из файла DOCX на C#. Узнайте, как конвертировать + Word в PDF, сохранить DOCX как PDF и обеспечить соответствие PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: ru +og_description: Создайте доступный PDF из Word на C#. Это руководство показывает, + как конвертировать Word в PDF, сохранить docx как PDF и соответствовать стандартам + PDF/UA. +og_title: Создание доступного PDF – Полный учебник по C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Создание доступного PDF из Word – пошаговое руководство +url: /ru/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Создание доступного PDF из Word – Полный программный учебник + +Когда‑нибудь вам нужно было **создать доступный PDF** из документа Word, но вы не знали, какие настройки изменить? Вы не одиноки. Во многих компаниях соответствие PDF/UA (Universal Accessibility) является обязательным требованием, и обычная кнопка «конвертировать в PDF» просто не подходит. + +В этом руководстве мы пройдём через лаконичное, сквозное решение, которое **конвертирует Word в PDF**, **сохраняет docx как PDF**, и гарантирует, что результат соответствует стандартам доступности. Никаких расплывчатых ссылок — только код, который можно скопировать‑вставить, плюс объяснение «почему» каждой строки. + +> **TL;DR:** Загрузите файл `.docx`, установите `PdfSaveOptions.Compliance` в `PdfUa1` (или `PdfUa2`) и вызовите `Document.Save`. Это всё, что нужно, чтобы **создать доступный PDF** с помощью Aspose.Words для .NET. + +--- + +## Что вы узнаете + +- Как **конвертировать Word в PDF**, сохраняя заголовки, альтернативный текст и порядок чтения. +- Чем отличаются `PdfUa1` и `PdfUa2` и когда выбирать каждый из них. +- Как **сохранить docx как PDF**, используя всего несколько строк C#. +- Распространённые подводные камни (отсутствующие шрифты, неподдерживаемые теги) и быстрые решения. +- Готовый к запуску пример кода, который можно вставить в любой проект .NET. + +### Предварительные требования + +- .NET 6 или новее (код также работает на .NET Framework 4.7+). +- Aspose.Words для .NET, установленный через NuGet (`Install-Package Aspose.Words`). +- Файл Word (`input.docx`), уже содержащий правильную структуру (стили, alt‑text для изображений). + +Если вы ещё не добавили Aspose.Words, выполните команду ниже в консоли диспетчера пакетов: + +```powershell +Install-Package Aspose.Words +``` + +Это единственная внешняя зависимость, которая вам понадобится. + +--- + +## Создание доступного PDF – Почему важна доступность + +Когда PDF помечен как **PDF/UA** (Universal Accessibility), программы чтения с экрана могут перемещаться по заголовкам, таблицам и полям формы так же, как в оригинальном файле Word. Это не просто «приятно иметь»; многие государства и корпорации рассматривают соответствие PDF/UA как юридическое требование. + +Установка свойства `Compliance` в `PdfSaveOptions` сообщает библиотеке добавить необходимые теги, задать правильный язык документа и установить логический порядок чтения. Пропуск этого шага приводит к «визуальному» PDF, который не проходит аудиты доступности. + +--- + +## Конвертация Word в PDF с помощью Aspose.Words + +Ниже представлен самый простой способ **конвертировать Word в PDF**, сохраняя документ доступным. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Что происходит здесь?** + +- `Document` читает файл Word, сохраняя все стили и структуру. +- `PdfSaveOptions.Compliance` указывает Aspose.Words пометить вывод как PDF/UA. +- `doc.Save` записывает PDF на диск, автоматически внедряя теги. + +> **Pro tip:** Если ваш исходный файл Word использует пользовательские стили заголовков, убедитесь, что они сопоставлены со встроенными уровнями заголовков (`Heading1`, `Heading2`, …). Это гарантирует, что сгенерированный PDF получит правильные теги заголовков. + +--- + +## Сохранение Docx как PDF – Настройка соответствия PDF/UA + +Если вы уже знакомы с классом `PdfSaveOptions`, вам может быть интересно, есть ли другие переключатели, влияющие на доступность. Пара полезных свойств: + +| Property | Effect on Accessibility | Typical Value | +|----------|------------------------|---------------| +| `Compliance` | Включает/выключает тегирование PDF/UA | `PdfCompliance.PdfUa1` or `PdfUa2` | +| `EmbedFullFonts` | Гарантирует, что читатели увидят задуманную типографику | `true` (default) | +| `OptimizeOutput` | Уменьшает размер файла без удаления тегов | `true` | + +Вы можете расширить предыдущий фрагмент так: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Переключение на `PdfUa2` добавляет поддержку новых функций PDF/UA, таких как тегирование *artifact* для декоративных изображений. Если они вам не нужны, оставайтесь на `PdfUa1` для максимальной совместимости со старыми вспомогательными технологиями. + +--- + +## Экспорт Docx в PDF – Полный рабочий пример + +Ниже представлено автономное консольное приложение, демонстрирующее весь процесс от загрузки файла до проверки результата. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Ожидаемый результат + +- Файл с именем **Compliant.pdf** появляется в той же папке, что и исполняемый файл. +- Открытие PDF в Adobe Acrobat Pro → *Tools → Accessibility → Full Check* должно отобразить **No accessibility issues** (при условии, что исходный файл Word был правильно структурирован). +- На вкладке *Properties → Advanced* PDF будет указано **PDF/UA** в разделе «PDF/A and PDF/UA compliance». + +--- + +## Распространённые граничные случаи и их решения + +| Situation | Why it matters | Quick fix | +|-----------|----------------|-----------| +| **Missing fonts** | PDF может переключиться на шрифт по умолчанию, нарушая визуальное оформление. | Установите `EmbedFullFonts = true` (по умолчанию) и убедитесь, что файлы шрифтов доступны на машине сборки. | +| **Images without alt‑text** | Читатели с экрана будут произносить «изображение» без описания. | Добавьте `Alt Text` в Word (`Right‑click → Format Picture → Alt Text`) перед конвертацией. | +| **Custom styles not recognized as headings** | PDF/UA требует правильных тегов заголовков. | Сопоставьте пользовательские стили со встроенными заголовками через `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Конвертация 500‑страничного файла может резко увеличить использование ОЗУ. | Используйте `doc.Save(outputPath, options)` с `options.SaveFormat = SaveFormat.Pdf` и при необходимости обрабатывайте документ частями, если возникнет `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | Иногда нужен быстрый визуальный PDF без тегов. | Опустите настройку `Compliance` или установите её в `PdfCompliance.Pdf15`. | + +--- + +## Пример изображения (Alt Text включён) + +![Скриншот, показывающий дерево тегов PDF/UA в Adobe Acrobat — демонстрирует, что мы успешно создали доступный PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Alt‑text выше усиливает основной ключевой запрос и помогает как пользователям, так и ИИ‑моделям понять контекст изображения.* + +--- + +## Часто задаваемые вопросы + +**Q: Работает ли это с .NET Core?** +A: Абсолютно. Aspose.Words кросс‑платформенный; достаточно добавить NuGet‑пакет в ваш проект .NET 6+. + +**Q: Можно ли пакетно обрабатывать несколько файлов DOCX?** +A: Да. Оберните логику загрузки и сохранения в цикл `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Не забудьте переиспользовать один экземпляр `PdfSaveOptions` для повышения производительности. + +**Q: Что делать, если нужно добавить пользовательский тег PDF/UA, который Aspose не генерирует автоматически?** +A: Используйте низкоуровневый PDF API (`PdfSaveOptions.CustomProperties`) или пост‑обработайте PDF с помощью библиотеки вроде iText 7, позволяющей вручную вставлять теги. + +--- + +## Заключение + +You + +{{< /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 57d561bdc8..3cff7a7646 100644 --- a/words/russian/net/working-with-fonts/_index.md +++ b/words/russian/net/working-with-fonts/_index.md @@ -27,7 +27,7 @@ | --- | --- | | [Форматирование шрифта](./font-formatting/) | Узнайте, как форматировать шрифты в документах Word с помощью Aspose.Words для .NET с помощью подробного пошагового руководства. | | [Получить межстрочный интервал шрифта](./get-font-line-spacing/) | Узнайте, как получить межстрочный интервал шрифта с помощью 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 с помощью этого всеобъемлющего пошагового руководства. Идеально подходит для разработчиков, желающих улучшить шрифты документов. | @@ -44,6 +44,7 @@ | [Установить папку шрифтов](./set-fonts-folder/) | Узнайте, как настроить пользовательскую папку шрифтов в Aspose.Words для .NET, чтобы гарантировать корректное отображение документов Word без потери шрифтов. | | [Настройки шрифта Экземпляр по умолчанию](./font-settings-default-instance/) | В этом уроке вы узнаете, как настроить параметры шрифта по умолчанию в документе Word с помощью Aspose.Words для .NET. | | [Получить список доступных шрифтов](./get-list-of-available-fonts/) | Узнайте, как получить список доступных шрифтов с помощью Aspose.Words для .NET в этом подробном пошаговом руководстве. Повысьте свои навыки управления шрифтами. | +| [Как обнаружить шрифты в Aspose.Words – Полное руководство](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Узнайте, как обнаруживать используемые шрифты в документах Word с помощью Aspose.Words для .NET в этом полном руководстве. | | [Получать уведомления о шрифтах](./receive-notifications-of-fonts/) | Узнайте, как получать уведомления об отсутствующих или замененных шрифтах при использовании Aspose.Words для .NET. | | [Получать предупреждающие уведомления](./receive-warning-notification/) Узнайте, как получать предупреждающие уведомления при использовании Aspose.Words для .NET и управлять любыми проблемами или предупреждениями в ваших документах. | | [Пример исходного кода шрифта Steam](./resource-steam-font-source-example/) | Узнайте, как использовать источник шрифтов Resource Stream для загрузки пользовательских шрифтов в Aspose.Words для .NET. | diff --git a/words/russian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/russian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..d53fff7c47 --- /dev/null +++ b/words/russian/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,272 @@ +--- +category: general +date: 2026-04-07 +description: Узнайте, как обнаруживать шрифты и как перехватывать предупреждения при + работе с отсутствующими шрифтами в C# с использованием Aspose.Words. Пошаговый код + включён. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: ru +og_description: Как обнаружить шрифты в Aspose.Words? Следуйте этому руководству, + чтобы фиксировать предупреждения и легко обрабатывать отсутствующие шрифты. +og_title: Как обнаружить шрифты в Aspose.Words – Полное руководство +tags: +- Aspose.Words +- C# +- Font handling +title: Как обнаружить шрифты в Aspose.Words – Полное руководство +url: /ru/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Как обнаружить шрифты в Aspose.Words – Полное руководство + +Когда‑нибудь задумывались **как обнаружить шрифты**, которые отсутствуют в документе Word, прежде чем отправлять его в продакшн? Вы не одиноки. Во многих корпоративных сценариях случайный шрифт может сломать конвейер конвертации PDF или вызвать визуальные сбои, выглядящие непрофессионально. Хорошая новость в том, что Aspose.Words предоставляет встроенный способ выявлять такие отсутствующие гарнитуры и выводить понятные предупреждения. + +В этом руководстве мы подробно рассмотрим **как обнаружить шрифты**, **как захватывать предупреждения**, а также лучшие практики **обработки отсутствующих шрифтов**, чтобы ваше приложение оставалось надёжным. Никаких внешних инструментов, без догадок — только чистый C#‑код, который вы можете сразу добавить в свой проект. + +> **Быстрый обзор:** к концу вы получите переиспользуемый `FontSubstitutionWarningCollector`, собирающий каждое сообщение о замене шрифта во время загрузки документа, и будете знать, как реагировать, когда шрифт не найден. + +--- + +## Что вы узнаете + +- Как настроить `LoadOptions` для прослушивания предупреждений о замене шрифтов. +- Как захватывать эти предупреждения в пользовательском классе‑коллекторе. +- Как обрабатывать собранные предупреждения и решать, прерывать процесс, вести журнал или заменять шрифты. +- Обработка крайних случаев для документов, ссылающихся на удалённые или встроенные шрифты. + +**Требования:** .NET 6+ (или .NET Framework 4.6+), Aspose.Words for .NET (последняя версия) и базовое знакомство с C#. Если вы никогда не использовали Aspose.Words, не переживайте — это руководство предполагает лишь несколько минут на настройку. + +## Как обнаружить шрифты с помощью Aspose.Words LoadOptions + +Первый шаг к обнаружению отсутствующих шрифтов — сообщить Aspose.Words о необходимости их отчёта. Это делается через свойство `LoadOptions.WarningCallback`, которое принимает любой класс, реализующий `IWarningCallback`. Ниже мы создаём небольшой коллектор, сохраняющий каждое предупреждение для последующего анализа. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Почему это важно:** без обратного вызова предупреждений Aspose.Words тихо заменяет отсутствующие шрифты на шрифт по умолчанию, и вы никогда не узнаете о проблеме. Захватывая `WarningType.FontSubstitution`, мы получаем полную видимость — именно те данные, которые нужны для **обнаружения шрифтов**, недоступных на хост‑машине. + +Теперь подключим коллектор к `LoadOptions` и загрузим документ: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Совет:** если вы обрабатываете множество документов пакетно, переиспользуйте один экземпляр `FontSubstitutionWarningCollector`, но не забудьте вызывать `Clear()` между загрузками, чтобы не смешивать предупреждения из разных файлов. + +## Захват предупреждений во время загрузки документа + +После загрузки документа коллектор уже содержит все предупреждения, связанные со шрифтами. Следующий логичный вопрос: *Как захватывать предупреждения* так, чтобы их было легко записать в журнал или отобразить? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Типичный вывод выглядит так: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Что это показывает:** каждая строка раскрывает оригинальное имя шрифта и замену, выбранную Aspose.Words. Имея эту информацию, вы можете решить, приемлема ли замена, или необходимо вручную встроить отсутствующий шрифт. + +## Обрабатывайте отсутствующие шрифты корректно + +Обнаружение и захват предупреждений — лишь половина задачи. Настоящая ценность появляется, когда вы **обрабатываете отсутствующие шрифты** готовым к продакшену способом. Ниже представлены три распространённые стратегии: + +1. **Log and Continue** — Подходит для пакетной обработки, когда нужен лишь журнал аудита. +2. **Abort on Critical Fonts** — Выбрасывать исключение, если отсутствует конкретный шрифт (например, фирменный типографический набор). +3. **Embed the Font On‑The‑Fly** — Загружать отсутствующий шрифт из известной папки и регистрировать его в Aspose.Words перед повторной загрузкой документа. + +### Пример: Прерывание при критическом шрифте + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Пример: Автоматическое встраивание отсутствующих шрифтов + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Почему эти шаблоны полезны:** явно решая, что делать при отсутствии шрифта, вы устраняете тихие замены, которые могут подорвать фирменный стиль или читаемость. Это суть **обработки отсутствующих шрифтов** контролируемым способом. + +## Полный рабочий пример + +Объединив всё вместе, представляем единый готовый к запуску пример программы, демонстрирующий **как обнаружить шрифты**, **как захватывать предупреждения**, а также простую политику **обработки отсутствующих шрифтов** через журналирование. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Ожидаемый результат:** при запуске программы с документом, который ссылается на шрифт, отсутствующий на машине, консоль выведет каждое предупреждение о замене. Если какое‑либо предупреждение касается шрифта из набора `critical`, программа завершится преждевременно, предотвращая создание некорректного PDF. + +## Часто задаваемые вопросы (FAQ) + +| Question | Answer | +|----------|--------| +| *Нужна ли лицензия на Aspose.Words для использования этого кода?* | Да, действительная лицензия Aspose.Words удаляет водяные знаки оценки и открывает полный функционал. | +| *Может ли этот подход обнаруживать встроенные шрифты?* | Встроенные шрифты уже находятся в файле, поэтому Aspose.Words не будет выдавать предупреждение о замене. При необходимости можно проверить `Document.FontInfos`, чтобы перечислить встроенные шрифты. | +| *Что если отсутствующий шрифт является системным на Windows, но не установлен на Linux?* | То же предупреждение будет сгенерировано на Linux, поскольку шрифт там не установлен. Используйте стратегию «обработки отсутствующих шрифтов», чтобы поставлять необходимые файлы `.ttf` вместе с приложением. | +| *Является ли коллектор предупреждений поток* | | + +{{< /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 0145e04557..90a2c6dfd7 100644 --- a/words/spanish/net/basic-conversions/_index.md +++ b/words/spanish/net/basic-conversions/_index.md @@ -21,20 +21,21 @@ Conversiones Básicas te guía a través de las conversiones básicas de documen ## Tutoriales | Título | Descripción | | --- | --- | -| [Convertir Doc a Docx](./doc-to-docx/) Aprenda a convertir DOC a DOCX con Aspose.Words para .NET. Guía paso a paso con ejemplos de código. Ideal para desarrolladores. -| [Convertir docx a rtf](./docx-to-rtf/) Aprenda a convertir DOCX a RTF con Aspose.Words para .NET con nuestra guía paso a paso. Conversión sencilla para un procesamiento de documentos fluido. -| [Convertir archivo de Word a PDF](./docx-to-pdf/) Aprenda a convertir fácilmente archivos de Word a PDF con Aspose.Words para .NET con nuestra guía. Ideal para desarrolladores que buscan una conversión de documentos rápida y fiable. -| [Convertir Docx a Byte](./docx-to-byte/) Aprenda a convertir DOCX a una matriz de bytes en .NET con Aspose.Words para un procesamiento eficiente de documentos. Incluye una guía paso a paso. -| [Convertir Docx a Epub](./docx-to-epub/) Convierte fácilmente DOCX a EPUB con Aspose.Words para .NET. Sigue nuestro tutorial para una integración perfecta con tus aplicaciones .NET. -| [Convertir DOCX a MHTML y enviar correo electrónico](./docx-to-mhtml-and-sending-email/) Aprenda a convertir DOCX a MHTML y a enviar correos electrónicos con Aspose.Words para .NET con esta guía paso a paso. Aumente su productividad con una automatización sencilla. -| [Convertir archivo docx a Markdown](./docx-to-markdown/) Aprenda a convertir archivos DOCX a Markdown con Aspose.Words para .NET. Siga nuestra guía detallada para una integración perfecta en sus aplicaciones .NET. -| [Convertir Docx a Txt](./docx-to-txt/) Convierte DOCX a TXT con Aspose.Words para .NET con nuestra guía paso a paso. Aprende a transformar documentos de forma eficiente y sencilla. -| [Convertir archivo de texto a documento de Word](./txt-to-docx/) Aprenda a convertir archivos de texto a documentos de Word con Aspose.Words para .NET. Gestione eficientemente la conversión de documentos con nuestra guía completa. -| [Guardar PDF como JPEG](./pdf-to-jpeg/) Convierte fácilmente archivos PDF a JPEG con Aspense.Words para .NET. Sigue nuestra guía detallada con ejemplos y preguntas frecuentes. Ideal para desarrolladores y aficionados. -| [Guardar PDF en formato Word (Docx)](./pdf-to-docx/) Aprenda a convertir un PDF a un documento de Word (Docx) con Aspose.Words para .NET con esta guía detallada paso a paso. Ideal para desarrolladores. -| [Cómo exportar LaTeX desde Word – Guía paso a paso](./how-to-export-latex-from-word-step-by-step-guide/) Aprenda a exportar contenido LaTeX desde Word usando Aspose.Words para .NET con esta guía paso a paso. -| [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. +| [Convertir Doc a Docx](./doc-to-docx/) Aprenda a convertir DOC a DOCX con Aspose.Words para .NET. Guía paso a paso con ejemplos de código. Ideal para desarrolladores. | +| [Convertir docx a rtf](./docx-to-rtf/) Aprenda a convertir DOCX a RTF con Aspose.Words para .NET con nuestra guía paso a paso. Conversión sencilla para un procesamiento de documentos fluido. | +| [Convertir archivo de Word a PDF](./docx-to-pdf/) Aprenda a convertir fácilmente archivos de Word a PDF con Aspose.Words para .NET con nuestra guía. Ideal para desarrolladores que buscan una conversión de documentos rápida y fiable. | +| [Convertir Docx a Byte](./docx-to-byte/) Aprenda a convertir DOCX a una matriz de bytes en .NET con Aspose.Words para un procesamiento eficiente de documentos. Incluye una guía paso a paso. | +| [Convertir Docx a Epub](./docx-to-epub/) Convierte fácilmente DOCX a EPUB con Aspose.Words para .NET. Sigue nuestro tutorial para una integración perfecta con tus aplicaciones .NET. | +| [Convertir DOCX a MHTML y enviar correo electrónico](./docx-to-mhtml-and-sending-email/) Aprenda a convertir DOCX a MHTML y a enviar correos electrónicos con Aspose.Words para .NET con esta guía paso a paso. Aumente su productividad con una automatización sencilla. | +| [Convertir archivo docx a Markdown](./docx-to-markdown/) Aprenda a convertir archivos DOCX a Markdown con Aspose.Words para .NET. Siga nuestra guía detallada para una integración perfecta en sus aplicaciones .NET. | +| [Convertir Docx a Txt](./docx-to-txt/) Convierte DOCX a TXT con Aspose.Words para .NET con nuestra guía paso a paso. Aprende a transformar documentos de forma eficiente y sencilla. | +| [Convertir archivo de texto a documento de Word](./txt-to-docx/) Aprenda a convertir archivos de texto a documentos de Word con Aspose.Words para .NET. Gestione eficientemente la conversión de documentos con nuestra guía completa. | +| [Guardar PDF como JPEG](./pdf-to-jpeg/) Convierte fácilmente archivos PDF a JPEG con Aspense.Words para .NET. Sigue nuestra guía detallada con ejemplos y preguntas frecuentes. Ideal para desarrolladores y aficionados. | +| [Guardar PDF en formato Word (Docx)](./pdf-to-docx/) Aprenda a convertir un PDF a un documento de Word (Docx) con Aspose.Words para .NET con esta guía detallada paso a paso. Ideal para desarrolladores. | +| [Cómo exportar LaTeX desde Word – Guía paso a paso](./how-to-export-latex-from-word-step-by-step-guide/) Aprenda a exportar contenido LaTeX desde Word usando Aspose.Words para .NET con esta guía paso a paso. | +| [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. | +| [Convertir DOCX a PDF en C# – Guía completa de programación](./convert-docx-to-pdf-in-c-complete-programming-guide/) Aprenda a convertir DOCX a PDF en C# con Aspose.Words. Guía paso a paso con ejemplos de código. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/spanish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..b23394ea6b --- /dev/null +++ b/words/spanish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: Convierte DOCX a PDF en C# rápidamente. Aprende cómo guardar Word como + PDF, cargar un documento DOCX en C# y garantizar el cumplimiento de PDF/UA‑2 en + minutos. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: es +og_description: Convierte DOCX a PDF en C# al instante. Esta guía te muestra cómo + guardar Word como PDF, cargar documentos DOCX en C# y cumplir con los estándares + PDF/UA‑2. +og_title: Convertir DOCX a PDF en C# – Guía paso a paso +tags: +- Aspose.Words +- C# +- PDF Generation +title: Convertir DOCX a PDF en C# – Guía completa de programación +url: /es/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Convertir DOCX a PDF en C# – Guía completa de programación + +¿Alguna vez necesitaste **convertir DOCX a PDF** en una aplicación C# pero no sabías por dónde empezar? No eres el único. Muchos desarrolladores se topan con un obstáculo cuando descubren que el sencillo botón “guardar como PDF” de Word no se traduce a código. ¿La buena noticia? Con unas pocas líneas de Aspose.Words (o cualquier biblioteca comparable) puedes automatizar todo el proceso, mantener las formas flotantes en línea e incluso cumplir con PDF/UA‑2 sin sudar. + +En este tutorial aprenderás a **save Word as PDF**, **load docx document C#**, y ajustar las opciones de exportación para que el archivo resultante esté listo para auditorías de accesibilidad. Al final tendrás un programa autónomo y ejecutable que convierte cualquier archivo `.docx` en un PDF limpio y conforme a estándares. + +> **¿Por qué importa?** +> Convertir DOCX a PDF es un requisito común para sistemas de facturación, generadores de informes y pipelines de archivado de documentos. Automatizarlo elimina pasos manuales, reduce errores humanos y garantiza que cada salida se vea exactamente igual en todas las plataformas. + +--- + +## Lo que necesitarás + +- **.NET 6.0** o posterior (el código también funciona en .NET Framework 4.6+). +- **Aspose.Words for .NET** (versión de prueba gratuita o con licencia) – puedes instalarlo vía NuGet: `dotnet add package Aspose.Words` +- Un archivo de muestra `input.docx` colocado en una carpeta que controles (lo llamaremos `YOUR_DIRECTORY`) +- Visual Studio, VS Code o cualquier editor de C# que prefieras + +¡Eso es todo—sin servicios extra, sin llamadas REST. Solo puro C#. + +--- + +## Paso 1: Cargar el documento DOCX en C# + +Antes de poder **convert docx to pdf**, necesitas cargar el archivo de Word en memoria. La clase `Document` hace eso por ti. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Por qué es importante:** +Cargar el archivo te brinda un modelo de objetos completamente analizado—párrafos, tablas, formas flotantes, todo. Es el primer paso en cualquier flujo de **load docx document c#**, y también valida que el archivo no esté corrupto antes de perder tiempo en la conversión. + +> **Consejo profesional:** Si trabajas con archivos subidos por usuarios, envuelve la llamada `new Document()` en un bloque try/catch para manejar archivos DOCX malformados de forma elegante. + +--- + +## Paso 2: Configurar las opciones de guardado PDF (Cumplimiento y manejo de formas) + +Quizás te preguntes, “¿Necesito ajustar algo, o simplemente llamo a `Save`?” La respuesta corta: puedes hacerlo, pero establecer las opciones correctas hace que el PDF sea accesible y visualmente fiel. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Por qué es importante:** +- `ExportFloatingShapesAsInlineTag = true` evita que los objetos flotantes se pierdan o desalineen cuando el PDF se visualiza en diferentes dispositivos. +- `Compliance = PdfCompliance.PdfUa2` garantiza que la salida cumpla con el estándar PDF/UA‑2, crucial para la compatibilidad con lectores de pantalla y archivado legal. + +Si no necesitas accesibilidad, puedes eliminar la línea `Compliance`, pero mantenerla no añade prácticamente ninguna sobrecarga y prepara tu solución para el futuro. + +--- + +## Paso 3: Guardar el documento como PDF – La acción central **Convertir DOCX a PDF** + +Ahora que el documento está cargado y las opciones configuradas, la conversión real es una única llamada de método. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Lo que verás:** +Al ejecutar el programa se genera `output.pdf` en la misma carpeta. Ábrelo con cualquier visor de PDF y notarás que: + +- Todo el texto, tablas e imágenes aparecen exactamente como en el DOCX original. +- Las formas flotantes se conservan en línea, preservando el diseño. +- El archivo supera herramientas básicas de validación PDF/UA‑2 (p. ej., Adobe Acrobat Preflight). + +--- + +## Ejemplo completo – De principio a fin + +A continuación tienes una aplicación de consola completa, lista para ejecutar, que muestra todo el flujo. Copia‑pega el código en un nuevo proyecto C# y pulsa **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Salida esperada en la consola:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Y un ordenado `output.pdf` queda al lado de tu archivo fuente. + +--- + +## Preguntas frecuentes y casos límite + +| Pregunta | Respuesta | +|----------|-----------| +| **¿Puedo convertir un DOCX almacenado en un `MemoryStream`?** | Absolutamente. Usa `new Document(stream)` en lugar de una ruta de archivo. | +| **¿Qué pasa si el DOCX contiene macros?** | Aspose.Words ignora las macros VBA por defecto; no aparecerán en el PDF. | +| **¿Necesito una licencia para producción?** | La versión de prueba gratuita añade una marca de agua después de un cierto número de páginas. Para uso comercial, adquiere una licencia para eliminarla. | +| **¿Cómo cambio el tamaño de página del PDF?** | Establece `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` antes de guardar. | +| **¿Hay forma de incrustar una fuente personalizada?** | Sí—añade `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +--- + +## Consejos profesionales para una experiencia fluida al **guardar Word como PDF** + +- **Procesamiento por lotes:** Envuelve la lógica de conversión en un bucle y pásale una lista de rutas DOCX. +- **Rendimiento:** Reutiliza una única instancia de `PdfSaveOptions` al convertir muchos archivos; reduce la presión del GC. +- **Registro:** Muestra el tamaño del PDF generado (`new FileInfo(outputPath).Length`) para monitorizar los resultados de compresión. +- **Manejo de errores:** Distingue entre `FileNotFoundException` (DOCX faltante) y `UnauthorizedAccessException` (problemas de permisos de escritura). + +--- + +## Conclusión + +Ahora tienes un patrón sólido y listo para producción para **convertir DOCX a PDF** en C#. Al cargar el DOCX, configurar las opciones de guardado PDF e invocar `Save`, puedes **save Word as PDF**, respetar los matices del diseño y cumplir con los estándares de accesibilidad—todo en menos de una docena de líneas de código. + +¿Listo para el próximo desafío? Prueba a cambiar `PdfSaveOptions` por `ImageSaveOptions` para **save Word as PNG**, o explora la clase `HtmlSaveOptions` para generar salida lista para la web. De cualquier forma, los mismos fundamentos de **load docx document c#** se aplican, haciendo que tu base de código sea a prueba de futuro. + +¡Feliz codificación, y que tus PDFs siempre cumplan con los requisitos! + +--- + +![Ejemplo de salida de Convertir DOCX a PDF](convert-docx-to-pdf-output.png "Ejemplo de salida de Convertir DOCX a 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/spanish/net/programming-with-loadoptions/_index.md b/words/spanish/net/programming-with-loadoptions/_index.md index 856e0884ac..266375eec7 100644 --- a/words/spanish/net/programming-with-loadoptions/_index.md +++ b/words/spanish/net/programming-with-loadoptions/_index.md @@ -33,6 +33,7 @@ En estos tutoriales, aprenderá a usar LoadOptions para cargar documentos de Wor | [Convertir metarchivos a PNG](./convert-metafiles-to-png/) Convierte fácilmente metarchivos a PNG en documentos de Word con Aspose.Words para .NET con este tutorial paso a paso. Simplifica la gestión de tus documentos. | | [Cargar archivos CHM en un documento de Word](./load-chm/) Cargue fácilmente archivos CHM en documentos de Word con Aspose.Words para .NET con este tutorial paso a paso. Ideal para consolidar su documentación técnica. | | [Aspose Load Options – Cargar DOCX con Configuración de Fuente Personalizada](./aspose-load-options-load-docx-with-custom-font-settings/) Aprenda a cargar documentos DOCX especificando fuentes personalizadas con Aspose.LoadOptions en .NET. | +| [Recuperar DOCX corrupto – Guía completa en C# para reparar y guardar archivos](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) Aprenda a reparar documentos DOCX dañados y guardarlos correctamente usando Aspose.Words para .NET con C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/spanish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..d35095b799 --- /dev/null +++ b/words/spanish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Aprende cómo recuperar archivos DOCX corruptos en C# y guardar el documento + recuperado de forma segura. Guía paso a paso con ejemplo de Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: es +og_description: Recupera archivos DOCX corruptos en C# y guarda el documento recuperado + con Aspose.Words. Código completo, explicaciones y consejos de buenas prácticas. +og_title: Recuperar DOCX corrupto – Guía paso a paso en C# +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Recuperar DOCX corruptos – Guía completa en C# para reparar y guardar archivos +url: /es/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Recuperar DOCX corrupto – Guía completa en C# para reparar y guardar archivos + +¿Alguna vez intentaste abrir un DOCX que se ve bien en el Explorador pero lanza una excepción en tu aplicación? Ese es el clásico “archivo Word corrupto” de pesadilla, y suele terminar con una traza de pila que no quieres ver. ¿La buena noticia? Aspose.Words te ofrece una función **recover corrupted docx** que te permite seguir trabajando incluso cuando el archivo está dañado. + +En este tutorial recorreremos paso a paso cómo cargar un documento dañado, indicarle a la biblioteca que continúe y luego **save recovered document** a un nuevo archivo limpio. Al final sabrás por qué el modo de recuperación es importante, cómo configurarlo y qué trampas evitar—sin atajos vagos de “ver la documentación”. + +## Lo que necesitarás + +- **Aspose.Words for .NET** (cualquier versión reciente; se usó la 24.11 al escribir esta guía) +- Un entorno de desarrollo .NET (Visual Studio, Rider o VS Code con la extensión C#) +- Un DOCX de muestra que sospeches está corrupto (puedes corromper un archivo abriéndolo en un editor zip y eliminando una parte, solo para probar) +- Conocimientos básicos de C#—nada sofisticado, solo la capacidad de crear una aplicación de consola + +Si ya tienes todo eso, genial—pasemos directamente a la solución. + +## Paso 1: Configurar LoadOptions con la estrategia de recuperación adecuada + +El corazón de la solución es el objeto `LoadOptions`. Le indica a Aspose.Words cómo comportarse cuando encuentra XML mal formado o partes faltantes dentro del paquete DOCX. La bandera `RecoveryMode.RecoverAndContinue` es la más tolerante—intenta rescatar lo que pueda y omite el resto. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Por qué importa:** Si omites `LoadOptions` o usas el modo predeterminado (`RecoveryMode.NoRecovery`), el constructor `Document` lanzará una excepción en el momento en que detecte un problema. Con `RecoverAndContinue`, la API absorbe los errores no críticos y construye un objeto `Document` parcial con el que aún puedes trabajar. + +> **Consejo profesional:** Para lotes enormes de archivos, considera envolver la llamada de carga en un bloque `try/catch` de todos modos—algunos errores son realmente fatales (p. ej., falta el archivo `[Content_Types].xml`) y no pueden recuperarse. + +## Paso 2: Cargar el DOCX potencialmente corrupto + +Ahora que las opciones están listas, carga tu archivo. El constructor recibe la ruta del archivo y el `LoadOptions` que acabamos de preparar. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**¿Qué ocurre bajo el capó?** +Aspose.Words analiza el contenedor ZIP, lee cada parte XML y trata de reconstruir el DOM Open XML. Cuando encuentra una parte dañada, el motor de recuperación registra una advertencia (visible en la consola si habilitas diagnósticos) y continúa. El objeto `Document` resultante puede carecer de algunos párrafos o imágenes, pero el resto del contenido permanece intacto. + +## Paso 3: Verificar el contenido recuperado (Opcional pero recomendado) + +Antes de escribir el archivo en disco, es prudente inspeccionar algunos nodos para asegurarse de que las secciones importantes sobrevivieron. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Si la salida tiene sentido, has **recover corrupted docx** con éxito. Si notas secciones faltantes, aún puedes decidir si continuar—a veces los fragmentos perdidos son solo decorativos. + +## Paso 4: Guardar el documento recuperado + +Esta es la parte que la mayoría de los desarrolladores pregunta: “¿Cómo **save recovered document** sin volver a introducir la corrupción original?” La respuesta es simplemente llamar a `Document.Save` con una ruta nueva. Aspose.Words escribe un paquete ZIP totalmente nuevo, por lo que cualquier parte rota que quedara queda atrás. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Por qué funciona:** El método `Save` serializa el DOM en memoria de vuelta a un paquete Open XML limpio. Como los fragmentos rotos nunca se cargaron en el DOM (se descartaron durante la recuperación), no aparecen en el nuevo archivo. El resultado es un DOCX saludable que se abre en Word, Google Docs o cualquier otro visor. + +## Paso 5: Automatizar el proceso para varios archivos (Bonus) + +En escenarios reales a menudo tienes una carpeta llena de archivos problemáticos. Envuelve los pasos anteriores en un bucle y tendrás una pequeña utilidad de recuperación. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Ahora puedes arrastrar un directorio completo de DOCX rotos a `C:\Docs\Batch` y dejar que el script los limpie automáticamente. + +## Preguntas frecuentes y casos límite + +| Pregunta | Respuesta | +|----------|-----------| +| **¿Esto funciona con archivos .doc?** | La misma clase `LoadOptions` se aplica, pero debes referenciar el formato Word antiguo (`doc`). Aspose.Words aún puede recuperar, aunque los patrones de error difieren. | +| **¿Qué pasa si el archivo está protegido con contraseña?** | La recuperación no omite el cifrado. Debes proporcionar la contraseña mediante `LoadOptions.Password`. | +| **¿Se perderán las imágenes?** | Solo se omitirán las imágenes que formen parte de una parte XML corrupta. El resto se conserva porque se almacenan como flujos binarios separados. | +| **¿Puedo registrar las advertencias que genera Aspose?** | Sí—establece `LoadOptions.LoadFormat` a `LoadFormat.Docx` y suscríbete a `Document.WarningCallback` para capturar mensajes detallados. | +| **¿Es `RecoverAndContinue` seguro para producción?** | En general sí, pero pruébalo con tus datos. En pipelines críticos podrías marcar los documentos que requirieron recuperación para revisarlos después. | + +## Ejemplo completo (Listo para copiar y pegar) + +A continuación tienes el programa completo que puedes compilar como una aplicación de consola. Incluye todos los pasos, manejo de errores y lógica opcional para procesamiento por lotes. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Resultado esperado:** Después de ejecutar el programa, `Recovered.docx` se abre en Microsoft Word sin el cuadro de error original. Cualquier parte que estuviera demasiado dañada simplemente se omite, pero el cuerpo principal, los encabezados y la mayoría de las imágenes permanecen intactos. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Conclusión + +Hemos cubierto todo lo necesario para **recover corrupted docx** usando Aspose.Words, desde la configuración de `LoadOptions` hasta guardar de forma segura **save recovered document**. Los puntos clave son: + +- Usa `RecoveryMode.RecoverAndContinue` para que la biblioteca ignore errores no críticos. +- Verifica el contenido cargado antes de guardarlo, especialmente cuando trabajas con documentos críticos de negocio. +- Guardar el documento genera un paquete ZIP limpio, eliminando efectivamente la corrupción original. +- El mismo patrón escala a operaciones por lotes, permitiendo la limpieza automática de grandes repositorios de documentos. + +¿Listo para el siguiente paso? Prueba integrar esta lógica en un servicio en segundo plano que monitoree una carpeta de carga, o experimenta con `WarningCallback` para crear un informe de los archivos que necesitaron recuperación. Cuanto más juegues con la API, más apreciarás la robustez de Aspose.Words para el procesamiento de documentos en el mundo real. + +¿Tienes alguna variante que quieras compartir—tal vez manejo de archivos protegidos con contraseña o combinación de documentos recuperados? Deja un comentario abajo y sigamos la conversación. ¡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/programming-with-markdownsaveoptions/_index.md b/words/spanish/net/programming-with-markdownsaveoptions/_index.md index bc76e03596..71a3cc0436 100644 --- a/words/spanish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/spanish/net/programming-with-markdownsaveoptions/_index.md @@ -33,6 +33,7 @@ Procesamiento de textos con MarkdownSaveOptions es un recurso detallado que te g ### [Crear PDF accesible y convertir Word a Markdown – Guía completa en C#](./create-accessible-pdf-and-convert-word-to-markdown-full-c-gu/) Aprenda a generar PDFs accesibles y convertir documentos Word a Markdown usando C# y Aspose.Words para .NET. ### [Cómo guardar Markdown desde DOCX – Guía paso a paso](./how-to-save-markdown-from-docx-step-by-step-guide/) Aprenda a guardar documentos DOCX como archivos Markdown paso a paso con Aspose.Words para .NET. ### [Cómo exportar Markdown desde DOCX – Guía completa](./how-to-export-markdown-from-docx-complete-guide/) Aprenda a exportar contenido de archivos DOCX a formato Markdown con una guía completa usando Aspose.Words para .NET. +### [Guardar Word como Markdown con carpeta de imágenes personalizada – Guía completa](./save-word-as-markdown-with-custom-image-folder-full-guide/) Aprenda a guardar documentos Word como Markdown especificando una carpeta personalizada para las imágenes usando Aspose.Words para .NET. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/spanish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..e15f42db0a --- /dev/null +++ b/words/spanish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-04-07 +description: Guarda Word como Markdown y extrae imágenes del docx usando una devolución + de llamada. Aprende cómo usar la devolución de llamada para almacenar la carpeta + de imágenes de Markdown de manera eficiente. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: es +og_description: Guardar Word como Markdown y extraer imágenes de docx usando una devolución + de llamada. Esta guía muestra cómo usar la devolución de llamada para crear una + carpeta de imágenes Markdown. +og_title: Guardar Word como Markdown – Guía completa paso a paso +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Guardar Word como Markdown con carpeta de imágenes personalizada – Guía completa +url: /es/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Guardar Word como Markdown – Guía completa paso a paso + +¿Alguna vez necesitaste **guardar Word como Markdown** pero no sabías qué hacer con las imágenes incrustadas? No estás solo. En muchos proyectos la salida markdown se ve genial—*hasta* que te das cuenta de que los enlaces a las imágenes están rotos porque los archivos nunca salieron del paquete de Word. + +La buena noticia es que Aspose.Words te ofrece una forma limpia de **extraer imágenes de docx** y colocarlas exactamente donde quieras, usando un **callback** que te permite controlar la carpeta de imágenes del markdown. En este tutorial recorreremos todo el proceso, desde cargar un archivo `.docx` hasta terminar con una carpeta ordenada de PNGs (o el formato que tengas) y un archivo markdown que apunta a ellos. + +Al final de esta guía podrás: + +* Convertir cualquier documento de Word a Markdown con una sola línea de código. +* Volcar automáticamente cada imagen en una sub‑carpeta `images` dedicada. +* Personalizar los nombres de archivo para que nunca entren en conflicto, incluso cuando la fuente contiene docenas de imágenes. + +Sin scripts externos, sin copiar‑pegar manualmente—solo puro C# y Aspose.Words. + +## Prerrequisitos + +Antes de sumergirnos, asegúrate de tener: + +* **Aspose.Words for .NET** (la última versión estable; al momento de escribir es la 24.9). +* Un entorno de desarrollo .NET (Visual Studio, Rider o la CLI `dotnet`). +* Un documento Word (`.docx`) que contenga al menos una imagen—llámalo `DocWithImages.docx`. + +Si nunca has usado Aspose.Words antes, no te preocupes. La biblioteca es totalmente administrada, no requiere interop COM y funciona en .NET 6+ así como en .NET Framework 4.8. + +## Paso 1 – Configurar el proyecto e instalar el paquete + +Primero, crea una nueva aplicación de consola (o agrega el código a un proyecto existente). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Consejo profesional:** Si apuntas a .NET 6, el `Program.cs` predeterminado ya usa sentencias de nivel superior, lo que mantiene el ejemplo conciso. + +## Paso 2 – Crear un callback para controlar el guardado de imágenes + +Aspose.Words llama a `IResourceSavingCallback.ResourceSaving` por cada recurso externo que necesita escribir (imágenes, CSS, etc.). Al implementar esta interfaz obtenemos plena autoridad sobre **cómo se construye la carpeta de imágenes del markdown**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### ¿Por qué usar un callback? + +* **Control granular** – tú decides la estructura de carpetas y el esquema de nombres. +* **Rendimiento** – escribes el flujo una sola vez, evitando la escritura doble de la biblioteca. +* **Flexibilidad** – puedes añadir registro, optimización de imágenes o incluso subirlas a almacenamiento en la nube en este punto. + +## Paso 3 – Cargar el documento Word + +Ahora que el callback está listo, solo necesitamos apuntar Aspose.Words al archivo fuente. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **¿Qué pasa si el archivo no se encuentra?** +> `Document` lanzará una `FileNotFoundException`. Envuelve la carga en un `try/catch` si esperas rutas dinámicas. + +## Paso 4 – Configurar MarkdownSaveOptions + +La clase `MarkdownSaveOptions` nos permite conectar el callback que acabamos de crear. También establecemos la carpeta donde vivirán las imágenes respecto al archivo markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +La propiedad `ImagesFolder` indica a Aspose que genere enlaces markdown como `![Alt text](images/img_123.png)`. Como también establecemos `ResourceFileName` dentro del callback, el archivo real se coloca exactamente allí. + +## Paso 5 – Guardar como Markdown y verificar el resultado + +Finalmente, escribimos el archivo markdown. El callback ya habrá poblado la sub‑carpeta `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Salida esperada + +Ejecutar el programa debería imprimir algo como: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Abre `Doc.md` en cualquier visor de markdown; verás enlaces a imágenes que apuntan correctamente a la carpeta `images`. + +--- + +## Preguntas frecuentes (FAQ) + +### ¿Cómo **extraer imágenes de docx** sin convertir a markdown? + +Puedes reutilizar el mismo `MyMarkdownResourceCallback` pero pasarlo a `doc.Save("images.zip", SaveFormat.Zip)`. El callback seguirá disparándose por cada imagen, permitiéndote colocarlas donde desees. + +### ¿Qué pasa si necesito **diferentes formatos de imagen**? + +`args.FileName` ya contiene la extensión original (`.png`, `.jpg`, etc.). Si debes convertir todas las imágenes a un único formato, añade un paso de conversión dentro de `ResourceSaving` antes de escribir el flujo. + +### ¿Puedo **personalizar la carpeta de imágenes del markdown** por documento? + +Claro. El callback recibe la ruta de la carpeta a través de su constructor, por lo que puedes instanciar un nuevo callback con una carpeta distinta para cada documento en un proceso por lotes. + +### ¿Esto funciona con **documentos grandes** (cientos de imágenes)? + +Sí. El callback transmite la imagen directamente al disco, manteniendo bajo el uso de memoria. Solo asegúrate de que la unidad de destino tenga suficiente espacio y de que no estés alcanzando los límites de manejadores de archivos del SO. + +--- + +## Ejemplo completo funcional + +A continuación tienes el programa completo, listo para copiar y pegar. Reemplaza `YOUR_DIRECTORY` con una ruta absoluta o relativa que se ajuste a tu entorno. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Ejecuta el programa (`dotnet run`) y verás un `Doc.md` recién creado junto a una sub‑carpeta `images` que contiene + +{{< /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-officemath/_index.md b/words/spanish/net/programming-with-officemath/_index.md index 3b35130a9a..349389ca4e 100644 --- a/words/spanish/net/programming-with-officemath/_index.md +++ b/words/spanish/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ Los tutoriales de Aspose.Words para .NET sobre procesamiento de textos con Offic | Título | Descripción | | --- | --- | | [Ecuaciones matemáticas](./math-equations/) Aprenda a configurar ecuaciones matemáticas en documentos de Word con Aspose.Words para .NET. Guía paso a paso con ejemplos, preguntas frecuentes y más. - +| [Guardar docx como txt – Exportar Word Math a LaTeX en C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) Aprenda a guardar documentos DOCX como archivos TXT y exportar ecuaciones Word Math a LaTeX usando C# y Aspose.Words. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/spanish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..4270a1f71f --- /dev/null +++ b/words/spanish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: Guarda docx como txt rápidamente y aprende cómo exportar matemáticas + a LaTeX. Convierte Word a txt, maneja Office Math y conserva las ecuaciones intactas. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: es +og_description: Guarda docx como txt con exportación de matemáticas en LaTeX. Un tutorial + paso a paso en C# que muestra cómo convertir Word a txt y conservar las ecuaciones. +og_title: Guardar docx como txt – Guía de C# para exportar ecuaciones de Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Guardar docx como txt – Exportar matemáticas de Word a LaTeX en C# +url: /es/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Guardar docx como txt – Exportar matemáticas de Word a LaTeX en C# + +¿Alguna vez necesitaste **guardar docx como txt** pero temías que tus ecuaciones se convirtieran en un desastre de símbolos? No estás solo. Muchos desarrolladores se topan con ese problema cuando intentan **convertir word a txt** para procesamiento posterior, especialmente cuando la fuente contiene objetos Office Math. + +¿La buena noticia? Con unas pocas líneas de C# y las opciones de guardado correctas, puedes preservar cada ecuación como LaTeX limpio, haciendo que el archivo de texto plano sea legible por humanos y listo para pipelines científicos. En este tutorial recorreremos todo el proceso, responderemos *cómo exportar matemáticas* de un archivo Word, y te mostraremos *cómo convertir docx* sin perder fidelidad matemática. + +## Lo que aprenderás + +- Cargar un archivo `.docx` usando Aspose.Words (o cualquier biblioteca compatible). +- Configurar `TxtSaveOptions` para que Office Math se exporte como LaTeX. +- Guardar el documento como un archivo `.txt` que mantenga las ecuaciones intactas. +- Consejos para manejar casos extremos como ecuaciones ocultas o documentos grandes. +- Un ejemplo de código completo y ejecutable que puedes copiar y pegar ahora mismo. + +Sin herramientas de compilación sofisticadas, solo un proyecto .NET y el paquete NuGet Aspose.Words. Comencemos. + +--- + +## Requisitos previos + +| Requisito | Por qué es importante | +|-----------|------------------------| +| .NET 6.0 o posterior | Características modernas del lenguaje y mejor rendimiento. | +| Aspose.Words para .NET (NuGet) | Proporciona `Document`, `TxtSaveOptions` y `OfficeMathExportMode`. | +| Un archivo Word (`.docx`) que contiene ecuaciones | Para ver la exportación a LaTeX en acción. | +| Conocimientos básicos de C# | Seguirás el código línea por línea. | + +Si aún no has añadido Aspose.Words, ejecuta: + +```bash +dotnet add package Aspose.Words +``` + +Eso es todo—no se necesita configuración adicional. + +## Paso 1: Cargar el archivo DOCX + +Primero, necesitamos cargar el documento fuente en memoria. Piensa en esto como abrir un libro antes de comenzar a leer. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Consejo profesional:** Usa una ruta absoluta durante las pruebas para evitar sorpresas de “archivo no encontrado”. En producción probablemente recibirás la ruta de un archivo de configuración o de una carga de usuario. + +## Paso 2: Configurar las opciones de guardado TXT para la exportación de matemáticas + +Por defecto, `TxtSaveOptions` genera texto plano y elimina Office Math. No queremos eso. Configurar `OfficeMathExportMode` a `LaTeX` indica a la biblioteca que traduzca cada ecuación a su representación LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### ¿Por qué LaTeX? + +LaTeX es la lengua franca de la publicación científica. Cuando más adelante introduzcas el `.txt` en un procesador markdown, Jupyter notebook o cualquier herramienta compatible con LaTeX, las ecuaciones se renderizarán perfectamente. Si prefieres símbolos Unicode simples, podrías cambiar a `OfficeMathExportMode.Ununicode`, pero LaTeX te brinda el mayor control. + +## Paso 3: Guardar el documento como archivo de texto plano + +Ahora ocurre la magia. El método `Save` escribe el documento en disco usando las opciones que acabamos de definir. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Después de que se ejecute esta línea, `Math.txt` contendrá: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Observa cómo la ecuación aparece dentro de `\[` y `\]`—exactamente lo que LaTeX espera. + +## Cómo exportar matemáticas de documentos complejos + +### Manejo de ecuaciones ocultas o en línea + +Algunos archivos Word almacenan ecuaciones dentro de marcos de texto ocultos. Aspose.Words las trata igual que las ecuaciones visibles, por lo que la exportación a LaTeX funciona automáticamente. Sin embargo, si notas ecuaciones faltantes, verifica que el objeto `Document` no esté configurado para ignorar contenido oculto: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Documentos grandes y uso de memoria + +Guardar una tesis de 500 páginas puede consumir mucha RAM. Para mantener bajo el consumo de memoria, puedes transmitir la salida: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +El streaming escribe fragmentos en disco a medida que se generan, evitando que todo el archivo resida en memoria simultáneamente. + +## Errores comunes y cómo evitarlos + +| Error | Síntoma | Solución | +|-------|---------|----------| +| Faltan corchetes LaTeX | Las ecuaciones aparecen como código sin procesar (`E = mc^{2}`) | Asegúrate de que `OfficeMathExportMode = LaTeX`. | +| Archivo de salida vacío | Ruta incorrecta o permisos insuficientes | Verifica que el directorio de salida exista y tenga permisos de escritura. | +| Caracteres distorsionados | Archivo codificado en UTF‑8 sin BOM en un sistema que espera ANSI | Añade `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Las ecuaciones desaparecen después de la conversión | Documento cargado con `LoadOptions` que excluyen matemáticas | Usa `LoadOptions` por defecto o establece `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## Ejemplo completo y funcional + +A continuación se muestra el programa completo que puedes compilar y ejecutar. Incluye manejo de errores, validación de rutas y un pequeño registro en consola para que sepas que todo se completó con éxito. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Salida esperada** (extracto de `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Ahora puedes introducir este archivo en cualquier procesador compatible con LaTeX, y las ecuaciones se renderizarán hermosamente. + +## Cómo convertir DOCX a TXT sin perder el formato + +Si solo necesitas texto plano y no te importa la matemática, simplemente omite la línea `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Pero recuerda, **cómo exportar matemáticas** es el diferenciador para flujos de trabajo científicos. Mantener LaTeX intacto es lo que hace que la conversión sea realmente útil. + +## Próximos pasos y temas relacionados + +- **Conversión por lotes:** Envuelve el código en un bucle `foreach` para procesar una carpeta completa de archivos `.docx`. +- **Generación de Markdown:** Añade encabezados `#` o viñetas `*` al texto para producir markdown listo para publicar. +- **Exportación a PDF:** Usa `PdfSaveOptions` para crear una versión PDF junto al txt. +- **Ajustes avanzados de LaTeX:** Procesa la salida con expresiones regulares para reemplazar `\[`/`\]` por `$...$` para ecuaciones en línea. + +Cada uno de estos se basa en la misma base: cargar un `Document` y elegir las `SaveOptions` correctas. Siéntete libre de experimentar; la API es lo suficientemente flexible para la mayoría de los escenarios de automatización de documentos. + +## Conclusión + +Hemos cubierto todo lo que necesitas para **guardar docx como txt** mientras preservas cada ecuación en LaTeX. Desde cargar el archivo fuente, configurar `TxtSaveOptions` para **cómo exportar matemáticas**, hasta escribir el archivo de texto plano final, todo el flujo de trabajo cabe en un puñado de concisas instrucciones C#. + +Ahora puedes automatizar la conversión de informes Word, artículos académicos o cualquier documento que mezcle texto y matemáticas, y alimentar el `.txt` resultante a herramientas posteriores sin perder ningún detalle científico. + +Pruébalo, ajusta las opciones para tu caso de uso y cuéntanos en los comentarios cómo te funcionó. ¡Feliz codificación! + +![Diagrama que muestra la canalización de conversión de DOCX → procesamiento C# → TXT con matemáticas LaTeX](https://example.com/images/save-docx-as-txt.png "canalización de guardar docx como txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/spanish/net/programming-with-pdfsaveoptions/_index.md index 925b3d7eb2..8f08566b22 100644 --- a/words/spanish/net/programming-with-pdfsaveoptions/_index.md +++ b/words/spanish/net/programming-with-pdfsaveoptions/_index.md @@ -29,7 +29,7 @@ Si desea convertir documentos de Word a PDF para distribuirlos en línea, archiv | [Agregar firma digital a PDF usando el titular del certificado](./digitally-signed-pdf-using-certificate-holder/) Proteja sus archivos PDF con una firma digital usando Aspose.Words para .NET. Siga esta guía paso a paso para agregar una firma digital a sus PDF fácilmente. | [Incrustar fuentes en un documento PDF](./embedded-all-fonts/) Incruste fuentes en documentos PDF fácilmente con Aspose.Words para .NET con esta guía detallada paso a paso. Asegúrese de que la apariencia sea uniforme en todos los dispositivos. | [Incrustar subconjuntos de fuentes en un documento PDF](./embedded-subset-fonts/) Reduzca el tamaño de sus archivos PDF incrustando solo los subconjuntos de fuentes necesarios con Aspose.Words para .NET. Siga nuestra guía paso a paso para optimizar sus archivos PDF eficientemente. -| [Reducir el tamaño del PDF deshabilitando las fuentes incrustadas](./disable-embed-windows-fonts/) Reduzca el tamaño de sus archivos PDF deshabilitando las fuentes incrustadas con Aspose.Words para .NET. Siga nuestra guía paso a paso para optimizar sus documentos y optimizar su almacenamiento y uso compartido. +| [Reducir el tamaño del PDF deshabilitando las fuentes incrustadas](./disable-embed-windows-fonts/) Reduzca el tamaño de sus archivos PDF deshabilitando las fuentes incrustadas con Aspose.Words para .NET. Siga la guía paso a paso para optimizar sus documentos y optimizar su almacenamiento y uso compartido. | [Optimice el tamaño de PDF con fuentes Arial y Times Roman incrustadas](./skip-embedded-arial-and-times-roman-fonts/) Optimice el tamaño de sus archivos PDF omitiendo las fuentes Arial y Times Roman incrustadas con Aspose.Words para .NET. Siga esta guía paso a paso para optimizar sus archivos PDF. | [Reducir el tamaño del archivo PDF al no incrustar fuentes principales](./avoid-embedding-core-fonts/) Aprenda a reducir el tamaño de sus archivos PDF sin incrustar fuentes principales con Aspose.Words para .NET. Siga nuestra guía paso a paso para optimizar sus archivos PDF. | [Escapar URI en un documento PDF](./escape-uri/) Aprenda a escapar URIs en archivos PDF con Aspose.Words para .NET. Esta guía detallada le guiará paso a paso por el proceso. @@ -45,7 +45,7 @@ Si desea convertir documentos de Word a PDF para distribuirlos en línea, archiv | [Actualizar la última propiedad impresa en un documento PDF](./update-last-printed-property/) | Aprenda a actualizar la última propiedad impresa en un documento PDF usando Aspose.Words para .NET con nuestra guía paso a paso. | | [Renderizar efectos 3D DML 3D en un documento PDF](./dml-3deffects-rendering/) | Aprenda a renderizar impresionantes efectos DML 3D en documentos PDF usando Aspose.Words para .NET con esta completa guía paso a paso. | | [Interpolar imágenes en un documento PDF](./interpolate-images/) Aprenda a interpolar imágenes en un documento PDF con Aspose.Words para .NET con nuestra guía paso a paso. Mejore fácilmente la calidad de imagen de su PDF. - +| [Crear PDF accesible desde Word – Guía paso a paso](./create-accessible-pdf-from-word-step-by-step-guide/) | Aprenda a crear PDFs accesibles a partir de 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/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/spanish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..2876841afa --- /dev/null +++ b/words/spanish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Crear PDF accesible a partir de un archivo DOCX en C#. Aprende cómo convertir + Word a PDF, guardar el DOCX como PDF y garantizar el cumplimiento de PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: es +og_description: Crea PDF accesible desde Word en C#. Esta guía muestra cómo convertir + Word a PDF, guardar docx como PDF y cumplir con los estándares PDF/UA. +og_title: Crear PDF accesible – Tutorial completo de C# +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Crear PDF accesible desde Word – Guía paso a paso +url: /es/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Crear PDF accesible desde Word – Tutorial de programación completo + +¿Alguna vez necesitó **crear PDF accesible** a partir de un documento Word pero no estaba seguro de qué configuraciones ajustar? No está solo. En muchas empresas, el cumplimiento de PDF/UA (Accesibilidad Universal) es un requisito estricto, y el botón habitual de “convertir a PDF” simplemente no es suficiente. + +En esta guía recorreremos una solución concisa y de extremo a extremo que **convierte Word a PDF**, **guarda docx como PDF**, y garantiza que la salida cumpla con los estándares de accesibilidad. Sin referencias vagas—solo el código que puede copiar y pegar, más el “por qué” detrás de cada línea. + +> **TL;DR:** Cargue un `.docx`, establezca `PdfSaveOptions.Compliance` a `PdfUa1` (o `PdfUa2`), y llame a `Document.Save`. Eso es todo lo que necesita para **crear PDF accesible** con Aspose.Words para .NET. + +--- + +## Lo que aprenderá + +- Cómo **convertir Word a PDF** preservando encabezados, texto alternativo y el orden de lectura. +- La diferencia entre `PdfUa1` y `PdfUa2` y cuándo elegir cada uno. +- Cómo **guardar docx como PDF** usando solo unas pocas líneas de C#. +- Problemas comunes (fuentes faltantes, etiquetas no compatibles) y soluciones rápidas. +- Un ejemplo de código listo para ejecutar que puede insertar en cualquier proyecto .NET. + +### Requisitos previos + +- .NET 6 o posterior (el código también funciona en .NET Framework 4.7+). +- Aspose.Words para .NET instalado vía NuGet (`Install-Package Aspose.Words`). +- Un archivo Word (`input.docx`) que ya contiene una estructura adecuada (estilos, texto alternativo para imágenes). + +Si aún no ha agregado Aspose.Words, ejecute el siguiente comando en la Consola del Administrador de Paquetes: + +```powershell +Install-Package Aspose.Words +``` + +Esa es la única dependencia externa que necesita. + +--- + +## Crear PDF accesible – Por qué la accesibilidad es importante + +Cuando un PDF está marcado como **PDF/UA** (Accesibilidad Universal), los lectores de pantalla pueden navegar por encabezados, tablas y campos de formulario al igual que lo harían en el archivo Word original. Esto no es solo una característica deseable; muchos gobiernos y corporaciones consideran el cumplimiento de PDF/UA como un requisito legal. + +Establecer la propiedad `Compliance` en `PdfSaveOptions` indica a la biblioteca que inserte las etiquetas necesarias, establezca el idioma correcto del documento y añada un orden de lectura lógico. Omitir este paso produce un PDF “solo visual” que falla en auditorías de accesibilidad. + +--- + +## Convertir Word a PDF con Aspose.Words + +A continuación se muestra la forma más sencilla de **convertir Word a PDF** manteniendo el documento accesible. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**¿Qué está sucediendo aquí?** + +- `Document` lee el archivo Word, preservando todos los estilos y la estructura. +- `PdfSaveOptions.Compliance` indica a Aspose.Words que etiquete la salida como PDF/UA. +- `doc.Save` escribe el PDF en disco, insertando las etiquetas automáticamente. + +> **Consejo profesional:** Si su archivo Word de origen utiliza estilos de encabezado personalizados, asegúrese de que estén mapeados a los niveles de encabezado incorporados (`Heading1`, `Heading2`, …). Eso garantiza que el PDF generado obtenga etiquetas de encabezado correctas. + +--- + +## Guardar Docx como PDF – Configurando el cumplimiento PDF/UA + +Si ya está familiarizado con la clase `PdfSaveOptions`, podría preguntarse si existen otros conmutadores que afecten la accesibilidad. Un par de propiedades útiles: + +| Propiedad | Efecto en la accesibilidad | Valor típico | +|----------|----------------------------|--------------| +| `Compliance` | Activa/desactiva el etiquetado PDF/UA | `PdfCompliance.PdfUa1` o `PdfUa2` | +| `EmbedFullFonts` | Garantiza que los lectores vean la tipografía prevista | `true` (predeterminado) | +| `OptimizeOutput` | Reduce el tamaño del archivo sin eliminar etiquetas | `true` | + +Puede ampliar el fragmento anterior de esta manera: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Cambiar a `PdfUa2` agrega soporte para funciones más nuevas de PDF/UA, como el etiquetado *artifact* para imágenes decorativas. Si no necesita esas funciones, manténgase con `PdfUa1` para lograr la máxima compatibilidad con tecnologías de asistencia más antiguas. + +--- + +## Exportar Docx a PDF – Ejemplo completo funcional + +A continuación se muestra una aplicación de consola autónoma que demuestra todo el flujo, desde cargar un archivo hasta verificar la salida. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Resultado esperado + +- Un archivo llamado **Compliant.pdf** aparece en la misma carpeta que el ejecutable. +- Abrir el PDF en Adobe Acrobat Pro → *Herramientas → Accesibilidad → Verificación completa* debería reportar **No hay problemas de accesibilidad** (asumiendo que el archivo Word de origen estaba bien estructurado). +- La pestaña *Propiedades → Avanzado* del PDF mostrará **PDF/UA** bajo la sección “Cumplimiento PDF/A y PDF/UA”. + +--- + +## Casos límite comunes y cómo manejarlos + +| Situación | Por qué es importante | Solución rápida | +|-----------|-----------------------|-----------------| +| **Fuentes faltantes** | El PDF puede recurrir a una fuente predeterminada, rompiendo el diseño visual. | Establezca `EmbedFullFonts = true` (ya es el valor predeterminado) y asegúrese de que los archivos de fuentes sean accesibles en la máquina de compilación. | +| **Imágenes sin texto alternativo** | Los lectores de pantalla leerán “imagen” sin descripción. | Añada `Alt Text` en Word (`Clic derecho → Formato de imagen → Texto alternativo`) antes de la conversión. | +| **Estilos personalizados no reconocidos como encabezados** | PDF/UA necesita etiquetas de encabezado adecuadas. | Mapee los estilos personalizados a los encabezados incorporados mediante `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Documentos grandes generan presión de memoria** | Convertir un archivo de 500 páginas puede aumentar el uso de RAM. | Use `doc.Save(outputPath, options)` con `options.SaveFormat = SaveFormat.Pdf` y considere procesar en fragmentos si se encuentra con `OutOfMemoryException`. | +| **Necesita exportar docx a pdf sin accesibilidad** | A veces solo se desea un PDF visual rápido. | Omitir la configuración `Compliance` o establecerla en `PdfCompliance.Pdf15`. | + +--- + +## Ejemplo de imagen (texto alternativo incluido) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*El texto alternativo anterior refuerza la palabra clave principal y ayuda tanto a los usuarios como a los modelos de IA a comprender el contexto de la imagen.* + +--- + +## Preguntas frecuentes + +**P: ¿Esto funciona con .NET Core?** +**R:** Absolutamente. Aspose.Words es multiplataforma; solo haga referencia al paquete NuGet en su proyecto .NET 6+. + +**P: ¿Puedo procesar por lotes varios archivos DOCX?** +**R:** Sí. Envuelva la lógica de carga y guardado dentro de un bucle `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Recuerde reutilizar una única instancia de `PdfSaveOptions` para mejorar el rendimiento. + +**P: ¿Qué pasa si necesito agregar una etiqueta PDF/UA personalizada que Aspose no genera automáticamente?** +**R:** Use la API PDF de bajo nivel (`PdfSaveOptions.CustomProperties`) o post‑procese el PDF con una biblioteca como iText 7 que permite la inserción manual de etiquetas. + +--- + +## Conclusión + +Usted + +{{< /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 7e48c7dc00..5a350e7214 100644 --- a/words/spanish/net/working-with-fonts/_index.md +++ b/words/spanish/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ Ya sea que desee formatear texto con diferentes fuentes, establecer reglas de su | [Recibir notificación de advertencia](./receive-warning-notification/) Aprenda cómo recibir una notificación de advertencia al usar Aspose.Words para .NET y administrar cualquier problema o advertencia en sus documentos. | | [Ejemplo de fuente de recurso de Steam](./resource-steam-font-source-example/) | Aprenda a utilizar la fuente de flujo de recursos para cargar fuentes personalizadas en Aspose.Words para .NET. | | [Obtener sustitución sin sufijos](./get-substitution-without-suffixes/) | En este tutorial, aprenda cómo obtener anulaciones sin sufijos en un documento de Word con Aspose.Words para .NET. - +| [Cómo detectar fuentes en Aspose.Words – Guía completa](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Aprenda a detectar fuentes en documentos Word con Aspose.Words para .NET mediante esta guía completa paso a paso. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/spanish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/spanish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..31b663722f --- /dev/null +++ b/words/spanish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,281 @@ +--- +category: general +date: 2026-04-07 +description: Aprende a detectar fuentes y a capturar advertencias al manejar fuentes + faltantes en C# usando Aspose.Words. Código paso a paso incluido. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: es +og_description: ¿Cómo detectar fuentes en Aspose.Words? Sigue este tutorial para capturar + advertencias y manejar fuentes faltantes sin esfuerzo. +og_title: Cómo detectar fuentes en Aspose.Words – Guía completa +tags: +- Aspose.Words +- C# +- Font handling +title: Cómo detectar fuentes en Aspose.Words – Guía completa +url: /es/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cómo Detectar Fuentes en Aspose.Words – Guía Completa + +¿Alguna vez te has preguntado **cómo detectar fuentes** que faltan en un documento Word antes de enviarlo a producción? No estás solo. En muchos escenarios empresariales una fuente extraviada puede romper una canalización de conversión a PDF o causar fallos de maquetación que se ven poco profesionales. La buena noticia es que Aspose.Words te ofrece una forma integrada de identificar esas tipografías ausentes y mostrar advertencias claras. + +En este tutorial recorreremos paso a paso **cómo detectar fuentes**, **cómo capturar advertencias**, y las mejores prácticas para **manejar fuentes faltantes** de modo que tu aplicación siga siendo robusta. Sin herramientas externas, sin conjeturas—solo código C# puro que puedes incorporar a tu proyecto ahora mismo. + +> **Vista rápida:** Al final tendrás un `FontSubstitutionWarningCollector` reutilizable que recopila cada mensaje de sustitución de fuente durante la carga del documento, y sabrás cómo reaccionar cuando una fuente no se encuentre. + +--- + +## Qué Aprenderás + +- Cómo configurar `LoadOptions` para escuchar advertencias de sustitución de fuentes. +- Cómo capturar esas advertencias en una clase colectora personalizada. +- Cómo procesar las advertencias recopiladas y decidir si abortar, registrar o sustituir fuentes. +- Manejo de casos límite para documentos que referencian fuentes remotas o incrustadas. + +**Requisitos previos:** .NET 6+ (o .NET Framework 4.6+), Aspose.Words para .NET (última versión), y una familiaridad básica con C#. Si nunca has usado Aspose.Words, no te preocupes—esta guía asume solo unos minutos de configuración. + +--- + +## Cómo Detectar Fuentes Usando Aspose.Words LoadOptions + +El primer paso para detectar fuentes faltantes es indicarle a Aspose.Words que las informe. Esto se hace mediante la propiedad `LoadOptions.WarningCallback`, que acepta cualquier clase que implemente `IWarningCallback`. A continuación creamos un pequeño colector que almacena cada advertencia para inspección posterior. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Por qué es importante:** Sin una devolución de llamada de advertencia, Aspose.Words sustituye silenciosamente las fuentes faltantes por una predeterminada, y nunca sabrás que existe un problema. Al capturar `WarningType.FontSubstitution` obtenemos visibilidad total—exactamente los datos que necesitas para **detectar fuentes** que no están disponibles en la máquina host. + +Ahora enlazamos el colector a `LoadOptions` y cargamos un documento: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Consejo profesional:** Si trabajas con muchos documentos en lote, reutiliza la misma instancia de `FontSubstitutionWarningCollector` pero recuerda llamar a `Clear()` entre cargas para evitar mezclar advertencias de archivos diferentes. + +--- + +## Capturar Advertencias Durante la Carga del Documento + +Una vez que el documento está cargado, el colector ya contiene cada advertencia relacionada con fuentes. La siguiente pregunta lógica es: *¿Cómo capturo las advertencias* de forma que sea fácil registrarlas o mostrarlas? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Una salida típica se ve así: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Qué te indica esto:** Cada línea revela el nombre original de la fuente y la alternativa que Aspose.Words eligió. Con esta información puedes decidir si la alternativa es aceptable o si necesitas incrustar manualmente la fuente faltante. + +--- + +## Manejar Fuentes Faltantes de Forma Elegante + +Detectar y capturar advertencias es solo la mitad de la batalla. El verdadero valor aparece cuando **manejas fuentes faltantes** de manera preparada para producción. A continuación, tres estrategias comunes: + +1. **Registrar y Continuar** – Adecuado para procesamiento por lotes donde solo necesitas un registro de auditoría. +2. **Abortar con Fuentes Críticas** – Lanzar una excepción si una fuente particular (p. ej., una tipografía de marca) falta. +3. **Incrustar la Fuente Sobre la Marcha** – Cargar la fuente faltante desde una carpeta conocida y registrarla en Aspose.Words antes de volver a cargar el documento. + +### Ejemplo: Abortando con una Fuente Crítica + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Ejemplo: Auto‑Incrustar Fuentes Faltantes + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Por qué estos patrones ayudan:** Al decidir explícitamente qué hacer cuando una fuente falta, eliminas sustituciones silenciosas que podrían comprometer la identidad de marca o la legibilidad. Esta es la esencia de **manejar fuentes faltantes** de forma controlada. + +--- + +## Ejemplo Completo Funcional + +Uniendo todo, aquí tienes un programa único, listo para ejecutarse, que demuestra **cómo detectar fuentes**, **cómo capturar advertencias**, y una política sencilla para **manejar fuentes faltantes** registrándolas. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Resultado esperado:** Cuando ejecutes el programa contra un documento que haga referencia a una fuente no presente en la máquina, la consola listará cada advertencia de sustitución. Si alguna advertencia involucra una fuente del conjunto `critical`, el programa terminará anticipadamente, evitando generar un PDF defectuoso. + +--- + +## Preguntas Frecuentes (FAQ) + +| Pregunta | Respuesta | +|----------|-----------| +| *¿Necesito una licencia para Aspose.Words para usar este código?* | Sí, una licencia válida de Aspose.Words elimina las marcas de agua de evaluación y desbloquea la funcionalidad completa. | +| *¿Puede este enfoque detectar fuentes incrustadas?* | Las fuentes incrustadas ya forman parte del archivo, por lo que Aspose.Words no generará una advertencia de sustitución. Puedes consultar `Document.FontInfos` para enumerar fuentes incrustadas si lo necesitas. | +| *¿Qué ocurre si la fuente faltante es una fuente del sistema en Windows pero no en Linux?* | La misma advertencia se disparará en Linux porque la fuente no está instalada allí. Usa la estrategia de “manejar fuentes faltantes” para distribuir los archivos `.ttf` necesarios con tu aplicación. | +| *¿El recolector de advertencias es hilo?* | | + +{{< /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 3ae482bcd8..a8ecf98f32 100644 --- a/words/swedish/net/basic-conversions/_index.md +++ b/words/swedish/net/basic-conversions/_index.md @@ -35,6 +35,7 @@ Grundläggande konverteringar guidar dig genom grundläggande dokumentkonverteri | [Exportera LaTeX från Word – steg‑för‑steg‑guide](./how-to-export-latex-from-word-step-by-step-guide/) | Lär dig hur du exporterar LaTeX från ett Word-dokument med Aspose.Words för .NET i en tydlig steg‑för‑steg‑guide. | | [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. | +| [Konvertera DOCX till PDF i C# – Komplett programmeringsguide](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Lär dig steg‑för‑steg hur du konverterar DOCX till PDF i C# med Aspose.Words. Komplett guide med kodexempel. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/swedish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..e43057cafb --- /dev/null +++ b/words/swedish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,204 @@ +--- +category: general +date: 2026-04-07 +description: Konvertera DOCX till PDF i C# snabbt. Lär dig hur du sparar Word som + PDF, laddar docx‑dokument i C# och säkerställer PDF/UA‑2‑efterlevnad på några minuter. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: sv +og_description: Konvertera DOCX till PDF i C# omedelbart. Den här guiden visar hur + du sparar Word som PDF, laddar docx‑dokument i C# och uppfyller PDF/UA‑2‑standarderna. +og_title: Konvertera DOCX till PDF i C# – Steg‑för‑steg guide +tags: +- Aspose.Words +- C# +- PDF Generation +title: Konvertera DOCX till PDF i C# – Komplett programmeringsguide +url: /sv/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Konvertera DOCX till PDF i C# – Komplett programmeringsguide + +Har du någonsin behövt **convert DOCX to PDF** i en C#‑applikation men varit osäker på var du ska börja? Du är inte ensam. Många utvecklare stöter på problem när de upptäcker att en enkel “save as PDF”-knapp i Word inte översätts till kod. Den goda nyheten? Med några rader av Aspose.Words (eller något liknande bibliotek) kan du automatisera hela processen, behålla flytande former inline och till och med uppnå PDF/UA‑2‑kompatibilitet utan ansträngning. + +I den här handledningen kommer du att lära dig hur man **save Word as PDF**, **load docx document C#**, och justerar exportalternativen så att den resulterande filen är redo för tillgänglighetsgranskningar. I slutet har du ett självständigt, körbart program som omvandlar vilken `.docx`‑fil som helst till en ren, standard‑kompatibel PDF. + +> **Varför bry sig?** +> Att konvertera DOCX till PDF är ett vanligt krav för faktureringssystem, rapportgeneratorer och dokumentarkiveringspipeline. Att automatisera det eliminerar manuella steg, minskar mänskliga fel och säkerställer att varje utdata ser exakt likadan ut på alla plattformar. + +--- + +## Vad du behöver + +- **.NET 6.0** eller senare (koden fungerar även på .NET Framework 4.6+) +- **Aspose.Words for .NET** (gratis provversion eller licensierad version) – du kan installera den via NuGet: `dotnet add package Aspose.Words` +- Ett exempel `input.docx` placerat i en mapp du kontrollerar (vi refererar till den som `YOUR_DIRECTORY`) +- Visual Studio, VS Code eller någon C#‑redigerare du föredrar + +Det är allt—inga extra tjänster, inga REST‑anrop. Bara ren C#. + +## Steg 1: Ladda DOCX‑dokumentet i C# + +Innan du kan **convert docx to pdf**, måste du läsa in Word‑filen i minnet. `Document`‑klassen gör det åt dig. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Varför detta är viktigt:** +Att ladda filen ger dig en fullständigt parsad objektmodell—paragrafer, tabeller, flytande former, allt. Det är det första steget i alla **load docx document c#**‑arbetsflöden, och det validerar också att filen inte är korrupt innan du slösar tid på konvertering. + +> **Pro tip:** Om du hanterar användaruppladdade filer, omslut anropet `new Document()` i ett try/catch‑block för att hantera felaktiga DOCX‑filer på ett smidigt sätt. + +## Steg 2: Konfigurera PDF‑spara‑alternativ (Kompatibilitet & Formhantering) + +Du kanske undrar, “Behöver jag justera något, eller kan jag bara anropa `Save`?” Det korta svaret: du kan, men att ställa in rätt alternativ gör PDF‑filen tillgänglig och visuellt trogen. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Varför detta är viktigt:** +- `ExportFloatingShapesAsInlineTag = true` förhindrar att flytande objekt går förlorade eller blir feljusterade när PDF‑filen visas på olika enheter. +- `Compliance = PdfCompliance.PdfUa2` säkerställer att utdata uppfyller PDF/UA‑2‑standarden, vilket är avgörande för skärmläsarkompatibilitet och juridisk arkivering. + +Om du inte behöver tillgänglighet kan du ta bort `Compliance`‑raden, men att behålla den ger nästan ingen extra belastning och framtidssäkrar din lösning. + +## Steg 3: Spara dokumentet som PDF – Kärnhandlingen **Convert DOCX to PDF** + +Nu när dokumentet är laddat och alternativen är inställda, är den faktiska konverteringen ett enda metodanrop. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Vad du kommer att se:** +När du kör programmet skapas `output.pdf` i samma mapp. Öppna den med någon PDF‑visare så märker du att: + +- All text, tabeller och bilder visas exakt som i den ursprungliga DOCX‑filen. +- Flytande former behålls inline, vilket bevarar layouten. +- Filen klarar grundläggande PDF/UA‑2‑valideringsverktyg (t.ex. Adobe Acrobat Preflight). + +## Fullt fungerande exempel – Från topp till botten + +Nedan är en komplett, färdig‑att‑köra konsolapp som demonstrerar hela flödet. Kopiera‑klistra in den i ett nytt C#‑projekt och tryck **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Förväntad utdata i konsolen:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Och en prydlig `output.pdf` ligger bredvid din källfil. + +## Vanliga frågor & kantfall + +| Question | Answer | +|----------|--------| +| **Kan jag konvertera en DOCX som lagras i en `MemoryStream`?** | Absolut. Använd `new Document(stream)` istället för en filsökväg. | +| **Vad händer om DOCX‑filen innehåller makron?** | Aspose.Words ignorerar VBA‑makron som standard; de kommer inte att visas i PDF‑filen. | +| **Behöver jag en licens för produktion?** | Gratisprovversionen lägger till ett vattenmärke efter ett visst antal sidor. För kommersiell användning, skaffa en licens för att ta bort det. | +| **Hur ändrar jag PDF‑sidstorleken?** | Ställ in `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` innan du sparar. | +| **Finns det ett sätt att bädda in ett eget typsnitt?** | Ja—lägg till `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +## Proffstips för en smidig **Save Word as PDF**‑upplevelse + +- **Batch processing:** Omslut konverteringslogiken i en loop och mata den med en lista av DOCX‑sökvägar. +- **Performance:** Återanvänd en enda `PdfSaveOptions`‑instans när du konverterar många filer; det minskar GC‑belastningen. +- **Logging:** Skriv ut storleken på den genererade PDF‑filen (`new FileInfo(outputPath).Length`) för att övervaka komprimeringsresultat. +- **Error handling:** Skilj mellan `FileNotFoundException` (saknad DOCX) och `UnauthorizedAccessException` (problem med skrivbehörighet). + +## Slutsats + +Du har nu ett robust, produktionsklart mönster för att **convert DOCX to PDF** i C#. Genom att ladda DOCX, konfigurera PDF‑spara‑alternativ och anropa `Save` kan du **save Word as PDF**, respektera layoutnyanser och uppfylla tillgänglighetsstandarder—allt på mindre än ett dussin kodrader. + +Redo för nästa utmaning? Prova att byta `PdfSaveOptions` mot `ImageSaveOptions` för att **save Word as PNG**, eller utforska `HtmlSaveOptions`‑klassen för att generera webb‑klar output. Oavsett så gäller samma **load docx document c#**‑grundprinciper, vilket gör din kodbas framtidssäker. + +Lycka till med kodningen, och må dina PDF‑filer alltid vara kompatibla! + +--- + +![Exempel på utdata från Convert DOCX to PDF](convert-docx-to-pdf-output.png "Exempel på utdata från Convert DOCX to 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/swedish/net/programming-with-loadoptions/_index.md b/words/swedish/net/programming-with-loadoptions/_index.md index 311899d46b..266c9ece24 100644 --- a/words/swedish/net/programming-with-loadoptions/_index.md +++ b/words/swedish/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ I dessa handledningar lär du dig hur du använder LoadOptions för att läsa in | [Ladda CHM-filer i Word-dokument](./load-chm/) | Ladda enkelt CHM-filer till Word-dokument med Aspose.Words för .NET med den här steg-för-steg-handledningen. Perfekt för att konsolidera din tekniska dokumentation. | | [Återställ docx med Aspose.Words – steg för steg](./how-to-recover-docx-with-aspose-words-step-by-step/) | Lär dig hur du återställer skadade docx-filer med Aspose.Words för .NET i en enkel steg-för-steg-guide. | | [Aspose Load Options – Ladda DOCX med anpassade teckensnittinställningar](./aspose-load-options-load-docx-with-custom-font-settings/) | Lär dig hur du laddar ett DOCX-dokument med egna teckensnittinställningar via Aspose Load Options i .NET. | +| [Återställ korrupt DOCX – Komplett C#-guide för att reparera och spara filer](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Lär dig hur du reparerar skadade DOCX-filer och sparar dem igen med Aspose.Words för .NET i en komplett C#‑guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/swedish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..1b3076a4d9 --- /dev/null +++ b/words/swedish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Lär dig hur du återställer korrupta DOCX‑filer i C# och sparar det återställda + dokumentet säkert. Steg‑för‑steg‑guide med Aspose.Words‑exempel. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: sv +og_description: Återställ korrupta DOCX‑filer i C# och spara det återställda dokumentet + med Aspose.Words. Fullständig kod, förklaringar och bästa praxis‑tips. +og_title: Återställ korrupt DOCX – Steg‑för‑steg C#‑guide +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Återställ korrupt DOCX – Komplett C#-guide för att reparera och spara filer +url: /sv/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Återställ korrupt DOCX – Komplett C#-guide för att reparera och spara filer + +Har du någonsin försökt öppna en DOCX som ser bra ut i Utforskaren men som kastar ett undantag i din app? Det är den klassiska “korrupt Word‑fil”‑mardrömmen, och den slutar ofta med en stack‑trace du inte vill se. De goda nyheterna? Aspose.Words ger dig en **recover corrupted docx**‑funktion som låter dig fortsätta arbeta även när filen är skadad. + +I den här handledningen går vi igenom de exakta stegen för att läsa in ett trasigt dokument, tala om för biblioteket att fortsätta, och sedan **save recovered document** till en ny, ren fil. I slutet kommer du att veta varför återställningsläget är viktigt, hur du konfigurerar det, och vilka fallgropar du bör undvika – inga vaga “se dokumentationen”-genvägar. + +## Vad du behöver + +- **Aspose.Words for .NET** (valfri nyare version; 24.11 användes när den här guiden skrevs) +- En .NET‑utvecklingsmiljö (Visual Studio, Rider eller VS Code med C#‑tillägget) +- Ett exempel‑DOCX som du misstänker är korrupt (du kan korrupta en fil genom att öppna den i en zip‑redigerare och ta bort en del, bara för test) +- Grundläggande C#‑kunskaper — inget avancerat, bara förmågan att skapa en konsolapp + +Om du redan har dem, bra — låt oss hoppa rakt in i lösningen. + +## Steg 1: Ställ in LoadOptions med rätt återställningsstrategi + +Kärnan i fixen är `LoadOptions`‑objektet. Det talar om för Aspose.Words hur det ska bete sig när det stöter på felaktig XML eller saknade delar i DOCX‑paketet. Flaggan `RecoveryMode.RecoverAndContinue` är den mest toleranta — den försöker rädda vad den kan och hoppar över resten. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Varför detta är viktigt:** Om du utelämnar `LoadOptions` eller använder standardläget (`RecoveryMode.NoRecovery`) kommer `Document`‑konstruktorn att kasta ett undantag så snart den upptäcker ett problem. Med `RecoverAndContinue` sväljer API:t icke‑kritiska fel och bygger ett partiellt dokumentobjekt som du fortfarande kan arbeta med. + +> **Pro tip:** För enorma batchar av filer, överväg att omsluta laddningsanropet i ett `try/catch`‑block ändå — vissa fel är verkligen kritiska (t.ex. saknad `[Content_Types].xml`‑fil) och kan inte återställas. + +## Steg 2: Läs in det potentiellt korrupta DOCX‑filen + +Nu när alternativen är klara, läs in din fil. Konstruktorn tar filvägen och `LoadOptions` som vi just förberedde. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Vad händer under huven?** +Aspose.Words analyserar ZIP‑behållaren, läser varje XML‑del och försöker återskapa Open XML‑DOM‑en. När den stöter på en trasig del loggar återställningsmotorn en varning (synlig i konsolen om du aktiverar diagnostik) och fortsätter. Det resulterande `Document`‑objektet kan sakna några stycken eller bilder, men resten av innehållet förblir intakt. + +## Steg 3: Verifiera det återställda innehållet (valfritt men rekommenderat) + +Innan du sparar filen till disk är det klokt att inspektera några noder för att säkerställa att de viktiga sektionerna överlevt. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Om utskriften ser rimlig ut har du framgångsrikt **recover corrupted docx**‑innehåll. Om du märker saknade sektioner kan du fortfarande bestämma om du vill fortsätta — ibland är de förlorade delarna bara dekorativa. + +## Steg 4: Spara det återställda dokumentet + +Här är den del som de flesta utvecklare frågar om: “Hur **save recovered document** utan att återinföra den ursprungliga korruptionen?” Svaret är helt enkelt att anropa `Document.Save` med en ny sökväg. Aspose.Words skriver ett helt nytt ZIP‑paket, så eventuella kvarvarande trasiga delar lämnas bakom. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Varför detta fungerar:** `Save`‑metoden serialiserar DOM‑en i minnet tillbaka till ett rent Open XML‑paket. Eftersom de trasiga delarna aldrig laddades in i DOM‑en (de kastades bort under återställningen) kommer de aldrig med i den nya filen. Resultatet är ett friskt DOCX som öppnas i Word, Google Docs eller någon annan visare. + +## Steg 5: Automatisera processen för flera filer (bonus) + +I verkliga scenarier har du ofta en mapp full av problematiska filer. Omslut de föregående stegen i en loop, så får du ett litet återställningsverktyg. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Nu kan du släppa en hel katalog med trasiga DOCX‑filer i `C:\Docs\Batch` och låta skriptet rensa dem automatiskt. + +## Vanliga frågor & edge‑cases + +| Question | Answer | +|----------|--------| +| **Fungerar detta med .doc‑filer?** | Samma `LoadOptions`‑klass gäller, men du måste referera till det äldre Word‑formatet (`doc`). Aspose.Words kan fortfarande återställa, även om felmönstren skiljer sig. | +| **Vad händer om filen är lösenordsskyddad?** | Återställning kringgår inte kryptering. Du måste ange lösenordet via `LoadOptions.Password`. | +| **Kommer bilder att gå förlorade?** | Endast bilder som är en del av en korrupt XML‑del kan utelämnas. Resten bevaras eftersom de lagras som separata binära strömmar. | +| **Kan jag logga varningarna som Aspose genererar?** | Ja — sätt `LoadOptions.LoadFormat` till `LoadFormat.Docx` och prenumerera på `Document.WarningCallback` för att fånga detaljerade meddelanden. | +| **Är `RecoverAndContinue` säkert för produktion?** | Generellt ja, men testa med dina data. I kritiska produktionsflöden kan du vilja flagga dokument som krävde återställning för senare granskning. | + +## Fullt fungerande exempel (klistra in och kör) + +Nedan är det kompletta programmet som du kan kompilera som en konsolapp. Det innehåller alla stegen, felhantering och valfri batch‑behandlingslogik. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Förväntat resultat:** Efter att ha kört programmet öppnas `Recovered.docx` i Microsoft Word utan den ursprungliga felrutan. Eventuella delar som var för skadade utelämnas helt enkelt, men huvudtexten, rubrikerna och de flesta bilderna förblir intakta. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Slutsats + +Vi har gått igenom allt du behöver för att **recover corrupted docx**‑filer med Aspose.Words, från att konfigurera `LoadOptions` till att säkert **save recovered document**. De viktigaste slutsatserna är: + +- Använd `RecoveryMode.RecoverAndContinue` för att låta biblioteket ignorera icke‑kritiska fel. +- Verifiera det inlästa innehållet innan du sparar det, särskilt när du hanterar kritiska affärsdokument. +- Att spara dokumentet genererar ett rent ZIP‑paket, vilket effektivt tar bort den ursprungliga korruptionen. +- Samma mönster skalar till batch‑operationer, vilket möjliggör automatiserad rensning av stora dokumentarkiv. + +Redo för nästa steg? Försök integrera denna logik i en bakgrundstjänst som övervakar en uppladdningsmapp, eller experimentera med `WarningCallback` för att bygga en rapport över vilka filer som behövde återställning. Ju mer du leker med API:t, desto mer kommer du att uppskatta hur robust Aspose.Words är för dokumenthantering i verkligheten. + +Har du ett eget knep du vill dela – kanske hantering av lösenordsskyddade filer eller sammanslagning av återställda dokument? Lämna en kommentar nedanför, så fortsätter vi samtalet. 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/programming-with-markdownsaveoptions/_index.md b/words/swedish/net/programming-with-markdownsaveoptions/_index.md index ccb402999a..a63af64f89 100644 --- a/words/swedish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/swedish/net/programming-with-markdownsaveoptions/_index.md @@ -50,6 +50,9 @@ Lär dig spara DOCX som Markdown med en detaljerad steg‑för‑steg‑guide i ### [Hur man exporterar Markdown från DOCX – Fullständig guide](./how-to-export-markdown-from-docx-complete-guide/) Lär dig exportera Markdown från DOCX-filer med en komplett guide i C#. +### [Spara Word som Markdown med anpassad bildmapp – Fullständig guide](./save-word-as-markdown-with-custom-image-folder-full-guide/) +Lär dig spara Word som Markdown med en anpassad bildmapp i en komplett guide. + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/swedish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..e66dfb746f --- /dev/null +++ b/words/swedish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: Spara Word som Markdown och extrahera bilder från docx med en callback. + Lär dig hur du använder en callback för att lagra markdown‑bildmappen effektivt. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: sv +og_description: Spara Word som Markdown och extrahera bilder från docx med en callback. + Den här guiden visar hur du använder en callback för att skapa en markdown‑bildmapp. +og_title: Spara Word som Markdown – Komplett steg‑för‑steg‑guide +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Spara Word som Markdown med anpassad bildmapp – Fullständig guide +url: /sv/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Spara Word som Markdown – Komplett steg‑för‑steg‑guide + +Har du någonsin behövt **spara Word som Markdown** men varit osäker på vad du ska göra med de inbäddade bilderna? Du är inte ensam. I många projekt ser markdown‑utdata bra ut—*tills* du inser att bildlänkarna är trasiga eftersom filerna aldrig lämnade Word‑paketet. + +Den goda nyheten är att Aspose.Words ger dig ett enkelt sätt att **extrahera bilder från docx** och placera dem exakt där du vill, med hjälp av en **callback** som låter dig styra markdown‑bildmappen. I den här handledningen går vi igenom hela processen, från att läsa in en `.docx`‑fil till att sluta med en prydlig mapp med PNG‑filer (eller vilket format du har) och en markdown‑fil som pekar på dem. + +Vid slutet av den här guiden kommer du att kunna: + +* Konvertera vilket Word‑dokument som helst till Markdown med en enda kodrad. +* Automatiskt dumpa varje bild i en dedikerad `images`‑undermapp. +* Anpassa filnamn så att de aldrig kolliderar, även när källan innehåller dussintals bilder. + +Inga externa skript, ingen manuell kopiering‑och‑klistring—bara ren C# och Aspose.Words. + +## Förutsättningar + +Innan vi dyker ner, se till att du har: + +* **Aspose.Words for .NET** (den senaste stabila versionen; vid skrivtillfället är den 24.9). +* En .NET‑utvecklingsmiljö (Visual Studio, Rider eller `dotnet`‑CLI). +* Ett Word‑dokument (`.docx`) som innehåller minst en bild—kalla det `DocWithImages.docx`. + +Om du aldrig har använt Aspose.Words tidigare, oroa dig inte. Biblioteket är helt hanterat, kräver ingen COM‑interop och fungerar på .NET 6+ såväl som .NET Framework 4.8. + +## Steg 1 – Ställ in projektet och installera paketet + +Först, skapa en ny konsolapp (eller lägg till koden i ett befintligt projekt). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Proffstips:** Om du riktar in dig på .NET 6 använder standard‑`Program.cs` redan top‑level‑satser, vilket gör exemplet kortfattat. + +## Steg 2 – Skapa en callback för att kontrollera bildsparande + +Aspose.Words anropar `IResourceSavingCallback.ResourceSaving` för varje extern resurs den behöver skriva (bilder, CSS osv.). Genom att implementera detta gränssnitt får vi full kontroll över **hur markdown‑bildmappen** byggs. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Varför använda en callback? + +* **Granulär kontroll** – du bestämmer mappstrukturen och namnschemat. +* **Prestanda** – du skriver strömmen en gång, vilket undviker bibliotekets dubbel‑skriv‑fallback. +* **Flexibilitet** – du kan lägga till loggning, bild‑optimering eller till och med ladda upp till molnlagring vid denna punkt. + +## Steg 3 – Läs in Word‑dokumentet + +Nu när callbacken är klar behöver vi bara peka Aspose.Words på källfilen. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Vad händer om filen inte hittas?** +> `Document` kommer att kasta ett `FileNotFoundException`. Omge inläsningen med en `try/catch` om du förväntar dig dynamiska sökvägar. + +## Steg 4 – Anslut MarkdownSaveOptions + +`MarkdownSaveOptions`‑klassen låter oss ansluta callbacken vi just byggde. Vi anger också mappen där bilderna ska ligga relativt till markdown‑filen. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder`‑egenskapen instruerar Aspose att generera markdown‑länkar som `![Alt text](images/img_123.png)`. Eftersom vi också sätter `ResourceFileName` i callbacken hamnar den faktiska filen exakt där. + +## Steg 5 – Spara som Markdown och verifiera resultatet + +Till sist skriver vi markdown‑filen. Callbacken har redan fyllt `images`‑undermappen. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Förväntat resultat + +Kör programmet bör skriva ut något liknande: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Öppna `Doc.md` i någon markdown‑visare; du kommer att se bildlänkar som korrekt pekar på `images`‑mappen. + +--- + +## Vanliga frågor (FAQ) + +### Hur man **extraherar bilder från docx** utan att konvertera till markdown? + +Du kan återanvända samma `MyMarkdownResourceCallback` men skicka den till `doc.Save("images.zip", SaveFormat.Zip)`. Callbacken kommer fortfarande att triggas för varje bild, så att du kan placera dem var du vill. + +### Vad händer om jag behöver **olika bildformat**? + +`args.FileName` innehåller redan den ursprungliga filändelsen (`.png`, `.jpg` osv.). Om du måste konvertera alla bilder till ett enda format, lägg till ett konverteringssteg i `ResourceSaving` innan du skriver strömmen. + +### Kan jag **anpassa markdown‑bildmappen** per dokument? + +Absolut. Callbacken får mappvägen via sin konstruktor, så du kan skapa en ny callback med en annan mapp för varje dokument i ett batch‑process. + +### Fungerar detta med **stora dokument** (hundratals bilder)? + +Ja. Callbacken strömmar bilden direkt till disk, vilket håller minnesanvändningen låg. Se bara till att målenheten har tillräckligt med utrymme och att du inte överskrider operativsystemets filhandtagsgränser. + +--- + +## Fullt fungerande exempel + +Nedan är det kompletta, kopiera‑och‑klistra‑klara programmet. Ersätt `YOUR_DIRECTORY` med en absolut eller relativ sökväg som passar din miljö. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Kör programmet (`dotnet run`) så kommer du att se en nygenererad `Doc.md` tillsammans med en `images`‑undermapp som innehåller + +{{< /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-officemath/_index.md b/words/swedish/net/programming-with-officemath/_index.md index 408a3d4bab..fe43057e41 100644 --- a/words/swedish/net/programming-with-officemath/_index.md +++ b/words/swedish/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ Aspose.Words för .NET-handledningarna om ordbehandling med OfficeMath guidar di | Titel | Beskrivning | | --- | --- | | [Matematiska ekvationer](./math-equations/) | Lär dig hur du konfigurerar matematiska ekvationer i Word-dokument med Aspose.Words för .NET. Steg-för-steg-guide med exempel, vanliga frågor och mer. | - +| [Spara docx som txt – Exportera Word Math till LaTeX i C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Lär dig hur du sparar ett DOCX som TXT och exporterar Word Math till LaTeX med C# i Aspose.Words för .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/swedish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..6f2c7c7776 --- /dev/null +++ b/words/swedish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: Spara docx som txt snabbt och lär dig hur du exporterar matematik till + LaTeX. Konvertera Word till txt, hantera Office Math och behåll ekvationerna intakta. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: sv +og_description: Spara docx som txt med LaTeX‑matteexport. En steg‑för‑steg C#‑handledning + som visar hur man konverterar Word till txt och behåller ekvationer. +og_title: Spara docx som txt – C#-guide för att exportera Word-matematik +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Spara docx som txt – Exportera Word-matematik till LaTeX i C# +url: /sv/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Spara docx som txt – Exportera Word Math till LaTeX i C# + +Har du någonsin behövt **save docx as txt** men oroat dig för att dina ekvationer skulle bli en röra av symboler? Du är inte ensam. Många utvecklare stöter på den muren när de försöker **convert word to txt** för efterföljande bearbetning, särskilt när källan innehåller Office Math-objekt. + +Den goda nyheten? Med några rader C# och rätt sparalternativ kan du bevara varje ekvation som ren LaTeX, vilket gör textfilen både mänskligt läsbar och klar för vetenskapliga pipelines. I den här handledningen går vi igenom hela processen, svarar på *how to export math* från en Word-fil, och visar dig *how to convert docx* utan att förlora någon matematisk noggrannhet. + +## Vad du kommer att lära dig + +- Läs in en `.docx`-fil med Aspose.Words (eller något kompatibelt bibliotek). +- Konfigurera `TxtSaveOptions` så att Office Math exporteras som LaTeX. +- Spara dokumentet som en `.txt`-fil som behåller ekvationerna intakta. +- Tips för att hantera kantfall som dolda ekvationer eller stora dokument. +- Ett komplett, körbart kodexempel som du kan kopiera‑klistra in direkt. + +Inga avancerade byggverktyg, bara ett .NET-projekt och Aspose.Words NuGet-paketet. Låt oss börja. + +--- + +## Förutsättningar + +| Krav | Varför det är viktigt | +|------|-----------------------| +| .NET 6.0 eller senare | Moderna språkfunktioner och bättre prestanda. | +| Aspose.Words för .NET (NuGet) | Tillhandahåller `Document`, `TxtSaveOptions` och `OfficeMathExportMode`. | +| En Word-fil (`.docx`) som innehåller ekvationer | För att se LaTeX-exporten i praktiken. | +| Grundläggande C#-kunskaper | Du kommer att följa koden rad för rad. | + +Om du ännu inte har lagt till Aspose.Words, kör: + +```bash +dotnet add package Aspose.Words +``` + +Det är allt—ingen extra konfiguration behövs. + +## Steg 1: Läs in DOCX-filen + +Först måste vi läsa in källdokumentet i minnet. Tänk på det som att öppna en bok innan du börjar läsa. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** Använd en absolut sökväg under testning för att undvika överraskningar som “fil ej funnen”. I produktion får du sannolikt sökvägen från en konfigurationsfil eller en användaruppladdning. + +## Steg 2: Konfigurera TXT-sparalternativ för Math-export + +Som standard skriver `TxtSaveOptions` ut ren text och tar bort Office Math. Det vill vi inte. Genom att sätta `OfficeMathExportMode` till `LaTeX` instruerar du biblioteket att översätta varje ekvation till dess LaTeX-representation. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Varför LaTeX? + +LaTeX är det gemensamma språket för vetenskaplig publicering. När du senare matar in `.txt` i en markdown‑processor, Jupyter‑notebook eller något LaTeX‑medvetet verktyg, renderas ekvationerna perfekt. Om du föredrar rena Unicode‑symboler kan du byta till `OfficeMathExportMode.Unicode`, men LaTeX ger dig mest kontroll. + +## Steg 3: Spara dokumentet som en ren textfil + +Nu händer magin. Metoden `Save` skriver dokumentet till disk med de alternativ vi just definierade. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Efter att den här raden har körts kommer `Math.txt` att innehålla: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Lägg märke till hur ekvationen visas inom `\[` och `\]`—precis vad LaTeX förväntar sig. + +## Hur man exporterar Math från komplexa dokument + +### Hantera dolda eller inline‑ekvationer + +Vissa Word-filer lagrar ekvationer i dolda textramar. Aspose.Words behandlar dem på samma sätt som synliga ekvationer, så LaTeX‑exporten fungerar automatiskt. Men om du märker saknade ekvationer, dubbelkolla att `Document`‑objektet inte är inställt på att ignorera dolt innehåll: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Stora dokument och minnesanvändning + +Att spara en 500‑sidig avhandling kan förbruka mycket RAM. För att hålla minnesavtrycket lågt kan du strömma utdata: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Strömning skriver bitar till disk när de genereras, vilket förhindrar att hela filen ligger i minnet samtidigt. + +## Vanliga fallgropar & hur man undviker dem + +| Fallgrop | Symptom | Lösning | +|----------|---------|---------| +| Saknade LaTeX-klamrar | Ekvationer visas som rå kod (`E = mc^{2}`) | Säkerställ `OfficeMathExportMode = LaTeX`. | +| Tom utdatafil | Fel sökväg eller otillräckliga behörigheter | Verifiera att målkatalogen finns och är skrivbar. | +| Förvrängda tecken | Filen är kodad i UTF‑8 utan BOM på ett system som förväntar sig ANSI | Lägg till `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Ekvationer försvinner efter konvertering | Dokument laddat med `LoadOptions` som exkluderar matematik | Använd standard `LoadOptions` eller sätt `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## Fullt fungerande exempel + +Nedan är det kompletta programmet som du kan kompilera och köra. Det inkluderar felhantering, sökvägsvalidering och en liten konsollogg så du vet att allt lyckades. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Förväntad utdata** (utdrag från `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Du kan nu mata in den här filen i någon LaTeX‑medveten processor, och ekvationerna kommer att renderas vackert. + +## Hur man konverterar DOCX till TXT utan att förlora formatering + +Om du bara behöver ren text och inte bryr dig om matematik, utelämna helt enkelt raden med `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Men kom ihåg, **how to export math** är det som skiljer vetenskapliga arbetsflöden åt. Att behålla LaTeX intakt är det som gör konverteringen verkligen användbar. + +## Nästa steg & relaterade ämnen + +- **Batch conversion:** Placera koden i en `foreach`-loop för att bearbeta en hel mapp med `.docx`‑filer. +- **Markdown generation:** Lägg till `#`‑rubriker eller `*`‑punkter till texten för att producera färdig‑publicerings‑markdown. +- **PDF export:** Använd `PdfSaveOptions` för att skapa en PDF‑version bredvid txt‑filen. +- **Advanced LaTeX tweaking:** Efterbearbeta utdata med regex för att ersätta `\[`/`\]` med `$...$` för inline‑ekvationer. + +Var och en av dessa bygger på samma grund—att ladda ett `Document` och välja rätt `SaveOptions`. Känn dig fri att experimentera; API:et är tillräckligt flexibelt för de flesta dokument‑automatiseringsscenarier. + +## Slutsats + +Vi har gått igenom allt du behöver för att **save docx as txt** samtidigt som du bevarar varje ekvation som LaTeX. Från att läsa in källfilen, konfigurera `TxtSaveOptions` för **how to export math**, till att skriva den slutgiltiga ren‑textfilen, passar hela arbetsflödet i ett fåtal koncisa C#‑satser. + +Nu kan du automatisera konverteringen av Word‑rapporter, akademiska artiklar eller vilket dokument som helst som blandar text och matematik, och mata in den resulterande `.txt` i efterföljande verktyg utan att förlora någon vetenskaplig detalj. + +Prova det, justera alternativen för ditt eget användningsfall, och låt oss veta i kommentarerna hur det fungerade för dig. Lycka till med kodandet! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/swedish/net/programming-with-pdfsaveoptions/_index.md index 7a4b38c484..0f7f384c7d 100644 --- a/words/swedish/net/programming-with-pdfsaveoptions/_index.md +++ b/words/swedish/net/programming-with-pdfsaveoptions/_index.md @@ -45,6 +45,7 @@ Oavsett om du vill konvertera Word-dokument till PDF för onlinedistribution, ar | [Uppdatera senast utskrivna egenskap i PDF-dokument](./update-last-printed-property/) | Lär dig hur du uppdaterar den senast utskrivna egenskapen i ett PDF-dokument med Aspose.Words för .NET med vår steg-för-steg-guide. | | [Rendera 3D DML 3DEffects i ett PDF-dokument](./dml-3deffects-rendering/) | Lär dig hur du renderar fantastiska 3D DML-effekter i PDF-dokument med Aspose.Words för .NET med den här omfattande steg-för-steg-guiden. | | [Interpolera bilder i ett PDF-dokument](./interpolate-images/) | Lär dig hur du interpolerar bilder i ett PDF-dokument med Aspose.Words för .NET med vår steg-för-steg-guide. Förbättra enkelt bildkvaliteten på din PDF. | +| [Skapa tillgänglig PDF från Word – steg-för-steg-guide](./create-accessible-pdf-from-word-step-by-step-guide/) | Lär dig hur du skapar en tillgänglig PDF från ett Word-dokument med Aspose.Words för .NET i en steg‑för‑steg‑guide. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/swedish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..65a38cab62 --- /dev/null +++ b/words/swedish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: Skapa en tillgänglig PDF från en DOCX‑fil i C#. Lär dig hur du konverterar + Word till PDF, sparar docx som PDF och säkerställer PDF/UA‑efterlevnad. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: sv +og_description: Skapa tillgänglig PDF från Word i C#. Den här guiden visar hur du + konverterar Word till PDF, sparar docx som PDF och uppfyller PDF/UA-standarder. +og_title: Skapa tillgänglig PDF – Komplett C#-handledning +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Skapa tillgänglig PDF från Word – Steg‑för‑steg‑guide +url: /sv/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Skapa tillgänglig PDF från Word – Komplett programmeringshandledning + +Har du någonsin behövt **skapa tillgänglig PDF** från ett Word-dokument men varit osäker på vilka inställningar som ska justeras? Du är inte ensam. I många företag är efterlevnad av PDF/UA (Universal Accessibility) ett hårt krav, och den vanliga “convert‑to‑PDF”-knappen räcker helt enkelt inte. + +I den här guiden går vi igenom en kortfattad, end‑to‑end‑lösning som **konverterar Word till PDF**, **sparar docx som PDF**, och garanterar att resultatet uppfyller tillgänglighetsstandarder. Inga vaga referenser – bara koden du kan kopiera‑klistra in, plus “varför” bakom varje rad. + +> **TL;DR:** Ladda en `.docx`, sätt `PdfSaveOptions.Compliance` till `PdfUa1` (eller `PdfUa2`), och anropa `Document.Save`. Det är allt du behöver för att **skapa tillgänglig PDF** med Aspose.Words för .NET. + +--- + +## Vad du kommer att lära dig + +- Hur man **konverterar Word till PDF** samtidigt som rubriker, alt‑text och läsordning bevaras. +- Skillnaden mellan `PdfUa1` och `PdfUa2` och när man ska välja den ena. +- Hur man **sparar docx som PDF** med bara några rader C#. +- Vanliga fallgropar (saknade teckensnitt, ej stödda taggar) och snabba lösningar. +- Ett färdigt kodexempel som du kan klistra in i vilket .NET‑projekt som helst. + +### Förutsättningar + +- .NET 6 eller senare (koden fungerar också på .NET Framework 4.7+). +- Aspose.Words för .NET installerat via NuGet (`Install-Package Aspose.Words`). +- En Word‑fil (`input.docx`) som redan innehåller korrekt struktur (stilar, alt‑text för bilder). + +Om du ännu inte har lagt till Aspose.Words, kör kommandot nedan i Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +Det är det enda externa beroendet du behöver. + +--- + +## Skapa tillgänglig PDF – Varför tillgänglighet är viktigt + +När en PDF är markerad som **PDF/UA** (Universal Accessibility) kan skärmläsare navigera rubriker, tabeller och formulärfält precis som de skulle i den ursprungliga Word‑filen. Detta är inte bara ett trevligt tillägg; många regeringar och företag behandlar PDF/UA‑efterlevnad som ett lagkrav. + +Att sätta `Compliance`‑egenskapen på `PdfSaveOptions` instruerar biblioteket att bädda in nödvändiga taggar, ange rätt dokument‑språk och lägga till en logisk läsordning. Att hoppa över detta steg ger en “endast visuell” PDF som misslyckas i tillgänglighetsgranskningar. + +--- + +## Konvertera Word till PDF med Aspose.Words + +Nedan är det enklaste sättet att **konvertera Word till PDF** samtidigt som dokumentet förblir tillgängligt. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Vad händer här?** + +- `Document` läser Word‑filen och bevarar alla stilar och strukturen. +- `PdfSaveOptions.Compliance` instruerar Aspose.Words att tagga utdata som PDF/UA. +- `doc.Save` skriver PDF‑filen till disk och bäddar in taggarna automatiskt. + +> **Pro tip:** Om din käll‑Word‑fil använder anpassade rubrikstilar, se till att de är mappade till inbyggda rubriknivåer (`Heading1`, `Heading2`, …). Det säkerställer att den genererade PDF‑filen får korrekta rubrik‑taggar. + +--- + +## Spara Docx som PDF – Konfigurera PDF/UA‑kompatibilitet + +Om du redan är bekant med klassen `PdfSaveOptions` kanske du undrar om det finns andra switchar som påverkar tillgänglighet. Ett par användbara egenskaper: + +| Egenskap | Effekt på tillgänglighet | Typiskt värde | +|----------|--------------------------|---------------| +| `Compliance` | Slår på/av PDF/UA‑taggning | `PdfCompliance.PdfUa1` eller `PdfUa2` | +| `EmbedFullFonts` | Säkerställer att läsare ser avsedd typografi | `true` (standard) | +| `OptimizeOutput` | Minskar filstorlek utan att ta bort taggar | `true` | + +Du kan utöka föregående kodsnutt så här: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Att byta till `PdfUa2` lägger till stöd för nyare PDF/UA‑funktioner såsom *artifact*-taggning för dekorativa bilder. Om du inte behöver dem, håll dig till `PdfUa1` för maximal kompatibilitet med äldre hjälpmedelstekniker. + +--- + +## Exportera Docx till PDF – Fullt fungerande exempel + +Nedan är en självständig konsolapp som demonstrerar hela flödet, från att ladda en fil till att verifiera resultatet. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Förväntat resultat + +- En fil med namnet **Compliant.pdf** visas i samma mapp som den körbara filen. +- Att öppna PDF‑filen i Adobe Acrobat Pro → *Tools → Accessibility → Full Check* bör rapportera **No accessibility issues** (förutsatt att käll‑Word‑filen var välstrukturerad). +- PDF‑filens *Properties → Advanced*-flik kommer att visa **PDF/UA** under avsnittet “PDF/A and PDF/UA compliance”. + +--- + +## Vanliga specialfall & hur man hanterar dem + +| Situation | Varför det är viktigt | Snabb lösning | +|-----------|-----------------------|---------------| +| **Saknade teckensnitt** | PDF‑filen kan falla tillbaka på ett standardteckensnitt, vilket förstör den visuella layouten. | Ställ in `EmbedFullFonts = true` (redan standard) och se till att teckensnitts‑filerna är tillgängliga på byggmaskinen. | +| **Bilder utan alt‑text** | Skärmläsare kommer att läsa “image” utan någon beskrivning. | Lägg till `Alt Text` i Word (`Högerklicka → Formatera bild → Alt Text`) innan konvertering. | +| **Anpassade stilar känns inte igen som rubriker** | PDF/UA kräver korrekta rubrik‑taggar. | Mappa anpassade stilar till inbyggda rubriker via `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Stora dokument orsakar minnespress** | Att konvertera en 500‑sidig fil kan öka RAM‑användningen. | Använd `doc.Save(outputPath, options)` med `options.SaveFormat = SaveFormat.Pdf` och överväg att bearbeta i delar om du får `OutOfMemoryException`. | +| **Behöver exportera docx till pdf utan tillgänglighet** | Ibland vill du bara ha en snabb visuell PDF. | Utelämna `Compliance`‑inställningen eller sätt den till `PdfCompliance.Pdf15`. | + +--- + +## Bildexempel (Alt‑text inkluderad) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Alt‑texten ovan förstärker huvudnyckelordet och hjälper både användare och AI‑modeller att förstå bildens sammanhang.* + +--- + +## Vanliga frågor + +**Q: Fungerar detta med .NET Core?** +A: Absolut. Aspose.Words är plattformsoberoende; referera bara NuGet‑paketet i ditt .NET 6+‑projekt. + +**Q: Kan jag batch‑processa flera DOCX‑filer?** +A: Ja. Lägg in laddnings‑ och sparlogiken i en `foreach (var file in Directory.GetFiles(folder, "*.docx"))`‑loop. Kom ihåg att återanvända en enda `PdfSaveOptions`‑instans för bättre prestanda. + +**Q: Vad gör jag om jag behöver lägga till en anpassad PDF/UA‑tagg som Aspose inte genererar automatiskt?** +A: Använd det lågnivå‑PDF‑API:t (`PdfSaveOptions.CustomProperties`) eller efterbehandla PDF‑filen med ett bibliotek som iText 7 som möjliggör manuell tagg‑infogning. + +--- + +## Slutsats + +You + +{{< /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 6377059a27..a37c83c3c1 100644 --- a/words/swedish/net/working-with-fonts/_index.md +++ b/words/swedish/net/working-with-fonts/_index.md @@ -20,7 +20,7 @@ Handledningar för ordbehandling med teckensnitt guidar dig genom olika aspekter 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. -Oavsett om du vill formatera text med olika teckensnitt, ange regler för teckensnittsersättning, ladda teckensnitt från specifika kataloger eller ta emot teckensnittsmeddelanden, kommer handledningarna i "Ordbehandling med teckensnitt" att ge dig kunskapen för att enkelt utföra dessa uppgifter. +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. ## Handledningar | Titel | Beskrivning | @@ -40,7 +40,7 @@ Oavsett om du vill formatera text med olika teckensnitt, ange regler för tecken | [Prioriteringsinställningar för teckensnittsmappar](./set-fonts-folders-with-priority/) | Lär dig hur du prioriterar teckensnittsmappar i Word-dokument med Aspose.Words för .NET. Vår guide säkerställer att dina dokument renderas perfekt varje gång. | | [Ställ in mappen True Type-teckensnitt](./set-true-type-fonts-folder/) | Lär dig hur du ställer in en True Type Fonts-mapp i Word-dokument med Aspose.Words för .NET. Följ vår detaljerade steg-för-steg-guide för att säkerställa konsekvent typsnittshantering. | | [Ange standardteckensnitt vid rendering](./specify-default-font-when-rendering/) | Lär dig hur du anger ett standardteckensnitt när du renderar Word-dokument med Aspose.Words för .NET. Säkerställ ett enhetligt dokumentutseende över olika plattformar. | -| [Teckensnittsinställningar med laddningsalternativ](./font-settings-with-load-options/) Lär dig hur du hanterar teckensnittsinställningar med laddningsalternativ i Aspose.Words för .NET. Steg-för-steg-guide för utvecklare för att säkerställa ett enhetligt teckensnittsutseende i Word-dokument. +| [Teckensnittsinställningar med laddningsalternativ](./font-settings-with-load-options/) Lär dig hur du hanterar teckensnittsinställningar med laddningsalternativ i Aspose.Words för .NET. Steg-för-steg-guide för utvecklare för att säkerställa ett enhetligt teckensnittsutseende i Word-dokument. | | [Ange teckensnittsmapp](./set-fonts-folder/) | Lär dig hur du ställer in en mapp för anpassade teckensnitt i Aspose.Words för .NET för att säkerställa att dina Word-dokument återges korrekt utan att teckensnitt saknas. | | [Standardinstans för teckensnittsinställningar](./font-settings-default-instance/) | I den här handledningen lär du dig hur du konfigurerar standardinställningar för teckensnitt i ett Word-dokument med Aspose.Words för .NET. | | [Hämta lista över tillgängliga teckensnitt](./get-list-of-available-fonts/) | Upptäck hur du får en lista över tillgängliga teckensnitt med Aspose.Words för .NET i den här detaljerade steg-för-steg-handledningen. Öka dina kunskaper i teckensnittshantering. | @@ -48,6 +48,7 @@ Oavsett om du vill formatera text med olika teckensnitt, ange regler för tecken | [Få varningsmeddelande](./receive-warning-notification/) Lär dig hur du får en varningsmeddelande när du använder Aspose.Words för .NET och hanterar eventuella problem eller varningar i dina dokument. | | [Exempel på teckensnittskälla för resurs Steam](./resource-steam-font-source-example/) | Lär dig hur du använder teckensnittskällan Resource Stream för att läsa in anpassade teckensnitt i Aspose.Words för .NET. | | [Hämta substitution utan suffix](./get-substitution-without-suffixes/) | I den här handledningen lär du dig hur du får suffixlösa åsidosättningar i ett Word-dokument med Aspose.Words för .NET. | +| [Hur man upptäcker teckensnitt i Aspose.Words – Komplett guide](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Lär dig hur du identifierar vilka teckensnitt som används i ett Word-dokument med Aspose.Words för .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/swedish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/swedish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..a650d1c0ca --- /dev/null +++ b/words/swedish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: Lär dig hur du upptäcker typsnitt och hur du fångar varningar när du + hanterar saknade typsnitt i C# med Aspose.Words. Steg‑för‑steg‑kod inkluderad. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: sv +og_description: Hur upptäcker du teckensnitt i Aspose.Words? Följ den här handledningen + för att fånga varningar och hantera saknade teckensnitt utan ansträngning. +og_title: Hur man upptäcker teckensnitt i Aspose.Words – Komplett guide +tags: +- Aspose.Words +- C# +- Font handling +title: Hur man upptäcker typsnitt i Aspose.Words – Komplett guide +url: /sv/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hur man upptäcker teckensnitt i Aspose.Words – Komplett guide + +Har du någonsin undrat **hur man upptäcker teckensnitt** som saknas i ett Word-dokument innan du skickar det till produktion? Du är inte ensam. I många företagsmiljöer kan ett felaktigt teckensnitt bryta en PDF‑konverteringspipeline eller orsaka layout‑glitchar som ser oprofessionella ut. Den goda nyheten är att Aspose.Words ger dig ett inbyggt sätt att sniffa upp de frånvarande teckensnitten och visa tydliga varningar. + +I den här handledningen går vi igenom exakt **hur man upptäcker teckensnitt**, **hur man fångar varningar**, och bästa praxis för att **hantera saknade teckensnitt** så att din applikation förblir robust. Inga externa verktyg, ingen gissning—bara ren C#‑kod som du kan släppa in i ditt projekt just nu. + +> **Snabb förhandsvisning:** Vid slutet kommer du att ha en återanvändbar `FontSubstitutionWarningCollector` som samlar varje teckensnitt‑substitutionsmeddelande under dokumentladdning, och du kommer att veta hur du ska reagera när ett teckensnitt inte kan hittas. + +--- + +## Vad du kommer att lära dig + +- Hur du konfigurerar `LoadOptions` för att lyssna på varningar om teckensnitt‑substitution. +- Hur du fångar dessa varningar i en anpassad samlarklass. +- Hur du bearbetar de insamlade varningarna och beslutar om du ska avbryta, logga eller ersätta teckensnitt. +- Hantering av edge‑case för dokument som refererar till fjärr‑ eller inbäddade teckensnitt. + +**Förutsättningar:** .NET 6+ (eller .NET Framework 4.6+), Aspose.Words för .NET (senaste versionen), och en grundläggande förtrogenhet med C#. Om du aldrig har använt Aspose.Words tidigare, oroa dig inte—denna guide förutsätter bara några minuters installationstid. + +## Så upptäcker du teckensnitt med Aspose.Words LoadOptions + +Det första steget för att upptäcka saknade teckensnitt är att tala om för Aspose.Words att rapportera dem. Detta görs via egenskapen `LoadOptions.WarningCallback`, som accepterar vilken klass som helst som implementerar `IWarningCallback`. Nedan skapar vi en liten samlare som lagrar varje varning för senare inspektion. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Varför detta är viktigt:** Utan en varningscallback ersätter Aspose.Words tyst saknade teckensnitt med ett standardteckensnitt, och du får aldrig veta att ett problem finns. Genom att fånga `WarningType.FontSubstitution` får vi full insyn—exakt den data du behöver för att **upptäcka teckensnitt** som inte finns på värddatorn. + +Nu kopplar vi samlaren till `LoadOptions` och laddar ett dokument: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Proffstips:** Om du arbetar med många dokument i ett batch‑läge, återanvänd samma `FontSubstitutionWarningCollector`‑instans men kom ihåg att anropa `Clear()` mellan laddningar för att undvika att blanda varningar från olika filer. + +## Fånga varningar under dokumentladdning + +Efter att dokumentet har laddats har samlaren redan alla teckensnitt‑relaterade varningar. Den nästa logiska frågan är: *Hur fångar jag varningar* på ett sätt som är enkelt att logga eller visa? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Typisk output ser ut så här: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Vad detta visar:** Varje rad avslöjar det ursprungliga teckensnittets namn och den reserv som Aspose.Words valde. Beväpnad med denna information kan du avgöra om reservteckensnittet är acceptabelt eller om du behöver bädda in det saknade teckensnittet manuellt. + +## Hantera saknade teckensnitt på ett smidigt sätt + +Att upptäcka och fånga varningar är bara halva striden. Det verkliga värdet kommer när du **hanterar saknade teckensnitt** på ett produktionsklart sätt. Nedan följer tre vanliga strategier: + +1. **Logga och fortsätt** – Lämplig för batch‑bearbetning där du bara behöver ett revisionsspår. +2. **Avbryt vid kritiska teckensnitt** – Kasta ett undantag om ett specifikt teckensnitt (t.ex. ett varumärkes‑specifikt typsnitt) saknas. +3. **Bädda in teckensnittet i farten** – Ladda det saknade teckensnittet från en känd mapp och registrera det i Aspose.Words innan du laddar om dokumentet. + +### Exempel: Avbryt vid ett kritiskt teckensnitt + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Exempel: Automatisk inbäddning av saknade teckensnitt + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Varför dessa mönster hjälper:** Genom att explicit bestämma vad som ska göras när ett teckensnitt saknas, eliminerar du tysta reservval som kan äventyra varumärket eller läsbarheten. Detta är kärnan i **hantering av saknade teckensnitt** på ett kontrollerat sätt. + +## Komplett fungerande exempel + +När vi sätter ihop allt, här är ett enda, färdigt‑att‑köra‑program som demonstrerar **hur man upptäcker teckensnitt**, **hur man fångar varningar**, och en enkel policy för att **hantera saknade teckensnitt** genom att logga dem. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Förväntat resultat:** När du kör programmet mot ett dokument som refererar till ett teckensnitt som inte finns på maskinen, kommer konsolen att lista varje substitutionsvarning. Om någon varning involverar ett teckensnitt från `critical`‑uppsättningen, avslutas programmet tidigt, vilket förhindrar att en felaktig PDF genereras. + +## Vanliga frågor (FAQ) + +| Question | Answer | +|----------|--------| +| *Behöver jag en licens för Aspose.Words för att använda den här koden?* | Ja, en giltig Aspose.Words‑licens tar bort utvärderingsvattenstämplar och låser upp full funktionalitet. | +| *Kan detta tillvägagångssätt upptäcka inbäddade teckensnitt?* | Inbäddade teckensnitt är redan en del av filen, så Aspose.Words kommer inte att ge en substitutionsvarning. Du kan kontrollera `Document.FontInfos` för att lista inbäddade teckensnitt om så behövs. | +| *Vad händer om det saknade teckensnittet är ett systemteckensnitt på Windows men inte på Linux?* | Samma varning kommer att utlösas på Linux eftersom teckensnittet inte är installerat där. Använd strategin “hantera saknade teckensnitt” för att leverera de nödvändiga `.ttf`‑filerna med din app. | +| *Är varningssamlaren trådad* | | + +{{< /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 a0128bb8eb..6c3f16b360 100644 --- a/words/thai/net/basic-conversions/_index.md +++ b/words/thai/net/basic-conversions/_index.md @@ -26,6 +26,7 @@ Basic Conversions จะแนะนำคุณเกี่ยวกับก | [แปลงไฟล์ Word เป็น PDF](./docx-to-pdf/) เรียนรู้วิธีการแปลงไฟล์ Word เป็น PDF ได้อย่างง่ายดายโดยใช้ Aspose.Words สำหรับ .NET ด้วยคู่มือของเรา เหมาะสำหรับนักพัฒนาที่ต้องการการแปลงเอกสารที่รวดเร็วและเชื่อถือได้ - - [แปลง 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 ด้วย C# และ Aspose.Words อย่างละเอียด พร้อมตัวอย่างโค้ดและขั้นตอนที่ชัดเจน - +- [แปลง DOCX เป็น PDF ใน C# – คู่มือการเขียนโปรแกรมฉบับสมบูรณ์](./convert-docx-to-pdf-in-c-complete-programming-guide/) | เรียนรู้วิธีแปลงไฟล์ DOCX เป็น PDF ด้วย C# อย่างละเอียด พร้อมตัวอย่างโค้ดและขั้นตอนที่ชัดเจน - | [แปลง Docx เป็นไบต์](./docx-to-byte/) | เรียนรู้วิธีการแปลง Docx เป็นอาร์เรย์ไบต์ใน .NET โดยใช้ Aspose.Words เพื่อการประมวลผลเอกสารอย่างมีประสิทธิภาพ มีคู่มือทีละขั้นตอนรวมอยู่ด้วย - | [แปลง Docx เป็น Epub](./docx-to-epub/) | แปลง DOCX เป็น EPUB ได้อย่างง่ายดายด้วย Aspose.Words สำหรับ .NET ทำตามบทช่วยสอนของเราเพื่อบูรณาการกับแอปพลิเคชัน .NET ของคุณได้อย่างราบรื่น - | [แปลง Docx เป็น Mhtml และส่งอีเมล](./docx-to-mhtml-and-sending-email/) | เรียนรู้วิธีแปลง DOCX เป็น MHTML และส่งอีเมลโดยใช้ Aspose.Words สำหรับ .NET ในคู่มือทีละขั้นตอนนี้ เพิ่มประสิทธิภาพการทำงานของคุณด้วยระบบอัตโนมัติที่ง่ายดาย - diff --git a/words/thai/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/thai/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..6cae73e518 --- /dev/null +++ b/words/thai/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-04-07 +description: แปลง DOCX เป็น PDF ใน C# อย่างรวดเร็ว เรียนรู้วิธีบันทึก Word เป็น PDF, + โหลดเอกสาร docx ด้วย C# และทำให้แน่ใจว่าตรงตามมาตรฐาน PDF/UA‑2 ภายในไม่กี่นาที +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: th +og_description: แปลง DOCX เป็น PDF ด้วย C# อย่างรวดเร็ว คู่มือนี้จะแสดงวิธีบันทึก + Word เป็น PDF, โหลดเอกสาร docx ด้วย C# และปฏิบัติตามมาตรฐาน PDF/UA‑2 +og_title: แปลง DOCX เป็น PDF ด้วย C# – คู่มือขั้นตอนโดยละเอียด +tags: +- Aspose.Words +- C# +- PDF Generation +title: แปลง DOCX เป็น PDF ด้วย C# – คู่มือการเขียนโปรแกรมฉบับสมบูรณ์ +url: /th/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# แปลง DOCX เป็น PDF ใน C# – คู่มือการเขียนโปรแกรมแบบครบถ้วน + +เคยต้องการ **convert DOCX to PDF** ในแอปพลิเคชัน C# แต่ไม่แน่ใจว่าจะเริ่มต้นอย่างไรหรือไม่? คุณไม่ได้เป็นคนเดียวที่เจออุปสรรค นักพัฒนาหลายคนเจอปัญหาเมื่อพบว่าปุ่ม “save as PDF” ใน Word ไม่ได้แปลเป็นโค้ด ข่าวดีคือ? ด้วยไม่กี่บรรทัดของ Aspose.Words (หรือไลบรารีที่คล้ายกัน) คุณสามารถทำงานอัตโนมัติทั้งหมด รักษา floating shapes ให้อยู่ในบรรทัดเดียวกัน และแม้กระทั่งทำให้เป็นไปตามมาตรฐาน PDF/UA‑2 ได้โดยไม่ต้องเหนื่อย + +ในบทเรียนนี้คุณจะได้เรียนรู้วิธี **save Word as PDF**, **load docx document C#**, และปรับแต่งตัวเลือกการส่งออกเพื่อให้ไฟล์ที่ได้พร้อมสำหรับการตรวจสอบการเข้าถึง (accessibility audit) เมื่อจบคุณจะมีโปรแกรมที่ทำงานได้เองซึ่งแปลงไฟล์ `.docx` ใด ๆ ให้เป็น PDF ที่สะอาดและเป็นไปตามมาตรฐาน + +> **ทำไมต้องสนใจ?** +> การแปลง DOCX เป็น PDF เป็นความต้องการทั่วไปสำหรับระบบออกใบแจ้งหนี้, ตัวสร้างรายงาน, และกระบวนการจัดเก็บเอกสารโดยอัตโนมัติ การทำอัตโนมัติช่วยลดขั้นตอนที่ต้องทำด้วยมือ, ลดข้อผิดพลาดของมนุษย์, และทำให้ผลลัพธ์ทุกครั้งดูเหมือนกันทุกแพลตฟอร์ม + +--- + +## สิ่งที่คุณต้องมี + +- **.NET 6.0** หรือใหม่กว่า (โค้ดนี้ยังทำงานบน .NET Framework 4.6+ ได้เช่นกัน) +- **Aspose.Words for .NET** (รุ่นทดลองฟรีหรือเวอร์ชันที่มีลิขสิทธิ์) – สามารถติดตั้งผ่าน NuGet: `dotnet add package Aspose.Words` +- ตัวอย่างไฟล์ `input.docx` ที่วางไว้ในโฟลเดอร์ที่คุณควบคุม (เราจะอ้างถึงมันว่า `YOUR_DIRECTORY`) +- Visual Studio, VS Code, หรือเครื่องมือแก้ไข C# ใด ๆ ที่คุณชอบ + +แค่นั้น—ไม่มีบริการเสริม, ไม่มีการเรียก REST. เพียงแค่ C# ธรรมดา + +--- + +## ขั้นตอนที่ 1: โหลดเอกสาร DOCX ใน C# + +ก่อนที่คุณจะ **convert docx to pdf** คุณต้องนำไฟล์ Word เข้ามาในหน่วยความจำ คลาส `Document` ทำหน้าที่นี้ให้คุณ + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** +การโหลดไฟล์ทำให้คุณได้โมเดลวัตถุที่ถูกแยกวิเคราะห์อย่างเต็มที่—ย่อหน้า, ตาราง, floating shapes, ทุกอย่าง มันเป็นขั้นตอนแรกของกระบวนการ **load docx document c#** ใด ๆ และยังตรวจสอบว่าไฟล์ไม่ได้เสียก่อนที่คุณจะเสียเวลาแปลง + +> **เคล็ดลับ:** หากคุณต้องจัดการไฟล์ที่ผู้ใช้อัปโหลด, ควรห่อการเรียก `new Document()` ด้วยบล็อก try/catch เพื่อจัดการไฟล์ DOCX ที่ผิดรูปแบบอย่างสุภาพ + +--- + +## ขั้นตอนที่ 2: ตั้งค่าตัวเลือกการบันทึกเป็น PDF (Compliance & Shape Handling) + +คุณอาจสงสัยว่า “ต้องปรับอะไรบ้างหรือแค่เรียก `Save` ก็พอ?” คำตอบสั้น ๆ: ทำได้, แต่การตั้งค่าตัวเลือกที่ถูกต้องทำให้ PDF มีความเข้าถึงได้และคงรูปลักษณ์เดิม + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** +- `ExportFloatingShapesAsInlineTag = true` ป้องกันวัตถุที่ลอยอยู่ไม่ให้หายหรือจัดตำแหน่งผิดเมื่อเปิด PDF บนอุปกรณ์ต่าง ๆ +- `Compliance = PdfCompliance.PdfUa2` ทำให้ผลลัพธ์สอดคล้องกับมาตรฐาน PDF/UA‑2 ซึ่งสำคัญสำหรับการทำงานร่วมกับโปรแกรมอ่านหน้าจอและการเก็บเอกสารตามกฎหมาย + +หากคุณไม่ต้องการความเข้าถึงได้, คุณสามารถลบบรรทัด `Compliance` ได้, แต่การเก็บไว้ไม่เพิ่มภาระใด ๆ มากและทำให้โซลูชันของคุณพร้อมสำหรับอนาคต + +--- + +## ขั้นตอนที่ 3: บันทึกเอกสารเป็น PDF – การกระทำหลักของ **Convert DOCX to PDF** + +เมื่อเอกสารถูกโหลดและตั้งค่าตัวเลือกเรียบร้อยแล้ว การแปลงจริงเป็นเพียงการเรียกเมธอดเดียว + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**สิ่งที่คุณจะเห็น:** +เมื่อรันโปรแกรมจะสร้าง `output.pdf` ในโฟลเดอร์เดียวกัน เปิดไฟล์ด้วยโปรแกรมอ่าน PDF ใดก็ได้แล้วคุณจะสังเกตว่า: + +- ข้อความ, ตาราง, และรูปภาพทั้งหมดปรากฏเหมือนเดิมกับ DOCX ต้นฉบับ +- Floating shapes ถูกเก็บไว้เป็น inline, รักษาเลย์เอาต์เดิมไว้ +- ไฟล์ผ่านการตรวจสอบพื้นฐานของ PDF/UA‑2 (เช่น Adobe Acrobat Preflight) + +--- + +## ตัวอย่างทำงานเต็มรูปแบบ – ตั้งแต่ต้นจนจบ + +ด้านล่างเป็นแอปคอนโซลที่พร้อมรันซึ่งสาธิตกระบวนการทั้งหมด คัดลอก‑วางลงในโปรเจกต์ C# ใหม่แล้วกด **F5** + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**ผลลัพธ์ที่คาดว่าจะเห็นในคอนโซล:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +และไฟล์ `output.pdf` ที่เรียบร้อยจะอยู่ข้างไฟล์ซอร์สของคุณ + +--- + +## คำถามที่พบบ่อย & กรณีขอบเขต + +| คำถาม | คำตอบ | +|----------|--------| +| **Can I convert a DOCX stored in a `MemoryStream`?** | แน่นอน ใช้ `new Document(stream)` แทนการระบุพาธไฟล์ | +| **What if the DOCX contains macros?** | Aspose.Words จะละเว้นแมโคร VBA โดยค่าเริ่มต้น; แมโครจะไม่ปรากฏใน PDF | +| **Do I need a license for production?** | รุ่นทดลองฟรีจะใส่ลายน้ำหลังจากจำนวนหน้าที่กำหนด; สำหรับการใช้งานเชิงพาณิชย์ ควรซื้อไลเซนส์เพื่อเอาลายน้ำออก | +| **How do I change the PDF page size?** | ตั้งค่า `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` ก่อนบันทึก | +| **Is there a way to embed a custom font?** | มี — เพิ่ม `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` | + +--- + +## เคล็ดลับระดับมืออาชีพสำหรับประสบการณ์ **Save Word as PDF** ที่ราบรื่น + +- **การประมวลผลเป็นชุด:** ห่อโลจิกการแปลงไว้ในลูปและป้อนรายการพาธ DOCX หลายไฟล์ +- **ประสิทธิภาพ:** ใช้ instance ของ `PdfSaveOptions` เพียงอันเดียวเมื่อแปลงหลายไฟล์; จะลดภาระ GC +- **การบันทึกล็อก:** แสดงขนาดของ PDF ที่สร้าง (`new FileInfo(outputPath).Length`) เพื่อเฝ้าติดตามผลการบีบอัด +- **การจัดการข้อผิดพลาด:** แยกแยะระหว่าง `FileNotFoundException` (ไฟล์ DOCX ไม่พบ) และ `UnauthorizedAccessException` (ปัญหาการเขียนไฟล์) + +--- + +## สรุป + +ตอนนี้คุณมีรูปแบบที่แข็งแรงและพร้อมใช้งานในระดับ production เพื่อ **convert DOCX to PDF** ใน C# โดยการโหลด DOCX, ตั้งค่าตัวเลือกการบันทึก PDF, และเรียก `Save` คุณสามารถ **save Word as PDF**, รักษาเลย์เอาต์ที่ละเอียดอ่อน, และปฏิบัติตามมาตรฐานการเข้าถึงได้ทั้งหมดในไม่กี่บรรทัดของโค้ด + +พร้อมรับความท้าทายต่อไปหรือยัง? ลองสลับ `PdfSaveOptions` เป็น `ImageSaveOptions` เพื่อ **save Word as PNG**, หรือสำรวจคลาส `HtmlSaveOptions` เพื่อสร้างผลลัพธ์แบบเว็บ ไม่ว่าคุณจะเลือกอะไร, พื้นฐาน **load docx document c#** ยังคงใช้ได้ ทำให้โค้ดของคุณพร้อมสำหรับอนาคต + +ขอให้เขียนโค้ดอย่างสนุกสนานและขอให้ PDF ของคุณผ่านมาตรฐานเสมอ! + +--- + +![ตัวอย่างผลลัพธ์การแปลง DOCX เป็น PDF](convert-docx-to-pdf-output.png "ตัวอย่างผลลัพธ์การแปลง DOCX เป็น 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/thai/net/programming-with-loadoptions/_index.md b/words/thai/net/programming-with-loadoptions/_index.md index 7be3ff7a3c..453acad17d 100644 --- a/words/thai/net/programming-with-loadoptions/_index.md +++ b/words/thai/net/programming-with-loadoptions/_index.md @@ -33,6 +33,7 @@ | [แปลงไฟล์ Metafile เป็น PNG](./convert-metafiles-to-png/) | แปลงไฟล์เมตาเป็น PNG ในเอกสาร Word ได้อย่างง่ายดายโดยใช้ Aspose.Words สำหรับ .NET ด้วยบทช่วยสอนทีละขั้นตอนนี้ ทำให้การจัดการเอกสารของคุณง่ายขึ้น | | [โหลดไฟล์ CHM ในเอกสาร Word](./load-chm/) | โหลดไฟล์ CHM ลงในเอกสาร Word ได้อย่างง่ายดายโดยใช้ Aspose.Words สำหรับ .NET ด้วยบทช่วยสอนแบบทีละขั้นตอนนี้ เหมาะอย่างยิ่งสำหรับการรวบรวมเอกสารทางเทคนิคของคุณ | | [Aspose Load Options – โหลดไฟล์ DOCX พร้อมการตั้งค่าแบบอักษรที่กำหนดเอง](./aspose-load-options-load-docx-with-custom-font-settings/) | เรียนรู้วิธีโหลดไฟล์ DOCX พร้อมการตั้งค่าแบบอักษรแบบกำหนดเองโดยใช้ Aspose.Words สำหรับ .NET | +| [กู้คืนไฟล์ DOCX ที่เสีย – คู่มือ C# ฉบับสมบูรณ์เพื่อแก้ไขและบันทึกไฟล์](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | เรียนรู้วิธีกู้คืนไฟล์ DOCX ที่เสียหายด้วย Aspose.Words สำหรับ .NET ด้วยคู่มือขั้นตอนเต็มที่ช่วยแก้ไขและบันทึกไฟล์ | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/thai/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..75941390f7 --- /dev/null +++ b/words/thai/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: เรียนรู้วิธีกู้คืนไฟล์ DOCX ที่เสียหายใน C# และบันทึกเอกสารที่กู้คืนอย่างปลอดภัย + คู่มือทีละขั้นตอนพร้อมตัวอย่าง Aspose.Words +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: th +og_description: กู้ไฟล์ DOCX ที่เสียหายใน C# และบันทึกเอกสารที่กู้ได้ด้วย Aspose.Words. + โค้ดเต็ม, คำอธิบาย, และเคล็ดลับการปฏิบัติที่ดีที่สุด. +og_title: กู้คืนไฟล์ DOCX ที่เสียหาย – คู่มือ C# ทีละขั้นตอน +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: กู้คืนไฟล์ DOCX ที่เสียหาย – คู่มือ C# ฉบับครบถ้วนสำหรับการแก้ไขและบันทึกไฟล์ +url: /th/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# กู้ไฟล์ DOCX ที่เสีย – คู่มือ C# ฉบับสมบูรณ์สำหรับการแก้ไขและบันทึกไฟล์ + +เคยลองเปิดไฟล์ DOCX ที่ดูปกติใน Explorer แต่กลับทำให้แอปของคุณโยนข้อยกเว้นหรือไม่? นั่นคือฝันร้ายคลาสสิกของ “ไฟล์ Word เสีย” ซึ่งมักจบด้วย stack‑trace ที่คุณไม่อยากเห็น ข่าวดีคือ Aspose.Words มีฟีเจอร์ **recover corrupted docx** ที่ทำให้คุณสามารถทำงานต่อได้แม้ไฟล์จะเสีย + +ในบทแนะนำนี้เราจะพาคุณผ่านขั้นตอนที่แน่นอนเพื่อโหลดเอกสารที่เสีย, บอกไลบรารีให้ทำต่อ, และจากนั้น **save recovered document** ไปยังไฟล์ใหม่ที่สะอาด สุดท้ายคุณจะเข้าใจว่าทำไมโหมดการกู้คืนจึงสำคัญ, วิธีการตั้งค่า, และข้อควรระวังที่ต้องหลีกเลี่ยง—ไม่มีการอ้างอิงแบบกว้าง ๆ อย่าง “ดูเอกสาร” + +## สิ่งที่คุณต้องมี + +- **Aspose.Words for .NET** (เวอร์ชันล่าสุดใด ๆ; ใช้ 24.11 ในการเขียนคู่มือนี้) +- สภาพแวดล้อมการพัฒนา .NET (Visual Studio, Rider หรือ VS Code พร้อมส่วนขยาย C#) +- ไฟล์ DOCX ตัวอย่างที่คุณสงสัยว่าเสีย (คุณสามารถทำให้ไฟล์เสียได้โดยเปิดในโปรแกรมแก้ไข zip แล้วลบส่วนหนึ่ง, เพื่อการทดสอบ) +- ความรู้พื้นฐาน C#—ไม่มีอะไรซับซ้อน เพียงความสามารถในการสร้างแอปคอนโซล + +ถ้าคุณมีทั้งหมดแล้ว เยี่ยม—มาเริ่มต้นแก้ปัญหากันเลย + +## ขั้นตอนที่ 1: ตั้งค่า LoadOptions ด้วยกลยุทธ์การกู้คืนที่เหมาะสม + +หัวใจของการแก้ไขคืออ็อบเจกต์ `LoadOptions` ซึ่งบอก Aspose.Words ว่าจะทำอย่างไรเมื่อพบ XML ที่ผิดรูปหรือส่วนที่หายไปในแพคเกจ DOCX ธง `RecoveryMode.RecoverAndContinue` เป็นตัวที่ยอมรับมากที่สุด—มันพยายามกู้คืนสิ่งที่ทำได้และข้ามส่วนที่เหลือ + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**ทำไมเรื่องนี้ถึงสำคัญ:** หากคุณละ `LoadOptions` หรือใช้โหมดเริ่มต้น (`RecoveryMode.NoRecovery`) ตัวสร้าง `Document` จะโยนข้อยกเว้นทันทีที่พบปัญหา ด้วย `RecoverAndContinue` API จะละเลยข้อผิดพลาดที่ไม่สำคัญและสร้างอ็อบเจกต์เอกสารบางส่วนที่คุณยังคงสามารถทำงานได้ + +> **เคล็ดลับมืออาชีพ:** สำหรับชุดไฟล์จำนวนมาก ควรห่อการเรียกโหลดด้วยบล็อก `try/catch` เสมอ—บางข้อผิดพลาดเป็นข้อร้ายแรงจริง ๆ (เช่น ไฟล์ `[Content_Types].xml` หาย) และไม่สามารถกู้คืนได้ + +## ขั้นตอนที่ 2: โหลด DOCX ที่อาจเสีย + +เมื่อกำหนดตัวเลือกเรียบร้อยแล้ว ให้โหลดไฟล์ของคุณ ตัวสร้างรับพาธไฟล์และ `LoadOptions` ที่เราเตรียมไว้ + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**อะไรที่เกิดขึ้นภายใน?** +Aspose.Words ทำการแยก ZIP container, อ่านแต่ละส่วน XML, และพยายามสร้าง Open XML DOM ใหม่ เมื่อเจอส่วนที่เสีย เครื่องยนต์กู้คืนจะบันทึกคำเตือน (มองเห็นในคอนโซลหากเปิดการวินิจฉัย) และดำเนินต่อไป อ็อบเจกต์ `Document` ที่ได้อาจขาดบางย่อหน้า หรือรูปภาพบางส่วน แต่เนื้อหาที่เหลือยังคงสมบูรณ์ + +## ขั้นตอนที่ 3: ตรวจสอบเนื้อหาที่กู้คืน (ไม่บังคับแต่แนะนำ) + +ก่อนที่คุณจะบันทึกไฟล์ลงดิสก์ ควรตรวจสอบโหนดบางส่วนเพื่อให้แน่ใจว่าช่วงสำคัญยังคงอยู่ + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +หากผลลัพธ์ดูสมเหตุสมผล คุณได้ทำการ **recover corrupted docx** เนื้อหาอย่างสำเร็จ หากคุณพบว่ามีส่วนที่หายไป คุณยังคงสามารถตัดสินใจว่าจะดำเนินต่อหรือไม่—บางครั้งส่วนที่หายไปเป็นเพียงการตกแต่งเท่านั้น + +## ขั้นตอนที่ 4: บันทึกเอกสารที่กู้คืน + +นี่คือส่วนที่นักพัฒนาส่วนใหญ่ถาม: “ฉันจะ **save recovered document** อย่างไรโดยไม่ทำให้ความเสียหายเดิมกลับมา?” คำตอบคือเรียก `Document.Save` พร้อมพาธใหม่ Aspose.Words จะเขียนแพคเกจ ZIP ใหม่ทั้งหมด ดังนั้นส่วนที่เสียจะไม่ถูกบันทึก + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**ทำไมวิธีนี้ถึงได้ผล:** เมธอด `Save` จะทำการซีเรียลไลซ์ DOM ในหน่วยความจำกลับเป็นแพคเกจ Open XML ที่สะอาด เนื่องจากส่วนที่เสียไม่ได้ถูกโหลดเข้าสู่ DOM (ถูกทิ้งระหว่างการกู้คืน) จึงไม่ปรากฏในไฟล์ใหม่ ผลลัพธ์คือ DOCX ที่สมบูรณ์ซึ่งเปิดได้ใน Word, Google Docs หรือโปรแกรมดูอื่น ๆ + +## ขั้นตอนที่ 5: ทำกระบวนการอัตโนมัติสำหรับหลายไฟล์ (โบนัส) + +ในสถานการณ์จริงคุณมักมีโฟลเดอร์ที่เต็มไปด้วยไฟล์ที่มีปัญหา ห่อขั้นตอนก่อนหน้าในลูป แล้วคุณจะได้ยูทิลิตี้กู้คืนขนาดเล็ก + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +ตอนนี้คุณสามารถวางไดเรกทอรีของไฟล์ DOCX ที่เสียทั้งหมดลงใน `C:\Docs\Batch` แล้วให้สคริปต์ทำความสะอาดโดยอัตโนมัติ + +## คำถามทั่วไป & กรณีขอบ + +| Question | Answer | +|----------|--------| +| **ทำงานกับไฟล์ .doc ได้หรือไม่?** | คลาส `LoadOptions` เดียวกันใช้ได้ แต่คุณต้องอ้างอิงรูปแบบ Word เก่า (`doc`). Aspose.Words ยังสามารถกู้คืนได้ แม้ว่ารูปแบบข้อผิดพลาดจะแตกต่างกัน | +| **ไฟล์ถูกป้องกันด้วยรหัสผ่านจะทำอย่างไร?** | การกู้คืนจะไม่ข้ามการเข้ารหัส คุณต้องระบุรหัสผ่านผ่าน `LoadOptions.Password` | +| **รูปภาพจะหายไปหรือไม่?** | เฉพาะรูปภาพที่เป็นส่วนของ XML ที่เสียอาจถูกละเว้น ส่วนที่เหลือจะถูกเก็บไว้เนื่องจากเป็นสตรีมไบนารีแยก | +| **ฉันสามารถบันทึกคำเตือนที่ Aspose สร้างขึ้นได้หรือไม่?** | ได้—ตั้งค่า `LoadOptions.LoadFormat` เป็น `LoadFormat.Docx` แล้วสมัครรับ `Document.WarningCallback` เพื่อเก็บข้อความรายละเอียด | +| **`RecoverAndContinue` ปลอดภัยสำหรับการใช้งานจริงหรือไม่?** | โดยทั่วไปใช่ แต่ควรทดสอบกับข้อมูลของคุณ ในไพพ์ไลน์ที่สำคัญอาจต้องทำเครื่องหมายเอกสารที่ต้องการการกู้คืนเพื่อการตรวจสอบภายหลัง | + +## ตัวอย่างทำงานเต็มรูปแบบ (พร้อมคัดลอก‑วาง) + +ด้านล่างเป็นโปรแกรมเต็มที่คุณสามารถคอมไพล์เป็นแอปคอนโซล มันรวมทุกขั้นตอน การจัดการข้อผิดพลาด และตรรกะการประมวลผลแบบแบตช์ (ไม่บังคับ) + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**ผลลัพธ์ที่คาดหวัง:** หลังจากรันโปรแกรม `Recovered.docx` จะเปิดใน Microsoft Word โดยไม่มีกล่องข้อความข้อผิดพลาดเดิม ส่วนที่เสียมากจะถูกละเว้น แต่เนื้อหาหลัก, หัวข้อ, และรูปภาพส่วนใหญ่ยังคงอยู่ + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## สรุป + +เราได้ครอบคลุมทุกสิ่งที่คุณต้องการเพื่อ **recover corrupted docx** ไฟล์ด้วย Aspose.Words ตั้งแต่การกำหนดค่า `LoadOptions` จนถึงการ **save recovered document** อย่างปลอดภัย ประเด็นสำคัญคือ: + +- ใช้ `RecoveryMode.RecoverAndContinue` เพื่อให้ไลบรารีละเลยข้อผิดพลาดที่ไม่สำคัญ +- ตรวจสอบเนื้อหาที่โหลดก่อนบันทึก โดยเฉพาะเมื่อจัดการกับเอกสารธุรกิจที่สำคัญ +- การบันทึกเอกสารจะสร้างแพคเกจ ZIP ที่สะอาด ทำให้ขจัดความเสียหายเดิมออกไป +- รูปแบบเดียวกันสามารถขยายเป็นการประมวลผลแบบแบตช์ ทำให้ทำความสะอาดคลังเอกสารขนาดใหญ่ได้อัตโนมัติ + +พร้อมก้าวต่อหรือยัง? ลองผสานตรรกะนี้เข้าไปในบริการเบื้องหลังที่ตรวจสอบโฟลเดอร์อัปโหลด หรือทดลองใช้ `WarningCallback` เพื่อสร้างรายงานไฟล์ที่ต้องการการกู้คืน ยิ่งคุณทดลองกับ API มากเท่าไหร่ คุณก็จะยิ่งชื่นชมความแข็งแกร่งของ Aspose.Words สำหรับการประมวลผลเอกสารในโลกจริง + +มีเคล็ดลับที่อยากแชร์บ้างไหม—เช่นการจัดการไฟล์ที่ป้องกันด้วยรหัสผ่านหรือการรวมเอกสารที่กู้คืน? แสดงความคิดเห็นด้านล่างและเราจะต่อเนื่องการสนทนากัน. 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/thai/net/programming-with-markdownsaveoptions/_index.md b/words/thai/net/programming-with-markdownsaveoptions/_index.md index 57c58415e0..fe74ba543a 100644 --- a/words/thai/net/programming-with-markdownsaveoptions/_index.md +++ b/words/thai/net/programming-with-markdownsaveoptions/_index.md @@ -44,6 +44,9 @@ ### [วิธีส่งออก Markdown จาก DOCX – คู่มือเต็ม C#](./how-to-export-markdown-from-docx-complete-guide/) เรียนรู้วิธีส่งออก Markdown จากไฟล์ DOCX ด้วย Aspose.Words สำหรับ .NET อย่างละเอียดด้วยขั้นตอนที่ชัดเจน +### [บันทึก Word เป็น Markdown พร้อมโฟลเดอร์รูปภาพแบบกำหนดเอง – คู่มือเต็ม](./save-word-as-markdown-with-custom-image-folder-full-guide/) +เรียนรู้วิธีบันทึกไฟล์ Word เป็น Markdown โดยกำหนดโฟลเดอร์รูปภาพของคุณเองอย่างละเอียดด้วย Aspose.Words สำหรับ .NET + {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/thai/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..b281902c24 --- /dev/null +++ b/words/thai/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: บันทึกไฟล์ Word เป็น Markdown และดึงรูปภาพจากไฟล์ docx โดยใช้ callback. + เรียนรู้วิธีใช้ callback เพื่อจัดเก็บโฟลเดอร์รูปภาพ Markdown อย่างมีประสิทธิภาพ. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: th +og_description: บันทึกไฟล์ Word เป็น Markdown และดึงรูปภาพจากไฟล์ docx ด้วย callback + คู่มือนี้แสดงวิธีใช้ callback เพื่อสร้างโฟลเดอร์รูปภาพ Markdown. +og_title: บันทึก Word เป็น Markdown – คู่มือขั้นตอนโดยละเอียด +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: บันทึก Word เป็น Markdown พร้อมโฟลเดอร์รูปภาพที่กำหนดเอง – คู่มือเต็ม +url: /th/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# บันทึก Word เป็น Markdown – คู่มือขั้นตอนเต็ม + +เคยต้องการ **บันทึก Word เป็น Markdown** แต่ไม่แน่ใจว่าจะจัดการกับรูปภาพที่ฝังอยู่ได้อย่างไรหรือไม่? คุณไม่ได้อยู่คนเดียว ในหลายโครงการผลลัพธ์ markdown ดูดี—*จนกว่า* คุณจะพบว่าลิงก์รูปภาพเสียหายเพราะไฟล์ไม่ได้ออกมาจากแพ็กเกจ Word + +ข่าวดีคือ Aspose.Words มีวิธีที่สะอาดในการ **extract images from docx** และวางไว้ตรงที่คุณต้องการ โดยใช้ **callback** ที่ให้คุณควบคุมโฟลเดอร์รูปภาพ markdown ได้ ในบทแนะนำนี้เราจะเดินผ่านกระบวนการทั้งหมด ตั้งแต่การโหลดไฟล์ `.docx` จนถึงการได้โฟลเดอร์ PNG (หรือรูปแบบใดก็ได้ที่คุณมี) ที่เป็นระเบียบและไฟล์ markdown ที่อ้างอิงไปยังไฟล์เหล่านั้น + +เมื่ออ่านจบคุณจะสามารถ: + +* แปลงเอกสาร Word ใด ๆ เป็น Markdown ด้วยบรรทัดโค้ดเดียว +* ดึงรูปภาพทุกภาพออกไปยังโฟลเดอร์ย่อย `images` ที่แยกจากกันโดยอัตโนมัติ +* ปรับแต่งชื่อไฟล์ให้ไม่ซ้ำกัน แม้แหล่งที่มาจะมีรูปภาพหลายสิบรูป + +ไม่มีสคริปต์ภายนอก ไม่มีการคัดลอก‑วางด้วยมือ—เพียงแค่ C# และ Aspose.Words + +## Prerequisites + +ก่อนที่เราจะลงลึก ให้แน่ใจว่าคุณมี: + +* **Aspose.Words for .NET** (เวอร์ชันเสถียรล่าสุด; ณ เวลาที่เขียนคือ 24.9) +* สภาพแวดล้อมการพัฒนา .NET (Visual Studio, Rider, หรือ `dotnet` CLI) +* เอกสาร Word (`.docx`) ที่มีอย่างน้อยหนึ่งรูปภาพ—สมมติชื่อ `DocWithImages.docx` + +หากคุณยังไม่เคยใช้ Aspose.Words ไม่ต้องกังวล ไลบรารีนี้เป็น Managed ทั้งหมด ไม่ต้องใช้ COM interop และทำงานบน .NET 6+ รวมถึง .NET Framework 4.8 ด้วย + +## Step 1 – Set Up the Project and Install the Package + +เริ่มต้นโดยสร้างแอปคอนโซลใหม่ (หรือเพิ่มโค้ดนี้ลงในโปรเจกต์ที่มีอยู่) + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **เคล็ดลับ:** หากคุณกำหนดเป้าหมายเป็น .NET 6, `Program.cs` เริ่มต้นจะใช้ top‑level statements อยู่แล้ว ทำให้ตัวอย่างสั้นกระชับ + +## Step 2 – Create a Callback to Control Image Saving + +Aspose.Words จะเรียก `IResourceSavingCallback.ResourceSaving` สำหรับทุกทรัพยากรภายนอกที่ต้องเขียน (รูปภาพ, CSS, ฯลฯ) การทำ implement อินเทอร์เฟซนี้ทำให้คุณมีอำนาจเต็มในการ **ควบคุมโฟลเดอร์รูปภาพ markdown** + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### ทำไมต้องใช้ callback? + +* **การควบคุมระดับละเอียด** – คุณกำหนดโครงสร้างโฟลเดอร์และรูปแบบการตั้งชื่อเอง +* **ประสิทธิภาพ** – เขียนสตรีมเพียงครั้งเดียว หลีกเลี่ยงการเขียนซ้ำของไลบรารี +* **ความยืดหยุ่น** – สามารถเพิ่มการบันทึก log, ปรับปรุงภาพ, หรืออัปโหลดไปยังคลาวด์ได้ในขั้นตอนนี้ + +## Step 3 – Load the Word Document + +เมื่อ callback พร้อมแล้ว เราแค่ชี้ Aspose.Words ไปที่ไฟล์ต้นฉบับ + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **ถ้าไฟล์ไม่พบจะเกิดอะไรขึ้น?** +> `Document` จะโยน `FileNotFoundException` ให้คุณ หากคาดว่าเส้นทางจะเปลี่ยนแปลง ควรห่อการโหลดด้วย `try/catch` + +## Step 4 – Wire Up the MarkdownSaveOptions + +คลาส `MarkdownSaveOptions` ให้เราต่อ callback ที่สร้างไว้ เรายังตั้งค่าโฟลเดอร์ที่รูปภาพจะอยู่สัมพันธ์กับไฟล์ markdown ด้วย + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +คุณสมบัติ `ImagesFolder` บอก Aspose ให้สร้างลิงก์ markdown เช่น `![Alt text](images/img_123.png)` เนื่องจากเรายังตั้งค่า `ResourceFileName` ภายใน callback ไฟล์จริงจึงถูกบันทึกลงที่ตำแหน่งนั้นโดยตรง + +## Step 5 – Save as Markdown and Verify the Result + +สุดท้าย เราเขียนไฟล์ markdown Callback จะได้สร้างโฟลเดอร์ `images` ย่อยไว้เรียบร้อยแล้ว + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### ผลลัพธ์ที่คาดหวัง + +เมื่อรันโปรแกรมจะพิมพ์อะไรบางอย่างเช่น: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +เปิด `Doc.md` ด้วยโปรแกรมดู markdown ใด ๆ คุณจะเห็นลิงก์รูปภาพที่ชี้ไปยังโฟลเดอร์ `images` อย่างถูกต้อง + +--- + +## Frequently Asked Questions (FAQ) + +### จะ **extract images from docx** อย่างไรโดยไม่แปลงเป็น markdown? + +คุณสามารถใช้ `MyMarkdownResourceCallback` เดิมแล้วส่งให้ `doc.Save("images.zip", SaveFormat.Zip)` Callback จะยังคงทำงานสำหรับแต่ละรูปภาพ ทำให้คุณวางไฟล์ได้ตามที่ต้องการ + +### ถ้าต้องการ **รูปแบบภาพที่ต่างกัน** จะทำอย่างไร? + +`args.FileName` มีส่วนขยายเดิมอยู่แล้ว (`.png`, `.jpg` ฯลฯ) หากต้องการแปลงทั้งหมดเป็นรูปแบบเดียว ให้เพิ่มขั้นตอนการแปลงภายใน `ResourceSaving` ก่อนเขียนสตรีม + +### สามารถ **customize the markdown images folder** สำหรับแต่ละเอกสารได้หรือไม่? + +ทำได้แน่นอน Callback รับพาธโฟลเดอร์ผ่าน constructor ดังนั้นคุณสามารถสร้าง callback ใหม่พร้อมโฟลเดอร์ต่าง ๆ สำหรับแต่ละเอกสารในกระบวนการ batch + +### วิธีนี้ทำงานกับ **เอกสารขนาดใหญ่** (หลายร้อยรูป) หรือไม่? + +ทำได้ ใช้ callback สตรีมภาพโดยตรงไปยังดิสก์ ทำให้การใช้หน่วยความจำต่ำ เพียงตรวจสอบให้ไดรฟ์เป้าหมายมีพื้นที่เพียงพอและไม่เกินขีดจำกัดของ OS สำหรับไฟล์แฮนด์เดิล + +--- + +## Full Working Example + +ด้านล่างเป็นโปรแกรมเต็มพร้อมคัดลอก‑วาง ใช้ `YOUR_DIRECTORY` แทนพาธแบบ absolute หรือ relative ที่เหมาะกับสภาพแวดล้อมของคุณ + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +เรียกใช้โปรแกรม (`dotnet run`) แล้วคุณจะเห็น `Doc.md` ที่สร้างใหม่พร้อมโฟลเดอร์ `images` ย่อยที่มีไฟล์ + +{{< /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-officemath/_index.md b/words/thai/net/programming-with-officemath/_index.md index 17ee59f1ad..39164eba67 100644 --- a/words/thai/net/programming-with-officemath/_index.md +++ b/words/thai/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ | ชื่อเรื่อง | คำอธิบาย | - - [สมการคณิตศาสตร์](./math-equations/) | เรียนรู้วิธีการกำหนดค่าสมการทางคณิตศาสตร์ในเอกสาร Word โดยใช้ Aspose.Words สำหรับ .NET คำแนะนำทีละขั้นตอนพร้อมตัวอย่าง คำถามที่พบบ่อย และอื่นๆ | - +- [บันทึก docx เป็น txt – ส่งออก Word Math ไปเป็น LaTeX ใน C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | เรียนรู้วิธีบันทึกไฟล์ docx เป็น txt และส่งออกสมการ Word Math เป็น LaTeX ด้วย C# | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/thai/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..7279838402 --- /dev/null +++ b/words/thai/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: บันทึกไฟล์ docx เป็น txt อย่างรวดเร็วและเรียนรู้วิธีส่งออกคณิตศาสตร์เป็น + LaTeX. แปลง Word เป็น txt, จัดการ Office Math, และคงสมการไว้ครบถ้วน. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: th +og_description: บันทึกไฟล์ docx เป็น txt พร้อมการส่งออกสูตร LaTeX. คำแนะนำ C# ทีละขั้นตอนที่แสดงวิธีแปลง + Word เป็น txt และรักษาสมการไว้. +og_title: บันทึก docx เป็น txt – คู่มือ C# สำหรับส่งออกคณิตศาสตร์ใน Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: บันทึกไฟล์ docx เป็น txt – ส่งออกสมการ Word ไปเป็น LaTeX ใน C# +url: /th/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# บันทึก docx เป็น txt – ส่งออก Word Math เป็น LaTeX ใน C# + +เคยต้องการ **save docx as txt** แต่กังวลว่าสมการของคุณจะกลายเป็นสัญลักษณ์ที่ยุ่งเหยิงหรือไม่? คุณไม่ได้อยู่คนเดียว นักพัฒนาหลายคนเจออุปสรรคนี้เมื่อต้อง **convert word to txt** เพื่อการประมวลผลต่อไป โดยเฉพาะเมื่อแหล่งข้อมูลมีวัตถุ Office Math + +ข่าวดีคือ? ด้วยไม่กี่บรรทัดของ C# และตัวเลือกการบันทึกที่เหมาะสม คุณสามารถเก็บสมการทุกสมการเป็น LaTeX ที่สะอาด ทำให้ไฟล์ข้อความธรรมดาอ่านง่ายและพร้อมสำหรับกระบวนการทางวิทยาศาสตร์ ในบทแนะนำนี้เราจะเดินผ่านกระบวนการทั้งหมด ตอบคำถาม *how to export math* จากไฟล์ Word และแสดงให้คุณเห็น *how to convert docx* โดยไม่สูญเสียความแม่นยำของสมการ + +## สิ่งที่คุณจะได้เรียนรู้ + +- โหลดไฟล์ `.docx` ด้วย Aspose.Words (หรือไลบรารีที่เข้ากันได้) +- กำหนดค่า `TxtSaveOptions` เพื่อให้ Office Math ถูกส่งออกเป็น LaTeX +- บันทึกเอกสารเป็นไฟล์ `.txt` ที่รักษาสมการไว้ครบถ้วน +- เคล็ดลับการจัดการกรณีขอบเช่นสมการที่ซ่อนอยู่หรือเอกสารขนาดใหญ่ +- ตัวอย่างโค้ดที่สมบูรณ์และรันได้ที่คุณสามารถคัดลอก‑วางได้ทันที + +ไม่ต้องใช้เครื่องมือสร้างที่ซับซ้อน เพียงโครงการ .NET และแพคเกจ Aspose.Words NuGet เท่านั้น เริ่มกันเลย + +--- + +## ข้อกำหนดเบื้องต้น + +| ข้อกำหนด | เหตุผลที่สำคัญ | +|-------------|----------------| +| .NET 6.0 หรือใหม่กว่า | ฟีเจอร์ภาษาใหม่และประสิทธิภาพที่ดีกว่า | +| Aspose.Words for .NET (NuGet) | ให้บริการ `Document`, `TxtSaveOptions` และ `OfficeMathExportMode` | +| ไฟล์ Word (`.docx`) ที่มีสมการ | เพื่อดูการส่งออก LaTeX ทำงาน | +| ความรู้พื้นฐาน C# | คุณจะตามโค้ดทีละบรรทัด | + +หากคุณยังไม่ได้เพิ่ม Aspose.Words ให้รัน: + +```bash +dotnet add package Aspose.Words +``` + +แค่นั้น—ไม่ต้องกำหนดค่าเพิ่มเติม + +## ขั้นตอนที่ 1: โหลดไฟล์ DOCX + +แรกสุด เราต้องโหลดเอกสารต้นฉบับเข้าสู่หน่วยความจำ คิดว่าเป็นการเปิดหนังสือก่อนเริ่มอ่าน + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **เคล็ดลับ:** ใช้เส้นทางแบบเต็มระหว่างการทดสอบเพื่อหลีกเลี่ยงความประหลาดใจ “ไฟล์ไม่พบ” ในการใช้งานจริงคุณอาจได้รับเส้นทางจากไฟล์การตั้งค่าหรือการอัปโหลดของผู้ใช้ + +## ขั้นตอนที่ 2: กำหนดค่า TXT Save Options สำหรับการส่งออก Math + +โดยค่าเริ่มต้น `TxtSaveOptions` จะบันทึกข้อความธรรมดาและลบ Office Math ออก เราไม่ต้องการเช่นนั้น การตั้งค่า `OfficeMathExportMode` เป็น `LaTeX` จะบอกไลบรารีให้แปลงแต่ละสมการเป็นรูปแบบ LaTeX + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### ทำไมต้อง LaTeX? + +LaTeX เป็นภาษากลางของการตีพิมพ์ทางวิทยาศาสตร์ เมื่อคุณนำไฟล์ `.txt` ไปใส่ในตัวประมวลผล markdown, Jupyter notebook หรือเครื่องมือใด ๆ ที่รองรับ LaTeX สมการจะถูกแสดงอย่างสมบูรณ์ หากคุณต้องการสัญลักษณ์ Unicode ธรรมดาแทน คุณสามารถเปลี่ยนเป็น `OfficeMathExportMode.Unicode` แต่ LaTeX ให้การควบคุมสูงสุด + +## ขั้นตอนที่ 3: บันทึกเอกสารเป็นไฟล์ข้อความธรรมดา + +ตอนนี้จุดมหัศจรรย์เกิดขึ้น เมธอด `Save` จะเขียนเอกสารลงดิสก์โดยใช้ตัวเลือกที่เรากำหนดไว้ + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +หลังจากบรรทัดนี้ทำงาน `Math.txt` จะมีเนื้อหา: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +สังเกตว่าสมการปรากฏอยู่ภายใน `\[` และ `\]` — ตรงกับที่ LaTeX คาดหวัง + +## วิธีส่งออก Math จากเอกสารที่ซับซ้อน + +### การจัดการสมการที่ซ่อนหรืออยู่ในบรรทัดเดียว + +ไฟล์ Word บางไฟล์เก็บสมการไว้ในกรอบข้อความที่ซ่อนอยู่ Aspose.Words จะจัดการเช่นเดียวกับสมการที่มองเห็นได้ ดังนั้นการส่งออก LaTeX จะทำงานอัตโนมัติ อย่างไรก็ตาม หากคุณพบสมการหายไป ตรวจสอบให้แน่ใจว่าอ็อบเจ็กต์ `Document` ไม่ได้ตั้งค่าให้ละเว้นเนื้อหาที่ซ่อนอยู่: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### เอกสารขนาดใหญ่และการใช้หน่วยความจำ + +การบันทึกวิทยานิพนธ์ 500 หน้าอาจใช้ RAM มาก เพื่อให้การใช้หน่วยความจำน้อยลง คุณสามารถสตรีมผลลัพธ์ได้: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +การสตรีมจะเขียนข้อมูลเป็นชิ้นส่วนลงดิสก์ขณะสร้าง ทำให้ไฟล์ทั้งหมดไม่ต้องอยู่ในหน่วยความจำพร้อมกัน + +## ข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยง + +| ข้อผิดพลาด | อาการ | วิธีแก้ | +|---------|---------|-----| +| ขาดวงเล็บ LaTeX | สมการแสดงเป็นโค้ดดิบ (`E = mc^{2}`) | ตรวจสอบให้ `OfficeMathExportMode = LaTeX`. | +| ไฟล์ผลลัพธ์ว่าง | เส้นทางผิดหรือสิทธิ์ไม่เพียงพอ | ตรวจสอบว่าไดเรกทอรีผลลัพธ์มีอยู่และสามารถเขียนได้ | +| อักขระผิดรูป | ไฟล์เข้ารหัสเป็น UTF‑8 โดยไม่มี BOM บนระบบที่คาดหวัง ANSI | เพิ่ม `txtSaveOptions.Encoding = Encoding.UTF8;` | +| สมการหายไปหลังการแปลง | เอกสารถูกโหลดด้วย `LoadOptions` ที่ไม่รวม math | ใช้ `LoadOptions` เริ่มต้นหรือกำหนด `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## ตัวอย่างทำงานเต็มรูปแบบ + +ด้านล่างเป็นโปรแกรมเต็มที่คุณสามารถคอมไพล์และรันได้ รวมถึงการจัดการข้อผิดพลาด การตรวจสอบเส้นทาง และการบันทึกข้อความคอนโซลเล็ก ๆ เพื่อให้คุณทราบว่าทุกอย่างสำเร็จ + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**ผลลัพธ์ที่คาดหวัง** (ส่วนหนึ่งจาก `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +คุณสามารถนำไฟล์นี้ไปใช้กับตัวประมวลผลที่รองรับ LaTeX ใดก็ได้ และสมการจะถูกแสดงอย่างสวยงาม + +## วิธีแปลง DOCX เป็น TXT โดยไม่สูญเสียรูปแบบ + +หากคุณต้องการเพียงข้อความธรรมดาและไม่สนใจสมการ เพียงละเว้นบรรทัด `OfficeMathExportMode` : + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +แต่จำไว้ว่า **how to export math** คือสิ่งที่ทำให้กระบวนการทำงานทางวิทยาศาสตร์แตกต่าง การเก็บ LaTeX ไว้ครบถ้วนคือสิ่งที่ทำให้การแปลงมีประโยชน์จริง + +## ขั้นตอนต่อไปและหัวข้อที่เกี่ยวข้อง + +- **การแปลงเป็นชุด:** ห่อโค้ดในลูป `foreach` เพื่อประมวลผลโฟลเดอร์ทั้งหมดของไฟล์ `.docx` +- **การสร้าง Markdown:** เพิ่มหัวข้อ `#` หรือรายการ `*` ลงในข้อความเพื่อสร้าง Markdown ที่พร้อมเผยแพร่ +- **การส่งออก PDF:** ใช้ `PdfSaveOptions` เพื่อสร้างเวอร์ชัน PDF ควบคู่กับ txt +- **การปรับแต่ง LaTeX ขั้นสูง:** หลังประมวลผลผลลัพธ์ด้วย regex เพื่อแทนที่ `\[`/`\]` ด้วย `$...$` สำหรับสมการในบรรทัดเดียว + +แต่ละข้อเหล่านี้สร้างบนพื้นฐานเดียวกัน—การโหลด `Document` และการเลือก `SaveOptions` ที่เหมาะสม อย่ากลัวที่จะทดลอง; API มีความยืดหยุ่นพอสำหรับสถานการณ์อัตโนมัติของเอกสารส่วนใหญ่ + +## สรุป + +เราได้ครอบคลุมทุกอย่างที่คุณต้องการเพื่อ **save docx as txt** พร้อมคงสมการทุกสมการเป็น LaTeX ตั้งแต่การโหลดไฟล์ต้นฉบับ การกำหนดค่า `TxtSaveOptions` สำหรับ **how to export math** จนถึงการเขียนไฟล์ข้อความธรรมดาสุดท้าย ทั้งกระบวนการทั้งหมดอยู่ในไม่กี่บรรทัด C# ที่กระชับ + +ตอนนี้คุณสามารถทำอัตโนมัติการแปลงรายงาน Word เอกสารวิชาการ หรือเอกสารใด ๆ ที่ผสมข้อความและสมการ และส่งไฟล์ `.txt` ที่ได้ไปยังเครื่องมือต่อไปโดยไม่สูญเสียรายละเอียดทางวิทยาศาสตร์ + +ลองใช้ ปรับแต่งตัวเลือกให้เหมาะกับกรณีของคุณ และบอกเราผ่านคอมเมนต์ว่ามันทำงานอย่างไรสำหรับคุณ ขอให้สนุกกับการเขียนโค้ด! + +![แผนภาพแสดงขั้นตอนการแปลงจาก DOCX → การประมวลผล C# → TXT พร้อมสมการ LaTeX](https://example.com/images/save-docx-as-txt.png "ขั้นตอนการบันทึก docx เป็น txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/thai/net/programming-with-pdfsaveoptions/_index.md index 9b9ca8e183..0a4a992079 100644 --- a/words/thai/net/programming-with-pdfsaveoptions/_index.md +++ b/words/thai/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ | [อัปเดตคุณสมบัติที่พิมพ์ล่าสุดในเอกสาร PDF](./update-last-printed-property/) | เรียนรู้วิธีอัปเดตคุณสมบัติที่พิมพ์ล่าสุดในเอกสาร PDF โดยใช้ Aspose.Words สำหรับ .NET ด้วยคำแนะนำทีละขั้นตอนของเรา - [เรนเดอร์ 3D DML 3DEffects ในเอกสาร PDF](./dml-3deffects-rendering/) | เรียนรู้วิธีการเรนเดอร์เอฟเฟ็กต์ DML สามมิติอันน่าทึ่งในเอกสาร PDF โดยใช้ Aspose.Words สำหรับ .NET ด้วยคู่มือทีละขั้นตอนที่ครอบคลุมนี้ - [การแทรกภาพในเอกสาร PDF](./interpolate-images/) | เรียนรู้วิธีการแทรกรูปภาพในเอกสาร PDF โดยใช้ Aspose.Words สำหรับ .NET ด้วยคู่มือทีละขั้นตอนของเรา ปรับปรุงคุณภาพรูปภาพใน PDF ของคุณได้อย่างง่ายดาย | - +- [สร้าง PDF ที่เข้าถึงได้จาก Word – คู่มือทีละขั้นตอน](./create-accessible-pdf-from-word-step-by-step-guide/) | เรียนรู้วิธีสร้างไฟล์ PDF ที่เข้าถึงได้จากเอกสาร Word ด้วยคำแนะนำทีละขั้นตอนโดยใช้ Aspose.Words สำหรับ .NET {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/thai/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..94ce14aaa7 --- /dev/null +++ b/words/thai/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +description: สร้าง PDF ที่เข้าถึงได้จากไฟล์ DOCX ด้วย C# เรียนรู้วิธีแปลง Word เป็น + PDF บันทึก DOCX เป็น PDF และรับรองความสอดคล้องกับมาตรฐาน PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: th +og_description: สร้าง PDF ที่เข้าถึงได้จาก Word ด้วย C#. คู่มือนี้แสดงวิธีแปลง Word + เป็น PDF, บันทึกไฟล์ docx เป็น PDF, และปฏิบัติตามมาตรฐาน PDF/UA. +og_title: สร้าง PDF ที่เข้าถึงได้ – คอร์สสอน C# อย่างครบถ้วน +tags: +- Aspose.Words +- PDF accessibility +- C# +title: สร้าง PDF ที่เข้าถึงได้จาก Word – คู่มือแบบทีละขั้นตอน +url: /th/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# สร้าง PDF ที่เข้าถึงได้จาก Word – คู่มือการเขียนโปรแกรมฉบับสมบูรณ์ + +เคยต้องการ **สร้าง PDF ที่เข้าถึงได้** จากเอกสาร Word แต่ไม่แน่ใจว่าจะต้องปรับตั้งค่าอะไรบ้างหรือไม่? คุณไม่ได้เป็นคนเดียว ในหลายองค์กร การปฏิบัติตามมาตรฐาน PDF/UA (Universal Accessibility) เป็นข้อกำหนดที่เข้มงวด และปุ่ม “แปลงเป็น PDF” ปกติไม่เพียงพอ + +ในคู่มือนี้เราจะพาคุณผ่านโซลูชันสั้น ๆ แบบครบวงจรที่ **แปลง Word เป็น PDF**, **บันทึก docx เป็น PDF**, และรับประกันว่าผลลัพธ์จะตรงตามมาตรฐานการเข้าถึง ไม่มีการอ้างอิงที่คลุมเครือ—เพียงโค้ดที่คุณสามารถคัดลอก‑วาง พร้อมคำอธิบาย “ทำไม” ของแต่ละบรรทัด + +> **TL;DR:** โหลดไฟล์ `.docx` ตั้งค่า `PdfSaveOptions.Compliance` เป็น `PdfUa1` (หรือ `PdfUa2`) แล้วเรียก `Document.Save` นั่นคือทั้งหมดที่คุณต้องทำเพื่อ **สร้าง PDF ที่เข้าถึงได้** ด้วย Aspose.Words สำหรับ .NET + +--- + +## สิ่งที่คุณจะได้เรียนรู้ + +- วิธี **แปลง Word เป็น PDF** พร้อมคงหัวเรื่อง, ข้อความแทนภาพ (alt‑text) และลำดับการอ่านไว้ +- ความแตกต่างระหว่าง `PdfUa1` และ `PdfUa2` และเมื่อใดควรเลือกใช้แต่ละแบบ +- วิธี **บันทึก docx เป็น PDF** ด้วยเพียงไม่กี่บรรทัดของ C# +- ปัญหาที่พบบ่อย (ฟอนต์หาย, แท็กที่ไม่รองรับ) และวิธีแก้อย่างรวดเร็ว +- ตัวอย่างโค้ดพร้อมใช้งานที่คุณสามารถใส่ลงในโปรเจกต์ .NET ใดก็ได้ + +### ข้อกำหนดเบื้องต้น + +- .NET 6 หรือใหม่กว่า (โค้ดนี้ยังทำงานบน .NET Framework 4.7+ ด้วย) +- Aspose.Words for .NET ที่ติดตั้งผ่าน NuGet (`Install-Package Aspose.Words`) +- ไฟล์ Word (`input.docx`) ที่มีโครงสร้างที่เหมาะสมแล้ว (สไตล์, alt‑text สำหรับรูปภาพ) + +หากคุณยังไม่ได้เพิ่ม Aspose.Words ให้รันคำสั่งด้านล่างใน Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +นี่คือ dependency ภายนอกเพียงอย่างเดียวที่คุณต้องการ + +--- + +## สร้าง PDF ที่เข้าถึงได้ – ทำไมการเข้าถึงจึงสำคัญ + +เมื่อ PDF ถูกทำเครื่องหมายว่าเป็น **PDF/UA** (Universal Accessibility) โปรแกรมอ่านหน้าจอ (screen readers) สามารถนำทางหัวเรื่อง, ตาราง, และฟิลด์ฟอร์มได้เช่นเดียวกับไฟล์ Word ต้นฉบับ นี่ไม่ใช่แค่คุณลักษณะเสริม; หลายรัฐบาลและองค์กรถือว่าการปฏิบัติตาม PDF/UA เป็นข้อกำหนดทางกฎหมาย + +การตั้งค่า `Compliance` บน `PdfSaveOptions` จะบอกไลบรารีให้ฝังแท็กที่จำเป็น, ตั้งค่าภาษาเอกสารที่ถูกต้อง, และเพิ่มลำดับการอ่านที่เป็นตรรกะ การข้ามขั้นตอนนี้จะทำให้ได้ PDF “แค่ภาพ” ที่ล้มเหลวในการตรวจสอบการเข้าถึง + +--- + +## แปลง Word เป็น PDF ด้วย Aspose.Words + +ด้านล่างเป็นวิธีที่ง่ายที่สุดเพื่อ **แปลง Word เป็น PDF** พร้อมคงความเข้าถึงของเอกสาร + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**เกิดอะไรขึ้นบ้าง?** + +- `Document` อ่านไฟล์ Word โดยคงสไตล์และโครงสร้างทั้งหมดไว้ +- `PdfSaveOptions.Compliance` บอก Aspose.Words ให้ทำแท็กผลลัพธ์เป็น PDF/UA +- `doc.Save` เขียน PDF ลงดิสก์โดยฝังแท็กโดยอัตโนมัติ + +> **Pro tip:** หากไฟล์ Word ต้นฉบับของคุณใช้สไตล์หัวเรื่องแบบกำหนดเอง ให้ตรวจสอบว่าได้แมปสไตล์เหล่านั้นไปยังระดับหัวเรื่องในตัว (`Heading1`, `Heading2`, …) เพื่อให้ PDF ที่สร้างได้มีแท็กหัวเรื่องที่ถูกต้อง + +--- + +## บันทึก Docx เป็น PDF – การกำหนดค่า PDF/UA Compliance + +หากคุณคุ้นเคยกับคลาส `PdfSaveOptions` แล้ว อาจสงสัยว่ามีสวิตช์อื่นที่ส่งผลต่อการเข้าถึงหรือไม่ นี่คือคุณสมบัติที่เป็นประโยชน์สองสามอย่าง: + +| Property | ผลต่อการเข้าถึง | ค่าโดยทั่วไป | +|----------|----------------|---------------| +| `Compliance` | เปิด/ปิดการทำแท็ก PDF/UA | `PdfCompliance.PdfUa1` หรือ `PdfUa2` | +| `EmbedFullFonts` | รับประกันว่าผู้อ่านจะเห็นรูปแบบตัวอักษรที่ตั้งใจ | `true` (ค่าเริ่มต้น) | +| `OptimizeOutput` | ลดขนาดไฟล์โดยไม่ลบแท็ก | `true` | + +คุณสามารถต่อขยายสคริปต์ก่อนหน้าได้ดังนี้: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +การสลับไปใช้ `PdfUa2` จะเพิ่มการสนับสนุนคุณลักษณะ PDF/UA ใหม่ เช่น การทำแท็ก *artifact* สำหรับภาพตกแต่ง หากคุณไม่ต้องการคุณลักษณะเหล่านี้ ให้คงใช้ `PdfUa1` เพื่อความเข้ากันได้สูงสุดกับเทคโนโลยีช่วยเหลือรุ่นเก่า + +--- + +## ส่งออก Docx เป็น PDF – ตัวอย่างทำงานเต็มรูปแบบ + +ด้านล่างเป็นแอปคอนโซลที่รวมทุกอย่างไว้ในไฟล์เดียว แสดงกระบวนการตั้งแต่การโหลดไฟล์จนถึงการตรวจสอบผลลัพธ์ + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### ผลลัพธ์ที่คาดหวัง + +- ไฟล์ชื่อ **Compliant.pdf** ปรากฏในโฟลเดอร์เดียวกับไฟล์ executable +- เปิด PDF ด้วย Adobe Acrobat Pro → *Tools → Accessibility → Full Check* ควรแสดง **No accessibility issues** (สมมติว่าไฟล์ Word ต้นฉบับมีโครงสร้างที่ดี) +- แท็บ *Properties → Advanced* ของ PDF จะระบุ **PDF/UA** ใต้ส่วน “PDF/A and PDF/UA compliance” + +--- + +## กรณีขอบเขตทั่วไป & วิธีจัดการ + +| Situation | ทำไมจึงสำคัญ | Quick fix | +|-----------|----------------|-----------| +| **Missing fonts** | PDF อาจใช้ฟอนต์เริ่มต้นแทน ทำให้รูปแบบภาพเสีย | ตั้งค่า `EmbedFullFonts = true` (ค่าเริ่มต้น) และตรวจสอบให้ไฟล์ฟอนต์เข้าถึงได้บนเครื่องที่ทำการ build | +| **Images without alt‑text** | โปรแกรมอ่านหน้าจอจะอ่านว่า “image” โดยไม่มีคำอธิบาย | เพิ่ม `Alt Text` ใน Word (`คลิกขวา → Format Picture → Alt Text`) ก่อนทำการแปลง | +| **Custom styles not recognized as headings** | PDF/UA ต้องการแท็กหัวเรื่องที่ถูกต้อง | แมปสไตล์กำหนดเองไปยังหัวเรื่องในตัวด้วย `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | การแปลงไฟล์ 500 หน้าอาจทำให้ RAM พุ่งสูง | ใช้ `doc.Save(outputPath, options)` พร้อม `options.SaveFormat = SaveFormat.Pdf` และพิจารณาแบ่งการประมวลผลเป็นชิ้นย่อยหากเจอ `OutOfMemoryException` | +| **Need to export docx to pdf without accessibility** | บางครั้งต้องการ PDF ที่แสดงผลภาพอย่างเร็ว ๆ | ไม่ตั้งค่า `Compliance` หรือกำหนดเป็น `PdfCompliance.Pdf15` | + +--- + +## ตัวอย่างรูปภาพ (รวม Alt Text) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*ข้อความแทนภาพด้านบนช่วยเสริมคีย์เวิร์ดหลักและช่วยให้ผู้ใช้และโมเดล AI เข้าใจบริบทของภาพได้ดีขึ้น* + +--- + +## คำถามที่พบบ่อย + +**Q: ทำงานกับ .NET Core ได้หรือไม่?** +A: ทำได้แน่นอน Aspose.Words รองรับหลายแพลตฟอร์ม; เพียงแค่อ้างอิงแพคเกจ NuGet ในโปรเจกต์ .NET 6+ ของคุณ + +**Q: สามารถประมวลผลหลายไฟล์ DOCX พร้อมกันได้หรือไม่?** +A: ได้เลย ใส่ตรรกะการโหลดและบันทึกไว้ในลูป `foreach (var file in Directory.GetFiles(folder, "*.docx"))` อย่าลืมใช้อินสแตนซ์ `PdfSaveOptions` ตัวเดียวเพื่อประสิทธิภาพ + +**Q: หากต้องการเพิ่มแท็ก PDF/UA แบบกำหนดเองที่ Aspose ไม่สร้างอัตโนมัติจะทำอย่างไร?** +A: ใช้ API ระดับต่ำของ PDF (`PdfSaveOptions.CustomProperties`) หรือทำการประมวลผลต่อ PDF ด้วยไลบรารีอย่าง iText 7 ที่อนุญาตให้แทรกแท็กด้วยตนเอง + +--- + +## สรุป + +คุณ + +{{< /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 b32fe4c65b..20cef86e09 100644 --- a/words/thai/net/working-with-fonts/_index.md +++ b/words/thai/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ | [รับการแจ้งเตือน](./receive-warning-notification/) เรียนรู้วิธีรับการแจ้งเตือนเมื่อใช้ Aspose.Words สำหรับ .NET และจัดการปัญหาหรือคำเตือนต่างๆ ในเอกสารของคุณ - | [ตัวอย่างแหล่งที่มาของฟอนต์ Steam](./resource-steam-font-source-example/) | เรียนรู้วิธีใช้ Resource Stream Font Source เพื่อโหลดแบบอักษรที่กำหนดเองลงใน Aspose.Words สำหรับ .NET - | [รับการทดแทนโดยไม่ต้องมีคำต่อท้าย](./get-substitution-without-suffixes/) | ในบทช่วยสอนนี้ เรียนรู้วิธีรับการแทนที่แบบไม่มีคำต่อท้ายในเอกสาร Word ด้วย Aspose.Words สำหรับ .NET | - +- [วิธีตรวจจับแบบอักษรใน Aspose.Words – คู่มือฉบับสมบูรณ์](./how-to-detect-fonts-in-aspose-words-complete-guide/) | เรียนรู้วิธีตรวจจับแบบอักษรในเอกสาร Word ด้วย Aspose.Words อย่างละเอียดในคู่มือฉบับสมบูรณ์นี้ {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/thai/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/thai/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..bb5d981b40 --- /dev/null +++ b/words/thai/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,280 @@ +--- +category: general +date: 2026-04-07 +description: เรียนรู้วิธีตรวจจับฟอนต์และวิธีดักจับคำเตือนขณะจัดการฟอนต์ที่หายไปใน + C# ด้วย Aspose.Words พร้อมโค้ดแบบขั้นตอนต่อขั้นตอน. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: th +og_description: วิธีตรวจจับฟอนต์ใน Aspose.Words? ทำตามบทแนะนำนี้เพื่อบันทึกคำเตือนและจัดการกับฟอนต์ที่หายไปได้อย่างง่ายดาย. +og_title: วิธีตรวจจับแบบอักษรใน Aspose.Words – คู่มือฉบับสมบูรณ์ +tags: +- Aspose.Words +- C# +- Font handling +title: วิธีตรวจจับแบบอักษรใน Aspose.Words – คู่มือฉบับสมบูรณ์ +url: /th/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# วิธีตรวจจับฟอนต์ใน Aspose.Words – คู่มือฉบับสมบูรณ์ + +เคยสงสัย **วิธีตรวจจับฟอนต์** ที่หายไปจากเอกสาร Word ก่อนนำไปใช้งานจริงหรือไม่? คุณไม่ได้เป็นคนเดียว ในหลายกรณีขององค์กร ฟอนต์ที่หายไปอาจทำให้กระบวนการแปลงเป็น PDF ล้มเหลวหรือทำให้เลย์เอาต์ผิดพลาดดูไม่เป็นมืออาชีพ ข่าวดีคือ Aspose.Words มีวิธีในตัวที่ช่วยให้คุณค้นพบฟอนต์ที่ไม่มีและแสดงคำเตือนอย่างชัดเจน + +ในบทเรียนนี้เราจะอธิบาย **วิธีตรวจจับฟอนต์** อย่างละเอียด **วิธีเก็บคำเตือน** และแนวทางปฏิบัติที่ดีที่สุดในการ **จัดการกับฟอนต์ที่หายไป** เพื่อให้แอปพลิเคชันของคุณทำงานได้อย่างมั่นคง ไม่ต้องใช้เครื่องมือภายนอก ไม่ต้องคาดเดา—เพียงโค้ด C# ธรรมดาที่คุณสามารถนำไปใช้ในโปรเจกต์ได้ทันที + +> **แสดงตัวอย่างอย่างเร็ว:** เมื่อจบคุณจะมี `FontSubstitutionWarningCollector` ที่สามารถนำกลับมาใช้ใหม่ได้ ซึ่งจะรวบรวมข้อความการแทนที่ฟอนต์ทุกข้อความระหว่างการโหลดเอกสาร และคุณจะรู้วิธีตอบสนองเมื่อไม่พบฟอนต์ + +--- + +## สิ่งที่คุณจะได้เรียนรู้ + +- วิธีกำหนดค่า `LoadOptions` เพื่อรับฟังคำเตือนการแทนที่ฟอนต์ +- วิธีเก็บคำเตือนเหล่านั้นในคลาสคอลเลกเตอร์ที่กำหนดเอง +- วิธีประมวลผลคำเตือนที่เก็บไว้และตัดสินใจว่าจะยกเลิก, บันทึก, หรือแทนที่ฟอนต์หรือไม่ +- การจัดการกรณีพิเศษสำหรับเอกสารที่อ้างอิงฟอนต์จากระยะไกลหรือฟอนต์ที่ฝังอยู่ในไฟล์ + +**ข้อกำหนดเบื้องต้น:** .NET 6+ (หรือ .NET Framework 4.6+), Aspose.Words for .NET (เวอร์ชันล่าสุด) และความคุ้นเคยพื้นฐานกับ C# หากคุณยังไม่เคยใช้ Aspose.Words ไม่ต้องกังวล—คู่มือนี้สมมุติว่าคุณใช้เวลาเตรียมแค่ไม่กี่นาทีเท่านั้น + +--- + +## วิธีตรวจจับฟอนต์ด้วย Aspose.Words LoadOptions + +ขั้นตอนแรกในการตรวจจับฟอนต์ที่หายไปคือบอกให้ Aspose.Words รายงานฟอนต์เหล่านั้น ทำได้โดยใช้คุณสมบัติ `LoadOptions.WarningCallback` ซึ่งรับคลาสใดก็ได้ที่ implements `IWarningCallback` ด้านล่างเราจะสร้างคอลเลกเตอร์ขนาดเล็กที่เก็บคำเตือนทุกข้อความไว้สำหรับตรวจสอบภายหลัง + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**ทำไมจึงสำคัญ:** หากไม่มีการตั้งค่า callback คำเตือน Aspose.Words จะทำการแทนที่ฟอนต์ที่หายไปด้วยฟอนต์เริ่มต้นโดยอัตโนมัติและคุณจะไม่รู้ว่ามีปัญหาเกิดขึ้น การจับ `WarningType.FontSubstitution` ทำให้คุณมองเห็นข้อมูลทั้งหมด—ข้อมูลที่จำเป็นสำหรับการ **ตรวจจับฟอนต์** ที่ไม่มีบนเครื่องโฮสต์ + +ต่อไปเราจะเชื่อมคอลเลกเตอร์เข้ากับ `LoadOptions` แล้วโหลดเอกสาร: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **เคล็ดลับ:** หากคุณต้องประมวลผลเอกสารหลายไฟล์เป็นชุด ให้ใช้ `FontSubstitutionWarningCollector` ตัวเดียวกันซ้ำได้ แต่ต้องจำเรียก `Clear()` ระหว่างการโหลดแต่ละครั้งเพื่อหลีกเลี่ยงการผสานคำเตือนจากไฟล์ต่างกัน + +--- + +## เก็บคำเตือนระหว่างการโหลดเอกสาร + +หลังจากเอกสารถูกโหลด คอลเลกเตอร์จะมีคำเตือนที่เกี่ยวกับฟอนต์ทั้งหมดแล้ว คำถามต่อไปคือ: *ฉันจะเก็บคำเตือนอย่างไร* ให้สามารถบันทึกหรือแสดงผลได้ง่าย? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +ผลลัพธ์ที่พบบ่อยจะมีลักษณะเช่นนี้: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**สิ่งที่บอกคุณ:** แต่ละบรรทัดจะแสดงชื่อฟอนต์ต้นฉบับและฟอนต์สำรองที่ Aspose.Words เลือกใช้ ด้วยข้อมูลนี้คุณสามารถตัดสินใจได้ว่าการสำรองนั้นยอมรับได้หรือคุณต้องฝังฟอนต์ที่หายไปด้วยตนเอง + +--- + +## จัดการฟอนต์ที่หายไปอย่างราบรื่น + +การตรวจจับและเก็บคำเตือนเป็นเพียงครึ่งหนึ่งของการแก้ปัญหา คุณค่าที่แท้จริงคือการ **จัดการฟอนต์ที่หายไป** อย่างพร้อมใช้งานในสภาพแวดล้อมการผลิต ด้านล่างนี้คือสามกลยุทธ์ที่พบบ่อย: + +1. **บันทึกและดำเนินต่อ** – เหมาะกับการประมวลผลเป็นชุดที่คุณแค่ต้องการบันทึกประวัติ +2. **ยกเลิกเมื่อพบฟอนต์สำคัญ** – โยนข้อยกเว้นหากฟอนต์เฉพาะ (เช่น ฟอนต์แบรนด์) หายไป +3. **ฝังฟอนต์แบบอัตโนมัติ** – โหลดฟอนต์ที่หายไปจากโฟลเดอร์ที่กำหนดและลงทะเบียนกับ Aspose.Words ก่อนโหลดเอกสารใหม่ + +### ตัวอย่าง: ยกเลิกเมื่อพบฟอนต์สำคัญ + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### ตัวอย่าง: ฝังฟอนต์ที่หายไปอัตโนมัติ + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**ทำไมรูปแบบเหล่านี้ถึงช่วยได้:** การกำหนดแนวทางอย่างชัดเจนเมื่อฟอนต์หายไป ช่วยขจัดการแทนที่โดยเงียบที่อาจทำให้แบรนด์หรือความอ่านง่ายเสียหาย นี่คือหัวใจของ **การจัดการฟอนต์ที่หายไป** อย่างมีการควบคุม + +--- + +## ตัวอย่างทำงานเต็มรูปแบบ + +รวมทุกอย่างเข้าด้วยกัน นี่คือโปรแกรมเดียวที่พร้อมรันซึ่งสาธิต **วิธีตรวจจับฟอนต์**, **วิธีเก็บคำเตือน**, และนโยบายง่าย ๆ เพื่อ **จัดการฟอนต์ที่หายไป** โดยบันทึกลงคอนโซล + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**ผลลัพธ์ที่คาดหวัง:** เมื่อคุณรันโปรแกรมกับเอกสารที่อ้างอิงฟอนต์ที่ไม่มีบนเครื่อง คอนโซลจะรายการคำเตือนการแทนที่แต่ละรายการ หากมีคำเตือนใดเกี่ยวกับฟอนต์จากชุด `critical` โปรแกรมจะหยุดทำงานก่อนสร้าง PDF ที่อาจมีข้อบกพร่อง + +--- + +## คำถามที่พบบ่อย (FAQs) + +| Question | Answer | +|----------|--------| +| *Do I need a license for Aspose.Words to use this code?* | Yes, a valid Aspose.Words license removes evaluation watermarks and unlocks full functionality. | +| *Can this approach detect embedded fonts?* | Embedded fonts are already part of the file, so Aspose.Words won’t raise a substitution warning. You can check `Document.FontInfos` to enumerate embedded fonts if needed. | +| *What if the missing font is a system font on Windows but not on Linux?* | The same warning will fire on Linux because the font isn’t installed there. Use the “handle missing fonts” strategy to ship the required `.ttf` files with your app. | +| *Is the warning collector thread | + +{{< /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 e9f5c4eebc..e4952e1880 100644 --- a/words/turkish/net/basic-conversions/_index.md +++ b/words/turkish/net/basic-conversions/_index.md @@ -34,6 +34,7 @@ Basic Conversions, Aspose.Words for .NET kitaplığını kullanarak temel belge | [Metin Dosyasını Word Belgesine Dönüştür](./txt-to-docx/) | Aspose.Words for .NET kullanarak metin dosyalarını Word belgelerine nasıl dönüştüreceğinizi öğrenin. Kapsamlı kılavuzumuzla belge dönüşümlerini verimli bir şekilde yönetin. | | [PDF'yi Jpeg olarak kaydet](./pdf-to-jpeg/) | Aspose.Words for .NET kullanarak PDF'leri zahmetsizce JPEG'lere dönüştürün. Örnekler ve SSS içeren ayrıntılı kılavuzumuzu takip edin. Geliştiriciler ve meraklılar için mükemmel. | | [PDF'yi Word Formatına (Docx) Kaydet](./pdf-to-docx/) | Bu ayrıntılı, adım adım kılavuzda Aspose.Words for .NET kullanarak bir PDF'yi Word belgesine (Docx) nasıl dönüştüreceğinizi öğrenin. Geliştiriciler için mükemmel. | +| [DOCX'i C# ile PDF'e Dönüştür – Tam Programlama Rehberi](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Aspose.Words for .NET kullanarak C# ile DOCX dosyalarını PDF'e dönüştürmenin adım adım rehberi. | | [Word'den LaTeX'e Nasıl Dışa Aktarılır – Adım Adım Kılavuz](./how-to-export-latex-from-word-step-by-step-guide/) | Aspose.Words for .NET kullanarak Word belgelerinden LaTeX formatına nasıl dışa aktarım yapacağınızı adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/turkish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..61dec23dd8 --- /dev/null +++ b/words/turkish/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,220 @@ +--- +category: general +date: 2026-04-07 +description: DOCX'i C#'ta hızlıca PDF'ye dönüştürün. Word'ü PDF olarak kaydetmeyi, + docx belgesini C#'ta yüklemeyi öğrenin ve dakikalar içinde PDF/UA‑2 uyumluluğunu + sağlayın. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: tr +og_description: DOCX'i C#'ta anında PDF'ye dönüştürün. Bu kılavuz, Word'ü PDF olarak + nasıl kaydedeceğinizi, C#'ta docx belgesini nasıl yükleyeceğinizi ve PDF/UA‑2 standartlarına + nasıl uyacağınızı gösterir. +og_title: C#'ta DOCX'i PDF'ye Dönüştür – Adım Adım Rehber +tags: +- Aspose.Words +- C# +- PDF Generation +title: C#'de DOCX'i PDF'ye Dönüştür – Tam Programlama Rehberi +url: /tr/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# C#'ta DOCX'yi PDF'ye Dönüştür – Tam Programlama Rehberi + +C# uygulamasında **convert DOCX to PDF** yapmanız gerektiğinde nereden başlayacağınızı bilemediniz mi? Tek başınıza değilsiniz. Birçok geliştirici, Word'deki basit “PDF olarak kaydet” düğmesinin koda çevrilemediğini fark ettiğinde bir duvara çarpar. İyi haber? Birkaç satır Aspose.Words (veya benzer bir kütüphane) ile tüm süreci otomatikleştirebilir, yüzen şekilleri satır içi tutabilir ve hatta PDF/UA‑2 uyumluluğunu zahmetsizce elde edebilirsiniz. + +Bu öğreticide **save Word as PDF**, **load docx document C#** nasıl yapılacağını öğrenecek ve dışa aktarma seçeneklerini ayarlayarak ortaya çıkan dosyanın erişilebilirlik denetimlerine hazır olmasını sağlayacaksınız. Sonunda, herhangi bir `.docx` dosyasını temiz, standartlara uygun bir PDF'ye dönüştüren bağımsız, çalıştırılabilir bir programınız olacak. + +> **Neden önemsemelisiniz?** +> DOCX'yi PDF'ye dönüştürmek, fatura sistemleri, rapor oluşturucular ve belge arşivleme hatları için yaygın bir gereksinimdir. Bunu otomatikleştirmek manuel adımları ortadan kaldırır, insan hatasını azaltır ve her çıktının platformlar arasında tamamen aynı görünmesini sağlar. + +--- + +## İhtiyacınız Olanlar + +- **.NET 6.0** veya daha yeni (kod .NET Framework 4.6+ üzerinde de çalışır) +- **Aspose.Words for .NET** (ücretsiz deneme veya lisanslı sürüm) – NuGet üzerinden kurabilirsiniz: `dotnet add package Aspose.Words` +- Kontrol ettiğiniz bir klasöre yerleştirilmiş örnek bir `input.docx` (burada `YOUR_DIRECTORY` olarak adlandıracağız) +- Visual Studio, VS Code veya tercih ettiğiniz herhangi bir C# editörü + +Hepsi bu—ekstra hizmet yok, REST çağrısı yok. Sadece saf C#. + +--- + +## Adım 1: DOCX Belgesini C#'ta Yükleyin + +**convert docx to pdf** yapmadan önce Word dosyasını belleğe getirmeniz gerekir. `Document` sınıfı bunu sizin için yapar. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Neden önemli?** +Dosyayı yüklemek, size tamamen ayrıştırılmış bir nesne modeli sağlar—paragraflar, tablolar, yüzen şekiller, her şey. Bu, herhangi bir **load docx document c#** iş akışının ilk adımıdır ve ayrıca dosyanın bozuk olmadığını, dönüşüm için zaman harcamadan önce doğrular. + +> **Pro ipucu:** Kullanıcı‑yüklediği dosyalarla çalışıyorsanız, `new Document()` çağrısını bir try/catch bloğuna sararak hatalı DOCX dosyalarını nazikçe ele alın. + +--- + +## Adım 2: PDF Kaydetme Seçeneklerini Yapılandırın (Uyumluluk ve Şekil İşleme) + +Şöyle düşünebilirsiniz: “Herhangi bir ayar yapmam gerekiyor mu, yoksa sadece `Save` çağırabilir miyim?” Kısa cevap: yapabilirsiniz, ancak doğru seçenekleri ayarlamak PDF'nin erişilebilir ve görsel olarak sadık olmasını sağlar. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Neden önemli?** +- `ExportFloatingShapesAsInlineTag = true` yüzen nesnelerin farklı cihazlarda PDF görüntülendiğinde kaybolmasını veya hizalanmamasını önler. +- `Compliance = PdfCompliance.PdfUa2` çıktının PDF/UA‑2 standardına uygun olmasını sağlar; bu, ekran okuyucu uyumluluğu ve yasal arşivleme için kritik öneme sahiptir. + +Erişilebilirliğe ihtiyacınız yoksa, `Compliance` satırını çıkarabilirsiniz, ancak bunu tutmak neredeyse hiç ek yük getirmez ve çözümünüzü geleceğe hazırlar. + +--- + +## Adım 3: Belgeyi PDF Olarak Kaydedin – Temel **Convert DOCX to PDF** İşlemi + +Belge yüklendi ve seçenekler ayarlandığına göre, gerçek dönüşüm tek bir metod çağrısıdır. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Gördükleriniz:** +Programı çalıştırdığınızda aynı klasörde `output.pdf` oluşturulur. Herhangi bir PDF görüntüleyiciyle açtığınızda şunları fark edeceksiniz: + +- Tüm metin, tablolar ve görseller orijinal DOCX'teki gibi tam olarak görünür. +- Yüzen şekiller satır içinde korunur, düzeni korur. +- Dosya temel PDF/UA‑2 doğrulama araçlarını (ör. Adobe Acrobat Preflight) geçer. + +--- + +## Tam Çalışan Örnek – Baştan Sona + +Aşağıda, tüm akışı gösteren eksiksiz, çalıştırmaya hazır bir konsol uygulaması bulunmaktadır. Yeni bir C# projesine kopyalayıp **F5** tuşuna basın. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Konsolda beklenen çıktı:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Ve düzenli bir `output.pdf` kaynak dosyanızın yanında yer alır. + +--- + +## Sık Sorulan Sorular & Kenar Durumları + +| Soru | Cevap | +|----------|--------| +| **`MemoryStream` içinde depolanmış bir DOCX'i dönüştürebilir miyim?** | Kesinlikle. Dosya yolu yerine `new Document(stream)` kullanın. | +| **DOCX makrolar içeriyorsa ne olur?** | Aspose.Words varsayılan olarak VBA makrolarını yok sayar; PDF'de görünmezler. | +| **Üretim için lisansa ihtiyacım var mı?** | Ücretsiz deneme, belirli bir sayfa sayısından sonra filigran ekler. Ticari kullanım için, filigranı kaldırmak amacıyla bir lisans alın. | +| **PDF sayfa boyutunu nasıl değiştiririm?** | Kaydetmeden önce `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` olarak ayarlayın. | +| **Özel bir font gömmek mümkün mü?** | Evet—`pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;` ekleyin. | + +--- + +## Sorunsuz **Save Word as PDF** Deneyimi İçin Pro İpuçları + +- **Toplu işleme:** Dönüştürme mantığını bir döngü içinde sarın ve ona bir DOCX yolu listesi verin. +- **Performans:** Birçok dosya dönüştürürken tek bir `PdfSaveOptions` örneğini yeniden kullanın; bu GC baskısını azaltır. +- **Günlükleme:** Oluşturulan PDF'nin boyutunu (`new FileInfo(outputPath).Length`) çıktılayarak sıkıştırma sonuçlarını izleyin. +- **Hata yönetimi:** `FileNotFoundException` (eksik DOCX) ile `UnauthorizedAccessException` (yazma izni sorunları) arasını ayırın. + +--- + +## Sonuç + +Artık C#'ta **convert DOCX to PDF** yapmak için sağlam, üretime hazır bir deseniniz var. DOCX'i yükleyerek, PDF kaydetme seçeneklerini yapılandırarak ve `Save` metodunu çağırarak **save Word as PDF** yapabilir, düzen inceliklerine saygı gösterebilir ve erişilebilirlik standartlarını karşılayabilirsiniz—hepsi on bir satırdan az bir kodla. + +Bir sonraki zorluğa hazır mısınız? `PdfSaveOptions` yerine `ImageSaveOptions` kullanarak **save Word as PNG** deneyin ya da `HtmlSaveOptions` sınıfını keşfederek web‑hazır çıktı üretin. Hangi yolu seçerseniz seçin, aynı **load docx document c#** temelleri geçerli olur ve kod tabanınızı geleceğe hazır tutar. + +İyi kodlamalar, ve PDF'leriniz her zaman uyumlu olsun! + +--- + +![DOCX'yi PDF'ye Dönüştürme örnek çıktısı](convert-docx-to-pdf-output.png "DOCX'yi PDF'ye Dönüştürme örnek çıktısı") + +{{< /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-loadoptions/_index.md b/words/turkish/net/programming-with-loadoptions/_index.md index 1eb9a787f6..2c132694f2 100644 --- a/words/turkish/net/programming-with-loadoptions/_index.md +++ b/words/turkish/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Bu eğitimlerde, özel ayarlarla Word belgelerini yüklemek için LoadOptions'ı | [Chm Dosyalarını Word Belgesine Yükle](./load-chm/) | Bu adım adım eğitimle CHM dosyalarını Aspose.Words for .NET kullanarak Word belgelerine kolayca yükleyin. Teknik belgelerinizi birleştirmek için mükemmeldir. | | [Aspose.Words ile docx Dosyasını Adım Adım Kurtarma](./how-to-recover-docx-with-aspose-words-step-by-step/) | Aspose.Words kullanarak bozuk bir docx dosyasını nasıl kurtaracağınızı adım adım öğrenin. | | [Aspose Load Options – Özel Yazı Tipi Ayarlarıyla DOCX Yükle](./aspose-load-options-load-docx-with-custom-font-settings/) | Aspose.Words for .NET ile özel yazı tipi ayarları kullanarak DOCX dosyalarını nasıl yükleyeceğinizi adım adım öğrenin. | +| [Bozuk DOCX Dosyasını Kurtar – C# ile Tam Kılavuz: Düzeltme ve Kaydetme](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Aspose.Words for .NET kullanarak bozuk DOCX dosyalarını nasıl onaracağınızı ve kaydedeceğinizi öğrenin. Adım adım rehber. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/turkish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..4edfc4e94d --- /dev/null +++ b/words/turkish/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: C#'ta bozuk DOCX dosyalarını nasıl kurtaracağınızı ve kurtarılan belgeyi + güvenli bir şekilde nasıl kaydedeceğinizi öğrenin. Aspose.Words örneğiyle adım adım + rehber. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: tr +og_description: C# ile bozuk DOCX dosyalarını kurtarın ve kurtarılan belgeyi Aspose.Words + ile kaydedin. Tam kod, açıklamalar ve en iyi uygulama ipuçları. +og_title: Bozuk DOCX Dosyasını Kurtarın – Adım Adım C# Rehberi +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Bozuk DOCX Dosyalarını Kurtarın – Dosyaları Düzeltmek ve Kaydetmek İçin Tam + C# Rehberi +url: /tr/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Bozuk DOCX'i Kurtar – Dosyaları Düzeltmek ve Kaydetmek İçin Tam C# Rehberi + +Explorer'da düzgün görünüp uygulamanızda bir istisna atan bir DOCX dosyasını açmaya çalıştınız mı? Bu, klasik “bozuk Word dosyası” kabusudur ve genellikle görmek istemediğiniz bir yığın izleme (stack‑trace) ile sonuçlanır. İyi haber? Aspose.Words, dosya hasarlı olsa bile çalışmaya devam etmenizi sağlayan bir **recover corrupted docx** özelliği sunar. + +Bu öğreticide, kırık bir belgeyi nasıl yükleyeceğinizi, kütüphaneye devam etmesini nasıl söyleyeceğinizi ve ardından **save recovered document** özelliğiyle yeni, temiz bir dosyaya nasıl kaydedeceğinizi adım adım göstereceğiz. Sonunda kurtarma modunun neden önemli olduğunu, nasıl yapılandırılacağını ve hangi tuzaklardan kaçınılması gerektiğini öğreneceksiniz—belirsiz “belgelere bak” kısayolları yok. + +## Gereksinimler + +- **Aspose.Words for .NET** (herhangi bir son sürüm; bu rehber yazılırken 24.11 kullanıldı) +- Bir .NET geliştirme ortamı (Visual Studio, Rider veya C# uzantılı VS Code) +- Bozuk olduğunu düşündüğünüz bir örnek DOCX (test amaçlı bir dosyayı zip editöründe açıp bir bölüm silerek bozulmasını sağlayabilirsiniz) +- Temel C# bilgisi—fantezi bir şey yok, sadece bir konsol uygulaması oluşturabilme yeteneği + +Eğer bunlara zaten sahipseniz, harika—çözümün içine doğrudan dalalım. + +## Adım 1: Doğru Kurtarma Stratejisiyle LoadOptions'ı Ayarlayın + +Düzeltmenin kalbi `LoadOptions` nesnesidir. Aspose.Words'e DOCX paketindeki bozuk XML veya eksik bölümlerle karşılaştığında nasıl davranacağını söyler. `RecoveryMode.RecoverAndContinue` bayrağı en toleranslısıdır—yapabildiği her şeyi kurtarmaya çalışır ve geri kalanını atlar. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Neden önemli:** `LoadOptions`'ı atlayıp varsayılan modu (`RecoveryMode.NoRecovery`) kullanırsanız, `Document` yapıcı bir sorun fark eder etmez bir istisna fırlatır. `RecoverAndContinue` ile API kritik olmayan hataları yutar ve hâlâ çalışabileceğiniz kısmi bir belge nesnesi oluşturur. + +> **Pro ipucu:** Çok büyük dosya grupları için, yükleme çağrısını yine de bir `try/catch` bloğuna sarmayı düşünün—bazı hatalar gerçekten ölümcül (ör. `[Content_Types].xml` dosyasının eksik olması) ve kurtarılamaz. + +## Adım 2: Potansiyel Bozuk DOCX'i Yükleyin + +Seçenekler hazır olduğuna göre, dosyanızı yükleyin. Yapıcı, dosya yolunu ve az önce hazırladığımız `LoadOptions`'ı alır. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Arka planda ne oluyor?** +Aspose.Words ZIP konteynerini ayrıştırır, her XML parçasını okur ve Open XML DOM'unu yeniden oluşturmaya çalışır. Bozuk bir parçayla karşılaştığında, kurtarma motoru bir uyarı kaydeder (tanılama (diagnostics) etkinleştirildiğinde konsolda görünür) ve devam eder. Ortaya çıkan `Document` nesnesi birkaç paragraf veya görseli eksik olabilir, ancak içeriğin geri kalanı sağlam kalır. + +## Adım 3: Kurtarılan İçeriği Doğrulayın (İsteğe Bağlı ama Önerilir) + +Dosyayı diske kaydetmeden önce, önemli bölümlerin hayatta kalıp kalmadığını görmek için birkaç düğümü incelemek akıllıca olur. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Çıktı mantıklı görünüyorsa, **recover corrupted docx** içeriğini başarıyla kurtarmış oldunuz. Eksik bölümler fark ederseniz, yine de devam edip etmeyeceğinize karar verebilirsiniz—bazen kaybolan parçalar sadece dekoratif olabilir. + +## Adım 4: Kurtarılan Belgeyi Kaydedin + +Çoğu geliştiricinin sorduğu kısım burada: “Orijinal bozulmayı yeniden ortaya çıkarmadan **save recovered document** nasıl yaparım?” Cevap basitçe yeni bir yol ile `Document.Save` çağırmaktır. Aspose.Words yepyeni bir ZIP paketi yazar, böylece kalan bozuk parçalar geride kalır. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Neden işe yarıyor:** `Save` yöntemi bellek içindeki DOM'u temiz bir Open XML paketine geri serileştirir. Bozuk parçalar DOM'a hiç yüklenmediği (kurtarma sırasında atıldı) için yeni dosyaya hiç geçmezler. Sonuç, Word, Google Docs veya başka bir görüntüleyicide açılabilen sağlıklı bir DOCX olur. + +## Adım 5: Birden Çok Dosya İçin İşlemi Otomatikleştirin (Bonus) + +Gerçek dünyada genellikle sorunlu dosyalarla dolu bir klasörünüz olur. Önceki adımları bir döngü içinde sararsanız, küçük bir kurtarma aracı elde edersiniz. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Artık bozuk DOCX dosyalarının bulunduğu bir klasörü `C:\Docs\Batch` içine bırakabilir ve betiğin onları otomatik olarak temizlemesini sağlayabilirsiniz. + +## Yaygın Sorular ve Kenar Durumları + +| Soru | Cevap | +|----------|--------| +| **Bu .doc dosyalarıyla da çalışır mı?** | Aynı `LoadOptions` sınıfı uygulanır, ancak eski Word formatına (`doc`) referans vermeniz gerekir. Aspose.Words hâlâ kurtarabilir, ancak hata kalıpları farklıdır. | +| **Dosya şifre korumalıysa ne olur?** | Kurtarma şifrelemeyi atlatmaz. Şifreyi `LoadOptions.Password` aracılığıyla sağlamalısınız. | +| **Görseller kaybolur mu?** | Sadece bozuk bir XML parçasının parçası olan görseller atlanabilir. Diğerleri ayrı ikili akışlar olarak depolandıkları için korunur. | +| **Aspose'un ürettiği uyarıları kaydedebilir miyim?** | Evet—`LoadOptions.LoadFormat`'ı `LoadFormat.Docx` olarak ayarlayın ve ayrıntılı mesajları yakalamak için `Document.WarningCallback`'e abone olun. | +| **`RecoverAndContinue` üretim ortamı için güvenli mi?** | Genel olarak evet, ancak verilerinizle test edin. Görev‑kritik işlem hatlarında, daha sonra gözden geçirmek üzere kurtarma gerektiren belgeleri işaretlemek isteyebilirsiniz. | + +## Tam Çalışan Örnek (Kopyala‑Yapıştır Hazır) + +Aşağıda, bir konsol uygulaması olarak derleyebileceğiniz tam program yer alıyor. Tüm adımları, hata yönetimini ve isteğe bağlı toplu işleme mantığını içerir. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Beklenen sonuç:** Programı çalıştırdıktan sonra, `Recovered.docx` Microsoft Word'de orijinal hata iletişim kutusu olmadan açılır. Çok fazla hasar görmüş bölümler basitçe atlanır, ancak ana gövde, başlıklar ve çoğu görsel sağlam kalır. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Sonuç + +Aspose.Words kullanarak **recover corrupted docx** dosyalarını nasıl yapılandıracağınızdan güvenli bir şekilde **save recovered document** yapmaya kadar ihtiyacınız olan her şeyi ele aldık. Önemli çıkarımlar şunlardır: + +- `RecoveryMode.RecoverAndContinue` kullanarak kütüphanenin kritik olmayan hataları görmezden gelmesini sağlayın. +- Yüklenen içeriği kaydetmeden önce doğrulayın, özellikle kritik iş belgeleriyle çalışıyorsanız. +- Belgeyi kaydetmek temiz bir ZIP paketi oluşturur ve orijinal bozulmayı etkili bir şekilde temizler. +- Aynı desen toplu işlemlere ölçeklenebilir, büyük belge depolarının otomatik temizliğini sağlar. + +Bir sonraki adıma hazır mısınız? Bu mantığı bir yükleme klasörünü izleyen bir arka plan hizmetine entegre etmeyi deneyin veya hangi dosyaların kurtarma gerektirdiğine dair bir rapor oluşturmak için `WarningCallback` ile deney yapın. API ile ne kadar çok oynarsanız, Aspose.Words'un gerçek‑dünya belge işleme için ne kadar sağlam olduğunu o kadar takdir edersiniz. + +Paylaşmak istediğiniz bir farklı senaryo var mı—belki şifre korumalı dosyaları işlemek ya da kurtarılan belgeleri birleştirmek? Aşağıya bir yorum bırakın, sohbeti sürdürelim. Kodlamanın tadını çıkarı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/turkish/net/programming-with-markdownsaveoptions/_index.md b/words/turkish/net/programming-with-markdownsaveoptions/_index.md index 5be26b20dc..386e0e429e 100644 --- a/words/turkish/net/programming-with-markdownsaveoptions/_index.md +++ b/words/turkish/net/programming-with-markdownsaveoptions/_index.md @@ -32,6 +32,7 @@ Words Processing with MarkdownSaveOptions, .NET için Aspose.Words kütüphanesi | [Word'den Markdown Dışa Aktarma – Tam C# Rehberi](./how-to-export-markdown-from-word-complete-c-guide/) | Aspose.Words for .NET kullanarak Word belgelerini Markdown formatına dışa aktarmayı öğrenin. Tam C# rehberiyle adım adım ilerleyin. | | [DOCX'ten Markdown Kaydetme – Adım Adım Rehber](./how-to-save-markdown-from-docx-step-by-step-guide/) | Aspose.Words for .NET kullanarak DOCX dosyasını Markdown formatına kaydetmeyi adım adım öğrenin. | | [DOCX'ten Markdown Dışa Aktarma – Tam Rehber](./how-to-export-markdown-from-docx-complete-guide/) | Aspose.Words for .NET kullanarak DOCX dosyasını Markdown formatına dışa aktarmayı adım adım öğrenin. | +| [Word'ü Özel Görüntü Klasörüyle Markdown Olarak Kaydet – Tam Rehber](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Aspose.Words for .NET kullanarak Word belgelerini özel bir görüntü klasörüyle Markdown'a dönüştürmeyi adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/turkish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..1957e61472 --- /dev/null +++ b/words/turkish/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,292 @@ +--- +category: general +date: 2026-04-07 +description: Word'ü Markdown olarak kaydedin ve docx'ten görselleri bir geri arama + (callback) kullanarak çıkarın. Geri aramayı (callback) kullanarak markdown görseller + klasörünü verimli bir şekilde nasıl depolayacağınızı öğrenin. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: tr +og_description: Word'ü Markdown olarak kaydedin ve docx'ten görselleri bir geri arama + (callback) kullanarak çıkarın. Bu rehber, geri arama kullanarak bir markdown görseller + klasörü oluşturmayı gösterir. +og_title: Word'ü Markdown olarak kaydedin – Tam Adım Adım Kılavuz +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Word'ü Özel Resim Klasörüyle Markdown Olarak Kaydet – Tam Kılavuz +url: /tr/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word'ü Markdown Olarak Kaydet – Tam Adım‑Adım Kılavuz + +Hiç **Word'ü Markdown olarak kaydetmek** gerektiğinde gömülü resimlerle ne yapacağınızdan emin olmadınız mı? Tek başınıza değilsiniz. Birçok projede markdown çıktısı harika görünür—*ta ki* resim bağlantılarının bozuk olduğunu fark edene kadar, çünkü dosyalar Word paketinden hiç çıkmamıştır. + +İyi haber, Aspose.Words size **docx'ten resimleri çıkarmanın** temiz bir yolunu sunar ve istediğiniz yere yerleştirmenizi sağlar; markdown resim klasörünü kontrol etmenizi sağlayan bir **callback** kullanarak. Bu öğreticide, bir `.docx` dosyasını yüklemekten, düzenli bir PNG (veya sahip olduğunuz herhangi bir format) klasörü ve onlara işaret eden bir markdown dosyası elde etmeye kadar tüm süreci adım adım göstereceğiz. + +Bu kılavuzun sonunda şunları yapabilecek: + +* Tek bir kod satırıyla herhangi bir Word belgesini Markdown'a dönüştürmek. +* Her resmi otomatik olarak ayrı bir `images` alt klasörüne dökmek. +* Dosya adlarını özelleştirerek çakışma olmamasını sağlamak, kaynakta onlarca resim olsa bile. + +Harici betikler yok, manuel kopyala‑yapıştır yok—sadece saf C# ve Aspose.Words. + +## Önkoşullar + +İlerlemeye başlamadan önce şunların olduğundan emin olun: + +* **Aspose.Words for .NET** (en son kararlı sürüm; yazı zamanı 24.9). +* .NET geliştirme ortamı (Visual Studio, Rider veya `dotnet` CLI). +* En az bir resim içeren bir Word belgesi (`.docx`) — örnek olarak `DocWithImages.docx`. + +Aspose.Words'ı daha önce hiç kullanmadıysanız endişelenmeyin. Kütüphane tamamen yönetilen bir yapıya sahiptir, COM interop gerektirmez ve .NET 6+ ile .NET Framework 4.8'de çalışır. + +## 1. Adım – Projeyi Kurun ve Paketi Yükleyin + +İlk olarak, yeni bir console uygulaması oluşturun (veya kodu mevcut bir projeye ekleyin). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Pro ipucu:** .NET 6 hedefliyorsanız, varsayılan `Program.cs` zaten üst‑seviye ifadeler kullanır, bu da örneği kısa tutar. + +## 2. Adım – Resim Kaydetmeyi Kontrol Eden Bir Callback Oluşturun + +Aspose.Words, yazması gereken her dış kaynağı (resimler, CSS, vb.) için `IResourceSavingCallback.ResourceSaving` metodunu çağırır. Bu arayüzü uygulayarak **markdown resim klasörünün** nasıl oluşturulacağı üzerinde tam yetki elde ederiz. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Neden bir callback kullanmalı? + +* **Granüler kontrol** – klasör yapısını ve adlandırma şemasını siz belirlersiniz. +* **Performans** – akışı bir kez yazarak kütüphanenin çift‑yazma geri dönüşünü önlersiniz. +* **Esneklik** – bu noktada loglama, resim‑optimizasyonu ekleyebilir veya bulut depolamaya yükleyebilirsiniz. + +## 3. Adım – Word Belgesini Yükleyin + +Callback hazır olduğuna göre, Aspose.Words'ı kaynak dosyaya yönlendirmemiz yeterli. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Dosya bulunamazsa ne olur?** +> `Document` bir `FileNotFoundException` fırlatır. Dinamik yollar bekliyorsanız yüklemeyi bir `try/catch` bloğuna alın. + +## 4. Adım – MarkdownSaveOptions'ı Bağlayın + +`MarkdownSaveOptions` sınıfı, az önce oluşturduğumuz callback'i bağlamamıza izin verir. Ayrıca resimlerin markdown dosyasına göre konumlanacağı klasörü ayarlarız. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +`ImagesFolder` özelliği, Aspose'ye `![Alt text](images/img_123.png)` gibi markdown linkleri oluşturmasını söyler. Callback içinde `ResourceFileName`'i de ayarladığımız için gerçek dosya tam olarak oraya kaydedilir. + +## 5. Adım – Markdown Olarak Kaydedin ve Sonucu Doğrulayın + +Son olarak, markdown dosyasını yazarız. Callback zaten `images` alt‑klasörünü doldurmuş olacaktır. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Beklenen çıktı + +Programı çalıştırdığınızda aşağıdakine benzer bir çıktı almanız gerekir: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +`Doc.md` dosyasını herhangi bir markdown görüntüleyicide açın; `images` klasörüne doğru işaret eden resim linklerini göreceksiniz. + +--- + +## Sık Sorulan Sorular (SSS) + +### **docx'ten resimleri çıkarmak** için markdown'a dönüştürmeden nasıl yapılır? + +Aynı `MyMarkdownResourceCallback`'i yeniden kullanabilir, ancak `doc.Save("images.zip", SaveFormat.Zip)` ile besleyebilirsiniz. Callback her resim için hâlâ tetiklenir ve resimleri istediğiniz yere yerleştirmenizi sağlar. + +### Farklı **resim formatlarına** ihtiyacım olsaydı ne olur? + +`args.FileName` zaten orijinal uzantıyı (`.png`, `.jpg`, vb.) içerir. Tüm resimleri tek bir formata dönüştürmeniz gerekiyorsa, akışı yazmadan önce `ResourceSaving` içinde bir dönüşüm adımı ekleyin. + +### Her belge için **markdown resim klasörünü** özelleştirebilir miyim? + +Kesinlikle. Callback, klasör yolunu yapıcı (constructor) aracılığıyla alır, bu yüzden toplu işlemde her belge için farklı bir klasörle yeni bir callback örneği oluşturabilirsiniz. + +### Bu, **büyük belgeler** (yüzlerce resim) ile çalışır mı? + +Evet. Callback, resmi doğrudan diske akıtarak bellek kullanımını düşük tutar. Yeterli disk alanı olduğundan ve işletim sisteminin dosya‑handle sınırlarına takılmadığınızdan emin olun. + +## Tam Çalışan Örnek + +Aşağıda, tamamen kopyala‑yapıştır‑hazır program yer almaktadır. `YOUR_DIRECTORY` ifadesini ortamınıza uygun mutlak ya da göreli bir yol ile değiştirin. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Programı çalıştırın (`dotnet run`) ve `images` alt‑klasörünü içeren yeni oluşturulmuş bir `Doc.md` dosyasını göreceksiniz. + +{{< /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-officemath/_index.md b/words/turkish/net/programming-with-officemath/_index.md index 2015f08d5f..e48b6d2b9d 100644 --- a/words/turkish/net/programming-with-officemath/_index.md +++ b/words/turkish/net/programming-with-officemath/_index.md @@ -21,6 +21,7 @@ OfficeMath ile Word İşleme konusunda Aspose.Words for .NET eğitimleri, Word b | Başlık | Açıklama | | --- | --- | | [Matematik Denklemleri](./math-equations/) | Aspose.Words for .NET kullanarak Word belgelerinde matematiksel denklemlerin nasıl yapılandırılacağını öğrenin. Örnekler, SSS ve daha fazlasıyla adım adım kılavuz. | +| [docx'i txt olarak kaydet – Word Matematiğini C#'da LaTeX'e Dışa Aktar](./save-docx-as-txt-export-word-math-to-latex-in-c/) | C# kullanarak docx dosyasını txt olarak kaydedin ve Word Math içeriğini LaTeX formatına dönüştürün. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/turkish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..d388990da0 --- /dev/null +++ b/words/turkish/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-04-07 +description: docx dosyasını hızlıca txt olarak kaydedin ve matematiği LaTeX'e nasıl + dışa aktaracağınızı öğrenin. Word'ü txt'ye dönüştürün, Office Math'i işleyin ve + denklemleri bozulmadan koruyun. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: tr +og_description: docx dosyasını LaTeX matematik ihracatıyla txt olarak kaydedin. Word'ü + txt'ye dönüştürüp denklemleri koruyan adım adım bir C# öğreticisi. +og_title: docx'i txt olarak kaydet – Word matematiğini dışa aktarmak için C# rehberi +tags: +- C# +- Aspose.Words +- DocumentConversion +title: docx'i txt olarak kaydet – Word Matematiğini C#'ta LaTeX'e aktar +url: /tr/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# docx dosyasını txt olarak kaydet – Word Matematiğini LaTeX'e C# ile Dışa Aktarma + +Hiç **docx'i txt olarak kaydet** yapmak zorunda kaldınız mı ama denklemlerinizin bir sembol karmasına dönüşmesinden endişe mi duydunuz? Yalnız değilsiniz. Birçok geliştirici, özellikle kaynak Office Math nesneleri içerdiğinde, **word'ü txt'ye dönüştür** işlemini aşağı akış işleme için yapmaya çalışırken bu sorunla karşılaşıyor. + +İyi haber? Birkaç C# satırı ve doğru kaydetme seçenekleriyle, her denklemi temiz LaTeX olarak koruyabilir, düz‑metin dosyasını hem insan tarafından okunabilir hem de bilimsel iş akışları için hazır hâle getirebilirsiniz. Bu öğreticide tüm süreci adım adım inceleyecek, bir Word dosyasından *how to export math* sorusunu yanıtlayacak ve *how to convert docx* sorusunu matematik bütünlüğünü kaybetmeden göstereceğiz. + +## Öğrenecekleriniz + +- Aspose.Words (veya uyumlu herhangi bir kütüphane) kullanarak bir `.docx` dosyasını yükleyin. +- `TxtSaveOptions`'ı, Office Math'in LaTeX olarak dışa aktarılacak şekilde yapılandırın. +- Denklemleri bozulmadan tutan bir `.txt` dosyası olarak belgeyi kaydedin. +- Gizli denklemler veya büyük belgeler gibi uç durumları ele almak için ipuçları. +- Şu anda kopyalayıp yapıştırabileceğiniz tam, çalıştırılabilir bir kod örneği. + +Gereksiz derleme araçları yok, sadece bir .NET projesi ve Aspose.Words NuGet paketi. Hadi başlayalım. + +--- + +## Önkoşullar + +| Gereksinim | Neden Önemli | +|-------------|----------------| +| .NET 6.0 or later | Modern dil özellikleri ve daha iyi performans. | +| Aspose.Words for .NET (NuGet) | `Document`, `TxtSaveOptions` ve `OfficeMathExportMode` sağlar. | +| A Word file (`.docx`) that contains equations | LaTeX dışa aktarımını çalışırken görmek için. | +| Basic C# knowledge | Kodu satır satır takip edeceksiniz. | + +Henüz Aspose.Words eklemediyseniz, şu komutu çalıştırın: + +```bash +dotnet add package Aspose.Words +``` + +Hepsi bu—ekstra yapılandırma gerekmez. + +## Adım 1: DOCX Dosyasını Yükleyin + +İlk olarak, kaynak belgeyi belleğe almamız gerekiyor. Bunu, okumaya başlamadan önce bir kitabı açmak gibi düşünün. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Pro tip:** Test sırasında “dosya bulunamadı” sürprizlerinden kaçınmak için mutlak bir yol kullanın. Üretimde yolu muhtemelen bir yapılandırma dosyasından veya kullanıcı yüklemesinden alacaksınız. + +## Adım 2: Matematik Dışa Aktarımı için TXT Kaydetme Seçeneklerini Yapılandırın + +Varsayılan olarak, `TxtSaveOptions` düz metni döker ve Office Math'i kaldırır. Bunu istemiyoruz. `OfficeMathExportMode`'u `LaTeX` olarak ayarlamak, kütüphaneye her denklemi LaTeX temsiline çevirmesini söyler. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Neden LaTeX? + +LaTeX, bilimsel yayıncılığın ortak dili olarak kabul edilir. Daha sonra `.txt` dosyasını bir markdown işlemcisine, Jupyter defterine veya LaTeX‑bilgili herhangi bir araca beslediğinizde denklemler mükemmel bir şekilde render edilir. Bunun yerine düz Unicode sembollerini tercih ederseniz, `OfficeMathExportMode.Unicode`'a geçebilirsiniz, ancak LaTeX size en fazla kontrolü sağlar. + +## Adım 3: Belgeyi Düz Metin Dosyası Olarak Kaydedin + +Şimdi sihir gerçekleşiyor. `Save` yöntemi, az önce tanımladığımız seçenekleri kullanarak belgeyi diske yazar. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Bu satır çalıştıktan sonra, `Math.txt` şunları içerecek: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Denklemin `\[` ve `\]` içinde göründüğüne dikkat edin — LaTeX'in tam olarak beklediği biçim. + +## Karmaşık Belgelerden Matematik Nasıl Dışa Aktarılır + +### Gizli veya Satır İçi Denklemlerin Ele Alınması + +Bazı Word dosyaları denklemleri gizli metin çerçevelerinde saklar. Aspose.Words bunları görünür denklemler gibi işler, bu yüzden LaTeX dışa aktarımı otomatik olarak çalışır. Ancak eksik denklemler fark ederseniz, `Document` nesnesinin gizli içeriği yok sayacak şekilde ayarlanmadığını iki kez kontrol edin: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Büyük Belgeler ve Bellek Kullanımı + +500 sayfalık bir tez kaydetmek çok fazla RAM tüketebilir. Bellek ayak izini düşük tutmak için çıktıyı akış olarak yazabilirsiniz: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Akış, oluşturuldukça parçaları diske yazar, böylece tüm dosyanın aynı anda bellekte tutulmasını önler. + +## Yaygın Tuzaklar ve Nasıl Kaçınılır + +| Tuzak | Belirti | Çözüm | +|---------|---------|-----| +| LaTeX parantezleri eksik | Denklemler ham kod olarak görünüyor (`E = mc^{2}`) | `OfficeMathExportMode = LaTeX` olduğundan emin olun. | +| Boş çıktı dosyası | Yanlış yol veya yetersiz izinler | Çıktı dizininin var olduğunu ve yazılabilir olduğunu doğrulayın. | +| Bozuk karakterler | Sistem ANSI beklediği bir ortamda dosya UTF‑8 BOM olmadan kodlanmış | `txtSaveOptions.Encoding = Encoding.UTF8;` ekleyin. | +| Dönüştürme sonrası denklemler kayboluyor | `LoadOptions` ile matematik dışarıda bırakılarak belge yüklendi | Varsayılan `LoadOptions` kullanın veya `LoadOptions.LoadFormat = LoadFormat.Docx` olarak ayarlayın. | + +## Tam Çalışan Örnek + +Aşağıda derleyip çalıştırabileceğiniz tam program yer alıyor. Hata yönetimi, yol doğrulama ve her şeyin başarılı olduğunu gösteren küçük bir konsol kaydı içerir. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Beklenen çıktı** (`Math.txt`'den bir alıntı): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Artık bu dosyayı herhangi bir LaTeX‑bilgili işlemciye besleyebilir ve denklemler güzel bir şekilde render edilecektir. + +## Biçimlendirmeyi Kaybetmeden DOCX'i TXT'ye Dönüştürme + +Sadece düz metne ihtiyacınız varsa ve matematiği önemsemiyorsanız, `OfficeMathExportMode` satırını basitçe atlayın: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Ancak unutmayın, **how to export math** bilimsel iş akışları için ayırıcı özelliktir. LaTeX'i bozulmadan tutmak, dönüşümü gerçekten faydalı kılar. + +## Sonraki Adımlar ve İlgili Konular + +- **Toplu dönüşüm:** Kodu bir `foreach` döngüsü içinde sararak bir klasördeki tüm `.docx` dosyalarını işleyin. +- **Markdown oluşturma:** Metne `#` başlıkları veya `*` madde işaretleri ekleyerek yayınlamaya hazır markdown üretin. +- **PDF dışa aktarımı:** `PdfSaveOptions` kullanarak txt ile birlikte bir PDF sürümü oluşturun. +- **Gelişmiş LaTeX ayarlamaları:** Çıktıyı regex ile işleyerek satır içi denklemler için `\[`/`\]` yerine `$...$` ile değiştirin. + +Bunların her biri aynı temele dayanır—bir `Document` yüklemek ve doğru `SaveOptions` seçmek. Denemekten çekinmeyin; API, çoğu belge‑otomasyon senaryosu için yeterince esnektir. + +## Sonuç + +**docx'i txt olarak kaydet** yaparken her denklemi LaTeX olarak korumanız için gereken her şeyi ele aldık. Kaynak dosyayı yüklemek, **how to export math** için `TxtSaveOptions`'ı yapılandırmak ve son düz‑metin dosyasını yazmak, tüm iş akışı birkaç özlü C# ifadesi içinde sığar. + +Artık Word raporlarını, akademik makaleleri veya metin ve matematiği karıştıran herhangi bir belgeyi otomatik olarak dönüştürebilir ve ortaya çıkan `.txt` dosyasını aşağı akış araçlarına bilimsel detayı kaybetmeden besleyebilirsiniz. + +Deneyin, seçenekleri kendi kullanım durumunuza göre ayarlayın ve yorumlarda nasıl çalıştığını bize bildirin. Kodlamanın tadını çıkarın! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/turkish/net/programming-with-pdfsaveoptions/_index.md index 72073c1bf8..0558e9d8de 100644 --- a/words/turkish/net/programming-with-pdfsaveoptions/_index.md +++ b/words/turkish/net/programming-with-pdfsaveoptions/_index.md @@ -45,7 +45,7 @@ Görüntü kalitesi seçeneklerini ayarlamayı, görüntüler için sıkıştır | [PDF Belgesinde Son Yazdırılan Özelliği Güncelle](./update-last-printed-property/) | Aspose.Words for .NET'i kullanarak adım adım kılavuzumuzla bir PDF belgesinde son yazdırılan özelliğin nasıl güncelleneceğini öğrenin. | [PDF Belgesinde 3D DML 3DEffects Oluşturun](./dml-3deffects-rendering/) | Bu kapsamlı adım adım kılavuzla Aspose.Words for .NET'i kullanarak PDF belgelerinde çarpıcı 3D DML efektlerinin nasıl oluşturulacağını öğrenin. | [PDF Belgesindeki Görüntüleri Araya Ekleme](./interpolate-images/) | Aspose.Words for .NET'i kullanarak PDF belgesinde görüntüleri nasıl interpole edeceğinizi adım adım kılavuzumuzla öğrenin. PDF'lerinizin görüntü kalitesini kolayca iyileştirin. | - +| [Word'den Erişilebilir PDF Oluşturma – Adım Adım Kılavuz](./create-accessible-pdf-from-word-step-by-step-guide/) | Aspose.Words for .NET kullanarak Word belgelerinden erişilebilir PDF dosyaları oluşturmayı adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/turkish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..9de7cc2488 --- /dev/null +++ b/words/turkish/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,239 @@ +--- +category: general +date: 2026-04-07 +description: C#'ta bir DOCX dosyasından erişilebilir PDF oluşturun. Word'ü PDF'ye + nasıl dönüştüreceğinizi, docx'i PDF olarak nasıl kaydedeceğinizi öğrenin ve PDF/UA + uyumluluğunu sağlayın. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: tr +og_description: C#'ta Word'den erişilebilir PDF oluşturun. Bu rehber, Word'ü PDF'ye + nasıl dönüştüreceğinizi, docx dosyasını PDF olarak nasıl kaydedeceğinizi ve PDF/UA + standartlarına nasıl uyacağınızı gösterir. +og_title: Erişilebilir PDF Oluşturma – Tam C# Öğreticisi +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Word'den Erişilebilir PDF Oluşturma – Adım Adım Rehber +url: /tr/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Word'den Erişilebilir PDF Oluşturma – Tam Programlama Öğreticisi + +Word belgesinden **erişilebilir PDF** oluşturmanız gerektiğinde ancak hangi ayarları değiştirmeniz gerektiğinden emin olmadığınız oldu mu? Yalnız değilsiniz. Birçok işletmede PDF/UA (Evrensel Erişilebilirlik) uyumu zorunlu bir gerekliliktir ve geleneksel “PDF’ye dönüştür” düğmesi yeterli olmaz. + +Bu rehberde, **Word'ü PDF'ye dönüştüren**, **docx'i PDF olarak kaydeden** ve çıktının erişilebilirlik standartlarını karşıladığını garanti eden özlü, uçtan uca bir çözümü adım adım inceleyeceğiz. Belirsiz referanslar yok – sadece kopyalayıp‑yapıştırabileceğiniz kod ve her satırın “neden”i. + +> **TL;DR:** Bir `.docx` dosyasını yükleyin, `PdfSaveOptions.Compliance` değerini `PdfUa1` (veya `PdfUa2`) olarak ayarlayın ve `Document.Save` metodunu çağırın. Aspose.Words for .NET ile **erişilebilir PDF** oluşturmak için gereken tek şey bu. + +--- + +## Öğrenecekleriniz + +- **Word'ü PDF'ye dönüştürürken** başlıkları, alt‑metni ve okuma sırasını korumayı öğrenin. +- `PdfUa1` ile `PdfUa2` arasındaki farkı ve her birini ne zaman seçeceğinizi anlayın. +- Sadece birkaç C# satırıyla **docx'i PDF olarak kaydetmeyi** keşfedin. +- Yaygın tuzakları (eksik fontlar, desteklenmeyen etiketler) ve hızlı çözümlerini öğrenin. +- Herhangi bir .NET projesine ekleyebileceğiniz hazır bir kod örneği alın. + +### Ön Koşullar + +- .NET 6 veya üzeri (kod .NET Framework 4.7+ üzerinde de çalışır). +- NuGet üzerinden Aspose.Words for .NET kurulmuş olmalı (`Install-Package Aspose.Words`). +- Zaten doğru yapı (stil, görseller için alt‑metin) içeren bir Word dosyası (`input.docx`). + +Aspose.Words henüz eklemediyseniz, Paket Yöneticisi Konsolu'nda aşağıdaki komutu çalıştırın: + +```powershell +Install-Package Aspose.Words +``` + +Bu, ihtiyacınız olan tek dış bağımlılıktır. + +--- + +## Erişilebilir PDF Oluşturma – Neden Erişilebilirlik Önemlidir + +Bir PDF **PDF/UA** (Evrensel Erişilebilirlik) olarak işaretlendiğinde, ekran okuyucular başlıkları, tabloları ve form alanlarını orijinal Word dosyasındaki gibi gezinebilir. Bu sadece hoş bir özellik değil; birçok hükümet ve şirket PDF/UA uyumunu yasal bir zorunluluk olarak kabul eder. + +`PdfSaveOptions` üzerindeki `Compliance` özelliğini ayarlamak, kütüphaneye gerekli etiketleri eklemesini, doğru belge dilini ayarlamasını ve mantıksal bir okuma sırası oluşturmasını söyler. Bu adımı atlamak, erişilebilirlik denetimlerinden başarısız olacak “sadece görsel” bir PDF üretir. + +--- + +## Aspose.Words ile Word'den PDF'ye Dönüştürme + +Aşağıda, belgeyi erişilebilir tutarak **Word'ü PDF'ye dönüştürmenin** en basit yolu yer alıyor. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Burada ne oluyor?** + +- `Document` Word dosyasını okur, tüm stilleri ve yapıyı korur. +- `PdfSaveOptions.Compliance` Aspose.Words'e çıktıyı PDF/UA olarak etiketlemesini söyler. +- `doc.Save` PDF'yi diske yazar ve etiketleri otomatik olarak gömer. + +> **Pro ipucu:** Kaynak Word dosyanız özel başlık stilleri kullanıyorsa, bunların yerleşik başlık seviyelerine (`Heading1`, `Heading2`, …) eşlendiğinden emin olun. Bu, oluşturulan PDF'nin doğru başlık etiketlerine sahip olmasını sağlar. + +--- + +## Docx'i PDF Olarak Kaydet – PDF/UA Uyumluluğunu Yapılandırma + +`PdfSaveOptions` sınıfına zaten aşina iseniz, erişilebilirliği etkileyen başka anahtarların olup olmadığını merak edebilirsiniz. İşte birkaç faydalı özellik: + +| Özellik | Erişilebilirlik Üzerindeki Etkisi | Tipik Değer | +|----------|------------------------|---------------| +| `Compliance` | PDF/UA etiketlemeyi açar/kapatır | `PdfCompliance.PdfUa1` veya `PdfUa2` | +| `EmbedFullFonts` | Okuyucuların hedef tipografiyi görmesini garanti eder | `true` (varsayılan) | +| `OptimizeOutput` | Etiketleri kaldırmadan dosya boyutunu azaltır | `true` | + +Önceki kod parçacığını şu şekilde genişletebilirsiniz: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +`PdfUa2`'ye geçmek, dekoratif görseller için *artifact* etiketleme gibi yeni PDF/UA özelliklerini destekler. Bunlara ihtiyacınız yoksa, eski yardımcı teknolojilerle maksimum uyumluluk için `PdfUa1` kullanın. + +--- + +## Docx'i PDF Olarak Dışa Aktarma – Tam Çalışan Örnek + +Aşağıda, bir dosyanın yüklenmesinden çıktının doğrulanmasına kadar tüm akışı gösteren bağımsız bir konsol uygulaması bulunuyor. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Beklenen Sonuç + +- Çalıştırılabilir dosyanın bulunduğu klasörde **Compliant.pdf** adlı bir dosya oluşur. +- PDF'yi Adobe Acrobat Pro → *Araçlar → Erişilebilirlik → Tam Kontrol* ile açtığınızda **Erişilebilirlik sorunu yok** raporu almanız gerekir (kaynak Word dosyası iyi yapılandırılmışsa). +- PDF'nin *Özellikler → Gelişmiş* sekmesinde “PDF/A ve PDF/UA uyumu” bölümünde **PDF/UA** gösterilir. + +--- + +## Yaygın Kenar Durumları ve Nasıl Ele Alınır + +| Durum | Neden Önemli | Hızlı Çözüm | +|-----------|----------------|-----------| +| **Missing fonts** | PDF varsayılan bir fonta geri dönebilir ve görsel düzen bozulur. | `EmbedFullFonts = true` (zaten varsayılan) ayarlayın ve font dosyalarının derleme makinesinde erişilebilir olduğundan emin olun. | +| **Images without alt‑text** | Ekran okuyucular “görsel” ifadesini açıklama olmadan okur. | Dönüştürmeden önce Word'de `Alt Text` ekleyin (`Sağ‑tık → Resmi Biçimlendir → Alt Metin`). | +| **Custom styles not recognized as headings** | PDF/UA doğru başlık etiketlerine ihtiyaç duyar. | Özel stilleri yerleşik başlıklara şu şekilde eşleyin: `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | 500 sayfalık bir dosyanın dönüştürülmesi RAM kullanımını artırabilir. | `doc.Save(outputPath, options)` ile `options.SaveFormat = SaveFormat.Pdf` kullanın ve `OutOfMemoryException` alırsanız parçalar halinde işlemeyi düşünün. | +| **Need to export docx to pdf without accessibility** | Bazen sadece görsel bir PDF istersiniz. | `Compliance` ayarını kaldırın veya `PdfCompliance.Pdf15` olarak ayarlayın. | + +--- + +## Görsel Örneği (Alt Metin Dahil) + +![PDF/UA etiket ağacını gösteren ekran görüntüsü – erişilebilir PDF oluşturduğumuzu gösterir](https://example.com/images/accessible-pdf-screenshot.png) + +*Yukarıdaki alt‑metin, ana anahtar kelimeyi pekiştirir ve hem kullanıcıların hem de AI modellerinin görsel bağlamını anlamasına yardımcı olur.* + +--- + +## Sıkça Sorulan Sorular + +**S: Bu .NET Core ile çalışır mı?** +C: Kesinlikle. Aspose.Words platformlar arasıdır; sadece .NET 6+ projenizde NuGet paketine referans verin. + +**S: Birden fazla DOCX dosyasını toplu işleyebilir miyim?** +C: Evet. Yükleme ve kaydetme mantığını `foreach (var file in Directory.GetFiles(folder, "*.docx"))` döngüsü içinde sarın. Performans için tek bir `PdfSaveOptions` örneğini yeniden kullanmayı unutmayın. + +**S: Aspose otomatik olarak eklemeyen özel bir PDF/UA etiketi eklemem gerekirse?** +C: Düşük seviyeli PDF API'sini (`PdfSaveOptions.CustomProperties`) kullanın veya iText 7 gibi manuel etiket eklemeye izin veren bir kütüphane ile PDF'yi sonradan işleyin. + +--- + +## Sonuç + +Siz + +{{< /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 924616f109..afb9207755 100644 --- a/words/turkish/net/working-with-fonts/_index.md +++ b/words/turkish/net/working-with-fonts/_index.md @@ -40,7 +40,7 @@ Metni farklı yazı tipleriyle biçimlendirmek, yazı tipi değiştirme kurallar | [Font Klasörlerini Öncelikli Olarak Ayarla](./set-fonts-folders-with-priority/) | Aspose.Words for .NET kullanarak Word belgelerinde font klasörlerini öncelikli olarak nasıl ayarlayacağınızı öğrenin. Kılavuzumuz belgelerinizin her seferinde mükemmel şekilde işlenmesini sağlar. | | [True Type Yazı Tipleri Klasörünü Ayarla](./set-true-type-fonts-folder/) | Aspose.Words for .NET kullanarak Word belgelerinde True Type Fonts klasörünün nasıl ayarlanacağını öğrenin. Tutarlı font yönetimini sağlamak için ayrıntılı, adım adım kılavuzumuzu izleyin. | | [İşleme Sırasında Varsayılan Yazı Tipini Belirle](./specify-default-font-when-rendering/) | Aspose.Words for .NET kullanarak Word belgelerini işlerken varsayılan yazı tipini nasıl belirleyeceğinizi öğrenin. Platformlar arasında tutarlı belge görünümünü sağlayın. | -| [Yükleme Seçenekleriyle Yazı Tipi Ayarları](./font-settings-with-load-options/) Aspose.Words for .NET'te yükleme seçenekleriyle yazı tipi ayarlarının nasıl yönetileceğini öğrenin. Geliştiricilerin Word belgelerinde tutarlı yazı tipi görünümünü sağlamaları için adım adım kılavuz. +| [Yükleme Seçenekleriyle Yazı Tipi Ayarları](./font-settings-with-load-options/) Aspose.Words for .NET'te yükleme seçenekleriyle yazı tipi ayarlarının nasıl yönetileceğini öğrenin. Geliştiricilerin Word belgelerinde tutarlı yazı tipi görünümünü sağlamaları için adım adım kılavuz. | | [Yazı Tipleri Klasörünü Ayarla](./set-fonts-folder/) | Word belgelerinizin eksik yazı tipleri olmadan doğru şekilde işlenmesini sağlamak için Aspose.Words for .NET'te özel yazı tipleri klasörünün nasıl ayarlanacağını öğrenin. | | [Yazı Tipi Ayarları Varsayılan Örnek](./font-settings-default-instance/) | Bu eğitimde, Aspose.Words for .NET ile bir Word belgesinde varsayılan yazı tipi ayarlarının nasıl yapılandırılacağını öğrenin. | | [Mevcut Yazı Tiplerinin Listesini Alın](./get-list-of-available-fonts/) | Bu detaylı adım adım eğitimde Aspose.Words for .NET kullanarak mevcut fontların listesini nasıl alacağınızı keşfedin. Font yönetimi becerilerinizi artırın. | @@ -48,6 +48,7 @@ Metni farklı yazı tipleriyle biçimlendirmek, yazı tipi değiştirme kurallar | [Uyarı Bildirimi Alın](./receive-warning-notification/) Aspose.Words for .NET kullanırken uyarı bildiriminin nasıl alınacağını öğrenin ve belgelerinizdeki sorunları veya uyarıları yönetin. | | [Kaynak Steam Yazı Tipi Kaynak Örneği](./resource-steam-font-source-example/) | Aspose.Words for .NET'e özel yazı tiplerini yüklemek için Kaynak Akışı Yazı Tipi Kaynağını nasıl kullanacağınızı öğrenin. | | [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ılamanın Tam Kılavuzu](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Aspose.Words for .NET kullanarak bir Word belgesindeki mevcut yazı tiplerini nasıl tespit edeceğinizi adım adım öğrenin. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/turkish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/turkish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..81ea6269fc --- /dev/null +++ b/words/turkish/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,282 @@ +--- +category: general +date: 2026-04-07 +description: Aspose.Words kullanarak C#'de eksik yazı tiplerini işlerken yazı tiplerini + nasıl tespit edeceğinizi ve uyarıları nasıl yakalayacağınızı öğrenin. Adım adım + kod dahil. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: tr +og_description: Aspose.Words'ta yazı tiplerini nasıl tespit edersiniz? Uyarıları yakalamak + ve eksik yazı tiplerini zahmetsizce yönetmek için bu öğreticiyi izleyin. +og_title: Aspose.Words'ta Yazı Tiplerini Nasıl Algılayabilirsiniz – Tam Kılavuz +tags: +- Aspose.Words +- C# +- Font handling +title: Aspose.Words'ta Yazı Tiplerini Nasıl Algılayabilirsiniz – Tam Kılavuz +url: /tr/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.Words'te Yazı Tiplerini Nasıl Algılayabilirsiniz – Tam Kılavuz + +Bir Word belgesinde eksik **yazı tiplerini** üretime göndermeden önce tespit etmeyi hiç merak ettiniz mi? Tek başınıza değilsiniz. Birçok kurumsal senaryoda istenmeyen bir yazı tipi, PDF dönüşüm hattını bozabilir veya profesyonel olmayan bir görünüm oluşturan yerleşim hatalarına neden olabilir. İyi haber şu ki Aspose.Words, bu eksik tipografileri tespit etmenizi ve net uyarılar göstermenizi sağlayan yerleşik bir yöntem sunar. + +Bu öğreticide **yazı tiplerini nasıl algılayacağınızı**, **uyarıları nasıl yakalayacağınızı** ve **eksik yazı tiplerini nasıl ele alacağınızı** adım adım gösterecek, uygulamanızın dayanıklı kalmasını sağlayacağız. Harici araçlar, tahmin yürütme yok—şu anda projenize ekleyebileceğiniz saf C# kodu. + +> **Hızlı ön izleme:** Sonunda, belge yükleme sırasında ortaya çıkan tüm yazı tipi değiştirme mesajlarını toplayan yeniden kullanılabilir bir `FontSubstitutionWarningCollector`'a sahip olacaksınız ve bir yazı tipi bulunamadığında nasıl tepki vereceğinizi öğreneceksiniz. + +--- + +## Öğrenecekleriniz + +- `LoadOptions`'ı yazı tipi‑değiştirme uyarılarını dinleyecek şekilde nasıl yapılandıracağınız. +- Bu uyarıları özel bir toplayıcı sınıfında nasıl yakalayacağınız. +- Toplanan uyarıları işleyip, iptal edip, kaydedip ya da yazı tiplerini değiştirme kararını nasıl vereceğiniz. +- Uzaktan veya gömülü yazı tiplerine referans veren belgeler için kenar‑durum yönetimi. + +**Önkoşullar:** .NET 6+ (veya .NET Framework 4.6+), Aspose.Words for .NET (en son sürüm) ve temel C# bilgisi. Aspose.Words ile hiç çalışmadıysanız endişelenmeyin—bu kılavuz sadece birkaç dakikalık kurulum süresi gerektirir. + +--- + +## Aspose.Words LoadOptions Kullanarak Yazı Tiplerini Algılamak + +Eksik yazı tiplerini algılamanın ilk adımı, Aspose.Words’a bunları raporlamasını söylemektir. Bu, `LoadOptions.WarningCallback` özelliği aracılığıyla yapılır; bu özellik `IWarningCallback` arayüzünü uygulayan herhangi bir sınıfı kabul eder. Aşağıda, her uyarıyı daha sonra incelemek üzere saklayan küçük bir toplayıcı oluşturuyoruz. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Neden önemli:** Uyarı geri araması olmadan Aspose.Words eksik yazı tiplerini sessizce varsayılan bir yazı tipiyle değiştirir ve sorunun varlığını asla öğrenemezsiniz. `WarningType.FontSubstitution` yakalayarak tam görünürlük elde edersiniz—ev sahibi makinede bulunmayan **yazı tiplerini algılamak** için tam olarak ihtiyacınız olan veri. + +Şimdi toplayıcıyı `LoadOptions` içine takıp bir belge yüklüyoruz: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **İpucu:** Bir toplu işlemde birden çok belgeyle çalışıyorsanız aynı `FontSubstitutionWarningCollector` örneğini yeniden kullanın, ancak farklı dosyalardan gelen uyarıların karışmasını önlemek için yüklemeler arasında `Clear()` çağırmayı unutmayın. + +--- + +## Belge Yüklenirken Uyarıları Yakalamak + +Belge yüklendikten sonra toplayıcı zaten her yazı tipiyle ilgili uyarıyı tutar. Bir sonraki mantıklı soru: *Uyarıları* kolayca kaydedebileceğim ya da görüntüleyebileceğim bir şekilde nasıl yakalarım? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Tipik çıktı şu şekildedir: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Bu ne anlatıyor:** Her satır, orijinal yazı tipi adını ve Aspose.Words’un seçtiği yedek yazı tipini gösterir. Bu bilgilerle, yedek yazı tipinin kabul edilebilir olup olmadığına ya da eksik yazı tipini manuel olarak gömmeniz gerekip gerekmediğine karar verebilirsiniz. + +--- + +## Eksik Yazı Tiplerini Zarifçe Ele Almak + +Uyarıları tespit edip yakalamak sadece işin yarısıdır. Gerçek değer, **eksik yazı tiplerini** üretime hazır bir şekilde **ele aldığınızda** ortaya çıkar. Aşağıda üç yaygın strateji yer alıyor: + +1. **Kaydet ve Devam Et** – Sadece bir denetim izi gerektiğinde toplu işleme için uygundur. +2. **Kritik Yazı Tiplerinde İptal Et** – Belirli bir yazı tipi (ör. marka‑özel bir tipografi) eksikse istisna fırlatın. +3. **Eksik Yazı Tiplerini Otomatik Olarak Göm** – Eksik yazı tipini bilinen bir klasörden yükleyin ve belgeyi yeniden yüklemeden önce Aspose.Words’a kaydedin. + +### Örnek: Kritik Bir Yazı Tipinde İptal Et + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Örnek: Eksik Yazı Tiplerini Otomatik Göm + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Bu kalıplar neden yardımcı:** Bir yazı tipi eksik olduğunda ne yapılacağını açıkça belirleyerek, marka bütünlüğünü veya okunabilirliği tehlikeye atabilecek sessiz yedeklemeleri ortadan kaldırırsınız. Bu, **eksik yazı tiplerini kontrol altında ele almanın** özüdür. + +--- + +## Tam Çalışan Örnek + +Her şeyi bir araya getirdiğimizde, **yazı tiplerini nasıl algılayacağınızı**, **uyarıları nasıl yakalayacağınızı** ve eksik yazı tiplerini **loglayarak** ele alacak basit bir politikayı gösteren tek bir, çalıştırılabilir program aşağıdadır. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Beklenen sonuç:** Programı, makinede bulunmayan bir yazı tipine referans veren bir belgeye karşı çalıştırdığınızda, konsol her değiştirme uyarısını listeleyecek. Eğer bir uyarı `critical` kümesindeki bir yazı tipini içeriyorsa, program erken çıkacak ve hatalı bir PDF'nin üretilmesini engelleyecektir. + +--- + +## Sıkça Sorulan Sorular (SSS) + +| Soru | Cevap | +|------|-------| +| *Bu kodu kullanmak için Aspose.Words lisansına ihtiyacım var mı?* | Evet, geçerli bir Aspose.Words lisansı değerlendirme filigranlarını kaldırır ve tam işlevselliği açar. | +| *Bu yaklaşım gömülü yazı tiplerini tespit edebilir mi?* | Gömülü yazı tipleri zaten dosyanın bir parçasıdır, bu yüzden Aspose.Words bir değiştirme uyarısı üretmez. Gerekirse `Document.FontInfos` ile gömülü yazı tiplerini listeleyebilirsiniz. | +| *Eksik yazı tipi Windows'ta bir sistem yazı tipi iken Linux'ta yoksa ne olur?* | Linux'ta aynı uyarı tetiklenir çünkü yazı tipi orada yüklü değildir. Gerekli `.ttf` dosyalarını uygulamanızla birlikte dağıtmak için “eksik yazı tiplerini ele al” stratejisini kullanın. | +| *Uyarı toplayıcı iş parçacığı...* | + +{{< /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 f5a19d54fb..f25f40e4d5 100644 --- a/words/vietnamese/net/basic-conversions/_index.md +++ b/words/vietnamese/net/basic-conversions/_index.md @@ -24,6 +24,7 @@ Basic Conversions hướng dẫn bạn cách chuyển đổi tài liệu cơ b | [Chuyển đổi Doc sang Docx](./doc-to-docx/) | Tìm hiểu cách chuyển đổi DOC sang DOCX bằng Aspose.Words cho .NET. Hướng dẫn từng bước với ví dụ về mã. Hoàn hảo cho các nhà phát triển. | | [Chuyển đổi Docx sang Rtf](./docx-to-rtf/) | Tìm hiểu cách chuyển đổi DOCX sang RTF bằng Aspose.Words cho .NET với hướng dẫn từng bước của chúng tôi. Chuyển đổi dễ dàng để xử lý tài liệu liền mạch. | | [Chuyển đổi tệp Word sang PDF](./docx-to-pdf/) Tìm hiểu cách dễ dàng chuyển đổi tệp Word sang PDF bằng Aspose.Words cho .NET với hướng dẫn của chúng tôi. Hoàn hảo cho các nhà phát triển đang tìm kiếm chuyển đổi tài liệu nhanh chóng và đáng tin cậy. | +| [Chuyển đổi DOCX sang PDF trong C# – Hướng dẫn lập trình đầy đủ](./convert-docx-to-pdf-in-c-complete-programming-guide/) | Hướng dẫn chi tiết cách chuyển đổi DOCX sang PDF trong C# bằng Aspose.Words, kèm ví dụ mã nguồn và các tùy chọn nâng cao. | | [Chuyển đổi Word sang PDF trong C# bằng Aspose.Words – Hướng dẫn](./convert-word-to-pdf-in-c-using-aspose-words-guide/) | Hướng dẫn chi tiết cách chuyển đổi tài liệu Word sang PDF trong C# sử dụng Aspose.Words, kèm ví dụ mã nguồn. | | [Lưu Word thành PDF với Aspose.Words – Hướng dẫn C# đầy đủ](./save-word-as-pdf-with-aspose-words-complete-c-guide/) | Hướng dẫn chi tiết cách lưu tài liệu Word thành PDF bằng Aspose.Words trong C#, kèm ví dụ mã nguồn. | | [Chuyển đổi Docx sang Byte](./docx-to-byte/) | Tìm hiểu cách chuyển đổi Docx sang mảng byte trong .NET bằng Aspose.Words để xử lý tài liệu hiệu quả. Có kèm hướng dẫn từng bước. | diff --git a/words/vietnamese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md b/words/vietnamese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md new file mode 100644 index 0000000000..9caccc197a --- /dev/null +++ b/words/vietnamese/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/_index.md @@ -0,0 +1,205 @@ +--- +category: general +date: 2026-04-07 +description: Chuyển đổi DOCX sang PDF trong C# nhanh chóng. Tìm hiểu cách lưu Word + thành PDF, tải tài liệu docx trong C#, và đảm bảo tuân thủ PDF/UA‑2 trong vài phút. +draft: false +keywords: +- convert docx to pdf +- save word as pdf +- how to convert docx +- convert word pdf c# +- load docx document c# +language: vi +og_description: Chuyển đổi DOCX sang PDF trong C# ngay lập tức. Hướng dẫn này chỉ + cho bạn cách lưu Word dưới dạng PDF, tải tài liệu docx trong C# và đáp ứng tiêu + chuẩn PDF/UA‑2. +og_title: Chuyển đổi DOCX sang PDF trong C# – Hướng dẫn từng bước +tags: +- Aspose.Words +- C# +- PDF Generation +title: Chuyển đổi DOCX sang PDF trong C# – Hướng dẫn lập trình toàn diện +url: /vi/net/basic-conversions/convert-docx-to-pdf-in-c-complete-programming-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Chuyển đổi DOCX sang PDF trong C# – Hướng dẫn lập trình đầy đủ + +Bạn đã bao giờ cần **convert DOCX to PDF** trong một ứng dụng C# nhưng không biết bắt đầu từ đâu? 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 phát hiện rằng nút “save as PDF” đơn giản trong Word không thể chuyển thành mã. Tin tốt? Chỉ với vài dòng Aspose.Words (hoặc bất kỳ thư viện tương đương nào) bạn có thể tự động hoá toàn bộ quá trình, giữ các hình dạng nổi trong dòng, và thậm chí đạt chuẩn PDF/UA‑2 mà không hề khó khăn. + +Trong hướng dẫn này, bạn sẽ học cách **save Word as PDF**, **load docx document C#**, và điều chỉnh các tùy chọn xuất để tệp kết quả sẵn sàng cho các cuộc kiểm tra khả năng truy cập. Khi kết thúc, bạn sẽ có một chương trình tự chứa, có thể chạy được, chuyển bất kỳ tệp `.docx` nào thành PDF sạch, tuân thủ tiêu chuẩn. + +> **Tại sao lại quan trọng?** +> Chuyển đổi DOCX sang PDF là yêu cầu phổ biến cho các hệ thống lập hoá đơn, trình tạo báo cáo và quy trình lưu trữ tài liệu. Tự động hoá quá trình này loại bỏ các bước thủ công, giảm lỗi con người, và đảm bảo mọi đầu ra trông hoàn toàn giống nhau trên mọi nền tảng. + +--- + +## Những gì bạn cần + +- **.NET 6.0** hoặc phiên bản mới hơn (mã cũng chạy trên .NET Framework 4.6+) +- **Aspose.Words for .NET** (bản dùng thử miễn phí hoặc phiên bản có giấy phép) – bạn có thể cài đặt qua NuGet: `dotnet add package Aspose.Words` +- Một tệp mẫu `input.docx` đặt trong thư mục bạn kiểm soát (chúng tôi sẽ gọi nó là `YOUR_DIRECTORY`) +- Visual Studio, VS Code, hoặc bất kỳ trình chỉnh sửa C# nào bạn thích + +Chỉ vậy—không cần dịch vụ bổ sung, không có cuộc gọi REST. Chỉ C# thuần. + +## Bước 1: Tải tài liệu DOCX trong C# + +Trước khi bạn có thể **convert docx to pdf**, bạn cần đưa tệp Word vào bộ nhớ. Lớp `Document` thực hiện việc này cho bạn. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; + +// Adjust the path to where your DOCX lives +string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + +// Load the source DOCX document +Document document = new Document(inputPath); +``` + +**Tại sao điều này quan trọng:** +Việc tải tệp cung cấp cho bạn một mô hình đối tượng đã được phân tích đầy đủ—đoạn văn, bảng, hình dạng nổi, mọi thứ. Đây là bước đầu tiên trong bất kỳ quy trình **load docx document c#** nào, và nó cũng xác thực rằng tệp không bị hỏng trước khi bạn lãng phí thời gian cho việc chuyển đổi. + +> **Mẹo chuyên nghiệp:** Nếu bạn đang xử lý các tệp do người dùng tải lên, hãy bao quanh lời gọi `new Document()` bằng khối try/catch để xử lý các tệp DOCX bị hỏng một cách nhẹ nhàng. + +## Bước 2: Cấu hình tùy chọn lưu PDF (Tuân thủ & Xử lý hình dạng) + +Bạn có thể tự hỏi, “Tôi có cần điều chỉnh gì không, hay chỉ cần gọi `Save`?” Câu trả lời ngắn gọn: bạn có thể, nhưng việc thiết lập các tùy chọn đúng sẽ làm cho PDF có khả năng truy cập và hình ảnh trung thực. + +```csharp +// Create PDF save options +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + // Export floating shapes (like text boxes) as inline tags so they stay positioned + ExportFloatingShapesAsInlineTag = true, + + // Enforce PDF/UA‑2 compliance for accessibility + Compliance = PdfCompliance.PdfUa2 +}; +``` + +**Tại sao điều này quan trọng:** +- `ExportFloatingShapesAsInlineTag = true` ngăn các đối tượng nổi bị mất hoặc lệch vị trí khi PDF được xem trên các thiết bị khác nhau. +- `Compliance = PdfCompliance.PdfUa2` đảm bảo đầu ra đáp ứng tiêu chuẩn PDF/UA‑2, điều này rất quan trọng cho khả năng tương thích với trình đọc màn hình và lưu trữ pháp lý. + +Nếu bạn không cần khả năng truy cập, bạn có thể bỏ dòng `Compliance`, nhưng giữ lại nó hầu như không gây thêm tải và giúp giải pháp của bạn chuẩn bị cho tương lai. + +## Bước 3: Lưu tài liệu dưới dạng PDF – Hành động cốt lõi **Convert DOCX to PDF** + +Bây giờ tài liệu đã được tải và các tùy chọn đã được thiết lập, việc chuyển đổi thực tế chỉ là một lời gọi phương thức duy nhất. + +```csharp +// Define the output path +string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + +// Save the document as PDF using the configured options +document.Save(outputPath, pdfOptions); +``` + +**Bạn sẽ thấy:** +Khi chạy chương trình sẽ tạo ra `output.pdf` trong cùng thư mục. Mở nó bằng bất kỳ trình xem PDF nào và bạn sẽ nhận thấy rằng: + +- Tất cả văn bản, bảng và hình ảnh xuất hiện chính xác như trong DOCX gốc. +- Các hình dạng nổi được giữ lại trong dòng, bảo toàn bố cục. +- Tệp vượt qua các công cụ kiểm tra PDF/UA‑2 cơ bản (ví dụ, Adobe Acrobat Preflight). + +## Ví dụ hoàn chỉnh – Từ đầu đến cuối + +Dưới đây là một ứng dụng console đầy đủ, sẵn sàng chạy, minh họa toàn bộ quy trình. Sao chép‑dán nó vào một dự án C# mới và nhấn **F5**. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace DocxToPdfDemo +{ + class Program + { + static void Main(string[] args) + { + // 1️⃣ Load the DOCX document + string inputPath = Path.Combine("YOUR_DIRECTORY", "input.docx"); + Document document; + try + { + document = new Document(inputPath); + Console.WriteLine($"Loaded DOCX from: {inputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load DOCX: {ex.Message}"); + return; + } + + // 2️⃣ Set up PDF save options (inline shapes + PDF/UA‑2) + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + ExportFloatingShapesAsInlineTag = true, + Compliance = PdfCompliance.PdfUa2 + }; + + // 3️⃣ Save as PDF + string outputPath = Path.Combine("YOUR_DIRECTORY", "output.pdf"); + try + { + document.Save(outputPath, pdfOptions); + Console.WriteLine($"Successfully converted to PDF: {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"PDF conversion failed: {ex.Message}"); + } + } + } +} +``` + +**Kết quả mong đợi trong console:** + +``` +Loaded DOCX from: YOUR_DIRECTORY\input.docx +Successfully converted to PDF: YOUR_DIRECTORY\output.pdf +``` + +Và một tệp `output.pdf` gọn gàng sẽ nằm bên cạnh tệp nguồn của bạn. + +## Câu hỏi thường gặp & Các trường hợp đặc biệt + +| Question | Answer | +|----------|--------| +| **Tôi có thể chuyển đổi DOCX được lưu trong `MemoryStream` không?** | Chắc chắn. Sử dụng `new Document(stream)` thay vì đường dẫn tệp. | +| **Nếu DOCX chứa macro thì sao?** | Aspose.Words mặc định bỏ qua macro VBA; chúng sẽ không xuất hiện trong PDF. | +| **Tôi có cần giấy phép cho môi trường production không?** | Bản dùng thử miễn phí sẽ thêm watermark sau một số trang nhất định. Đối với sử dụng thương mại, hãy mua giấy phép để loại bỏ nó. | +| **Làm sao để thay đổi kích thước trang PDF?** | Đặt `pdfOptions.PageSetup.PaperSize = PaperSize.A4;` trước khi lưu. | +| **Có cách nào để nhúng phông chữ tùy chỉnh không?** | Có—thêm `pdfOptions.FontEmbeddingMode = FontEmbeddingMode.EmbedAll;`. | + +## Mẹo chuyên nghiệp để có trải nghiệm **Save Word as PDF** suôn sẻ + +- **Batch processing:** Đóng gói logic chuyển đổi trong một vòng lặp và cung cấp danh sách các đường dẫn DOCX. +- **Performance:** Tái sử dụng một thể hiện `PdfSaveOptions` duy nhất khi chuyển đổi nhiều tệp; nó giảm áp lực GC. +- **Logging:** Xuất kích thước của PDF đã tạo (`new FileInfo(outputPath).Length`) để giám sát kết quả nén. +- **Error handling:** Phân biệt giữa `FileNotFoundException` (DOCX thiếu) và `UnauthorizedAccessException` (vấn đề quyền ghi). + +## Kết luận + +Bây giờ bạn đã có một mẫu vững chắc, sẵn sàng cho production để **convert DOCX to PDF** trong C#. Bằng cách tải DOCX, cấu hình các tùy chọn lưu PDF, và gọi `Save`, bạn có thể **save Word as PDF**, tôn trọng các chi tiết bố cục, và đáp ứng tiêu chuẩn khả năng truy cập—tất cả trong chưa đầy một chục dòng mã. + +Sẵn sàng cho thử thách tiếp theo? Hãy thử thay `PdfSaveOptions` bằng `ImageSaveOptions` để **save Word as PNG**, hoặc khám phá lớp `HtmlSaveOptions` để tạo đầu ra sẵn sàng cho web. Dù sao, các nguyên tắc cơ bản **load docx document c#** vẫn áp dụng, giúp mã của bạn chuẩn bị cho tương lai. + +Chúc lập trình vui vẻ, và hy vọng các PDF của bạn luôn tuân thủ! + +--- + +![Convert DOCX to PDF example output](convert-docx-to-pdf-output.png "Convert DOCX to PDF example output") + +{{< /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-loadoptions/_index.md b/words/vietnamese/net/programming-with-loadoptions/_index.md index 38c93d3f43..f726329320 100644 --- a/words/vietnamese/net/programming-with-loadoptions/_index.md +++ b/words/vietnamese/net/programming-with-loadoptions/_index.md @@ -34,6 +34,7 @@ Trong các hướng dẫn này, bạn sẽ học cách sử dụng LoadOptions | [Tải các tập tin Chm vào tài liệu Word](./load-chm/) | Dễ dàng tải các tệp CHM vào tài liệu Word bằng Aspose.Words cho .NET với hướng dẫn từng bước này. Hoàn hảo để hợp nhất tài liệu kỹ thuật của bạn. | | [Cách khôi phục docx với Aspose.Words – từng bước](./how-to-recover-docx-with-aspose-words-step-by-step/) | Hướng dẫn chi tiết cách khôi phục tệp docx bị hỏng bằng Aspose.Words trong .NET, từng bước một. | | [Aspose Load Options – Tải DOCX với Cài Đặt Phông Chữ Tùy Chỉnh](./aspose-load-options-load-docx-with-custom-font-settings/) | Hướng dẫn cách tải tệp DOCX bằng Aspose Load Options với cài đặt phông chữ tùy chỉnh. | +| [Khôi phục DOCX bị hỏng – Hướng dẫn C# đầy đủ để sửa và lưu tệp](./recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/) | Hướng dẫn chi tiết cách khôi phục và sửa các tệp DOCX bị hỏng bằng Aspose.Words trong C#, bao gồm các bước sửa lỗi và lưu lại tài liệu. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md b/words/vietnamese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md new file mode 100644 index 0000000000..b9e894267a --- /dev/null +++ b/words/vietnamese/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/_index.md @@ -0,0 +1,250 @@ +--- +category: general +date: 2026-04-07 +description: Học cách khôi phục các tệp DOCX bị hỏng trong C# và lưu tài liệu đã khôi + phục một cách an toàn. Hướng dẫn từng bước với ví dụ Aspose.Words. +draft: false +keywords: +- recover corrupted docx +- save recovered document +- Aspose.Words recovery +- LoadOptions RecoveryMode +- C# document handling +- error‑tolerant loading +language: vi +og_description: Khôi phục các tệp DOCX bị hỏng trong C# và lưu tài liệu đã khôi phục + bằng Aspose.Words. Mã đầy đủ, giải thích và các mẹo thực hành tốt nhất. +og_title: Khôi phục DOCX bị hỏng – Hướng dẫn C# chi tiết từng bước +tags: +- C# +- Aspose.Words +- DOCX +- File Recovery +title: Khôi phục DOCX bị hỏng – Hướng dẫn C# toàn diện để sửa và lưu tệp +url: /vi/net/programming-with-loadoptions/recover-corrupted-docx-complete-c-guide-to-fix-and-save-file/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Khôi phục DOCX bị hỏng – Hướng dẫn C# đầy đủ để sửa và lưu tệp + +Bạn đã bao giờ cố gắng mở một tệp DOCX trông ổn trong Explorer nhưng lại ném ra một ngoại lệ trong ứng dụng của mình chưa? Đó là cơn ác mộng “tệp Word bị hỏng” kinh điển, và thường kết thúc bằng một stack‑trace mà bạn không muốn nhìn thấy. Tin tốt? Aspose.Words cung cấp cho bạn tính năng **recover corrupted docx** cho phép bạn tiếp tục làm việc ngay cả khi tệp bị hỏng. + +Trong hướng dẫn này, chúng ta sẽ đi qua các bước chính xác để tải một tài liệu bị hỏng, yêu cầu thư viện tiếp tục, và sau đó **save recovered document** vào một tệp mới, sạch sẽ. Khi kết thúc, bạn sẽ hiểu tại sao chế độ khôi phục quan trọng, cách cấu hình nó, và những cạm bẫy cần tránh—không có những lối tắt mơ hồ “xem tài liệu”. + +## Những gì bạn cần + +- **Aspose.Words for .NET** (bất kỳ phiên bản mới nào; 24.11 đã được sử dụng khi viết hướng dẫn này) +- Môi trường phát triển .NET (Visual Studio, Rider, hoặc VS Code với extension C#) +- Một tệp DOCX mẫu mà bạn nghi ngờ bị hỏng (bạn có thể làm hỏng tệp bằng cách mở nó trong trình chỉnh sửa zip và xóa một phần, chỉ để thử) +- Kiến thức cơ bản về C#—không cần gì phức tạp, chỉ cần khả năng tạo một ứng dụng console + +Nếu bạn đã có những thứ trên, tuyệt vời—hãy chuyển thẳng vào giải pháp. + +## Bước 1: Thiết lập LoadOptions với chiến lược khôi phục phù hợp + +Trọng tâm của giải pháp là đối tượng `LoadOptions`. Nó cho Aspose.Words biết cách hành xử khi gặp XML không hợp lệ hoặc thiếu các phần trong gói DOCX. Cờ `RecoveryMode.RecoverAndContinue` là chế độ khoan dung nhất—nó cố gắng cứu lấy những gì có thể và bỏ qua phần còn lại. + +```csharp +using Aspose.Words; +using Aspose.Words.Loading; + +/// +/// Configures loading options to recover corrupted DOCX files. +/// +LoadOptions loadOptions = new LoadOptions +{ + // This mode keeps parsing even if serious errors are found. + RecoveryMode = RecoveryMode.RecoverAndContinue +}; +``` + +**Tại sao điều này quan trọng:** Nếu bạn bỏ qua `LoadOptions` hoặc sử dụng chế độ mặc định (`RecoveryMode.NoRecovery`), hàm khởi tạo `Document` sẽ ném ngoại lệ ngay khi phát hiện vấn đề. Với `RecoverAndContinue`, API sẽ bỏ qua các lỗi không quan trọng và xây dựng một đối tượng tài liệu một phần mà bạn vẫn có thể làm việc. + +> **Mẹo chuyên nghiệp:** Đối với các lô tệp lớn, hãy cân nhắc bọc lời gọi load trong khối `try/catch`—một số lỗi thực sự nghiêm trọng (ví dụ, thiếu tệp `[Content_Types].xml`) và không thể khôi phục. + +## Bước 2: Tải DOCX có khả năng bị hỏng + +Bây giờ các tùy chọn đã sẵn sàng, hãy tải tệp của bạn. Hàm khởi tạo nhận đường dẫn tệp và `LoadOptions` mà chúng ta vừa chuẩn bị. + +```csharp +// Adjust the path to point at your test file. +string sourcePath = @"C:\Docs\Corrupted.docx"; + +Document doc; +try +{ + doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery mode applied."); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Failed to load document: {ex.Message}"); + // Re‑throw or handle as needed. + throw; +} +``` + +**Điều gì đang diễn ra bên trong?** +Aspose.Words phân tích container ZIP, đọc từng phần XML, và cố gắng tái tạo DOM Open XML. Khi gặp một phần bị hỏng, cơ chế khôi phục ghi lại cảnh báo (hiển thị trong console nếu bạn bật chẩn đoán) và tiếp tục. Đối tượng `Document` kết quả có thể thiếu một vài đoạn hoặc hình ảnh, nhưng phần còn lại của nội dung vẫn nguyên vẹn. + +## Bước 3: Xác minh nội dung đã khôi phục (Tùy chọn nhưng Được khuyến nghị) + +Trước khi ghi tệp ra đĩa, bạn nên kiểm tra một vài nút để chắc chắn các phần quan trọng vẫn còn. + +```csharp +// Print the first three paragraphs to the console. +for (int i = 0; i < Math.Min(3, doc.FirstSection.Body.Paragraphs.Count); i++) +{ + Console.WriteLine($"Paragraph {i + 1}: {doc.FirstSection.Body.Paragraphs[i].GetText().Trim()}"); +} +``` + +Nếu đầu ra trông hợp lý, bạn đã thành công trong việc **recover corrupted docx** nội dung. Nếu bạn nhận thấy thiếu các phần, bạn vẫn có thể quyết định tiếp tục—đôi khi các phần bị mất chỉ là trang trí. + +## Bước 4: Lưu tài liệu đã khôi phục + +Đây là phần mà hầu hết các nhà phát triển hỏi: “Làm sao tôi **save recovered document** mà không tái tạo lại lỗi gốc?” Câu trả lời đơn giản là gọi `Document.Save` với một đường dẫn mới. Aspose.Words sẽ ghi một gói ZIP hoàn toàn mới, vì vậy bất kỳ phần hỏng nào còn lại sẽ bị bỏ lại. + +```csharp +string recoveredPath = @"C:\Docs\Recovered.docx"; + +try +{ + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); +} +catch (Exception ex) +{ + Console.WriteLine($"❌ Could not save recovered document: {ex.Message}"); +} +``` + +**Tại sao cách này hoạt động:** Phương thức `Save` tuần tự hoá DOM trong bộ nhớ trở lại thành một gói Open XML sạch sẽ. Vì các phần hỏng chưa bao giờ được tải vào DOM (chúng đã bị loại bỏ trong quá trình khôi phục), chúng sẽ không xuất hiện trong tệp mới. Kết quả là một DOCX khỏe mạnh, mở được trong Word, Google Docs hoặc bất kỳ trình xem nào khác. + +## Bước 5: Tự động hoá quy trình cho nhiều tệp (Bonus) + +Trong các tình huống thực tế, bạn thường có một thư mục đầy các tệp có vấn đề. Đặt các bước trước vào một vòng lặp, và bạn sẽ có một tiện ích khôi phục nhỏ. + +```csharp +string folder = @"C:\Docs\Batch"; +foreach (string file in Directory.GetFiles(folder, "*.docx")) +{ + Console.WriteLine($"\nProcessing: {Path.GetFileName(file)}"); + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } +} +``` + +Bây giờ bạn có thể đặt toàn bộ thư mục các tệp DOCX bị hỏng vào `C:\Docs\Batch` và để script tự động làm sạch chúng. + +## Câu hỏi thường gặp & Trường hợp đặc biệt + +| Question | Answer | +|----------|--------| +| **Liệu điều này có hoạt động với tệp .doc không?** | Lớp `LoadOptions` giống nhau vẫn áp dụng, nhưng bạn phải tham chiếu định dạng Word cũ (`doc`). Aspose.Words vẫn có thể khôi phục, mặc dù các mẫu lỗi khác nhau. | +| **Nếu tệp được bảo vệ bằng mật khẩu thì sao?** | Khôi phục sẽ không bỏ qua mã hóa. Bạn cần cung cấp mật khẩu qua `LoadOptions.Password`. | +| **Hình ảnh có bị mất không?** | Chỉ những hình ảnh nằm trong phần XML bị hỏng có thể bị bỏ qua. Các phần còn lại được giữ lại vì chúng được lưu dưới dạng luồng nhị phân riêng. | +| **Tôi có thể ghi lại các cảnh báo mà Aspose tạo ra không?** | Có—đặt `LoadOptions.LoadFormat` thành `LoadFormat.Docx` và đăng ký `Document.WarningCallback` để thu thập các tin nhắn chi tiết. | +| **`RecoverAndContinue` có an toàn cho môi trường production không?** | Thông thường có, nhưng hãy thử với dữ liệu của bạn. Trong các pipeline quan trọng, bạn có thể muốn đánh dấu các tài liệu đã cần khôi phục để xem lại sau. | + +## Ví dụ làm việc đầy đủ (Sẵn sàng sao chép‑dán) + +Dưới đây là chương trình hoàn chỉnh mà bạn có thể biên dịch thành một ứng dụng console. Nó bao gồm tất cả các bước, xử lý lỗi, và logic xử lý batch tùy chọn. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Loading; + +class Program +{ + static void Main() + { + // 1️⃣ Configure recovery options. + LoadOptions loadOptions = new LoadOptions + { + RecoveryMode = RecoveryMode.RecoverAndContinue + }; + + // 2️⃣ Path to a single corrupted DOCX. + string sourcePath = @"C:\Docs\Corrupted.docx"; + string recoveredPath = @"C:\Docs\Recovered.docx"; + + try + { + // 3️⃣ Load with recovery. + Document doc = new Document(sourcePath, loadOptions); + Console.WriteLine("✅ Document loaded – recovery applied."); + + // 4️⃣ (Optional) Quick sanity check. + Console.WriteLine("First paragraph preview:"); + Console.WriteLine(doc.FirstSection.Body.Paragraphs[0].GetText().Trim()); + + // 5️⃣ Save the clean copy. + doc.Save(recoveredPath); + Console.WriteLine($"💾 Recovered document saved to: {recoveredPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❌ Error: {ex.Message}"); + } + + // 6️⃣ Bonus: batch recovery (uncomment to use). + /* + string folder = @"C:\Docs\Batch"; + foreach (string file in Directory.GetFiles(folder, "*.docx")) + { + try + { + Document batchDoc = new Document(file, loadOptions); + string outFile = Path.Combine(folder, "Recovered", + Path.GetFileNameWithoutExtension(file) + "_recovered.docx"); + Directory.CreateDirectory(Path.GetDirectoryName(outFile)); + batchDoc.Save(outFile); + Console.WriteLine($"✅ Saved recovered file: {outFile}"); + } + catch (Exception e) + { + Console.WriteLine($"⚠️ Skipped {file}: {e.Message}"); + } + } + */ + } +} +``` + +**Kết quả mong đợi:** Sau khi chạy chương trình, `Recovered.docx` mở trong Microsoft Word mà không có hộp thoại lỗi gốc. Bất kỳ phần nào quá hỏng sẽ bị bỏ qua, nhưng phần thân chính, tiêu đề và hầu hết hình ảnh vẫn còn nguyên. + +![recover corrupted docx example](https://example.com/images/recover-corrupted-docx.png "recover corrupted docx – visual before/after comparison") + +## Kết luận + +Chúng ta đã bao quát mọi thứ bạn cần để **recover corrupted docx** các tệp bằng Aspose.Words, từ cấu hình `LoadOptions` đến an toàn **save recovered document**. Những điểm chính rút ra là: + +- Sử dụng `RecoveryMode.RecoverAndContinue` để cho phép thư viện bỏ qua các lỗi không quan trọng. +- Xác minh nội dung đã tải trước khi ghi, đặc biệt khi xử lý các tài liệu kinh doanh quan trọng. +- Lưu tài liệu tạo ra một gói ZIP sạch sẽ, thực sự loại bỏ lỗi gốc. +- Mẫu tương tự mở rộng cho các thao tác batch, cho phép tự động dọn dẹp các kho tài liệu lớn. + +Sẵn sàng cho bước tiếp theo? Hãy thử tích hợp logic này vào một dịch vụ nền giám sát thư mục tải lên, hoặc thử nghiệm `WarningCallback` để xây dựng báo cáo các tệp cần khôi phục. Bạn càng dùng API, bạn càng cảm nhận được sức mạnh của Aspose.Words trong xử lý tài liệu thực tế. + +Có cách tiếp cận nào bạn muốn chia sẻ—có thể là xử lý tệp bảo vệ bằng mật khẩu hoặc hợp nhất các tài liệu đã khôi phục? Hãy để lại bình luận bên dưới, và chúng ta sẽ tiếp tục thảo luận. Chúc 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/programming-with-markdownsaveoptions/_index.md b/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md index ec576d7f37..1df51cc05e 100644 --- a/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md +++ b/words/vietnamese/net/programming-with-markdownsaveoptions/_index.md @@ -32,6 +32,7 @@ Words Processing with MarkdownSaveOptions là một nguồn tài nguyên chuyên | [Lưu docx thành markdown – Hướng dẫn đầy đủ C# với trích xuất hình ảnh](./save-docx-as-markdown-full-c-guide-with-image-extraction/) | Hướng dẫn chi tiết cách lưu file docx thành markdown và trích xuất hình ảnh bằng C# và Aspose.Words. | | [Xuất Markdown từ Word – Hướng dẫn đầy đủ C#](./how-to-export-markdown-from-word-complete-c-guide/) | Hướng dẫn chi tiết cách xuất tài liệu Word sang định dạng Markdown bằng C# và Aspose.Words, bao gồm các tùy chọn và ví dụ thực tế. | | [Xuất Markdown từ DOCX – Hướng dẫn đầy đủ](./how-to-export-markdown-from-docx-complete-guide/) | Hướng dẫn chi tiết cách xuất file DOCX sang Markdown bằng C# và Aspose.Words, bao gồm các tùy chọn và ví dụ thực tế. | +| [Lưu Word thành Markdown với Thư mục Hình ảnh Tùy chỉnh – Hướng dẫn đầy đủ](./save-word-as-markdown-with-custom-image-folder-full-guide/) | Hướng dẫn chi tiết cách lưu tài liệu Word thành Markdown và lưu hình ảnh vào thư mục tùy chỉnh bằng Aspose.Words cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md b/words/vietnamese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md new file mode 100644 index 0000000000..0ea0e9f4e2 --- /dev/null +++ b/words/vietnamese/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/_index.md @@ -0,0 +1,294 @@ +--- +category: general +date: 2026-04-07 +description: Lưu Word dưới dạng Markdown và trích xuất hình ảnh từ docx bằng callback. + Tìm hiểu cách sử dụng callback để lưu trữ thư mục hình ảnh Markdown một cách hiệu + quả. +draft: false +keywords: +- save word as markdown +- extract images from docx +- how to use callback +- markdown images folder +language: vi +og_description: Lưu Word dưới dạng Markdown và trích xuất hình ảnh từ docx bằng callback. + Hướng dẫn này cho thấy cách sử dụng callback để tạo thư mục hình ảnh Markdown. +og_title: Lưu Word thành Markdown – Hướng dẫn chi tiết từng bước +tags: +- Aspose.Words +- C# +- Markdown +- Image Extraction +title: Lưu Word dưới dạng Markdown với Thư mục Hình ảnh Tùy chỉnh – Hướng dẫn đầy + đủ +url: /vi/net/programming-with-markdownsaveoptions/save-word-as-markdown-with-custom-image-folder-full-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Lưu Word dưới dạng Markdown – Hướng dẫn chi tiết từng bước + +Bạn đã bao giờ cần **lưu Word dưới dạng Markdown** nhưng không chắc phải làm gì với các hình ảnh nhúng không? Bạn không phải là người duy nhất. Trong nhiều dự án, kết quả markdown trông tuyệt vời—*cho đến* khi bạn nhận ra các liên kết hình ảnh bị hỏng vì các tệp không bao giờ rời khỏi gói Word. + +Tin tốt là Aspose.Words cung cấp cho bạn một cách sạch sẽ để **trích xuất hình ảnh từ docx** và đặt chúng chính xác ở nơi bạn muốn, bằng cách sử dụng một **callback** cho phép bạn kiểm soát thư mục hình ảnh markdown. Trong hướng dẫn này, chúng ta sẽ đi qua toàn bộ quy trình, từ việc tải một tệp `.docx` đến khi có được một thư mục PNG gọn gàng (hoặc bất kỳ định dạng nào bạn có) và một tệp markdown trỏ tới chúng. + +Khi kết thúc hướng dẫn này, bạn sẽ có thể: + +* Chuyển đổi bất kỳ tài liệu Word nào sang Markdown chỉ với một dòng mã. +* Tự động xuất mọi hình ảnh vào một thư mục con `images` riêng biệt. +* Tùy chỉnh tên tệp sao cho không bao giờ trùng lặp, ngay cả khi nguồn chứa hàng chục hình ảnh. + +Không cần script bên ngoài, không cần sao chép‑dán thủ công—chỉ cần C# thuần và Aspose.Words. + +## Yêu cầu trước + +Trước khi bắt đầu, hãy chắc chắn rằng bạn có: + +* **Aspose.Words for .NET** (phiên bản ổn định mới nhất; thời điểm viết là 24.9). +* Môi trường phát triển .NET (Visual Studio, Rider, hoặc `dotnet` CLI). +* Một tài liệu Word (`.docx`) chứa ít nhất một hình ảnh—gọi nó là `DocWithImages.docx`. + +Nếu bạn chưa từng sử dụng Aspose.Words, đừng lo. Thư viện này hoàn toàn được quản lý, không yêu cầu COM interop, và hoạt động trên .NET 6+ cũng như .NET Framework 4.8. + +## Bước 1 – Thiết lập dự án và cài đặt gói + +Đầu tiên, tạo một ứng dụng console mới (hoặc thêm mã vào dự án hiện có). + +```bash +dotnet new console -n WordToMarkdownDemo +cd WordToMarkdownDemo +dotnet add package Aspose.Words +``` + +> **Mẹo:** Nếu bạn đang nhắm tới .NET 6, `Program.cs` mặc định đã sử dụng câu lệnh cấp cao, giúp mẫu ngắn gọn hơn. + +## Bước 2 – Tạo Callback để Kiểm soát Lưu Hình Ảnh + +Aspose.Words gọi `IResourceSavingCallback.ResourceSaving` cho mỗi tài nguyên bên ngoài mà nó cần ghi (hình ảnh, CSS, v.v.). Bằng cách triển khai giao diện này, chúng ta có toàn quyền kiểm soát **cách thư mục hình ảnh markdown** được tạo. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +/// +/// Handles the saving of resources (e.g., images) when a document is converted to Markdown. +/// +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + // Folder where we want to dump the images. + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + // Ensure the folder exists before the first write. + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + // Build a unique filename: img_. + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + + // Full path where the image will be saved. + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + // Copy the incoming stream to our file. + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + // Tell Aspose we’ve handled the write; skip its default behavior. + args.Cancel = true; + } +} +``` + +### Tại sao lại dùng callback? + +* **Kiểm soát chi tiết** – bạn quyết định cấu trúc thư mục và quy tắc đặt tên. +* **Hiệu năng** – bạn ghi luồng một lần, tránh việc thư viện ghi lại lần thứ hai. +* **Linh hoạt** – bạn có thể thêm logging, tối ưu hình ảnh, hoặc thậm chí tải lên lưu trữ đám mây tại đây. + +## Bước 3 – Tải tài liệu Word + +Bây giờ callback đã sẵn sàng, chúng ta chỉ cần chỉ định Aspose.Words tới tệp nguồn. + +```csharp +// Path to the source .docx (adjust as needed). +string sourcePath = Path.Combine("YOUR_DIRECTORY", "DocWithImages.docx"); + +// Load the document into memory. +Document doc = new Document(sourcePath); +``` + +> **Nếu tệp không được tìm thấy thì sao?** +> `Document` sẽ ném ra `FileNotFoundException`. Bao bọc việc tải trong `try/catch` nếu bạn dự đoán đường dẫn động. + +## Bước 4 – Kết nối MarkdownSaveOptions + +Lớp `MarkdownSaveOptions` cho phép chúng ta gắn callback vừa tạo. Chúng ta cũng thiết lập thư mục nơi các hình ảnh sẽ được lưu tương đối với tệp markdown. + +```csharp +// Define where we want the images folder to sit. +string markdownFolder = Path.Combine("YOUR_DIRECTORY", "markdown-output"); +string imagesSubFolder = Path.Combine(markdownFolder, "images"); + +// Ensure the markdown output directory exists. +Directory.CreateDirectory(markdownFolder); + +// Create the save options and attach the callback. +MarkdownSaveOptions mdOptions = new MarkdownSaveOptions +{ + // This callback will be invoked for every image. + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesSubFolder), + + // Optional: keep image references relative to the markdown file. + ImagesFolder = "images" +}; +``` + +Thuộc tính `ImagesFolder` chỉ cho Aspose tạo các liên kết markdown như `![Alt text](images/img_123.png)`. Vì chúng ta cũng đặt `ResourceFileName` trong callback, tệp thực tế sẽ được lưu đúng ở đó. + +## Bước 5 – Lưu dưới dạng Markdown và Kiểm tra Kết quả + +Cuối cùng, chúng ta ghi tệp markdown. Callback sẽ đã điền sẵn thư mục con `images`. + +```csharp +// Destination markdown file. +string markdownPath = Path.Combine(markdownFolder, "Doc.md"); + +// Save the document. +doc.Save(markdownPath, mdOptions); + +// Quick sanity check – list the generated files. +Console.WriteLine("Markdown saved to: " + markdownPath); +Console.WriteLine("Extracted images:"); +foreach (var img in Directory.GetFiles(imagesSubFolder)) +{ + Console.WriteLine(" • " + Path.GetFileName(img)); +} +``` + +### Kết quả mong đợi + +Chạy chương trình sẽ in ra một cái gì đó như sau: + +``` +Markdown saved to: C:\Project\markdown-output\Doc.md +Extracted images: + • img_5c2a1f8b-3e7b-4d9a-9c1f-2b6e5f9d9a3c.png + • img_a7d4c9e2-1f55-4c2b-8f6a-9e1b2c3d4e5f.jpg +``` + +Mở `Doc.md` trong bất kỳ trình xem markdown nào; bạn sẽ thấy các liên kết hình ảnh trỏ đúng tới thư mục `images`. + +--- + +## Câu hỏi thường gặp (FAQ) + +### Làm thế nào để **trích xuất hình ảnh từ docx** mà không chuyển đổi sang markdown? + +Bạn có thể tái sử dụng `MyMarkdownResourceCallback` nhưng truyền nó vào `doc.Save("images.zip", SaveFormat.Zip)`. Callback vẫn sẽ được gọi cho mỗi hình ảnh, cho phép bạn đặt chúng ở bất kỳ nơi nào bạn muốn. + +### Nếu tôi cần **định dạng hình ảnh khác nhau** thì sao? + +`args.FileName` đã chứa phần mở rộng gốc (`.png`, `.jpg`, v.v.). Nếu bạn phải chuyển đổi tất cả hình ảnh sang một định dạng duy nhất, hãy thêm bước chuyển đổi trong `ResourceSaving` trước khi ghi luồng. + +### Tôi có thể **tùy chỉnh thư mục hình ảnh markdown** cho mỗi tài liệu không? + +Chắc chắn. Callback nhận đường dẫn thư mục qua constructor, vì vậy bạn có thể tạo một callback mới với thư mục khác cho mỗi tài liệu trong quá trình batch. + +### Điều này có hoạt động với **tài liệu lớn** (hàng trăm hình ảnh) không? + +Có. Callback truyền luồng hình ảnh trực tiếp tới đĩa, giữ mức sử dụng bộ nhớ thấp. Chỉ cần đảm bảo ổ đích có đủ không gian và bạn không vượt quá giới hạn file‑handle của hệ điều hành. + +--- + +## Ví dụ Hoạt động Đầy đủ + +Dưới đây là chương trình hoàn chỉnh, sẵn sàng sao chép‑dán. Thay thế `YOUR_DIRECTORY` bằng đường dẫn tuyệt đối hoặc tương đối phù hợp với môi trường của bạn. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class MyMarkdownResourceCallback : IResourceSavingCallback +{ + private readonly string _imageFolder; + + public MyMarkdownResourceCallback(string imageFolder) + { + _imageFolder = imageFolder; + Directory.CreateDirectory(_imageFolder); + } + + public void ResourceSaving(ResourceSavingArgs args) + { + string uniqueName = $"img_{Guid.NewGuid()}{Path.GetExtension(args.FileName)}"; + string fullPath = Path.Combine(_imageFolder, uniqueName); + args.ResourceFileName = fullPath; + + using (FileStream outStream = File.OpenWrite(fullPath)) + args.Stream.CopyTo(outStream); + + args.Cancel = true; + } +} + +class Program +{ + static void Main() + { + // Adjust these paths. + string baseDir = Path.Combine(Environment.CurrentDirectory, "demo"); + string sourceDoc = Path.Combine(baseDir, "DocWithImages.docx"); + string markdownDir = Path.Combine(baseDir, "markdown-output"); + string imagesDir = Path.Combine(markdownDir, "images"); + string markdownFile = Path.Combine(markdownDir, "Doc.md"); + + // Load the document. + Document doc; + try + { + doc = new Document(sourceDoc); + } + catch (Exception ex) + { + Console.WriteLine($"Failed to load document: {ex.Message}"); + return; + } + + // Configure save options with our callback. + var mdOptions = new MarkdownSaveOptions + { + ResourceSavingCallback = new MyMarkdownResourceCallback(imagesDir), + ImagesFolder = "images" + }; + + // Ensure output folder exists. + Directory.CreateDirectory(markdownDir); + + // Save as markdown. + doc.Save(markdownFile, mdOptions); + + Console.WriteLine($"✅ Markdown saved to: {markdownFile}"); + Console.WriteLine("🖼️ Extracted images:"); + foreach (var file in Directory.GetFiles(imagesDir)) + Console.WriteLine($" - {Path.GetFileName(file)}"); + } +} +``` + +Chạy chương trình (`dotnet run`) và bạn sẽ thấy một tệp `Doc.md` mới tạo bên cạnh thư mục con `images` chứ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/vietnamese/net/programming-with-officemath/_index.md b/words/vietnamese/net/programming-with-officemath/_index.md index af1a749969..f3fbae054d 100644 --- a/words/vietnamese/net/programming-with-officemath/_index.md +++ b/words/vietnamese/net/programming-with-officemath/_index.md @@ -21,7 +21,7 @@ Hướng dẫn Aspose.Words for .NET về Xử lý Words với OfficeMath sẽ h | Tiêu đề | Mô tả | | --- | --- | | [Phương trình toán học](./math-equations/) | Tìm hiểu cách cấu hình các phương trình toán học trong tài liệu Word bằng Aspose.Words cho .NET. Hướng dẫn từng bước với các ví dụ, câu hỏi thường gặp và nhiều hơn nữa. | - +| [Lưu docx thành txt – Xuất Word Math sang LaTeX trong C#](./save-docx-as-txt-export-word-math-to-latex-in-c/) | Hướng dẫn lưu tài liệu docx thành tệp txt và xuất các công thức Word Math sang định dạng LaTeX bằng C#. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md b/words/vietnamese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md new file mode 100644 index 0000000000..d1b9843c33 --- /dev/null +++ b/words/vietnamese/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-04-07 +description: Lưu file docx thành txt nhanh chóng và học cách xuất công thức sang LaTeX. + Chuyển đổi Word sang txt, xử lý Office Math và giữ nguyên các phương trình. +draft: false +keywords: +- save docx as txt +- convert word to txt +- how to export math +- how to convert docx +- how to save txt +language: vi +og_description: Lưu file docx thành txt với xuất công thức LaTeX. Hướng dẫn C# chi + tiết từng bước cho thấy cách chuyển đổi Word sang txt và giữ lại các công thức. +og_title: Lưu docx thành txt – Hướng dẫn C# xuất công thức Word +tags: +- C# +- Aspose.Words +- DocumentConversion +title: Lưu docx thành txt – Xuất công thức Word sang LaTeX trong C# +url: /vi/net/programming-with-officemath/save-docx-as-txt-export-word-math-to-latex-in-c/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Lưu docx thành txt – Xuất công thức Word sang LaTeX trong C# + +Bạn đã bao giờ cần **save docx as txt** nhưng lo lắng các công thức của mình sẽ biến thành một mớ ký tự hỗn loạn? Bạn không đơn độc. Nhiều nhà phát triển gặp phải vấn đề này khi họ cố gắng **convert word to txt** để xử lý tiếp, đặc biệt khi nguồn chứa các đối tượng Office Math. + +Tin tốt? Với vài dòng C# và các tùy chọn lưu phù hợp, bạn có thể giữ nguyên mọi công thức dưới dạng LaTeX sạch sẽ, khiến tệp văn bản thuần trở nên dễ đọc cho con người và sẵn sàng cho các quy trình khoa học. Trong hướng dẫn này, chúng tôi sẽ đi qua toàn bộ quy trình, trả lời *how to export math* từ tệp Word, và cho bạn thấy *how to convert docx* mà không mất độ chính xác của công thức. + +## Những gì bạn sẽ học + +- Tải một tệp `.docx` bằng cách sử dụng Aspose.Words (hoặc bất kỳ thư viện tương thích nào). +- Cấu hình `TxtSaveOptions` để Office Math được xuất dưới dạng LaTeX. +- Lưu tài liệu dưới dạng tệp `.txt` giữ nguyên các công thức. +- Mẹo xử lý các trường hợp đặc biệt như công thức ẩn hoặc tài liệu lớn. +- Một mẫu mã hoàn chỉnh, có thể chạy được mà bạn có thể sao chép‑dán ngay lập tức. + +Không cần công cụ xây dựng phức tạp, chỉ cần một dự án .NET và gói NuGet Aspose.Words. Hãy bắt đầu. + +--- + +## Yêu cầu trước + +| Requirement | Why it matters | +|-------------|----------------| +| .NET 6.0 hoặc sau | Các tính năng ngôn ngữ hiện đại và hiệu năng tốt hơn. | +| Aspose.Words cho .NET (NuGet) | Cung cấp `Document`, `TxtSaveOptions`, và `OfficeMathExportMode`. | +| Tệp Word (`.docx`) có chứa công thức | Để xem việc xuất LaTeX hoạt động. | +| Kiến thức cơ bản về C# | Bạn sẽ theo dõi mã dòng‑một‑dòng. | + +Nếu bạn chưa thêm Aspose.Words, hãy chạy: + +```bash +dotnet add package Aspose.Words +``` + +Chỉ vậy—không cần cấu hình bổ sung. + +## Bước 1: Tải tệp DOCX + +Đầu tiên, chúng ta cần đưa tài liệu nguồn vào bộ nhớ. Hãy nghĩ đây như việc mở một cuốn sách trước khi bắt đầu đọc. + +```csharp +using Aspose.Words; + +// Step 1: Load the source document +Document doc = new Document("YOUR_DIRECTORY/input.docx"); +``` + +> **Mẹo chuyên nghiệp:** Sử dụng đường dẫn tuyệt đối trong quá trình thử nghiệm để tránh những bất ngờ “file not found”. Trong môi trường production, bạn có thể nhận đường dẫn từ tệp cấu hình hoặc tải lên của người dùng. + +## Bước 2: Cấu hình TXT Save Options để xuất công thức + +Mặc định, `TxtSaveOptions` chỉ xuất văn bản thuần và loại bỏ Office Math. Chúng ta không muốn như vậy. Đặt `OfficeMathExportMode` thành `LaTeX` sẽ yêu cầu thư viện chuyển mỗi công thức sang dạng biểu diễn LaTeX. + +```csharp +// Step 2: Create TXT save options and configure Office Math export to LaTeX +TxtSaveOptions txtSaveOptions = new TxtSaveOptions +{ + OfficeMathExportMode = OfficeMathExportMode.LaTeX +}; +``` + +### Tại sao lại là LaTeX? + +LaTeX là ngôn ngữ chung của xuất bản khoa học. Khi bạn sau này đưa tệp `.txt` vào bộ xử lý markdown, Jupyter notebook, hoặc bất kỳ công cụ nào hỗ trợ LaTeX, các công thức sẽ được hiển thị hoàn hảo. Nếu bạn muốn dùng các ký hiệu Unicode thuần thay thế, bạn có thể chuyển sang `OfficeMathExportMode.Unicode`, nhưng LaTeX cho bạn khả năng kiểm soát tối đa. + +## Bước 3: Lưu tài liệu dưới dạng tệp Văn bản thuần + +Bây giờ phép màu xảy ra. Phương thức `Save` ghi tài liệu ra đĩa bằng các tùy chọn chúng ta vừa định nghĩa. + +```csharp +// Step 3: Save the document as a plain‑text file using the configured options +doc.Save("YOUR_DIRECTORY/Math.txt", txtSaveOptions); +``` + +Sau khi dòng này chạy, `Math.txt` sẽ chứa: + +``` +This is a sample paragraph. + +Here is an equation in LaTeX: +\[ +E = mc^{2} +\] + +Another paragraph follows. +``` + +Chú ý cách công thức xuất hiện trong `\[` và `\]` — đúng như những gì LaTeX mong đợi. + +## Cách xuất công thức từ tài liệu phức tạp + +### Xử lý công thức ẩn hoặc nội tuyến + +Một số tệp Word lưu công thức trong các khung văn bản ẩn. Aspose.Words xử lý chúng giống như các công thức hiển thị, vì vậy việc xuất LaTeX hoạt động tự động. Tuy nhiên, nếu bạn thấy thiếu công thức, hãy kiểm tra lại rằng đối tượng `Document` không được thiết lập để bỏ qua nội dung ẩn: + +```csharp +doc.RemoveHiddenParagraphs = false; // Ensure hidden text is processed +``` + +### Tài liệu lớn và việc sử dụng bộ nhớ + +Lưu một luận văn 500 trang có thể tiêu tốn nhiều RAM. Để giảm lượng bộ nhớ sử dụng, bạn có thể stream (đầu ra luồng) kết quả: + +```csharp +using (FileStream stream = new FileStream("YOUR_DIRECTORY/Math.txt", FileMode.Create, FileAccess.Write)) +{ + doc.Save(stream, txtSaveOptions); +} +``` + +Streaming ghi các khối dữ liệu ra đĩa khi chúng được tạo, ngăn toàn bộ tệp tồn tại trong bộ nhớ cùng một lúc. + +## Những lỗi thường gặp & Cách tránh + +| Pitfall | Symptom | Fix | +|---------|---------|-----| +| Thiếu dấu ngoặc LaTeX | Các công thức xuất hiện dưới dạng mã thô (`E = mc^{2}`) | Đảm bảo `OfficeMathExportMode = LaTeX`. | +| Tệp đầu ra trống | Đường dẫn sai hoặc thiếu quyền | Kiểm tra thư mục đầu ra tồn tại và có quyền ghi. | +| Ký tự bị rối | Tệp được mã hoá UTF‑8 không có BOM trên hệ thống mong đợi ANSI | Thêm `txtSaveOptions.Encoding = Encoding.UTF8;` | +| Công thức biến mất sau khi chuyển đổi | Tài liệu được tải bằng `LoadOptions` loại trừ công thức | Sử dụng `LoadOptions` mặc định hoặc đặt `LoadOptions.LoadFormat = LoadFormat.Docx`. | + +## Ví dụ hoàn chỉnh hoạt động + +Dưới đây là chương trình đầy đủ mà bạn có thể biên dịch và chạy. Nó bao gồm xử lý lỗi, xác thực đường dẫn, và một thông báo console nhỏ để bạn biết mọi thứ đã thành công. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // Paths – change these to match your environment + string inputPath = @"YOUR_DIRECTORY\input.docx"; + string outputPath = @"YOUR_DIRECTORY\Math.txt"; + + // Validate input + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + try + { + // Load the source document + Document doc = new Document(inputPath); + + // Configure TXT save options – export Office Math as LaTeX + TxtSaveOptions saveOptions = new TxtSaveOptions + { + OfficeMathExportMode = OfficeMathExportMode.LaTeX, + Encoding = System.Text.Encoding.UTF8 // ensures proper character handling + }; + + // Optional: keep hidden content + doc.RemoveHiddenParagraphs = false; + + // Save as plain‑text + doc.Save(outputPath, saveOptions); + + Console.WriteLine($"✅ Success! File saved to {outputPath}"); + } + catch (Exception ex) + { + Console.WriteLine($"❗ An error occurred: {ex.Message}"); + } + } +} +``` + +**Kết quả mong đợi** (đoạn trích từ `Math.txt`): + +``` +Linear regression model: + +\[ +y = \beta_{0} + \beta_{1}x +\] + +The residual sum of squares is: +\[ +RSS = \sum_{i=1}^{n}(y_i - \hat{y}_i)^2 +\] +``` + +Bây giờ bạn có thể đưa tệp này vào bất kỳ bộ xử lý nào hỗ trợ LaTeX, và các công thức sẽ được hiển thị đẹp mắt. + +## Cách chuyển DOCX sang TXT mà không mất định dạng + +Nếu bạn chỉ cần văn bản thuần và không quan tâm đến công thức, chỉ cần bỏ qua dòng `OfficeMathExportMode`: + +```csharp +TxtSaveOptions txtOnly = new TxtSaveOptions(); // defaults to plain text +doc.Save("plain.txt", txtOnly); +``` + +Nhưng hãy nhớ, **how to export math** là yếu tố phân biệt cho các quy trình khoa học. Giữ LaTeX nguyên vẹn là điều làm cho việc chuyển đổi thực sự hữu ích. + +## Các bước tiếp theo & Chủ đề liên quan + +- **Batch conversion:** Đóng gói mã trong một vòng lặp `foreach` để xử lý toàn bộ thư mục các tệp `.docx`. +- **Markdown generation:** Thêm tiêu đề `#` hoặc dấu `*` vào văn bản để tạo markdown sẵn sàng xuất bản. +- **PDF export:** Sử dụng `PdfSaveOptions` để tạo phiên bản PDF bên cạnh tệp txt. +- **Advanced LaTeX tweaking:** Xử lý hậu kỳ đầu ra bằng regex để thay thế `\[`/`\]` bằng `$...$` cho các công thức nội tuyến. + +Mỗi mục trên đều dựa trên nền tảng chung — tải một `Document` và chọn `SaveOptions` phù hợp. Hãy thoải mái thử nghiệm; API đủ linh hoạt cho hầu hết các kịch bản tự động hoá tài liệu. + +## Kết luận + +Chúng tôi đã bao phủ mọi thứ bạn cần để **save docx as txt** trong khi giữ nguyên mọi công thức dưới dạng LaTeX. Từ việc tải tệp nguồn, cấu hình `TxtSaveOptions` cho **how to export math**, đến việc ghi tệp văn bản thuần cuối cùng, toàn bộ quy trình chỉ cần một vài câu lệnh C# ngắn gọn. + +Bây giờ bạn có thể tự động hoá việc chuyển đổi các báo cáo Word, bài báo học thuật, hoặc bất kỳ tài liệu nào kết hợp văn bản và công thức, và đưa tệp `.txt` kết quả vào các công cụ downstream mà không mất bất kỳ chi tiết khoa học nào. + +Hãy thử nghiệm, điều chỉnh các tùy chọn cho trường hợp sử dụng của bạn, và cho chúng tôi biết trong phần bình luận cách nó đã hoạt động với bạn. Chúc lập trình vui vẻ! + +![Diagram showing the conversion pipeline from DOCX → C# processing → TXT with LaTeX math](https://example.com/images/save-docx-as-txt.png "save docx as txt pipeline") + +{{< /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-pdfsaveoptions/_index.md b/words/vietnamese/net/programming-with-pdfsaveoptions/_index.md index bb947111d1..1a0c381d3e 100644 --- a/words/vietnamese/net/programming-with-pdfsaveoptions/_index.md +++ b/words/vietnamese/net/programming-with-pdfsaveoptions/_index.md @@ -37,7 +37,7 @@ Cho dù bạn muốn chuyển đổi tài liệu Word sang PDF để phân phố | [Giảm kích thước PDF bằng cách sử dụng Scale Wmf Fonts To Metafile Size](./scale-wmf-fonts-to-metafile-size/) | Hướng dẫn từng bước để giảm kích thước tệp PDF bằng cách sử dụng công cụ scale wmf fonts thành kích thước tệp metafile khi chuyển đổi sang PDF bằng Aspose.Words cho .NET. | | [Cải thiện vị trí văn bản PDF với vị trí văn bản bổ sung](./additional-text-positioning/) | Tìm hiểu cách cải thiện vị trí văn bản PDF bằng Aspose.Words cho .NET qua một vài bước đơn giản. Cải thiện giao diện tài liệu của bạn. | | [Chuyển đổi tài liệu Word sang PDF 1.7](./conversion-to-pdf-17/) | Chuyển đổi tài liệu Word sang PDF 1.7 dễ dàng bằng Aspose.Words cho .NET. Thực hiện theo hướng dẫn này để đảm bảo tài liệu của bạn có thể truy cập được trên toàn thế giới và được định dạng chuyên nghiệp. | -| [Giảm kích thước tài liệu PDF bằng cách giảm kích thước hình ảnh](./downsampling-images/) | Giảm kích thước tài liệu PDF bằng cách giảm kích thước hình ảnh bằng Aspose.Words cho .NET. Tối ưu hóa PDF của bạn để tải lên và tải xuống nhanh hơn. | +| [Giảm kích thước PDF bằng cách giảm kích thước hình ảnh](./downsampling-images/) | Giảm kích thước tài liệu PDF bằng cách giảm kích thước hình ảnh bằng Aspose.Words cho .NET. Tối ưu hóa PDF của bạn để tải lên và tải xuống nhanh hơn. | | [Thiết lập tùy chọn phác thảo trong tài liệu PDF](./set-outline-options/) | Tìm hiểu cách thiết lập tùy chọn phác thảo trong tài liệu PDF bằng Aspose.Words cho .NET. Cải thiện điều hướng PDF bằng cách cấu hình mức tiêu đề và phác thảo mở rộng. | | [Xuất Thuộc tính Tùy chỉnh trong Tài liệu PDF](./custom-properties-export/) | Tìm hiểu cách xuất các thuộc tính tùy chỉnh trong tài liệu PDF bằng Aspose.Words cho .NET với hướng dẫn chi tiết từng bước của chúng tôi. | | [Xuất cấu trúc tài liệu Word sang tài liệu PDF](./export-document-structure/) | Xuất cấu trúc của tài liệu Word sang PDF bằng Aspose.Words cho .NET. Làm theo hướng dẫn từng bước của chúng tôi để bảo toàn bố cục tài liệu và cải thiện điều hướng PDF. | @@ -45,7 +45,7 @@ Cho dù bạn muốn chuyển đổi tài liệu Word sang PDF để phân phố | [Cập nhật Thuộc tính được In Lần cuối trong Tài liệu PDF](./update-last-printed-property/) | Tìm hiểu cách cập nhật thuộc tính in cuối cùng trong tài liệu PDF bằng Aspose.Words cho .NET với hướng dẫn từng bước của chúng tôi. | | [Kết xuất 3D DML 3DEffects trong Tài liệu PDF](./dml-3deffects-rendering/) | Tìm hiểu cách tạo hiệu ứng DML 3D tuyệt đẹp trong tài liệu PDF bằng Aspose.Words cho .NET với hướng dẫn từng bước toàn diện này. | | [Chèn hình ảnh vào tài liệu PDF](./interpolate-images/) | Tìm hiểu cách chèn hình ảnh vào tài liệu PDF bằng Aspose.Words cho .NET với hướng dẫn từng bước của chúng tôi. Cải thiện chất lượng hình ảnh PDF của bạn một cách dễ dàng. | - +| [Tạo PDF có thể truy cập từ Word – Hướng dẫn từng bước](./create-accessible-pdf-from-word-step-by-step-guide/) | Học cách tạo tệp PDF có thể truy cập từ tài liệu Word bằng Aspose.Words cho .NET. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md b/words/vietnamese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md new file mode 100644 index 0000000000..b87ee8be05 --- /dev/null +++ b/words/vietnamese/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/_index.md @@ -0,0 +1,237 @@ +--- +category: general +date: 2026-04-07 +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 + Word sang PDF, lưu docx dưới dạng PDF và đảm bảo tuân thủ PDF/UA. +draft: false +keywords: +- create accessible pdf +- convert word to pdf +- save docx as pdf +- export docx to pdf +- save document as pdf +language: vi +og_description: Tạo PDF có khả năng truy cập từ Word trong C#. Hướng dẫn này chỉ cách + chuyển đổi Word sang PDF, lưu file docx thành PDF và đáp ứng tiêu chuẩn PDF/UA. +og_title: Tạo PDF Truy cập Được – Hướng Dẫn C# Toàn Diện +tags: +- Aspose.Words +- PDF accessibility +- C# +title: Tạo PDF Truy cập được từ Word – Hướng dẫn từng bước +url: /vi/net/programming-with-pdfsaveoptions/create-accessible-pdf-from-word-step-by-step-guide/ +--- + +{{< 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ừ Word – Hướng dẫn Lập trình Đầy đủ + +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 nên điều chỉnh thiết lập nào? Bạn không phải là người duy nhất. Ở nhiều doanh nghiệp, việc tuân thủ PDF/UA (Universal Accessibility) là yêu cầu bắt buộc, và nút “chuyển đổi‑sang‑PDF” thông thường không đủ. + +Trong hướng dẫn này, chúng tôi sẽ đi qua một giải pháp ngắn gọn, toàn diện để **chuyển đổi Word sang PDF**, **lưu docx dưới dạng PDF**, và đảm bảo đầu ra đáp ứng tiêu chuẩn truy cập. Không có tham chiếu mơ hồ—chỉ có mã bạn có thể sao chép‑dán, cùng với “tại sao” cho mỗi dòng. + +> **TL;DR:** Tải một file `.docx`, đặt `PdfSaveOptions.Compliance` thành `PdfUa1` (hoặc `PdfUa2`), và gọi `Document.Save`. Đó là tất cả những gì bạn cần để **tạo PDF truy cập được** với Aspose.Words cho .NET. + +--- + +## Bạn sẽ học được gì + +- Cách **chuyển đổi Word sang PDF** đồng thời giữ nguyên tiêu đề, văn bản thay thế và thứ tự đọc. +- Sự khác biệt giữa `PdfUa1` và `PdfUa2` và khi nào nên chọn mỗi loại. +- Cách **lưu docx dưới dạng PDF** chỉ với vài dòng C#. +- Những lỗi thường gặp (phông chữ thiếu, thẻ không được hỗ trợ) và cách khắc phục nhanh. +- Một mẫu mã sẵn sàng chạy mà bạn có thể đưa vào bất kỳ dự án .NET nào. + +### Yêu cầu trước + +- .NET 6 hoặc mới hơn (mã cũng hoạt động trên .NET Framework 4.7+). +- Aspose.Words cho .NET được cài đặt qua NuGet (`Install-Package Aspose.Words`). +- Một file Word (`input.docx`) đã chứa cấu trúc đúng (styles, alt‑text cho hình ảnh). + +Nếu bạn chưa thêm Aspose.Words, chạy lệnh dưới đây trong Package Manager Console: + +```powershell +Install-Package Aspose.Words +``` + +Đó là phụ thuộc bên ngoài duy nhất bạn cần. + +--- + +## Tạo PDF Truy cập được – Tại sao Truy cập quan trọng + +Khi một PDF được đánh dấu là **PDF/UA** (Universal Accessibility), các trình đọc màn hình có thể di chuyển qua các tiêu đề, bảng và trường biểu mẫu giống như trong file Word gốc. Đây không chỉ là tính năng “đẹp mắt”; nhiều chính phủ và công ty coi việc tuân thủ PDF/UA là yêu cầu pháp lý. + +Việc đặt thuộc tính `Compliance` trên `PdfSaveOptions` báo cho thư viện nhúng các thẻ cần thiết, thiết lập ngôn ngữ tài liệu đúng, và thêm thứ tự đọc logic. Bỏ qua bước này sẽ tạo ra một PDF “chỉ xem” mà không đáp ứng kiểm tra truy cập. + +--- + +## Chuyển đổi Word sang PDF với Aspose.Words + +Dưới đây là cách đơn giản nhất để **chuyển đổi Word sang PDF** đồng thời giữ tài liệu truy cập được. + +```csharp +using System; +using Aspose.Words; +using Aspose.Words.Saving; + +class Program +{ + static void Main() + { + // 1️⃣ Load the source document (your .docx) + Document doc = new Document(@"C:\MyDocs\input.docx"); + + // 2️⃣ Configure PDF save options for accessibility compliance + PdfSaveOptions pdfOptions = new PdfSaveOptions + { + // PDF/UA 1.0 is widely supported; switch to PdfUa2 for newer features + Compliance = PdfCompliance.PdfUa1 + }; + + // 3️⃣ Save the document as an accessible PDF + doc.Save(@"C:\MyDocs\Compliant.pdf", pdfOptions); + + Console.WriteLine("✅ Accessible PDF created at C:\\MyDocs\\Compliant.pdf"); + } +} +``` + +**Điều gì đang xảy ra ở đây?** + +- `Document` đọc file Word, giữ nguyên mọi style và cấu trúc. +- `PdfSaveOptions.Compliance` yêu cầu Aspose.Words gắn thẻ đầu ra là PDF/UA. +- `doc.Save` ghi PDF ra đĩa, tự động nhúng các thẻ. + +> **Mẹo chuyên nghiệp:** Nếu file Word nguồn của bạn sử dụng style tiêu đề tùy chỉnh, hãy chắc chắn chúng được ánh xạ tới các mức tiêu đề tích hợp (`Heading1`, `Heading2`, …). Điều này đảm bảo PDF tạo ra có thẻ tiêu đề đúng. + +--- + +## Lưu Docx dưới dạng PDF – Cấu hình tuân thủ PDF/UA + +Nếu bạn đã quen với lớp `PdfSaveOptions`, có thể bạn thắc mắc có những công tắc nào khác ảnh hưởng đến khả năng truy cập. Một vài thuộc tính hữu ích: + +| Thuộc tính | Ảnh hưởng đến khả năng truy cập | Giá trị điển hình | +|------------|--------------------------------|-------------------| +| `Compliance` | Bật/tắt thẻ PDF/UA | `PdfCompliance.PdfUa1` hoặc `PdfUa2` | +| `EmbedFullFonts` | Đảm bảo người đọc thấy đúng kiểu chữ | `true` (mặc định) | +| `OptimizeOutput` | Giảm kích thước file mà không loại bỏ thẻ | `true` | + +Bạn có thể mở rộng đoạn mã trước như sau: + +```csharp +PdfSaveOptions pdfOptions = new PdfSaveOptions +{ + Compliance = PdfCompliance.PdfUa2, // newer PDF/UA version + EmbedFullFonts = true, + OptimizeOutput = true +}; +``` + +Chuyển sang `PdfUa2` sẽ thêm hỗ trợ cho các tính năng PDF/UA mới như thẻ *artifact* cho hình ảnh trang trí. Nếu không cần, hãy giữ `PdfUa1` để tối đa tương thích với công nghệ hỗ trợ cũ hơn. + +--- + +## Xuất Docx sang PDF – Ví dụ Hoạt động Đầy đủ + +Dưới đây là một ứng dụng console tự chứa, minh họa toàn bộ quy trình, từ tải file đến kiểm tra đầu ra. + +```csharp +using System; +using System.IO; +using Aspose.Words; +using Aspose.Words.Saving; + +namespace AccessiblePdfDemo +{ + class Program + { + static void Main() + { + // 👉 Define paths – adjust to your environment + string inputPath = Path.Combine(Environment.CurrentDirectory, "input.docx"); + string outputPath = Path.Combine(Environment.CurrentDirectory, "Compliant.pdf"); + + // ✅ Validate that the source file exists + if (!File.Exists(inputPath)) + { + Console.WriteLine($"❌ Input file not found: {inputPath}"); + return; + } + + // 1️⃣ Load the DOCX – Aspose.Words parses styles, alt‑text, and tables + Document doc = new Document(inputPath); + + // 2️⃣ Set up PDF/UA options – this is the heart of “create accessible pdf” + PdfSaveOptions options = new PdfSaveOptions + { + Compliance = PdfCompliance.PdfUa1, // or PdfUa2 for newer spec + EmbedFullFonts = true, + OptimizeOutput = true + }; + + // 3️⃣ Save as PDF – the library adds tags automatically + doc.Save(outputPath, options); + + // 4️⃣ Quick verification – file size and existence + FileInfo info = new FileInfo(outputPath); + Console.WriteLine($"✅ PDF created: {outputPath} ({info.Length / 1024} KB)"); + + // 🎉 Optional: Open the PDF automatically (Windows only) + // System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outputPath) { UseShellExecute = true }); + } + } +} +``` + +### Kết quả mong đợi + +- Một file có tên **Compliant.pdf** xuất hiện trong cùng thư mục với file thực thi. +- Mở PDF trong Adobe Acrobat Pro → *Tools → Accessibility → Full Check* sẽ báo **No accessibility issues** (giả sử file Word nguồn đã được cấu trúc tốt). +- Tab *Properties → Advanced* của PDF sẽ hiển thị **PDF/UA** dưới phần “PDF/A and PDF/UA compliance”. + +--- + +## Các Trường hợp Cạnh và Cách Xử lý + +| Tình huống | Lý do quan trọng | Cách khắc phục nhanh | +|-----------|-------------------|----------------------| +| **Missing fonts** | PDF có thể chuyển sang phông mặc định, làm hỏng bố cục hình ảnh. | Đặt `EmbedFullFonts = true` (đã là mặc định) và đảm bảo các file phông có sẵn trên máy build. | +| **Images without alt‑text** | Trình đọc màn hình sẽ chỉ đọc “image” mà không có mô tả. | Thêm `Alt Text` trong Word (`Right‑click → Format Picture → Alt Text`) trước khi chuyển đổi. | +| **Custom styles not recognized as headings** | PDF/UA cần thẻ tiêu đề đúng. | Ánh xạ style tùy chỉnh tới tiêu đề tích hợp bằng `doc.Styles["MyCustomHeading"].BaseStyleName = "Heading 1";` | +| **Large documents cause memory pressure** | Chuyển đổi file 500 trang có thể tăng đột biến RAM. | Sử dụng `doc.Save(outputPath, options)` với `options.SaveFormat = SaveFormat.Pdf` và cân nhắc xử lý theo khối nếu gặp `OutOfMemoryException`. | +| **Need to export docx to pdf without accessibility** | Đôi khi bạn chỉ muốn PDF nhanh chỉ để xem. | Bỏ qua cài đặt `Compliance` hoặc đặt nó thành `PdfCompliance.Pdf15`. | + +--- + +## Ví dụ Hình ảnh (Có Alt Text) + +![Screenshot showing the PDF/UA tag tree in Adobe Acrobat – demonstrates that we have successfully created accessible PDF](https://example.com/images/accessible-pdf-screenshot.png) + +*Alt‑text trên củng cố từ khóa chính và giúp cả người dùng lẫn mô hình AI hiểu ngữ cảnh của hình ảnh.* + +--- + +## Câu hỏi Thường gặp + +**Q: Điều này có hoạt động với .NET Core không?** +A: Hoàn toàn có. Aspose.Words đa nền tảng; chỉ cần tham chiếu gói NuGet trong dự án .NET 6+ của bạn. + +**Q: Tôi có thể xử lý hàng loạt nhiều file DOCX không?** +A: Có. Đặt logic tải và lưu trong vòng lặp `foreach (var file in Directory.GetFiles(folder, "*.docx"))`. Hãy tái sử dụng một đối tượng `PdfSaveOptions` duy nhất để tăng hiệu năng. + +**Q: Nếu tôi cần thêm thẻ PDF/UA tùy chỉnh mà Aspose không tự động tạo?** +A: Sử dụng API PDF cấp thấp (`PdfSaveOptions.CustomProperties`) hoặc xử lý hậu kỳ PDF bằng thư viện như iText 7 cho phép chèn thẻ thủ công. + +--- + +## Kết luận + +You + +{{< /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 3ff7c6370a..8a0b84d9bc 100644 --- a/words/vietnamese/net/working-with-fonts/_index.md +++ b/words/vietnamese/net/working-with-fonts/_index.md @@ -48,7 +48,7 @@ Cho dù bạn muốn định dạng văn bản bằng các phông chữ khác nh | [Nhận thông báo cảnh báo](./receive-warning-notification/) Tìm hiểu cách nhận thông báo cảnh báo khi sử dụng Aspose.Words cho .NET và quản lý mọi sự cố hoặc cảnh báo trong tài liệu của bạn. | | [Nguồn Phông chữ Steam Ví dụ](./resource-steam-font-source-example/) | Tìm hiểu cách sử dụng Resource Stream Font Source để tải phông chữ tùy chỉnh vào Aspose.Words cho .NET. | | [Nhận thay thế không có hậu tố](./get-substitution-without-suffixes/) | Trong hướng dẫn này, hãy tìm hiểu cách ghi đè không có hậu tố trong tài liệu Word bằng Aspose.Words cho .NET. | - +| [Cách phát hiện phông chữ trong Aspose.Words – Hướng dẫn toàn diện](./how-to-detect-fonts-in-aspose-words-complete-guide/) | Tìm hiểu cách phát hiện các phông chữ được sử dụng trong tài liệu Word bằng Aspose.Words cho .NET qua hướng dẫn chi tiết. | {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/words/vietnamese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md b/words/vietnamese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md new file mode 100644 index 0000000000..9e7ac2f18a --- /dev/null +++ b/words/vietnamese/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/_index.md @@ -0,0 +1,271 @@ +--- +category: general +date: 2026-04-07 +description: Học cách phát hiện phông chữ và ghi lại cảnh báo khi xử lý phông chữ + thiếu trong C# bằng Aspose.Words. Bao gồm mã mẫu từng bước. +draft: false +keywords: +- how to detect fonts +- how to capture warnings +- handle missing fonts +- Aspose.Words font substitution +- C# document loading warnings +language: vi +og_description: Cách phát hiện phông chữ trong Aspose.Words? Hãy theo dõi hướng dẫn + này để ghi lại cảnh báo và xử lý các phông chữ thiếu một cách dễ dàng. +og_title: Cách phát hiện phông chữ trong Aspose.Words – Hướng dẫn đầy đủ +tags: +- Aspose.Words +- C# +- Font handling +title: Cách phát hiện phông chữ trong Aspose.Words – Hướng dẫn đầy đủ +url: /vi/net/working-with-fonts/how-to-detect-fonts-in-aspose-words-complete-guide/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cách Phát Hiện Phông Chữ trong Aspose.Words – Hướng Dẫn Toàn Diện + +Bạn đã bao giờ tự hỏi **cách phát hiện phông chữ** bị thiếu trong tài liệu Word trước khi đưa vào sản xuất chưa? Bạn không phải là người duy nhất. Trong nhiều kịch bản doanh nghiệp, một phông chữ lạc lõng có thể làm hỏng quy trình chuyển đổi PDF hoặc gây ra các lỗi bố cục trông không chuyên nghiệp. Tin tốt là Aspose.Words cung cấp cho bạn một cách tích hợp để phát hiện những kiểu chữ thiếu và hiển thị cảnh báo rõ ràng. + +Trong hướng dẫn này, chúng ta sẽ đi qua chi tiết **cách phát hiện phông chữ**, **cách thu thập cảnh báo**, và các thực tiễn tốt nhất để **xử lý phông chữ thiếu** nhằm giữ cho ứng dụng của bạn luôn ổn định. Không cần công cụ bên ngoài, không cần đoán mò—chỉ cần mã C# thuần túy mà bạn có thể chèn vào dự án ngay lập tức. + +> **Xem nhanh:** Khi kết thúc, bạn sẽ có một `FontSubstitutionWarningCollector` có thể tái sử dụng, thu thập mọi thông báo thay thế phông chữ trong quá trình tải tài liệu, và bạn sẽ biết cách phản hồi khi không tìm thấy một phông chữ. + +--- + +## Những Điều Bạn Sẽ Học + +- Cách cấu hình `LoadOptions` để lắng nghe các cảnh báo thay thế phông chữ. +- Cách thu thập các cảnh báo đó trong một lớp collector tùy chỉnh. +- Cách xử lý các cảnh báo đã thu thập và quyết định có nên hủy, ghi log, hay thay thế phông chữ. +- Xử lý các trường hợp đặc biệt cho tài liệu tham chiếu phông chữ từ xa hoặc nhúng. + +**Yêu cầu trước:** .NET 6+ (hoặc .NET Framework 4.6+), Aspose.Words cho .NET (phiên bản mới nhất), và kiến thức cơ bản về C#. Nếu bạn chưa từng sử dụng Aspose.Words, đừng lo—hướng dẫn này chỉ yêu cầu vài phút thiết lập. + +## Cách Phát Hiện Phông Chữ Sử Dụng Aspose.Words LoadOptions + +Bước đầu tiên để phát hiện phông chữ bị thiếu là yêu cầu Aspose.Words báo cáo chúng. Điều này được thực hiện qua thuộc tính `LoadOptions.WarningCallback`, cho phép bất kỳ lớp nào triển khai `IWarningCallback`. Dưới đây chúng ta tạo một collector nhỏ để lưu trữ mọi cảnh báo để kiểm tra sau. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System.Collections.Generic; + +/// +/// Collects all warnings emitted while loading a document. +/// +public class FontSubstitutionWarningCollector : IWarningCallback +{ + // Thread‑safe static list so we can access warnings after loading. + public static List Warnings { get; } = new List(); + + // Called by Aspose.Words for each warning. + public void Warning(WarningInfo info) + { + // We only care about font‑related warnings. + if (info.Type == WarningType.FontSubstitution) + { + Warnings.Add(info); + } + } + + // Helper to clear previous run’s warnings. + public static void Clear() => Warnings.Clear(); +} +``` + +**Tại sao điều này quan trọng:** Nếu không có callback cảnh báo, Aspose.Words sẽ im lặng thay thế phông chữ thiếu bằng phông mặc định, và bạn sẽ không biết có vấn đề. Bằng cách bắt `WarningType.FontSubstitution` chúng ta có được toàn bộ thông tin—đúng là dữ liệu bạn cần để **phát hiện phông chữ** không có trên máy chủ. + +Bây giờ chúng ta gắn collector vào `LoadOptions` và tải một tài liệu: + +```csharp +// Step 1: Prepare load options with our warning collector. +LoadOptions loadOptions = new LoadOptions +{ + WarningCallback = new FontSubstitutionWarningCollector() +}; + +// Optional: clear any stale warnings from a previous run. +FontSubstitutionWarningCollector.Clear(); + +// Step 2: Load the document. Replace the path with your own file. +Document doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); +``` + +> **Mẹo chuyên nghiệp:** Nếu bạn làm việc với nhiều tài liệu trong một batch, hãy tái sử dụng cùng một thể hiện `FontSubstitutionWarningCollector` nhưng nhớ gọi `Clear()` giữa các lần tải để tránh trộn lẫn các cảnh báo từ các tệp khác nhau. + +## Thu Thập Cảnh Báo Khi Tải Tài Liệu + +Sau khi tài liệu được tải, collector đã chứa mọi cảnh báo liên quan đến phông chữ. Câu hỏi tiếp theo hợp lý là: *Làm sao tôi có thể thu thập các cảnh báo* một cách dễ dàng để ghi log hoặc hiển thị? + +```csharp +// Step 3: Iterate over collected warnings and output them. +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + Console.WriteLine($"{warning.Type}: {warning.Message}"); +} +``` + +Kết quả thường thấy như sau: + +``` +FontSubstitution: Font 'Comic Sans MS' was not found. Substituted with 'Arial'. +FontSubstitution: Font 'Garamond' missing. Using 'Times New Roman' instead. +``` + +**Điều này cho bạn biết:** Mỗi dòng hiển thị tên phông chữ gốc và phông thay thế mà Aspose.Words đã chọn. Với thông tin này, bạn có thể quyết định liệu phông thay thế có chấp nhận được hay bạn cần nhúng phông chữ thiếu một cách thủ công. + +## Xử Lý Phông Chữ Thiếu Một Cách Trơn Truột + +Phát hiện và thu thập cảnh báo chỉ là một nửa cuộc chiến. Giá trị thực sự đến khi bạn **xử lý phông chữ thiếu** một cách sẵn sàng cho môi trường sản xuất. Dưới đây là ba chiến lược phổ biến: + +1. **Log và Tiếp Tục** – Thích hợp cho xử lý batch nơi bạn chỉ cần một bản ghi audit. +2. **Hủy Khi Phông Chữ Quan Trọng Thiếu** – Ném ngoại lệ nếu một phông chữ cụ thể (ví dụ: phông chữ thương hiệu) bị thiếu. +3. **Nhúng Phông Chữ Trực Tiếp** – Tải phông chữ thiếu từ thư mục đã biết và đăng ký nó với Aspose.Words trước khi tải lại tài liệu. + +### Ví dụ: Hủy Khi Phông Chữ Quan Trọng Thiếu + +```csharp +// Define a list of fonts that must be present. +var requiredFonts = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + // Extract the original font name from the warning message. + string missingFont = ExtractFontName(warning.Message); + if (requiredFonts.Contains(missingFont)) + { + throw new InvalidOperationException( + $"Critical font '{missingFont}' is missing. Document load aborted."); + } +} + +// Helper method to parse font name from warning text. +string ExtractFontName(string message) +{ + // Message pattern: "Font 'X' was not found..." + int start = message.IndexOf('\'') + 1; + int end = message.IndexOf('\'', start); + return (start > 0 && end > start) ? message[start..end] : string.Empty; +} +``` + +### Ví dụ: Tự Động Nhúng Phông Chữ Thiếu + +```csharp +foreach (var warning in FontSubstitutionWarningCollector.Warnings) +{ + string missingFont = ExtractFontName(warning.Message); + string fontPath = $@"C:\Fonts\{missingFont}.ttf"; + + if (File.Exists(fontPath)) + { + // Register the font with Aspose.Words. + FontSettings fontSettings = new FontSettings(); + fontSettings.SetFontsFolder(Path.GetDirectoryName(fontPath), false); + doc.FontSettings = fontSettings; + + // Reload the document now that the font is available. + doc = new Document(@"C:\Docs\MissingFonts.docx", loadOptions); + break; // Re‑load once; subsequent warnings will be resolved. + } +} +``` + +**Tại sao các mẫu này hữu ích:** Bằng cách quyết định rõ ràng hành động khi một phông chữ thiếu, bạn loại bỏ các fallback im lặng có thể ảnh hưởng đến thương hiệu hoặc khả năng đọc. Đây là bản chất của **việc xử lý phông chữ thiếu** một cách kiểm soát. + +## Ví Dụ Hoàn Chỉnh Hoạt Động + +Kết hợp mọi thứ lại, đây là một chương trình duy nhất, sẵn sàng chạy, minh họa **cách phát hiện phông chữ**, **cách thu thập cảnh báo**, và một chính sách đơn giản để **xử lý phông chữ thiếu** bằng cách ghi log. + +```csharp +using Aspose.Words; +using Aspose.Words.Saving; +using System; +using System.Collections.Generic; +using System.IO; + +public class FontSubstitutionWarningCollector : IWarningCallback +{ + public static List Warnings { get; } = new List(); + public void Warning(WarningInfo info) + { + if (info.Type == WarningType.FontSubstitution) + Warnings.Add(info); + } + public static void Clear() => Warnings.Clear(); +} + +class Program +{ + static void Main() + { + string docPath = @"C:\Docs\MissingFonts.docx"; + + // 1️⃣ Configure LoadOptions with the warning collector. + LoadOptions loadOptions = new LoadOptions + { + WarningCallback = new FontSubstitutionWarningCollector() + }; + FontSubstitutionWarningCollector.Clear(); + + // 2️⃣ Load the document – this is where fonts are detected. + Document doc = new Document(docPath, loadOptions); + + // 3️⃣ Process the collected warnings. + if (FontSubstitutionWarningCollector.Warnings.Count == 0) + { + Console.WriteLine("✅ No missing fonts detected."); + } + else + { + Console.WriteLine("⚠️ Font substitution warnings:"); + foreach (var w in FontSubstitutionWarningCollector.Warnings) + Console.WriteLine($"{w.Type}: {w.Message}"); + + // Example policy: abort if a brand‑critical font is missing. + var critical = new HashSet { "MyBrand-Regular", "MyBrand-Bold" }; + foreach (var w in FontSubstitutionWarningCollector.Warnings) + { + string missing = ExtractFontName(w.Message); + if (critical.Contains(missing)) + { + Console.WriteLine($"❌ Critical font '{missing}' missing. Stopping."); + return; + } + } + } + + // 4️⃣ Continue with normal processing (e.g., save as PDF). + doc.Save(@"C:\Docs\Output.pdf", SaveFormat.Pdf); + Console.WriteLine("✅ Document saved as PDF."); + } + + // Helper to pull the original font name out of the warning text. + static string ExtractFontName(string message) + { + int first = message.IndexOf('\'') + 1; + int last = message.IndexOf('\'', first); + return (first > 0 && last > first) ? message[first..last] : string.Empty; + } +} +``` + +**Kết quả mong đợi:** Khi bạn chạy chương trình với một tài liệu tham chiếu phông chữ không có trên máy, console sẽ liệt kê mỗi cảnh báo thay thế. Nếu bất kỳ cảnh báo nào liên quan đến phông chữ trong tập `critical`, chương trình sẽ kết thúc sớm, ngăn ngừa việc tạo PDF lỗi. + +## Câu Hỏi Thường Gặp (FAQs) + +| Question | Answer | +|----------|--------| +| *Tôi có cần giấy phép cho Aspose.Words để sử dụng đoạn mã này không?* | Có, giấy phép Aspose.Words hợp lệ sẽ loại bỏ watermark đánh giá và mở khóa toàn bộ chức năng. | +| *Phương pháp này có thể phát hiện phông chữ được nhúng không?* | Phông chữ được nhúng đã có trong tệp, vì vậy Aspose.Words sẽ không đưa ra cảnh báo thay thế. Bạn có thể kiểm tra `Document.FontInfos` để liệt kê các phông chữ nhúng nếu cần. | +| *Nếu phông chữ thiếu là phông chữ hệ thống trên Windows nhưng không có trên Linux thì sao?* | Cảnh báo tương tự sẽ xuất hiện trên Linux vì phông chữ không được cài đặt ở đó. Hãy sử dụng chiến lược “xử lý phông chữ thiếu” để cung cấp các tệp `.ttf` cần thiết cùng với ứng dụng của bạn. | +| *Bộ thu thập cảnh báo có phải là đa luồng không* | | + +{{< /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